ETH Price: $2,870.87 (-10.36%)
Gas: 15 Gwei

Token

MetaDog Racing (DOG$)
 

Overview

Max Total Supply

315,000,000 DOG$

Holders

111

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
154,215.642082282 DOG$

Value
$0.00
0xaf37660f99c2557fe316f45e900bd6df7fa74a21
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:
MetaDogRacing

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.4;

// Deployed by @CryptoSamurai031 - Telegram user

interface Fee {
    function feeDistribution(uint256 amount, uint256 [9] memory fees, address [7] memory feesAddresses, bool inBNB) external;
}

interface IERC20 {
    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 SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    address private _firstOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        _firstOwner = _owner;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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


interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
}


/// @author @CryptoSamurai031 - Telegram user
contract MetaDogRacing is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    struct Vesting {
        uint256 total;
        uint256 init;
        uint256 end;
        uint256 periods;
        uint256 locked;
    }

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256)  private _tLocked;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTx;
    mapping(address => bool) public _isExcludedFromWalletCap;
    mapping(address => bool) public _isExcludedFromSellLimits;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) public unallowedPairs;
    mapping(address => uint256) private stakes;
    mapping(address => Vesting) private vestingList;
    mapping(address => bool) private blacklist;
    mapping(address => bool) public antibotLocks;
    mapping(address => uint256) public sellDates;

    address[] private _excluded;

    address payable  _devAddress;
    address payable  _marketingAddress;
    address payable  _cryptoLPAddress;
    address payable  _rewardsAddress;
    address payable  _sellAddress;
    address public _stakingAddress;
    address public _whaleAddress;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 315000000  * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public MAX_PER_WALLET = _tTotal.mul(1).div(100);
    uint256 public _sellLimit = 315000000000000000;

    string private _name = "MetaDog Racing";
    string private _symbol = "DOG$";
    uint8 private _decimals = 9;
    
    // Reflections
    uint256 public _reflectionsFee = 0;
    uint256 private _previousReflectionsFee = _reflectionsFee;
    
    uint256 public _liquidityFee = 175;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _devFee = 175;
    uint256 private _previousDevFee = _devFee;
    
    uint256 public _marketingFee = 175;
    uint256 private _previousMarketingFee = _marketingFee;

    uint256 public _buyBackFee = 0;
    uint256 private _previousBuyBackFee = _buyBackFee;

    // Crypto Liquidity Pool
    uint256 public _cryptoLPFee = 0;
    uint256 private _previousCryptoLPFee = _cryptoLPFee;

    uint256 public _rewardsFee = 175;
    uint256 private _previousRewardsFee = _rewardsFee;

    uint256 public _stakingFee = 0;
    uint256 private _previousStakingFee = _stakingFee;

    // Whale reflections
    uint256 public _whaleFee = 0;
    uint256 private _previousWhaleFee = _whaleFee;

    // Additional fee on sells
    uint256 public _sellFee = 300;
    uint256 public _previousSellFee = _sellFee;

    bool public _activateSellFee = false;
    bool public _allowSellFee = true;
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public busd;
    address public feeManager;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyInBNB = true;
    
    uint256 public _maxTxAmount = 315000000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 500000 * 10**9;
    uint256 public _launchBlock;
    uint256 public _sellPeriod = 0 days;
    // disable blocks
    uint256 public _antibotBlocks = 0;
    bool public _isAntibotEnabled = false;
    bool public _allowAntiBot = true;
    bool public _allowVesting = true;
    bool public _banBot = true;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapAndSend(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokens
    );
    
    constructor (address router, address stablecoin) {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); //Pancake V2 Swap's address
         // Create a uniswap pair for this new token (BUSD)
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        busd = address(stablecoin);

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        

        // Exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromMaxTx[address(0)] = true;

        // Exclude from max tokens per wallet
        _isExcludedFromWalletCap[owner()] = true;
        _isExcludedFromWalletCap[address(this)] = true;
        _isExcludedFromWalletCap[uniswapV2Pair] = true;
        _isExcludedFromWalletCap[0x000000000000000000000000000000000000dEaD] = true;

        // Exclude from sell limit
        _isExcludedFromSellLimits[owner()] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function lockTimeOfWallet() public view returns (uint256) {
        return _tLocked[_msgSender()];
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        require(block.timestamp > _tLocked[_msgSender()] , "Wallet is still locked");
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(block.timestamp > _tLocked[sender] , "Wallet is still locked");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function lockWallet(uint256 time) public  {
        _tLocked[_msgSender()] = block.timestamp + time;
    }
    

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function isExcludedFromMaxTx(address account) public view returns(bool) {
        return _isExcludedFromMaxTx[account];
    }

    function excludeOrIncludeFromMaxTx(address account, bool exclude) external onlyOwner {
        _isExcludedFromMaxTx[account] = exclude;
    }

    function bulkExcludeFromMaxTx(address[] calldata accounts) external onlyOwner {
        uint length = accounts.length;

        for (uint i; i < length; ) {
            _isExcludedFromMaxTx[accounts[i]] = true;

            unchecked {
                i++;
            }
        }
    }

    function excludeOrIncludeFromWalletCap(address account, bool exclude) external onlyOwner {
        _isExcludedFromWalletCap[account] = exclude;
    }

    function excludeOrIncludeFromSellLimits(address account, bool exclude) external onlyOwner {
        _isExcludedFromSellLimits[account] = exclude;
    }

    // Safe mechanism
    function toggleAllowAntibot(bool enable) external onlyOwner {
        _allowAntiBot = enable;
    }

    function toggleBanBot(bool enable) external onlyOwner {
        _banBot = enable;
    }

    // Auto enable on launch
    function toggleAntibotEnable(bool enable) external onlyOwner {
        _isAntibotEnabled = enable;
    }

    function setAntibotBlocks(uint256 blocksNumber) external onlyOwner  {
        _antibotBlocks = blocksNumber;
    }

    function setMaxPerWallet(uint256 maxPerWallet) external onlyOwner() {
        MAX_PER_WALLET = maxPerWallet * 10 ** 9;
    }

    function setSellLimit(uint256 sellLimit) external onlyOwner() {
        _sellLimit = sellLimit;
    }

    // Safe mechanism
    function toggleVesting(bool enable) external onlyOwner {
        _allowVesting = enable;
    }

    // Safe mechanism
    function toggleAllowSellFee(bool enable) external onlyOwner {
        _allowSellFee = enable;
    }

    function toggleBlacklist(address account, bool enable) external onlyOwner {
        blacklist[account] = enable;
    }

    function toggleAntibotLocks(address account, bool enable) external onlyOwner {
        antibotLocks[account] = enable;
    }

    /// @notice date in Unix epoch time
    function setAccountSellDate(address account, uint256 date) external onlyOwner {
        sellDates[account] = date;
    }

    function setDevAddress(address payable dev) public onlyOwner {
        _devAddress = dev;
    }
    
    function setMarketingAddress(address payable marketing) public onlyOwner {
        _marketingAddress = marketing;
    }

    function setSellAddress(address payable sell) external onlyOwner {
        _sellAddress = sell;
    }

    function setCryptoLPAddress(address payable cryptoLP) public onlyOwner {
        _cryptoLPAddress = cryptoLP;
    }

    function setRewardsAddress(address payable rewards) public onlyOwner {
        _rewardsAddress = rewards;
    }

    function setStakingAddress(address staking) public onlyOwner {
        _stakingAddress = staking;
        _isExcludedFromWalletCap[staking] = true;
    }

    function setWhaleAddress(address whales) public onlyOwner {
        _whaleAddress = whales;
        _isExcludedFromWalletCap[whales] = true;
    }
    
    function setMinTokensToSwap(uint256 _minTokens) external onlyOwner() {
        numTokensSellToAddToLiquidity = _minTokens * 10 ** 9;
    }

    function setRouter(IUniswapV2Router02 router) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        uniswapV2Router = router;
    }

    function toggleSwapAndLiqBNB(bool enable) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        if (enable) {
            address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                .getPair(address(this), uniswapV2Router.WETH());

            if (pairAddress == address(0)) {
                pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                    .createPair(address(this), uniswapV2Router.WETH());
            }

            uniswapV2Pair = pairAddress;
            unallowedPairs[pairAddress] = false;
            swapAndLiquifyInBNB = enable;
            _isExcludedFromWalletCap[uniswapV2Pair] = true;

        } else {
            address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                .getPair(address(this), busd);

            if (pairAddress == address(0)) {
                pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                    .createPair(address(this), busd);
            }

            uniswapV2Pair = pairAddress;
            swapAndLiquifyInBNB = false;
        }
    }

    function setMainAllowedPair(address allowed) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); //Pancake V2 Swap's address
        address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(address(this), allowed);
            if (pairAddress == address(0)) {
                pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                .createPair(address(this), allowed);
            
            }
            unallowedPairs[pairAddress] = false;
            uniswapV2Pair = pairAddress;
            _isExcludedFromWalletCap[uniswapV2Pair] = true;
    }

    function toggleUnallowedPair(address coinAddress, bool disable) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(address(this), coinAddress);

            if (pairAddress == address(0)) {
                pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                .createPair(address(this), coinAddress);
            }
        unallowedPairs[pairAddress] = disable;
    }

    function getUnallowedPair(address coinAddress) public view returns (bool) {
        address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(address(this), coinAddress);
        return unallowedPairs[pairAddress];
    }

    function setFeeManager(address manager) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        feeManager = manager;
        _isExcludedFromFee[manager] = true;
        _isExcludedFromMaxTx[manager] = true;
        _isExcludedFromWalletCap[manager] = true;
    }

    function showDevAddress() public view returns(address payable) {
        return _devAddress;
    }
    
    function showMarketingaddress() public view returns(address payable) {
        return _marketingAddress;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    // Fees are divided by 10**4, so 500 is just 5%
    function setFees(uint256[] calldata fees) external onlyOwner {
        uint256 feeSum = fees[0] + fees[1] + fees[2] + fees[3] + fees[4] + fees[5] + fees[6] + fees[7] + fees[8] + fees[9];
        if (feeSum > 2000) {
            revert();
        }

        _reflectionsFee = fees[0];
        _liquidityFee = fees[1];
        _devFee = fees[2];
        _marketingFee = fees[3];
        _buyBackFee = fees[4];
        _cryptoLPFee = fees[5];
        _rewardsFee = fees[6];
        _stakingFee = fees[7];
        _whaleFee = fees[8];
        _sellFee = fees[9];
    }
    
    function setMaxTx(uint256 maxTx) external onlyOwner() {
        _maxTxAmount = maxTx * 10 ** 9;
    }

    /// @notice Sell period in seconds
    function setSellPeriod(uint256 sellPeriod) external onlyOwner() {
        _sellPeriod = sellPeriod;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
        
    function preparePresale() external onlyOwner {
        _maxTxAmount = _tTotal.mul(0).div(
            10**2
        );
        removeAllFee();
        swapAndLiquifyEnabled = false;
    }
    

    function afterPresale(uint256 maxTx) external onlyOwner {
        _maxTxAmount = maxTx * 10 ** 9;
        restoreAllFee();
        swapAndLiquifyEnabled = true;
        _isAntibotEnabled = true;
        _launchBlock = block.number;
    }
    
    //to receive ETH from uniswapV2Router when swaping
    receive() external payable {}

    function rescueLockContractBNB(uint256 weiAmount) external {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        (bool sent, ) = payable(_msgSender()).call{value: weiAmount}("");
        require(sent, "Failed to rescue");
    }

    /// @dev amount on token decimals
    function rescueLockTokens(address tokenAddress, uint256 amount) external {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        IERC20(tokenAddress).transfer(_msgSender(), amount);
    }
    
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateReflectionsFee(tAmount);
        uint256 tLiquidity = calculateLiquidityPlusFees(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateReflectionsFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectionsFee).div(
            10**4
        );
    }

    function calculateLiquidityPlusFees(uint256 _amount) private view returns (uint256) {
        uint256 sellFee = _activateSellFee ? _sellFee : 0;
        return _amount.mul(_liquidityFee + _devFee + _marketingFee + _buyBackFee + _cryptoLPFee + _rewardsFee + _stakingFee + _whaleFee + sellFee).div(
            10**4
        );
    }
    
    function removeAllFee() private {
        if(_reflectionsFee == 0 && _liquidityFee == 0 && _marketingFee == 0 && _devFee == 0 && _buyBackFee == 0 && _cryptoLPFee == 0 && _rewardsFee == 0 && _stakingFee == 0 && _whaleFee == 0 && _sellFee == 0) return;
        
        _previousReflectionsFee = _reflectionsFee;
        _previousLiquidityFee = _liquidityFee;
        _previousDevFee = _devFee;
        _previousMarketingFee = _marketingFee;
        _previousBuyBackFee = _buyBackFee;
        _previousCryptoLPFee = _cryptoLPFee;
        _previousRewardsFee = _rewardsFee;
        _previousStakingFee = _stakingFee;
        _previousWhaleFee = _whaleFee;
        _previousSellFee = _sellFee;
        
        _reflectionsFee = 0;
        _liquidityFee = 0;
        _devFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _cryptoLPFee = 0;
        _rewardsFee = 0;
        _stakingFee = 0;
        _whaleFee = 0;
        _sellFee = 0;
    }
    
    function restoreAllFee() private {
        _reflectionsFee = _previousReflectionsFee;
        _liquidityFee = _previousLiquidityFee;
        _devFee = _previousDevFee;
        _marketingFee = _previousMarketingFee;
        _buyBackFee = _previousBuyBackFee;
        _cryptoLPFee = _previousCryptoLPFee;
        _rewardsFee = _previousRewardsFee;
        _stakingFee = _previousStakingFee;
        _whaleFee = _previousWhaleFee;
        _sellFee = _previousSellFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(!(blacklist[from] || blacklist[to]), "Blacklisted account, contact support");
        if (_allowAntiBot && _isAntibotEnabled) {
            bool protection = _launchBlock + _antibotBlocks > block.number;
            if (protection) {
                require(!antibotLocks[from], "Antibot: wait minutes to sell");
            }

            if (from == uniswapV2Pair && protection) {
                antibotLocks[to] = true;
                if(_banBot) {
                    blacklist[to] = true;
                }
            }
        }
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(unallowedPairs[to] == false, "The pair is not allowed");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(!_isExcludedFromWalletCap[to]) {
            require(balanceOf(to).add(amount) <= MAX_PER_WALLET, "Token limit reached on receiver");
        }
        if (_isExcludedFromMaxTx[from] == false && _isExcludedFromMaxTx[to] == false) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        if (!_isExcludedFromSellLimits[from] &&  to == uniswapV2Pair) {
            require(amount <= _sellLimit, "Exceeds sell limit");
            require(_sellPeriod <= block.timestamp - sellDates[from], "Not enough time to sell again");
            sellDates[from] = block.timestamp;
        }

        // Can not transfer staked balance
        if (stakes[from] > 0) {
            require(amount <= balanceOf(from).sub(stakes[from]), "Can not transfer staked tokens");
        }

        // Can not transfer vesting balance
        if (_allowVesting && vestingList[from].locked > 0) {
            _checkVesting(from);
            require(amount <= balanceOf(from).sub(stakes[from]).sub(vestingList[from].locked), "Can not transfer vested tokens");
        }


        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            inSwapAndLiquify = true;

            // Auxiliary contract needed to swap, add liquidity and distribute the fees
            _tokenTransfer(address(this), feeManager, contractTokenBalance, false);
            (uint256[9] memory fees , address[7] memory feesAddresses) = _getFeeInfo();
            Fee(feeManager).feeDistribution(contractTokenBalance, fees, feesAddresses, swapAndLiquifyInBNB);
            inSwapAndLiquify = false;
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        } else {
            if (to == uniswapV2Pair && _allowSellFee) {
                _activateSellFee = true;
            }
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
        _activateSellFee = false;
    }

    function _getFeeInfo() private view returns (uint256 [9] memory fees, address [7] memory feeAddresses){
        fees[0] = _marketingFee;
        fees[1] = _devFee;
        fees[2] = _buyBackFee;
        fees[3] = _cryptoLPFee;
        fees[4] = _rewardsFee;
        fees[5] = _liquidityFee;
        fees[6] = _stakingFee;
        fees[7] = _whaleFee;
        fees[8] = _sellFee;

        feeAddresses[0] = _marketingAddress;
        feeAddresses[1] = _devAddress;
        feeAddresses[2] = _stakingAddress;
        feeAddresses[3] = _cryptoLPAddress;
        feeAddresses[4] = _rewardsAddress;
        feeAddresses[5] = _whaleAddress;
        feeAddresses[6] = _sellAddress;
    }

    function _checkVesting(address account) private {
        Vesting memory vest = vestingList[account];
        uint256 timePerPeriod = (vest.end - vest.init) / vest.periods;
        uint256 amountPerPeriod = vest.total / vest.periods;

        if (block.timestamp > vest.end) {
            vestingList[account].locked = 0;
            return;
        }
        uint256 doneTime = block.timestamp - vest.init;

        if (doneTime < timePerPeriod) {
            return;
        }
        uint256 donePeriods = doneTime / timePerPeriod;
        uint256 newFreeAmount = donePeriods * amountPerPeriod;
        uint256 oldFreeAmount = vest.total - vest.locked;

        if (newFreeAmount > oldFreeAmount) {
            vestingList[account].locked = vest.total - newFreeAmount;
        }
    }

    function _viewVesting(address account) private view returns (uint256) {
        Vesting memory vest = vestingList[account];
        if (vest.locked == 0) {
            return 0;
        }
        uint256 timePerPeriod = (vest.end - vest.init) / vest.periods;
        uint256 amountPerPeriod = vest.total / vest.periods;

        if (block.timestamp > vest.end) {
            return 0;
        }
        uint256 doneTime = block.timestamp - vest.init;

        if (doneTime < timePerPeriod) {
            return vest.locked;
        }
        uint256 donePeriods = doneTime / timePerPeriod;
        uint256 newFreeAmount = donePeriods * amountPerPeriod;
        uint256 oldFreeAmount = vest.total - vest.locked;

        if (newFreeAmount > oldFreeAmount) {
            uint256 newlocked = vest.total - newFreeAmount;
            return newlocked;
        }
        return vest.locked;
    }

    function checkVesting(address account) external onlyOwner {
        _checkVesting(account);
    }

    function setBulkVestings(address[] calldata wallets, uint256[] calldata amounts, uint256[] calldata vestingDays, uint256[] calldata periods) external onlyOwner {
        uint256 totalVests = wallets.length;
        uint256 initialDate = block.timestamp;
        uint256 endDate;
        for(uint256 i = 0; i < totalVests; i++) {
            endDate = vestingDays[i] * 1 days + initialDate;
            vestingList[wallets[i]] = Vesting(amounts[i], initialDate, endDate, periods[i], amounts[i]);
        }
    }

    function setVesting(address wallet, uint256 amount, uint256 vestingDays, uint256 periods) external onlyOwner {
            uint256 initialDate = block.timestamp;
            uint256 endDate = vestingDays * 1 days + initialDate;
            vestingList[wallet] = Vesting(amount, initialDate, endDate, periods, amount);
    }

    function getVesting(address account) external view returns (Vesting memory) {
        Vesting memory vest = vestingList[account];
        return vest;
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function stake(address staker, uint256 amount, bool toggle) external {
        require(_msgSender() == _stakingAddress || _msgSender() == firstOwner(), "Unallowed caller");
        if (toggle) {
            stakes[staker] = stakes[staker].add(amount);
        } else {
            stakes[staker] = stakes[staker].sub(amount);
        }
    }

    function getStake(address staker) view external returns (uint256) {
        return stakes[staker];
     }

    function getLockVest(address account) view external returns (uint256) {
        return _viewVesting(account);
     }

    function getBlacklisted(address account) view external returns (bool) {
        return blacklist[account];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"stablecoin","type":"address"}],"stateMutability":"nonpayable","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":"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"SwapAndSend","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":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_activateSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_allowAntiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_allowSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_allowVesting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_antibotBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_banBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_cryptoLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isAntibotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromSellLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromWalletCap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whaleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"afterPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"antibotLocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"bulkExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"busd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkVesting","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeOrIncludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeOrIncludeFromSellLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeOrIncludeFromWalletCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLockVest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"coinAddress","type":"address"}],"name":"getUnallowedPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVesting","outputs":[{"components":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"init","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"periods","type":"uint256"},{"internalType":"uint256","name":"locked","type":"uint256"}],"internalType":"struct MetaDogRacing.Vesting","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockTimeOfWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lockWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preparePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueLockContractBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueLockTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellDates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"date","type":"uint256"}],"name":"setAccountSellDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksNumber","type":"uint256"}],"name":"setAntibotBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"vestingDays","type":"uint256[]"},{"internalType":"uint256[]","name":"periods","type":"uint256[]"}],"name":"setBulkVestings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"cryptoLP","type":"address"}],"name":"setCryptoLPAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"dev","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"setFeeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"fees","type":"uint256[]"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allowed","type":"address"}],"name":"setMainAllowedPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokens","type":"uint256"}],"name":"setMinTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"rewards","type":"address"}],"name":"setRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"sell","type":"address"}],"name":"setSellAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLimit","type":"uint256"}],"name":"setSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellPeriod","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"vestingDays","type":"uint256"},{"internalType":"uint256","name":"periods","type":"uint256"}],"name":"setVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"whales","type":"address"}],"name":"setWhaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showDevAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showMarketingaddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyInBNB","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":"bool","name":"enable","type":"bool"}],"name":"toggleAllowAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleAllowSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleAntibotEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleAntibotLocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleBanBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleSwapAndLiqBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"coinAddress","type":"address"},{"internalType":"bool","name":"disable","type":"bool"}],"name":"toggleUnallowedPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleVesting","outputs":[],"stateMutability":"nonpayable","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unallowedPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405267045f1ad4c03f8000601b819055620000209060001962000892565b6200002e906000196200083b565b601c55620000686064620000546001601b546200057b60201b620040d81790919060201c565b6200060f60201b620041571790919060201c565b601e5567045f1ad4c03f8000601f5560408051808201909152600e8082526d4d657461446f6720526163696e6760901b6020928301908152620000ac929162000695565b50604080518082019091526004808252631113d1c960e21b6020909201918252620000da9160219162000695565b506022805460ff1916600917905560006023819055602481905560af60258190556026819055602781905560288190556029819055602a819055602b829055602c829055602d829055602e829055602f819055603055603181905560328190556033819055603481905561012c60358190556036556037805461ffff1916610100179055603a805461010160a81b61ffff60a81b1990911617905567045f1ad4c03f8000603b556601c6bf52634000603c55603e819055603f5560408054630101010063ffffffff19909116179055348015620001b657600080fd5b506040516200683638038062006836833981016040819052620001d99162000775565b60008054336001600160a01b031991821681178355600280549092168117909155604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601c543360009081526004602081815260409283902093909355815163c45a015560e01b8152915185936001600160a01b0385169363c45a0155938181019391829003018186803b1580156200027c57600080fd5b505afa15801562000291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b7919062000758565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030057600080fd5b505afa15801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b919062000758565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200038457600080fd5b505af115801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000758565b603880546001600160a01b03199081166001600160a01b03938416178255603980549091168584161790556037805462010000600160b01b03191662010000858516021790556000805483168152600860209081526040808320805460ff19908116600190811790925530808652838620805483168417905585548816865260098552838620805483168417905580865283862080548316841790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548316841790557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054831684179055855488168652600a855283862080548316841790558552828520805482168317905594548616845281842080548616821790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb805486168217905583549095168352600b909152902080549091169091179055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040516200056a91815260200190565b60405180910390a3505050620008d5565b6000826200058c5750600062000609565b60006200059a838562000819565b905082620005a9858362000802565b14620006065760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200060683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200065960201b60201c565b600081836200067d5760405162461bcd60e51b8152600401620005fd9190620007ac565b5060006200068c848662000802565b95945050505050565b828054620006a39062000855565b90600052602060002090601f016020900481019282620006c7576000855562000712565b82601f10620006e257805160ff191683800117855562000712565b8280016001018555821562000712579182015b8281111562000712578251825591602001919060010190620006f5565b506200072092915062000724565b5090565b5b8082111562000720576000815560010162000725565b80516001600160a01b03811681146200075357600080fd5b919050565b6000602082840312156200076a578081fd5b62000606826200073b565b6000806040838503121562000788578081fd5b62000793836200073b565b9150620007a3602084016200073b565b90509250929050565b6000602080835283518082850152825b81811015620007da57858101830151858201604001528201620007bc565b81811115620007ec5783604083870101525b50601f01601f1916929092016040019392505050565b600082620008145762000814620008bf565b500490565b6000816000190483118215151615620008365762000836620008a9565b500290565b600082821015620008505762000850620008a9565b500390565b600181811c908216806200086a57607f821691505b602082108114156200088c57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620008a457620008a4620008bf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b615f5180620008e56000396000f3fe6080604052600436106106f85760003560e01c80637d7623a111610390578063c0ab5704116101dc578063d0fb02031161010d578063ea2f0b37116100ab578063f4e0d9ac1161007a578063f4e0d9ac1461154c578063f6224c961461156c578063fc03b68a1461158e578063fffbf9bd146115ae57600080fd5b8063ea2f0b37146114cc578063ed762086146114ec578063f02e466d1461150c578063f2fde38b1461152c57600080fd5b8063dd467064116100e7578063dd46706414611426578063dd62ed3e14611446578063e08b87a11461148c578063e268e4d3146114ac57600080fd5b8063d0fb0203146113d0578063d12a7688146113f0578063d8d4ec021461140657600080fd5b8063cb249d781161017a578063ce15676d11610154578063ce15676d1461136e578063ce53f89814611384578063cf895ca51461139a578063d0d41fe1146113b057600080fd5b8063cb249d78146112cb578063cc49ede7146112ec578063cd65bbff1461134e57600080fd5b8063c49b9a80116101b6578063c49b9a8014611256578063c4e9436014611276578063c640ef2a14611297578063c97f617a146112b557600080fd5b8063c0ab570414611200578063c0d7865514611220578063c3c3960c1461124057600080fd5b80639cea127a116102c1578063aa45026b1161025f578063b75620d81161022e578063b75620d814611171578063b9f0f15c146111a1578063bc337182146111c1578063bd5cb493146111e157600080fd5b8063aa45026b14611110578063ae85028114611126578063b5ee0ded1461113c578063b6c523241461115c57600080fd5b8063a61b83e31161029b578063a61b83e3146110a5578063a69df4b5146110bb578063a9059cbb146110d0578063a9bf2c09146110f057600080fd5b80639cea127a14611045578063a2a2dd5e14611065578063a457c2d71461108557600080fd5b80638da5cb5b1161032e57806395d89b411161030857806395d89b4114610fd0578063995846bd14610fe55780639c769df4146110055780639c962c821461102557600080fd5b80638da5cb5b14610f7c5780638e79a38814610f9a578063906e9dd014610fb057600080fd5b8063885b8a301161036a578063885b8a3014610ede57806388f8202014610ef35780638906758d14610f2c578063897fb10514610f4c57600080fd5b80637d7623a114610e8957806381a4605f14610e9f5780638465a05e14610ebf57600080fd5b80633bd5d1731161054f5780635ddccca7116104805780636cf523251161041e5780637a41e81c116103ed5780637a41e81c14610e035780637a76646014610e1d5780637b53bba614610e535780637d1db4a514610e7357600080fd5b80636cf5232514610d8e57806370a0823114610dae578063715018a614610dce57806375de4a3d14610de357600080fd5b80636659e4b81161045a5780636659e4b814610d1a5780636afc133414610d3a5780636bc2878114610d5a5780636bc87c3a14610d7857600080fd5b80635ddccca714610ca15780635f8378ab14610cc1578063658c27a914610ce157600080fd5b80634a74bb02116104ed5780635342acb4116104c75780635342acb414610c1857806358dbfc3414610c51578063590f897e14610c6b5780635ba79e6514610c8157600080fd5b80634a74bb0214610bb75780634af4086314610bd857806352390c0214610bf857600080fd5b8063437823ec11610529578063437823ec14610b375780634549b03914610b57578063472d35b914610b7757806349bd5a5e14610b9757600080fd5b80633bd5d17314610ad75780633ca5b23414610af757806342ddd4f614610b1757600080fd5b80632069de6f116106295780632d838119116105c75780633685d419116105a15780633685d41914610a615780633702b96514610a815780633950935114610a975780633a740de614610ab757600080fd5b80632d838119146109ef578063313ce56714610a0f5780633639602714610a3157600080fd5b806323b872dd1161060357806323b872dd1461095f57806323f2d09f1461097f57806325f784ba1461099f5780632ae0357f146109cf57600080fd5b80632069de6f1461090957806322976e0d14610929578063235db79e1461093f57600080fd5b8063110430bb11610696578063163a37ba11610670578063163a37ba1461085d5780631688ad45146108965780631694505e146108ce57806318160ddd146108f457600080fd5b8063110430bb1461081257806312706f041461083257806313114a9d1461084857600080fd5b8063095ea7b3116106d2578063095ea7b314610771578063099a4305146107a15780630b2fb18d146107dc5780630f2cdd6c146107fc57600080fd5b8063027336fc14610704578063067409541461072657806306fdde031461074657600080fd5b366106ff57005b600080fd5b34801561071057600080fd5b5061072461071f366004615a49565b6115cc565b005b34801561073257600080fd5b50610724610741366004615a1c565b61161b565b34801561075257600080fd5b5061075b611670565b6040516107689190615c7c565b60405180910390f35b34801561077d57600080fd5b5061079161078c366004615a49565b611702565b6040519015158152602001610768565b3480156107ad57600080fd5b506107ce6107bc36600461596c565b60126020526000908152604090205481565b604051908152602001610768565b3480156107e857600080fd5b506107246107f736600461596c565b611719565b34801561080857600080fd5b506107ce601e5481565b34801561081e57600080fd5b5061072461082d366004615c26565b61177d565b34801561083e57600080fd5b506107ce602b5481565b34801561085457600080fd5b50601d546107ce565b34801561086957600080fd5b5061079161087836600461596c565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156108a257600080fd5b50601a546108b6906001600160a01b031681565b6040516001600160a01b039091168152602001610768565b3480156108da57600080fd5b506037546108b6906201000090046001600160a01b031681565b34801561090057600080fd5b50601b546107ce565b34801561091557600080fd5b50610724610924366004615bee565b6117bb565b34801561093557600080fd5b506107ce60295481565b34801561094b57600080fd5b506040546107919062010000900460ff1681565b34801561096b57600080fd5b5061079161097a3660046159dc565b6117f8565b34801561098b57600080fd5b5061072461099a366004615aef565b6118bf565b3480156109ab57600080fd5b506107916109ba36600461596c565b600a6020526000908152604090205460ff1681565b3480156109db57600080fd5b506107246109ea366004615aef565b611966565b3480156109fb57600080fd5b506107ce610a0a366004615c26565b611d54565b348015610a1b57600080fd5b5060225460405160ff9091168152602001610768565b348015610a3d57600080fd5b50610791610a4c36600461596c565b600b6020526000908152604090205460ff1681565b348015610a6d57600080fd5b50610724610a7c36600461596c565b611dd8565b348015610a8d57600080fd5b506107ce60365481565b348015610aa357600080fd5b50610791610ab2366004615a49565b611fc7565b348015610ac357600080fd5b50610724610ad2366004615a1c565b611ffd565b348015610ae357600080fd5b50610724610af2366004615c26565b612052565b348015610b0357600080fd5b506039546108b6906001600160a01b031681565b348015610b2357600080fd5b50610724610b32366004615bee565b61213c565b348015610b4357600080fd5b50610724610b5236600461596c565b612182565b348015610b6357600080fd5b506107ce610b72366004615c3e565b6121d0565b348015610b8357600080fd5b50610724610b9236600461596c565b61225d565b348015610ba357600080fd5b506038546108b6906001600160a01b031681565b348015610bc357600080fd5b50603a5461079190600160a81b900460ff1681565b348015610be457600080fd5b50610791610bf336600461596c565b6122e9565b348015610c0457600080fd5b50610724610c1336600461596c565b612411565b348015610c2457600080fd5b50610791610c3336600461596c565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610c5d57600080fd5b506040546107919060ff1681565b348015610c7757600080fd5b506107ce60355481565b348015610c8d57600080fd5b50610724610c9c366004615bee565b612564565b348015610cad57600080fd5b50610724610cbc366004615bee565b6125ac565b348015610ccd57600080fd5b50610724610cdc366004615bee565b6125f0565b348015610ced57600080fd5b50610791610cfc36600461596c565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610d2657600080fd5b50610724610d35366004615bee565b612c13565b348015610d4657600080fd5b50610724610d55366004615c26565b612c57565b348015610d6657600080fd5b506002546001600160a01b03166108b6565b348015610d8457600080fd5b506107ce60255481565b348015610d9a57600080fd5b50610724610da936600461596c565b612c74565b348015610dba57600080fd5b506107ce610dc936600461596c565b612cc0565b348015610dda57600080fd5b50610724612d1f565b348015610def57600080fd5b50610724610dfe366004615a1c565b612d81565b348015610e0f57600080fd5b506037546107919060ff1681565b348015610e2957600080fd5b506107ce610e3836600461596c565b6001600160a01b03166000908152600e602052604090205490565b348015610e5f57600080fd5b50610724610e6e366004615a1c565b612ff1565b348015610e7f57600080fd5b506107ce603b5481565b348015610e9557600080fd5b506107ce603f5481565b348015610eab57600080fd5b50610724610eba366004615c26565b613046565b348015610ecb57600080fd5b5060405461079190610100900460ff1681565b348015610eea57600080fd5b50610724613075565b348015610eff57600080fd5b50610791610f0e36600461596c565b6001600160a01b03166000908152600c602052604090205460ff1690565b348015610f3857600080fd5b50610724610f4736600461596c565b6130da565b348015610f5857600080fd5b50610791610f6736600461596c565b60116020526000908152604090205460ff1681565b348015610f8857600080fd5b506000546001600160a01b03166108b6565b348015610fa657600080fd5b506107ce602d5481565b348015610fbc57600080fd5b50610724610fcb36600461596c565b613126565b348015610fdc57600080fd5b5061075b613172565b348015610ff157600080fd5b50610724611000366004615a74565b613181565b34801561101157600080fd5b50610724611020366004615b2f565b61325b565b34801561103157600080fd5b50610724611040366004615a49565b61340e565b34801561105157600080fd5b50610724611060366004615a1c565b6134c8565b34801561107157600080fd5b5061072461108036600461596c565b61351d565b34801561109157600080fd5b506107916110a0366004615a49565b613569565b3480156110b157600080fd5b506107ce602f5481565b3480156110c757600080fd5b506107246135b8565b3480156110dc57600080fd5b506107916110eb366004615a49565b6136be565b3480156110fc57600080fd5b5061072461110b366004615c26565b613720565b34801561111c57600080fd5b506107ce60275481565b34801561113257600080fd5b506107ce60315481565b34801561114857600080fd5b506019546108b6906001600160a01b031681565b34801561116857600080fd5b506003546107ce565b34801561117d57600080fd5b5061079161118c36600461596c565b600d6020526000908152604090205460ff1681565b3480156111ad57600080fd5b506107246111bc36600461596c565b61374f565b3480156111cd57600080fd5b506107246111dc366004615c26565b6139e3565b3480156111ed57600080fd5b5060375461079190610100900460ff1681565b34801561120c57600080fd5b5061072461121b366004615ab5565b613a21565b34801561122c57600080fd5b5061072461123b36600461596c565b613ac8565b34801561124c57600080fd5b506107ce603d5481565b34801561126257600080fd5b50610724611271366004615bee565b613b1c565b34801561128257600080fd5b50603a5461079190600160b01b900460ff1681565b3480156112a357600080fd5b506014546001600160a01b03166108b6565b3480156112c157600080fd5b506107ce60235481565b3480156112d757600080fd5b50604054610791906301000000900460ff1681565b3480156112f857600080fd5b5061130c61130736600461596c565b613b9e565b6040516107689190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561135a57600080fd5b50610724611369366004615c26565b613c28565b34801561137a57600080fd5b506107ce603e5481565b34801561139057600080fd5b506107ce601f5481565b3480156113a657600080fd5b506107ce60335481565b3480156113bc57600080fd5b506107246113cb36600461596c565b613cdd565b3480156113dc57600080fd5b50603a546108b6906001600160a01b031681565b3480156113fc57600080fd5b506107ce603c5481565b34801561141257600080fd5b5061072461142136600461596c565b613d29565b34801561143257600080fd5b50610724611441366004615c26565b613d5c565b34801561145257600080fd5b506107ce6114613660046159a4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561149857600080fd5b506107ce6114a736600461596c565b613de1565b3480156114b857600080fd5b506107246114c7366004615c26565b613dec565b3480156114d857600080fd5b506107246114e736600461596c565b613e2a565b3480156114f857600080fd5b50610724611507366004615c26565b613e75565b34801561151857600080fd5b50610724611527366004615c26565b613f18565b34801561153857600080fd5b5061072461154736600461596c565b613f47565b34801561155857600080fd5b5061072461156736600461596c565b61401f565b34801561157857600080fd5b50336000908152600760205260409020546107ce565b34801561159a57600080fd5b506107246115a9366004615a1c565b614083565b3480156115ba57600080fd5b506015546001600160a01b03166108b6565b6000546001600160a01b031633146115ff5760405162461bcd60e51b81526004016115f690615ccf565b60405180910390fd5b6001600160a01b03909116600090815260126020526040902055565b6000546001600160a01b031633146116455760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60606020805461167f90615e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546116ab90615e1f565b80156116f85780601f106116cd576101008083540402835291602001916116f8565b820191906000526020600020905b8154815290600101906020018083116116db57829003601f168201915b5050505050905090565b600061170f338484614199565b5060015b92915050565b6000546001600160a01b031633146117435760405162461bcd60e51b81526004016115f690615ccf565b601a80546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b031633146117a75760405162461bcd60e51b81526004016115f690615ccf565b6117b581633b9aca00615de9565b603c5550565b6000546001600160a01b031633146117e55760405162461bcd60e51b81526004016115f690615ccf565b6040805460ff1916911515919091179055565b6001600160a01b03831660009081526007602052604081205442116118585760405162461bcd60e51b815260206004820152601660248201527515d85b1b195d081a5cc81cdd1a5b1b081b1bd8dad95960521b60448201526064016115f6565b6118638484846142bd565b6118b584336118b085604051806060016040528060288152602001615eaf602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190614b64565b614199565b5060019392505050565b6000546001600160a01b031633146118e95760405162461bcd60e51b81526004016115f690615ccf565b8060005b818110156119605760016009600086868581811061191b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611930919061596c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016118ed565b50505050565b6000546001600160a01b031633146119905760405162461bcd60e51b81526004016115f690615ccf565b6000828260098181106119b357634e487b7160e01b600052603260045260246000fd5b90506020020135838360088181106119db57634e487b7160e01b600052603260045260246000fd5b9050602002013584846007818110611a0357634e487b7160e01b600052603260045260246000fd5b9050602002013585856006818110611a2b57634e487b7160e01b600052603260045260246000fd5b9050602002013586866005818110611a5357634e487b7160e01b600052603260045260246000fd5b9050602002013587876004818110611a7b57634e487b7160e01b600052603260045260246000fd5b9050602002013588886003818110611aa357634e487b7160e01b600052603260045260246000fd5b9050602002013589896002818110611acb57634e487b7160e01b600052603260045260246000fd5b905060200201358a8a6001818110611af357634e487b7160e01b600052603260045260246000fd5b905060200201358b8b6000818110611b1b57634e487b7160e01b600052603260045260246000fd5b90506020020135611b2c9190615db1565b611b369190615db1565b611b409190615db1565b611b4a9190615db1565b611b549190615db1565b611b5e9190615db1565b611b689190615db1565b611b729190615db1565b611b7c9190615db1565b90506107d0811115611b8d57600080fd5b82826000818110611bae57634e487b7160e01b600052603260045260246000fd5b60200291909101356023555082826001818110611bdb57634e487b7160e01b600052603260045260246000fd5b60200291909101356025555082826002818110611c0857634e487b7160e01b600052603260045260246000fd5b60200291909101356027555082826003818110611c3557634e487b7160e01b600052603260045260246000fd5b60200291909101356029555082826004818110611c6257634e487b7160e01b600052603260045260246000fd5b6020029190910135602b555082826005818110611c8f57634e487b7160e01b600052603260045260246000fd5b6020029190910135602d555082826006818110611cbc57634e487b7160e01b600052603260045260246000fd5b6020029190910135602f555082826007818110611ce957634e487b7160e01b600052603260045260246000fd5b60200291909101356031555082826008818110611d1657634e487b7160e01b600052603260045260246000fd5b60200291909101356033555082826009818110611d4357634e487b7160e01b600052603260045260246000fd5b602002919091013560355550505050565b6000601c54821115611dbb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016115f6565b6000611dc5614b9e565b9050611dd18382614157565b9392505050565b6000546001600160a01b03163314611e025760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b0381166000908152600c602052604090205460ff16611e6a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016115f6565b60005b601354811015611fc357816001600160a01b031660138281548110611ea257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611fb15760138054611ecd90600190615e08565b81548110611eeb57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601380546001600160a01b039092169183908110611f2557634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600c90925220805460ff191690556013805480611f8b57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611fbb81615e5a565b915050611e6d565b5050565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161170f9185906118b09086614bc1565b6000546001600160a01b031633146120275760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b336000818152600c602052604090205460ff16156120c75760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016115f6565b60006120d283614c20565b505050506001600160a01b0384166000908152600460205260409020549192506120fe91905082614c6f565b6001600160a01b038316600090815260046020526040902055601c546121249082614c6f565b601c55601d546121349084614bc1565b601d55505050565b6000546001600160a01b031633146121665760405162461bcd60e51b81526004016115f690615ccf565b60408054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146121ac5760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000601b548311156122245760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016115f6565b8161224357600061223484614c20565b50939550611713945050505050565b600061224e84614c20565b50929550611713945050505050565b6002546001600160a01b031633146122875760405162461bcd60e51b81526004016115f690615d04565b603a80546001600160a01b039092166001600160a01b0319909216821790556000908152600860209081526040808320805460ff199081166001908117909255600984528285208054821683179055600a909352922080549091169091179055565b600080603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561233a57600080fd5b505afa15801561234e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123729190615988565b6001600160a01b031663e6a4390530856040518363ffffffff1660e01b815260040161239f929190615c62565b60206040518083038186803b1580156123b757600080fd5b505afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef9190615988565b6001600160a01b03166000908152600d602052604090205460ff169392505050565b6000546001600160a01b0316331461243b5760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b0381166000908152600c602052604090205460ff16156124a45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016115f6565b6001600160a01b038116600090815260046020526040902054156124fe576001600160a01b0381166000908152600460205260409020546124e490611d54565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600c60205260408120805460ff191660019081179091556013805491820181559091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319169091179055565b6000546001600160a01b0316331461258e5760405162461bcd60e51b81526004016115f690615ccf565b6040805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146125d65760405162461bcd60e51b81526004016115f690615ccf565b603780549115156101000261ff0019909216919091179055565b6002546001600160a01b0316331461261a5760405162461bcd60e51b81526004016115f690615d04565b80156129b7576000603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561267057600080fd5b505afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a89190615988565b6001600160a01b031663e6a4390530603760029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561270557600080fd5b505afa158015612719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273d9190615988565b6040518363ffffffff1660e01b815260040161275a929190615c62565b60206040518083038186803b15801561277257600080fd5b505afa158015612786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127aa9190615988565b90506001600160a01b03811661294757603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561280857600080fd5b505afa15801561281c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128409190615988565b6001600160a01b031663c9c6539630603760029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561289d57600080fd5b505afa1580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d59190615988565b6040518363ffffffff1660e01b81526004016128f2929190615c62565b602060405180830381600087803b15801561290c57600080fd5b505af1158015612920573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129449190615988565b90505b603880546001600160a01b039283166001600160a01b0319909116811782556000908152600d60209081526040808320805460ff19908116909155603a8054881515600160b01b0260ff60b01b1990911617905593549094168252600a9052919091208054909116600117905550565b6000603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0757600080fd5b505afa158015612a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3f9190615988565b60395460405163e6a4390560e01b81526001600160a01b039283169263e6a4390592612a7392309290911690600401615c62565b60206040518083038186803b158015612a8b57600080fd5b505afa158015612a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac39190615988565b90506001600160a01b038116612be257603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b2157600080fd5b505afa158015612b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b599190615988565b6039546040516364e329cb60e11b81526001600160a01b039283169263c9c6539692612b8d92309290911690600401615c62565b602060405180830381600087803b158015612ba757600080fd5b505af1158015612bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdf9190615988565b90505b603880546001600160a01b0319166001600160a01b0392909216919091179055603a805460ff60b01b191690555b50565b6000546001600160a01b03163314612c3d5760405162461bcd60e51b81526004016115f690615ccf565b604080549115156101000261ff0019909216919091179055565b612c618142615db1565b3360009081526007602052604090205550565b6000546001600160a01b03163314612c9e5760405162461bcd60e51b81526004016115f690615ccf565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600c602052604081205460ff1615612cfd57506001600160a01b031660009081526005602052604090205490565b6001600160a01b03821660009081526004602052604090205461171390611d54565b6000546001600160a01b03163314612d495760405162461bcd60e51b81526004016115f690615ccf565b600080546040516001600160a01b0390911690600080516020615ed7833981519152908390a3600080546001600160a01b0319169055565b6002546001600160a01b03163314612dab5760405162461bcd60e51b81526004016115f690615d04565b6000603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612dfb57600080fd5b505afa158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e339190615988565b6001600160a01b031663e6a4390530856040518363ffffffff1660e01b8152600401612e60929190615c62565b60206040518083038186803b158015612e7857600080fd5b505afa158015612e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb09190615988565b90506001600160a01b038116612fc857603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0e57600080fd5b505afa158015612f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f469190615988565b6001600160a01b031663c9c6539630856040518363ffffffff1660e01b8152600401612f73929190615c62565b602060405180830381600087803b158015612f8d57600080fd5b505af1158015612fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc59190615988565b90505b6001600160a01b03166000908152600d60205260409020805460ff191691151591909117905550565b6000546001600160a01b0316331461301b5760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146130705760405162461bcd60e51b81526004016115f690615ccf565b603f55565b6000546001600160a01b0316331461309f5760405162461bcd60e51b81526004016115f690615ccf565b6130c060646130ba6000601b546140d890919063ffffffff16565b90614157565b603b556130cb614cb1565b603a805460ff60a81b19169055565b6000546001600160a01b031633146131045760405162461bcd60e51b81526004016115f690615ccf565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146131505760405162461bcd60e51b81526004016115f690615ccf565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60606021805461167f90615e1f565b6019546001600160a01b0316336001600160a01b031614806131ad57506002546001600160a01b031633145b6131ec5760405162461bcd60e51b815260206004820152601060248201526f2ab730b63637bbb2b21031b0b63632b960811b60448201526064016115f6565b8015613233576001600160a01b0383166000908152600e60205260409020546132159083614bc1565b6001600160a01b0384166000908152600e6020526040902055505050565b6001600160a01b0383166000908152600e60205260409020546132159083614c6f565b505050565b6000546001600160a01b031633146132855760405162461bcd60e51b81526004016115f690615ccf565b86426000805b8381101561340057828888838181106132b457634e487b7160e01b600052603260045260246000fd5b90506020020135620151806132c99190615de9565b6132d39190615db1565b91506040518060a001604052808b8b8481811061330057634e487b7160e01b600052603260045260246000fd5b90506020020135815260200184815260200183815260200187878481811061333857634e487b7160e01b600052603260045260246000fd5b9050602002013581526020018b8b8481811061336457634e487b7160e01b600052603260045260246000fd5b90506020020135815250600f60008e8e8581811061339257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906133a7919061596c565b6001600160a01b03168152602080820192909252604090810160002083518155918301516001830155820151600282015560608201516003820155608090910151600490910155806133f881615e5a565b91505061328b565b505050505050505050505050565b6002546001600160a01b031633146134385760405162461bcd60e51b81526004016115f690615d04565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561349057600080fd5b505af11580156134a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132569190615c0a565b6000546001600160a01b031633146134f25760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146135475760405162461bcd60e51b81526004016115f690615ccf565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600061170f33846118b085604051806060016040528060258152602001615ef7602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190614b64565b6001546001600160a01b0316331461361e5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016115f6565b600354421161366f5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016115f6565b600154600080546040516001600160a01b039384169390911691600080516020615ed783398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526007602052604081205442116137155760405162461bcd60e51b815260206004820152601660248201527515d85b1b195d081a5cc81cdd1a5b1b081b1bd8dad95960521b60448201526064016115f6565b61170f3384846142bd565b6000546001600160a01b0316331461374a5760405162461bcd60e51b81526004016115f690615ccf565b601f55565b6002546001600160a01b031633146137795760405162461bcd60e51b81526004016115f690615d04565b6000603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156137c957600080fd5b505afa1580156137dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138019190615988565b6001600160a01b031663e6a4390530846040518363ffffffff1660e01b815260040161382e929190615c62565b60206040518083038186803b15801561384657600080fd5b505afa15801561385a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387e9190615988565b90506001600160a01b03811661399657603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156138dc57600080fd5b505afa1580156138f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139149190615988565b6001600160a01b031663c9c6539630846040518363ffffffff1660e01b8152600401613941929190615c62565b602060405180830381600087803b15801561395b57600080fd5b505af115801561396f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139939190615988565b90505b6001600160a01b03166000818152600d60209081526040808320805460ff19908116909155603880546001600160a01b031916909517909455600a90915290208054909116600117905550565b6000546001600160a01b03163314613a0d5760405162461bcd60e51b81526004016115f690615ccf565b613a1b81633b9aca00615de9565b603b5550565b6000546001600160a01b03163314613a4b5760405162461bcd60e51b81526004016115f690615ccf565b42600081613a5c8562015180615de9565b613a669190615db1565b6040805160a081018252878152602080820195865281830193845260608201968752608082019889526001600160a01b039099166000908152600f90995297209651875591516001870155505160028501555160038401555051600490910155565b6002546001600160a01b03163314613af25760405162461bcd60e51b81526004016115f690615d04565b603780546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b03163314613b465760405162461bcd60e51b81526004016115f690615ccf565b603a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990613b9390831515815260200190565b60405180910390a150565b613bd06040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b03166000908152600f6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290565b6002546001600160a01b03163314613c525760405162461bcd60e51b81526004016115f690615d04565b604051600090339083908381818185875af1925050503d8060008114613c94576040519150601f19603f3d011682016040523d82523d6000602084013e613c99565b606091505b5050905080611fc35760405162461bcd60e51b815260206004820152601060248201526f4661696c656420746f2072657363756560801b60448201526064016115f6565b6000546001600160a01b03163314613d075760405162461bcd60e51b81526004016115f690615ccf565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314613d535760405162461bcd60e51b81526004016115f690615ccf565b612c1081614d93565b6000546001600160a01b03163314613d865760405162461bcd60e51b81526004016115f690615ccf565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055613db58142615db1565b600355600080546040516001600160a01b0390911690600080516020615ed7833981519152908390a350565b600061171382614ed8565b6000546001600160a01b03163314613e165760405162461bcd60e51b81526004016115f690615ccf565b613e2481633b9aca00615de9565b601e5550565b6000546001600160a01b03163314613e545760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314613e9f5760405162461bcd60e51b81526004016115f690615ccf565b613ead81633b9aca00615de9565b603b55613ef1602454602355602654602555602854602755602a54602955602c54602b55602e54602d55603054602f55603254603155603454603355603654603555565b50603a805460ff60a81b1916600160a81b1790556040805460ff1916600117905543603d55565b6000546001600160a01b03163314613f425760405162461bcd60e51b81526004016115f690615ccf565b603e55565b6000546001600160a01b03163314613f715760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b038116613fd65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016115f6565b600080546040516001600160a01b0380851693921691600080516020615ed783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146140495760405162461bcd60e51b81526004016115f690615ccf565b601980546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b031633146140ad5760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000826140e757506000611713565b60006140f38385615de9565b9050826141008583615dc9565b14611dd15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016115f6565b6000611dd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615024565b6001600160a01b0383166141fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016115f6565b6001600160a01b03821661425c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016115f6565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526010602052604090205460ff16806142fc57506001600160a01b03821660009081526010602052604090205460ff165b156143555760405162461bcd60e51b8152602060048201526024808201527f426c61636b6c6973746564206163636f756e742c20636f6e74616374207375706044820152631c1bdc9d60e21b60648201526084016115f6565b604054610100900460ff16801561436e575060405460ff165b1561447257600043603f54603d546143869190615db1565b11905080156143f8576001600160a01b03841660009081526011602052604090205460ff16156143f85760405162461bcd60e51b815260206004820152601d60248201527f416e7469626f743a2077616974206d696e7574657320746f2073656c6c00000060448201526064016115f6565b6038546001600160a01b0385811691161480156144125750805b15614470576001600160a01b03831660009081526011602052604090819020805460ff19166001179055546301000000900460ff1615614470576001600160a01b0383166000908152601060205260409020805460ff191660011790555b505b6001600160a01b0383166144d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016115f6565b6001600160a01b0382166145385760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016115f6565b6001600160a01b0382166000908152600d602052604090205460ff16156145a15760405162461bcd60e51b815260206004820152601760248201527f5468652070616972206973206e6f7420616c6c6f77656400000000000000000060448201526064016115f6565b600081116146035760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016115f6565b6001600160a01b0382166000908152600a602052604090205460ff1661468757601e546146398261463385612cc0565b90614bc1565b11156146875760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e206c696d69742072656163686564206f6e2072656365697665720060448201526064016115f6565b6001600160a01b03831660009081526009602052604090205460ff161580156146c957506001600160a01b03821660009081526009602052604090205460ff16155b1561473157603b548111156147315760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016115f6565b6001600160a01b0383166000908152600b602052604090205460ff1615801561476757506038546001600160a01b038381169116145b1561484357601f548111156147b35760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81cd95b1b081b1a5b5a5d60721b60448201526064016115f6565b6001600160a01b0383166000908152601260205260409020546147d69042615e08565b603e5411156148275760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f7567682074696d6520746f2073656c6c20616761696e00000060448201526064016115f6565b6001600160a01b03831660009081526012602052604090204290555b6001600160a01b0383166000908152600e6020526040902054156148dc576001600160a01b0383166000908152600e602052604090205461488d9061488785612cc0565b90614c6f565b8111156148dc5760405162461bcd60e51b815260206004820152601e60248201527f43616e206e6f74207472616e73666572207374616b656420746f6b656e73000060448201526064016115f6565b60405462010000900460ff16801561490e57506001600160a01b0383166000908152600f602052604090206004015415155b156149a35761491c83614d93565b6001600160a01b0383166000908152600f6020908152604080832060040154600e909252909120546149549190614887908187612cc0565b8111156149a35760405162461bcd60e51b815260206004820152601e60248201527f43616e206e6f74207472616e736665722076657374656420746f6b656e73000060448201526064016115f6565b60006149ae30612cc0565b603c54909150811080159081906149cf5750603a54600160a01b900460ff16155b80156149e957506038546001600160a01b03868116911614155b80156149fe5750603a54600160a81b900460ff165b15614ac057603a805460ff60a01b198116600160a01b17909155614a2f9030906001600160a01b0316846000615052565b600080614a3a6151f9565b603a546040516301cc16d360e71b81529294509092506001600160a01b0381169163e60b698091614a7e91889187918791600160b01b900460ff1690600401615d3b565b600060405180830381600087803b158015614a9857600080fd5b505af1158015614aac573d6000803e3d6000fd5b5050603a805460ff60a01b19169055505050505b6001600160a01b03851660009081526008602052604090205460019060ff1680614b0257506001600160a01b03851660009081526008602052604090205460ff165b15614b0f57506000614b46565b6038546001600160a01b038681169116148015614b335750603754610100900460ff165b15614b46576037805460ff191660011790555b614b5286868684615052565b50506037805460ff1916905550505050565b60008184841115614b885760405162461bcd60e51b81526004016115f69190615c7c565b506000614b958486615e08565b95945050505050565b6000806000614bab6152bb565b9092509050614bba8282614157565b9250505090565b600080614bce8385615db1565b905083811015611dd15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016115f6565b6000806000806000806000806000614c378a615475565b9250925092506000806000614c558d8686614c50614b9e565b6154b1565b919f909e50909c50959a5093985091965092945050505050565b6000611dd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614b64565b602354158015614cc15750602554155b8015614ccd5750602954155b8015614cd95750602754155b8015614ce55750602b54155b8015614cf15750602d54155b8015614cfd5750602f54155b8015614d095750603154155b8015614d155750603354155b8015614d215750603554155b15614d2857565b60238054602455602580546026556027805460285560298054602a55602b8054602c55602d8054602e55602f80546030556031805460325560338054603455603580546036556000998a90559789905595889055938790559186905585905584905583905582905555565b6001600160a01b0381166000908152600f60209081526040808320815160a0810183528154815260018201549381018490526002820154928101839052600382015460608201819052600490920154608082015293929091614df59190615e08565b614dff9190615dc9565b9050600082606001518360000151614e179190615dc9565b90508260400151421115614e45575050506001600160a01b03166000908152600f6020526040812060040155565b6000836020015142614e579190615e08565b905082811015614e68575050505050565b6000614e748483615dc9565b90506000614e828483615de9565b9050600086608001518760000151614e9a9190615e08565b905080821115614ece578651614eb1908390615e08565b6001600160a01b0389166000908152600f60205260409020600401555b5050505050505050565b6001600160a01b0381166000908152600f60209081526040808320815160a08101835281548152600182015493810193909352600281015491830191909152600381015460608301526004015460808201819052614f395750600092915050565b6000816060015182602001518360400151614f549190615e08565b614f5e9190615dc9565b9050600082606001518360000151614f769190615dc9565b90508260400151421115614f8f57506000949350505050565b6000836020015142614fa19190615e08565b905082811015614fb8575050506080015192915050565b6000614fc48483615dc9565b90506000614fd28483615de9565b9050600086608001518760000151614fea9190615e08565b905080821115615012578651600090615004908490615e08565b9a9950505050505050505050565b50505060809093015195945050505050565b600081836150455760405162461bcd60e51b81526004016115f69190615c7c565b506000614b958486615dc9565b8061505f5761505f614cb1565b6001600160a01b0384166000908152600c602052604090205460ff1680156150a057506001600160a01b0383166000908152600c602052604090205460ff16155b156150b5576150b0848484615501565b6151b3565b6001600160a01b0384166000908152600c602052604090205460ff161580156150f657506001600160a01b0383166000908152600c602052604090205460ff165b15615106576150b0848484615627565b6001600160a01b0384166000908152600c602052604090205460ff1615801561514857506001600160a01b0383166000908152600c602052604090205460ff16155b15615158576150b08484846156d0565b6001600160a01b0384166000908152600c602052604090205460ff16801561519857506001600160a01b0383166000908152600c602052604090205460ff165b156151a8576150b0848484615714565b6151b38484846156d0565b8061196057611960602454602355602654602555602854602755602a54602955602c54602b55602e54602d55603054602f55603254603155603454603355603654603555565b6152016158e5565b615209615904565b6029548252602754602080840191909152602b54604080850191909152602d54606080860191909152602f5460808087019190915260255460a08088019190915260315460c08089019190915260335460e08901526035546101008901526015546001600160a01b039081168852601454811696880196909652601954861694870194909452601654851692860192909252601754841690850152601a54831690840152601854909116908201529091565b601c54601b546000918291825b601354811015615445578260046000601384815481106152f857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180615371575081600560006013848154811061534a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561538757601c54601b54945094505050509091565b6153db60046000601384815481106153af57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490614c6f565b9250615431600560006013848154811061540557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390614c6f565b91508061543d81615e5a565b9150506152c8565b50601b54601c5461545591614157565b82101561546c57601c54601b549350935050509091565b90939092509050565b60008060008061548485615787565b90506000615491866157a4565b905060006154a3826148878986614c6f565b979296509094509092505050565b60008080806154c088866140d8565b905060006154ce88876140d8565b905060006154dc88886140d8565b905060006154ee826148878686614c6f565b939b939a50919850919650505050505050565b60008060008060008061551387614c20565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506155459088614c6f565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546155749087614c6f565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546155a39086614bc1565b6001600160a01b0389166000908152600460205260409020556155c581615839565b6155cf84836158c1565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161561491815260200190565b60405180910390a3505050505050505050565b60008060008060008061563987614c20565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061566b9087614c6f565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546156a19084614bc1565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546155a39086614bc1565b6000806000806000806156e287614c20565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506155749087614c6f565b60008060008060008061572687614c20565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506157589088614c6f565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461566b9087614c6f565b60006117136127106130ba602354856140d890919063ffffffff16565b603754600090819060ff166157ba5760006157be565b6035545b9050611dd16127106130ba83603354603154602f54602d54602b546029546027546025546157ec9190615db1565b6157f69190615db1565b6158009190615db1565b61580a9190615db1565b6158149190615db1565b61581e9190615db1565b6158289190615db1565b6158329190615db1565b86906140d8565b6000615843614b9e565b9050600061585183836140d8565b3060009081526004602052604090205490915061586e9082614bc1565b30600090815260046020908152604080832093909355600c9052205460ff161561325657306000908152600560205260409020546158ac9084614bc1565b30600090815260056020526040902055505050565b601c546158ce9083614c6f565b601c55601d546158de9082614bc1565b601d555050565b6040518061012001604052806009906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b60008083601f840112615933578182fd5b50813567ffffffffffffffff81111561594a578182fd5b6020830191508360208260051b850101111561596557600080fd5b9250929050565b60006020828403121561597d578081fd5b8135611dd181615e8b565b600060208284031215615999578081fd5b8151611dd181615e8b565b600080604083850312156159b6578081fd5b82356159c181615e8b565b915060208301356159d181615e8b565b809150509250929050565b6000806000606084860312156159f0578081fd5b83356159fb81615e8b565b92506020840135615a0b81615e8b565b929592945050506040919091013590565b60008060408385031215615a2e578182fd5b8235615a3981615e8b565b915060208301356159d181615ea0565b60008060408385031215615a5b578182fd5b8235615a6681615e8b565b946020939093013593505050565b600080600060608486031215615a88578283fd5b8335615a9381615e8b565b9250602084013591506040840135615aaa81615ea0565b809150509250925092565b60008060008060808587031215615aca578081fd5b8435615ad581615e8b565b966020860135965060408601359560600135945092505050565b60008060208385031215615b01578182fd5b823567ffffffffffffffff811115615b17578283fd5b615b2385828601615922565b90969095509350505050565b6000806000806000806000806080898b031215615b4a578384fd5b883567ffffffffffffffff80821115615b61578586fd5b615b6d8c838d01615922565b909a50985060208b0135915080821115615b85578586fd5b615b918c838d01615922565b909850965060408b0135915080821115615ba9578586fd5b615bb58c838d01615922565b909650945060608b0135915080821115615bcd578384fd5b50615bda8b828c01615922565b999c989b5096995094979396929594505050565b600060208284031215615bff578081fd5b8135611dd181615ea0565b600060208284031215615c1b578081fd5b8151611dd181615ea0565b600060208284031215615c37578081fd5b5035919050565b60008060408385031215615c50578182fd5b8235915060208301356159d181615ea0565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015615ca857858101830151858201604001528201615c8c565b81811115615cb95783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616c6c657220646f6573206e6f74206861766520706f776572000000000000604082015260600190565b848152610240810160208083018660005b6009811015615d6957815183529183019190830190600101615d4c565b50505061014083018560005b6007811015615d9b5781516001600160a01b031683529183019190830190600101615d75565b5050505082151561022083015295945050505050565b60008219821115615dc457615dc4615e75565b500190565b600082615de457634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615615e0357615e03615e75565b500290565b600082821015615e1a57615e1a615e75565b500390565b600181811c90821680615e3357607f821691505b60208210811415615e5457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615e6e57615e6e615e75565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612c1057600080fd5b8015158114612c1057600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203f93d98ee695fb7a2482cd7aa2b42a01728a1a20eb4cc06595cd54b3caaa40c764736f6c634300080400330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7

Deployed Bytecode

0x6080604052600436106106f85760003560e01c80637d7623a111610390578063c0ab5704116101dc578063d0fb02031161010d578063ea2f0b37116100ab578063f4e0d9ac1161007a578063f4e0d9ac1461154c578063f6224c961461156c578063fc03b68a1461158e578063fffbf9bd146115ae57600080fd5b8063ea2f0b37146114cc578063ed762086146114ec578063f02e466d1461150c578063f2fde38b1461152c57600080fd5b8063dd467064116100e7578063dd46706414611426578063dd62ed3e14611446578063e08b87a11461148c578063e268e4d3146114ac57600080fd5b8063d0fb0203146113d0578063d12a7688146113f0578063d8d4ec021461140657600080fd5b8063cb249d781161017a578063ce15676d11610154578063ce15676d1461136e578063ce53f89814611384578063cf895ca51461139a578063d0d41fe1146113b057600080fd5b8063cb249d78146112cb578063cc49ede7146112ec578063cd65bbff1461134e57600080fd5b8063c49b9a80116101b6578063c49b9a8014611256578063c4e9436014611276578063c640ef2a14611297578063c97f617a146112b557600080fd5b8063c0ab570414611200578063c0d7865514611220578063c3c3960c1461124057600080fd5b80639cea127a116102c1578063aa45026b1161025f578063b75620d81161022e578063b75620d814611171578063b9f0f15c146111a1578063bc337182146111c1578063bd5cb493146111e157600080fd5b8063aa45026b14611110578063ae85028114611126578063b5ee0ded1461113c578063b6c523241461115c57600080fd5b8063a61b83e31161029b578063a61b83e3146110a5578063a69df4b5146110bb578063a9059cbb146110d0578063a9bf2c09146110f057600080fd5b80639cea127a14611045578063a2a2dd5e14611065578063a457c2d71461108557600080fd5b80638da5cb5b1161032e57806395d89b411161030857806395d89b4114610fd0578063995846bd14610fe55780639c769df4146110055780639c962c821461102557600080fd5b80638da5cb5b14610f7c5780638e79a38814610f9a578063906e9dd014610fb057600080fd5b8063885b8a301161036a578063885b8a3014610ede57806388f8202014610ef35780638906758d14610f2c578063897fb10514610f4c57600080fd5b80637d7623a114610e8957806381a4605f14610e9f5780638465a05e14610ebf57600080fd5b80633bd5d1731161054f5780635ddccca7116104805780636cf523251161041e5780637a41e81c116103ed5780637a41e81c14610e035780637a76646014610e1d5780637b53bba614610e535780637d1db4a514610e7357600080fd5b80636cf5232514610d8e57806370a0823114610dae578063715018a614610dce57806375de4a3d14610de357600080fd5b80636659e4b81161045a5780636659e4b814610d1a5780636afc133414610d3a5780636bc2878114610d5a5780636bc87c3a14610d7857600080fd5b80635ddccca714610ca15780635f8378ab14610cc1578063658c27a914610ce157600080fd5b80634a74bb02116104ed5780635342acb4116104c75780635342acb414610c1857806358dbfc3414610c51578063590f897e14610c6b5780635ba79e6514610c8157600080fd5b80634a74bb0214610bb75780634af4086314610bd857806352390c0214610bf857600080fd5b8063437823ec11610529578063437823ec14610b375780634549b03914610b57578063472d35b914610b7757806349bd5a5e14610b9757600080fd5b80633bd5d17314610ad75780633ca5b23414610af757806342ddd4f614610b1757600080fd5b80632069de6f116106295780632d838119116105c75780633685d419116105a15780633685d41914610a615780633702b96514610a815780633950935114610a975780633a740de614610ab757600080fd5b80632d838119146109ef578063313ce56714610a0f5780633639602714610a3157600080fd5b806323b872dd1161060357806323b872dd1461095f57806323f2d09f1461097f57806325f784ba1461099f5780632ae0357f146109cf57600080fd5b80632069de6f1461090957806322976e0d14610929578063235db79e1461093f57600080fd5b8063110430bb11610696578063163a37ba11610670578063163a37ba1461085d5780631688ad45146108965780631694505e146108ce57806318160ddd146108f457600080fd5b8063110430bb1461081257806312706f041461083257806313114a9d1461084857600080fd5b8063095ea7b3116106d2578063095ea7b314610771578063099a4305146107a15780630b2fb18d146107dc5780630f2cdd6c146107fc57600080fd5b8063027336fc14610704578063067409541461072657806306fdde031461074657600080fd5b366106ff57005b600080fd5b34801561071057600080fd5b5061072461071f366004615a49565b6115cc565b005b34801561073257600080fd5b50610724610741366004615a1c565b61161b565b34801561075257600080fd5b5061075b611670565b6040516107689190615c7c565b60405180910390f35b34801561077d57600080fd5b5061079161078c366004615a49565b611702565b6040519015158152602001610768565b3480156107ad57600080fd5b506107ce6107bc36600461596c565b60126020526000908152604090205481565b604051908152602001610768565b3480156107e857600080fd5b506107246107f736600461596c565b611719565b34801561080857600080fd5b506107ce601e5481565b34801561081e57600080fd5b5061072461082d366004615c26565b61177d565b34801561083e57600080fd5b506107ce602b5481565b34801561085457600080fd5b50601d546107ce565b34801561086957600080fd5b5061079161087836600461596c565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156108a257600080fd5b50601a546108b6906001600160a01b031681565b6040516001600160a01b039091168152602001610768565b3480156108da57600080fd5b506037546108b6906201000090046001600160a01b031681565b34801561090057600080fd5b50601b546107ce565b34801561091557600080fd5b50610724610924366004615bee565b6117bb565b34801561093557600080fd5b506107ce60295481565b34801561094b57600080fd5b506040546107919062010000900460ff1681565b34801561096b57600080fd5b5061079161097a3660046159dc565b6117f8565b34801561098b57600080fd5b5061072461099a366004615aef565b6118bf565b3480156109ab57600080fd5b506107916109ba36600461596c565b600a6020526000908152604090205460ff1681565b3480156109db57600080fd5b506107246109ea366004615aef565b611966565b3480156109fb57600080fd5b506107ce610a0a366004615c26565b611d54565b348015610a1b57600080fd5b5060225460405160ff9091168152602001610768565b348015610a3d57600080fd5b50610791610a4c36600461596c565b600b6020526000908152604090205460ff1681565b348015610a6d57600080fd5b50610724610a7c36600461596c565b611dd8565b348015610a8d57600080fd5b506107ce60365481565b348015610aa357600080fd5b50610791610ab2366004615a49565b611fc7565b348015610ac357600080fd5b50610724610ad2366004615a1c565b611ffd565b348015610ae357600080fd5b50610724610af2366004615c26565b612052565b348015610b0357600080fd5b506039546108b6906001600160a01b031681565b348015610b2357600080fd5b50610724610b32366004615bee565b61213c565b348015610b4357600080fd5b50610724610b5236600461596c565b612182565b348015610b6357600080fd5b506107ce610b72366004615c3e565b6121d0565b348015610b8357600080fd5b50610724610b9236600461596c565b61225d565b348015610ba357600080fd5b506038546108b6906001600160a01b031681565b348015610bc357600080fd5b50603a5461079190600160a81b900460ff1681565b348015610be457600080fd5b50610791610bf336600461596c565b6122e9565b348015610c0457600080fd5b50610724610c1336600461596c565b612411565b348015610c2457600080fd5b50610791610c3336600461596c565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610c5d57600080fd5b506040546107919060ff1681565b348015610c7757600080fd5b506107ce60355481565b348015610c8d57600080fd5b50610724610c9c366004615bee565b612564565b348015610cad57600080fd5b50610724610cbc366004615bee565b6125ac565b348015610ccd57600080fd5b50610724610cdc366004615bee565b6125f0565b348015610ced57600080fd5b50610791610cfc36600461596c565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610d2657600080fd5b50610724610d35366004615bee565b612c13565b348015610d4657600080fd5b50610724610d55366004615c26565b612c57565b348015610d6657600080fd5b506002546001600160a01b03166108b6565b348015610d8457600080fd5b506107ce60255481565b348015610d9a57600080fd5b50610724610da936600461596c565b612c74565b348015610dba57600080fd5b506107ce610dc936600461596c565b612cc0565b348015610dda57600080fd5b50610724612d1f565b348015610def57600080fd5b50610724610dfe366004615a1c565b612d81565b348015610e0f57600080fd5b506037546107919060ff1681565b348015610e2957600080fd5b506107ce610e3836600461596c565b6001600160a01b03166000908152600e602052604090205490565b348015610e5f57600080fd5b50610724610e6e366004615a1c565b612ff1565b348015610e7f57600080fd5b506107ce603b5481565b348015610e9557600080fd5b506107ce603f5481565b348015610eab57600080fd5b50610724610eba366004615c26565b613046565b348015610ecb57600080fd5b5060405461079190610100900460ff1681565b348015610eea57600080fd5b50610724613075565b348015610eff57600080fd5b50610791610f0e36600461596c565b6001600160a01b03166000908152600c602052604090205460ff1690565b348015610f3857600080fd5b50610724610f4736600461596c565b6130da565b348015610f5857600080fd5b50610791610f6736600461596c565b60116020526000908152604090205460ff1681565b348015610f8857600080fd5b506000546001600160a01b03166108b6565b348015610fa657600080fd5b506107ce602d5481565b348015610fbc57600080fd5b50610724610fcb36600461596c565b613126565b348015610fdc57600080fd5b5061075b613172565b348015610ff157600080fd5b50610724611000366004615a74565b613181565b34801561101157600080fd5b50610724611020366004615b2f565b61325b565b34801561103157600080fd5b50610724611040366004615a49565b61340e565b34801561105157600080fd5b50610724611060366004615a1c565b6134c8565b34801561107157600080fd5b5061072461108036600461596c565b61351d565b34801561109157600080fd5b506107916110a0366004615a49565b613569565b3480156110b157600080fd5b506107ce602f5481565b3480156110c757600080fd5b506107246135b8565b3480156110dc57600080fd5b506107916110eb366004615a49565b6136be565b3480156110fc57600080fd5b5061072461110b366004615c26565b613720565b34801561111c57600080fd5b506107ce60275481565b34801561113257600080fd5b506107ce60315481565b34801561114857600080fd5b506019546108b6906001600160a01b031681565b34801561116857600080fd5b506003546107ce565b34801561117d57600080fd5b5061079161118c36600461596c565b600d6020526000908152604090205460ff1681565b3480156111ad57600080fd5b506107246111bc36600461596c565b61374f565b3480156111cd57600080fd5b506107246111dc366004615c26565b6139e3565b3480156111ed57600080fd5b5060375461079190610100900460ff1681565b34801561120c57600080fd5b5061072461121b366004615ab5565b613a21565b34801561122c57600080fd5b5061072461123b36600461596c565b613ac8565b34801561124c57600080fd5b506107ce603d5481565b34801561126257600080fd5b50610724611271366004615bee565b613b1c565b34801561128257600080fd5b50603a5461079190600160b01b900460ff1681565b3480156112a357600080fd5b506014546001600160a01b03166108b6565b3480156112c157600080fd5b506107ce60235481565b3480156112d757600080fd5b50604054610791906301000000900460ff1681565b3480156112f857600080fd5b5061130c61130736600461596c565b613b9e565b6040516107689190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561135a57600080fd5b50610724611369366004615c26565b613c28565b34801561137a57600080fd5b506107ce603e5481565b34801561139057600080fd5b506107ce601f5481565b3480156113a657600080fd5b506107ce60335481565b3480156113bc57600080fd5b506107246113cb36600461596c565b613cdd565b3480156113dc57600080fd5b50603a546108b6906001600160a01b031681565b3480156113fc57600080fd5b506107ce603c5481565b34801561141257600080fd5b5061072461142136600461596c565b613d29565b34801561143257600080fd5b50610724611441366004615c26565b613d5c565b34801561145257600080fd5b506107ce6114613660046159a4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561149857600080fd5b506107ce6114a736600461596c565b613de1565b3480156114b857600080fd5b506107246114c7366004615c26565b613dec565b3480156114d857600080fd5b506107246114e736600461596c565b613e2a565b3480156114f857600080fd5b50610724611507366004615c26565b613e75565b34801561151857600080fd5b50610724611527366004615c26565b613f18565b34801561153857600080fd5b5061072461154736600461596c565b613f47565b34801561155857600080fd5b5061072461156736600461596c565b61401f565b34801561157857600080fd5b50336000908152600760205260409020546107ce565b34801561159a57600080fd5b506107246115a9366004615a1c565b614083565b3480156115ba57600080fd5b506015546001600160a01b03166108b6565b6000546001600160a01b031633146115ff5760405162461bcd60e51b81526004016115f690615ccf565b60405180910390fd5b6001600160a01b03909116600090815260126020526040902055565b6000546001600160a01b031633146116455760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60606020805461167f90615e1f565b80601f01602080910402602001604051908101604052809291908181526020018280546116ab90615e1f565b80156116f85780601f106116cd576101008083540402835291602001916116f8565b820191906000526020600020905b8154815290600101906020018083116116db57829003601f168201915b5050505050905090565b600061170f338484614199565b5060015b92915050565b6000546001600160a01b031633146117435760405162461bcd60e51b81526004016115f690615ccf565b601a80546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b031633146117a75760405162461bcd60e51b81526004016115f690615ccf565b6117b581633b9aca00615de9565b603c5550565b6000546001600160a01b031633146117e55760405162461bcd60e51b81526004016115f690615ccf565b6040805460ff1916911515919091179055565b6001600160a01b03831660009081526007602052604081205442116118585760405162461bcd60e51b815260206004820152601660248201527515d85b1b195d081a5cc81cdd1a5b1b081b1bd8dad95960521b60448201526064016115f6565b6118638484846142bd565b6118b584336118b085604051806060016040528060288152602001615eaf602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190614b64565b614199565b5060019392505050565b6000546001600160a01b031633146118e95760405162461bcd60e51b81526004016115f690615ccf565b8060005b818110156119605760016009600086868581811061191b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611930919061596c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016118ed565b50505050565b6000546001600160a01b031633146119905760405162461bcd60e51b81526004016115f690615ccf565b6000828260098181106119b357634e487b7160e01b600052603260045260246000fd5b90506020020135838360088181106119db57634e487b7160e01b600052603260045260246000fd5b9050602002013584846007818110611a0357634e487b7160e01b600052603260045260246000fd5b9050602002013585856006818110611a2b57634e487b7160e01b600052603260045260246000fd5b9050602002013586866005818110611a5357634e487b7160e01b600052603260045260246000fd5b9050602002013587876004818110611a7b57634e487b7160e01b600052603260045260246000fd5b9050602002013588886003818110611aa357634e487b7160e01b600052603260045260246000fd5b9050602002013589896002818110611acb57634e487b7160e01b600052603260045260246000fd5b905060200201358a8a6001818110611af357634e487b7160e01b600052603260045260246000fd5b905060200201358b8b6000818110611b1b57634e487b7160e01b600052603260045260246000fd5b90506020020135611b2c9190615db1565b611b369190615db1565b611b409190615db1565b611b4a9190615db1565b611b549190615db1565b611b5e9190615db1565b611b689190615db1565b611b729190615db1565b611b7c9190615db1565b90506107d0811115611b8d57600080fd5b82826000818110611bae57634e487b7160e01b600052603260045260246000fd5b60200291909101356023555082826001818110611bdb57634e487b7160e01b600052603260045260246000fd5b60200291909101356025555082826002818110611c0857634e487b7160e01b600052603260045260246000fd5b60200291909101356027555082826003818110611c3557634e487b7160e01b600052603260045260246000fd5b60200291909101356029555082826004818110611c6257634e487b7160e01b600052603260045260246000fd5b6020029190910135602b555082826005818110611c8f57634e487b7160e01b600052603260045260246000fd5b6020029190910135602d555082826006818110611cbc57634e487b7160e01b600052603260045260246000fd5b6020029190910135602f555082826007818110611ce957634e487b7160e01b600052603260045260246000fd5b60200291909101356031555082826008818110611d1657634e487b7160e01b600052603260045260246000fd5b60200291909101356033555082826009818110611d4357634e487b7160e01b600052603260045260246000fd5b602002919091013560355550505050565b6000601c54821115611dbb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016115f6565b6000611dc5614b9e565b9050611dd18382614157565b9392505050565b6000546001600160a01b03163314611e025760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b0381166000908152600c602052604090205460ff16611e6a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016115f6565b60005b601354811015611fc357816001600160a01b031660138281548110611ea257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611fb15760138054611ecd90600190615e08565b81548110611eeb57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601380546001600160a01b039092169183908110611f2557634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600c90925220805460ff191690556013805480611f8b57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611fbb81615e5a565b915050611e6d565b5050565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161170f9185906118b09086614bc1565b6000546001600160a01b031633146120275760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b336000818152600c602052604090205460ff16156120c75760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016115f6565b60006120d283614c20565b505050506001600160a01b0384166000908152600460205260409020549192506120fe91905082614c6f565b6001600160a01b038316600090815260046020526040902055601c546121249082614c6f565b601c55601d546121349084614bc1565b601d55505050565b6000546001600160a01b031633146121665760405162461bcd60e51b81526004016115f690615ccf565b60408054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146121ac5760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000601b548311156122245760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016115f6565b8161224357600061223484614c20565b50939550611713945050505050565b600061224e84614c20565b50929550611713945050505050565b6002546001600160a01b031633146122875760405162461bcd60e51b81526004016115f690615d04565b603a80546001600160a01b039092166001600160a01b0319909216821790556000908152600860209081526040808320805460ff199081166001908117909255600984528285208054821683179055600a909352922080549091169091179055565b600080603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561233a57600080fd5b505afa15801561234e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123729190615988565b6001600160a01b031663e6a4390530856040518363ffffffff1660e01b815260040161239f929190615c62565b60206040518083038186803b1580156123b757600080fd5b505afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef9190615988565b6001600160a01b03166000908152600d602052604090205460ff169392505050565b6000546001600160a01b0316331461243b5760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b0381166000908152600c602052604090205460ff16156124a45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016115f6565b6001600160a01b038116600090815260046020526040902054156124fe576001600160a01b0381166000908152600460205260409020546124e490611d54565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600c60205260408120805460ff191660019081179091556013805491820181559091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319169091179055565b6000546001600160a01b0316331461258e5760405162461bcd60e51b81526004016115f690615ccf565b6040805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146125d65760405162461bcd60e51b81526004016115f690615ccf565b603780549115156101000261ff0019909216919091179055565b6002546001600160a01b0316331461261a5760405162461bcd60e51b81526004016115f690615d04565b80156129b7576000603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561267057600080fd5b505afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a89190615988565b6001600160a01b031663e6a4390530603760029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561270557600080fd5b505afa158015612719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273d9190615988565b6040518363ffffffff1660e01b815260040161275a929190615c62565b60206040518083038186803b15801561277257600080fd5b505afa158015612786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127aa9190615988565b90506001600160a01b03811661294757603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561280857600080fd5b505afa15801561281c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128409190615988565b6001600160a01b031663c9c6539630603760029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561289d57600080fd5b505afa1580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d59190615988565b6040518363ffffffff1660e01b81526004016128f2929190615c62565b602060405180830381600087803b15801561290c57600080fd5b505af1158015612920573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129449190615988565b90505b603880546001600160a01b039283166001600160a01b0319909116811782556000908152600d60209081526040808320805460ff19908116909155603a8054881515600160b01b0260ff60b01b1990911617905593549094168252600a9052919091208054909116600117905550565b6000603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0757600080fd5b505afa158015612a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3f9190615988565b60395460405163e6a4390560e01b81526001600160a01b039283169263e6a4390592612a7392309290911690600401615c62565b60206040518083038186803b158015612a8b57600080fd5b505afa158015612a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac39190615988565b90506001600160a01b038116612be257603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b2157600080fd5b505afa158015612b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b599190615988565b6039546040516364e329cb60e11b81526001600160a01b039283169263c9c6539692612b8d92309290911690600401615c62565b602060405180830381600087803b158015612ba757600080fd5b505af1158015612bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdf9190615988565b90505b603880546001600160a01b0319166001600160a01b0392909216919091179055603a805460ff60b01b191690555b50565b6000546001600160a01b03163314612c3d5760405162461bcd60e51b81526004016115f690615ccf565b604080549115156101000261ff0019909216919091179055565b612c618142615db1565b3360009081526007602052604090205550565b6000546001600160a01b03163314612c9e5760405162461bcd60e51b81526004016115f690615ccf565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600c602052604081205460ff1615612cfd57506001600160a01b031660009081526005602052604090205490565b6001600160a01b03821660009081526004602052604090205461171390611d54565b6000546001600160a01b03163314612d495760405162461bcd60e51b81526004016115f690615ccf565b600080546040516001600160a01b0390911690600080516020615ed7833981519152908390a3600080546001600160a01b0319169055565b6002546001600160a01b03163314612dab5760405162461bcd60e51b81526004016115f690615d04565b6000603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612dfb57600080fd5b505afa158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e339190615988565b6001600160a01b031663e6a4390530856040518363ffffffff1660e01b8152600401612e60929190615c62565b60206040518083038186803b158015612e7857600080fd5b505afa158015612e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb09190615988565b90506001600160a01b038116612fc857603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0e57600080fd5b505afa158015612f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f469190615988565b6001600160a01b031663c9c6539630856040518363ffffffff1660e01b8152600401612f73929190615c62565b602060405180830381600087803b158015612f8d57600080fd5b505af1158015612fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc59190615988565b90505b6001600160a01b03166000908152600d60205260409020805460ff191691151591909117905550565b6000546001600160a01b0316331461301b5760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146130705760405162461bcd60e51b81526004016115f690615ccf565b603f55565b6000546001600160a01b0316331461309f5760405162461bcd60e51b81526004016115f690615ccf565b6130c060646130ba6000601b546140d890919063ffffffff16565b90614157565b603b556130cb614cb1565b603a805460ff60a81b19169055565b6000546001600160a01b031633146131045760405162461bcd60e51b81526004016115f690615ccf565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146131505760405162461bcd60e51b81526004016115f690615ccf565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60606021805461167f90615e1f565b6019546001600160a01b0316336001600160a01b031614806131ad57506002546001600160a01b031633145b6131ec5760405162461bcd60e51b815260206004820152601060248201526f2ab730b63637bbb2b21031b0b63632b960811b60448201526064016115f6565b8015613233576001600160a01b0383166000908152600e60205260409020546132159083614bc1565b6001600160a01b0384166000908152600e6020526040902055505050565b6001600160a01b0383166000908152600e60205260409020546132159083614c6f565b505050565b6000546001600160a01b031633146132855760405162461bcd60e51b81526004016115f690615ccf565b86426000805b8381101561340057828888838181106132b457634e487b7160e01b600052603260045260246000fd5b90506020020135620151806132c99190615de9565b6132d39190615db1565b91506040518060a001604052808b8b8481811061330057634e487b7160e01b600052603260045260246000fd5b90506020020135815260200184815260200183815260200187878481811061333857634e487b7160e01b600052603260045260246000fd5b9050602002013581526020018b8b8481811061336457634e487b7160e01b600052603260045260246000fd5b90506020020135815250600f60008e8e8581811061339257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906133a7919061596c565b6001600160a01b03168152602080820192909252604090810160002083518155918301516001830155820151600282015560608201516003820155608090910151600490910155806133f881615e5a565b91505061328b565b505050505050505050505050565b6002546001600160a01b031633146134385760405162461bcd60e51b81526004016115f690615d04565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561349057600080fd5b505af11580156134a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132569190615c0a565b6000546001600160a01b031633146134f25760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146135475760405162461bcd60e51b81526004016115f690615ccf565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600061170f33846118b085604051806060016040528060258152602001615ef7602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190614b64565b6001546001600160a01b0316331461361e5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016115f6565b600354421161366f5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016115f6565b600154600080546040516001600160a01b039384169390911691600080516020615ed783398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526007602052604081205442116137155760405162461bcd60e51b815260206004820152601660248201527515d85b1b195d081a5cc81cdd1a5b1b081b1bd8dad95960521b60448201526064016115f6565b61170f3384846142bd565b6000546001600160a01b0316331461374a5760405162461bcd60e51b81526004016115f690615ccf565b601f55565b6002546001600160a01b031633146137795760405162461bcd60e51b81526004016115f690615d04565b6000603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156137c957600080fd5b505afa1580156137dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138019190615988565b6001600160a01b031663e6a4390530846040518363ffffffff1660e01b815260040161382e929190615c62565b60206040518083038186803b15801561384657600080fd5b505afa15801561385a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387e9190615988565b90506001600160a01b03811661399657603760029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156138dc57600080fd5b505afa1580156138f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139149190615988565b6001600160a01b031663c9c6539630846040518363ffffffff1660e01b8152600401613941929190615c62565b602060405180830381600087803b15801561395b57600080fd5b505af115801561396f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139939190615988565b90505b6001600160a01b03166000818152600d60209081526040808320805460ff19908116909155603880546001600160a01b031916909517909455600a90915290208054909116600117905550565b6000546001600160a01b03163314613a0d5760405162461bcd60e51b81526004016115f690615ccf565b613a1b81633b9aca00615de9565b603b5550565b6000546001600160a01b03163314613a4b5760405162461bcd60e51b81526004016115f690615ccf565b42600081613a5c8562015180615de9565b613a669190615db1565b6040805160a081018252878152602080820195865281830193845260608201968752608082019889526001600160a01b039099166000908152600f90995297209651875591516001870155505160028501555160038401555051600490910155565b6002546001600160a01b03163314613af25760405162461bcd60e51b81526004016115f690615d04565b603780546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b03163314613b465760405162461bcd60e51b81526004016115f690615ccf565b603a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990613b9390831515815260200190565b60405180910390a150565b613bd06040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b03166000908152600f6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290565b6002546001600160a01b03163314613c525760405162461bcd60e51b81526004016115f690615d04565b604051600090339083908381818185875af1925050503d8060008114613c94576040519150601f19603f3d011682016040523d82523d6000602084013e613c99565b606091505b5050905080611fc35760405162461bcd60e51b815260206004820152601060248201526f4661696c656420746f2072657363756560801b60448201526064016115f6565b6000546001600160a01b03163314613d075760405162461bcd60e51b81526004016115f690615ccf565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314613d535760405162461bcd60e51b81526004016115f690615ccf565b612c1081614d93565b6000546001600160a01b03163314613d865760405162461bcd60e51b81526004016115f690615ccf565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055613db58142615db1565b600355600080546040516001600160a01b0390911690600080516020615ed7833981519152908390a350565b600061171382614ed8565b6000546001600160a01b03163314613e165760405162461bcd60e51b81526004016115f690615ccf565b613e2481633b9aca00615de9565b601e5550565b6000546001600160a01b03163314613e545760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314613e9f5760405162461bcd60e51b81526004016115f690615ccf565b613ead81633b9aca00615de9565b603b55613ef1602454602355602654602555602854602755602a54602955602c54602b55602e54602d55603054602f55603254603155603454603355603654603555565b50603a805460ff60a81b1916600160a81b1790556040805460ff1916600117905543603d55565b6000546001600160a01b03163314613f425760405162461bcd60e51b81526004016115f690615ccf565b603e55565b6000546001600160a01b03163314613f715760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b038116613fd65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016115f6565b600080546040516001600160a01b0380851693921691600080516020615ed783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146140495760405162461bcd60e51b81526004016115f690615ccf565b601980546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b031633146140ad5760405162461bcd60e51b81526004016115f690615ccf565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000826140e757506000611713565b60006140f38385615de9565b9050826141008583615dc9565b14611dd15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016115f6565b6000611dd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615024565b6001600160a01b0383166141fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016115f6565b6001600160a01b03821661425c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016115f6565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526010602052604090205460ff16806142fc57506001600160a01b03821660009081526010602052604090205460ff165b156143555760405162461bcd60e51b8152602060048201526024808201527f426c61636b6c6973746564206163636f756e742c20636f6e74616374207375706044820152631c1bdc9d60e21b60648201526084016115f6565b604054610100900460ff16801561436e575060405460ff165b1561447257600043603f54603d546143869190615db1565b11905080156143f8576001600160a01b03841660009081526011602052604090205460ff16156143f85760405162461bcd60e51b815260206004820152601d60248201527f416e7469626f743a2077616974206d696e7574657320746f2073656c6c00000060448201526064016115f6565b6038546001600160a01b0385811691161480156144125750805b15614470576001600160a01b03831660009081526011602052604090819020805460ff19166001179055546301000000900460ff1615614470576001600160a01b0383166000908152601060205260409020805460ff191660011790555b505b6001600160a01b0383166144d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016115f6565b6001600160a01b0382166145385760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016115f6565b6001600160a01b0382166000908152600d602052604090205460ff16156145a15760405162461bcd60e51b815260206004820152601760248201527f5468652070616972206973206e6f7420616c6c6f77656400000000000000000060448201526064016115f6565b600081116146035760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016115f6565b6001600160a01b0382166000908152600a602052604090205460ff1661468757601e546146398261463385612cc0565b90614bc1565b11156146875760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e206c696d69742072656163686564206f6e2072656365697665720060448201526064016115f6565b6001600160a01b03831660009081526009602052604090205460ff161580156146c957506001600160a01b03821660009081526009602052604090205460ff16155b1561473157603b548111156147315760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016115f6565b6001600160a01b0383166000908152600b602052604090205460ff1615801561476757506038546001600160a01b038381169116145b1561484357601f548111156147b35760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81cd95b1b081b1a5b5a5d60721b60448201526064016115f6565b6001600160a01b0383166000908152601260205260409020546147d69042615e08565b603e5411156148275760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f7567682074696d6520746f2073656c6c20616761696e00000060448201526064016115f6565b6001600160a01b03831660009081526012602052604090204290555b6001600160a01b0383166000908152600e6020526040902054156148dc576001600160a01b0383166000908152600e602052604090205461488d9061488785612cc0565b90614c6f565b8111156148dc5760405162461bcd60e51b815260206004820152601e60248201527f43616e206e6f74207472616e73666572207374616b656420746f6b656e73000060448201526064016115f6565b60405462010000900460ff16801561490e57506001600160a01b0383166000908152600f602052604090206004015415155b156149a35761491c83614d93565b6001600160a01b0383166000908152600f6020908152604080832060040154600e909252909120546149549190614887908187612cc0565b8111156149a35760405162461bcd60e51b815260206004820152601e60248201527f43616e206e6f74207472616e736665722076657374656420746f6b656e73000060448201526064016115f6565b60006149ae30612cc0565b603c54909150811080159081906149cf5750603a54600160a01b900460ff16155b80156149e957506038546001600160a01b03868116911614155b80156149fe5750603a54600160a81b900460ff165b15614ac057603a805460ff60a01b198116600160a01b17909155614a2f9030906001600160a01b0316846000615052565b600080614a3a6151f9565b603a546040516301cc16d360e71b81529294509092506001600160a01b0381169163e60b698091614a7e91889187918791600160b01b900460ff1690600401615d3b565b600060405180830381600087803b158015614a9857600080fd5b505af1158015614aac573d6000803e3d6000fd5b5050603a805460ff60a01b19169055505050505b6001600160a01b03851660009081526008602052604090205460019060ff1680614b0257506001600160a01b03851660009081526008602052604090205460ff165b15614b0f57506000614b46565b6038546001600160a01b038681169116148015614b335750603754610100900460ff165b15614b46576037805460ff191660011790555b614b5286868684615052565b50506037805460ff1916905550505050565b60008184841115614b885760405162461bcd60e51b81526004016115f69190615c7c565b506000614b958486615e08565b95945050505050565b6000806000614bab6152bb565b9092509050614bba8282614157565b9250505090565b600080614bce8385615db1565b905083811015611dd15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016115f6565b6000806000806000806000806000614c378a615475565b9250925092506000806000614c558d8686614c50614b9e565b6154b1565b919f909e50909c50959a5093985091965092945050505050565b6000611dd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614b64565b602354158015614cc15750602554155b8015614ccd5750602954155b8015614cd95750602754155b8015614ce55750602b54155b8015614cf15750602d54155b8015614cfd5750602f54155b8015614d095750603154155b8015614d155750603354155b8015614d215750603554155b15614d2857565b60238054602455602580546026556027805460285560298054602a55602b8054602c55602d8054602e55602f80546030556031805460325560338054603455603580546036556000998a90559789905595889055938790559186905585905584905583905582905555565b6001600160a01b0381166000908152600f60209081526040808320815160a0810183528154815260018201549381018490526002820154928101839052600382015460608201819052600490920154608082015293929091614df59190615e08565b614dff9190615dc9565b9050600082606001518360000151614e179190615dc9565b90508260400151421115614e45575050506001600160a01b03166000908152600f6020526040812060040155565b6000836020015142614e579190615e08565b905082811015614e68575050505050565b6000614e748483615dc9565b90506000614e828483615de9565b9050600086608001518760000151614e9a9190615e08565b905080821115614ece578651614eb1908390615e08565b6001600160a01b0389166000908152600f60205260409020600401555b5050505050505050565b6001600160a01b0381166000908152600f60209081526040808320815160a08101835281548152600182015493810193909352600281015491830191909152600381015460608301526004015460808201819052614f395750600092915050565b6000816060015182602001518360400151614f549190615e08565b614f5e9190615dc9565b9050600082606001518360000151614f769190615dc9565b90508260400151421115614f8f57506000949350505050565b6000836020015142614fa19190615e08565b905082811015614fb8575050506080015192915050565b6000614fc48483615dc9565b90506000614fd28483615de9565b9050600086608001518760000151614fea9190615e08565b905080821115615012578651600090615004908490615e08565b9a9950505050505050505050565b50505060809093015195945050505050565b600081836150455760405162461bcd60e51b81526004016115f69190615c7c565b506000614b958486615dc9565b8061505f5761505f614cb1565b6001600160a01b0384166000908152600c602052604090205460ff1680156150a057506001600160a01b0383166000908152600c602052604090205460ff16155b156150b5576150b0848484615501565b6151b3565b6001600160a01b0384166000908152600c602052604090205460ff161580156150f657506001600160a01b0383166000908152600c602052604090205460ff165b15615106576150b0848484615627565b6001600160a01b0384166000908152600c602052604090205460ff1615801561514857506001600160a01b0383166000908152600c602052604090205460ff16155b15615158576150b08484846156d0565b6001600160a01b0384166000908152600c602052604090205460ff16801561519857506001600160a01b0383166000908152600c602052604090205460ff165b156151a8576150b0848484615714565b6151b38484846156d0565b8061196057611960602454602355602654602555602854602755602a54602955602c54602b55602e54602d55603054602f55603254603155603454603355603654603555565b6152016158e5565b615209615904565b6029548252602754602080840191909152602b54604080850191909152602d54606080860191909152602f5460808087019190915260255460a08088019190915260315460c08089019190915260335460e08901526035546101008901526015546001600160a01b039081168852601454811696880196909652601954861694870194909452601654851692860192909252601754841690850152601a54831690840152601854909116908201529091565b601c54601b546000918291825b601354811015615445578260046000601384815481106152f857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180615371575081600560006013848154811061534a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561538757601c54601b54945094505050509091565b6153db60046000601384815481106153af57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490614c6f565b9250615431600560006013848154811061540557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390614c6f565b91508061543d81615e5a565b9150506152c8565b50601b54601c5461545591614157565b82101561546c57601c54601b549350935050509091565b90939092509050565b60008060008061548485615787565b90506000615491866157a4565b905060006154a3826148878986614c6f565b979296509094509092505050565b60008080806154c088866140d8565b905060006154ce88876140d8565b905060006154dc88886140d8565b905060006154ee826148878686614c6f565b939b939a50919850919650505050505050565b60008060008060008061551387614c20565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506155459088614c6f565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546155749087614c6f565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546155a39086614bc1565b6001600160a01b0389166000908152600460205260409020556155c581615839565b6155cf84836158c1565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161561491815260200190565b60405180910390a3505050505050505050565b60008060008060008061563987614c20565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061566b9087614c6f565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546156a19084614bc1565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546155a39086614bc1565b6000806000806000806156e287614c20565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506155749087614c6f565b60008060008060008061572687614c20565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506157589088614c6f565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461566b9087614c6f565b60006117136127106130ba602354856140d890919063ffffffff16565b603754600090819060ff166157ba5760006157be565b6035545b9050611dd16127106130ba83603354603154602f54602d54602b546029546027546025546157ec9190615db1565b6157f69190615db1565b6158009190615db1565b61580a9190615db1565b6158149190615db1565b61581e9190615db1565b6158289190615db1565b6158329190615db1565b86906140d8565b6000615843614b9e565b9050600061585183836140d8565b3060009081526004602052604090205490915061586e9082614bc1565b30600090815260046020908152604080832093909355600c9052205460ff161561325657306000908152600560205260409020546158ac9084614bc1565b30600090815260056020526040902055505050565b601c546158ce9083614c6f565b601c55601d546158de9082614bc1565b601d555050565b6040518061012001604052806009906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b60008083601f840112615933578182fd5b50813567ffffffffffffffff81111561594a578182fd5b6020830191508360208260051b850101111561596557600080fd5b9250929050565b60006020828403121561597d578081fd5b8135611dd181615e8b565b600060208284031215615999578081fd5b8151611dd181615e8b565b600080604083850312156159b6578081fd5b82356159c181615e8b565b915060208301356159d181615e8b565b809150509250929050565b6000806000606084860312156159f0578081fd5b83356159fb81615e8b565b92506020840135615a0b81615e8b565b929592945050506040919091013590565b60008060408385031215615a2e578182fd5b8235615a3981615e8b565b915060208301356159d181615ea0565b60008060408385031215615a5b578182fd5b8235615a6681615e8b565b946020939093013593505050565b600080600060608486031215615a88578283fd5b8335615a9381615e8b565b9250602084013591506040840135615aaa81615ea0565b809150509250925092565b60008060008060808587031215615aca578081fd5b8435615ad581615e8b565b966020860135965060408601359560600135945092505050565b60008060208385031215615b01578182fd5b823567ffffffffffffffff811115615b17578283fd5b615b2385828601615922565b90969095509350505050565b6000806000806000806000806080898b031215615b4a578384fd5b883567ffffffffffffffff80821115615b61578586fd5b615b6d8c838d01615922565b909a50985060208b0135915080821115615b85578586fd5b615b918c838d01615922565b909850965060408b0135915080821115615ba9578586fd5b615bb58c838d01615922565b909650945060608b0135915080821115615bcd578384fd5b50615bda8b828c01615922565b999c989b5096995094979396929594505050565b600060208284031215615bff578081fd5b8135611dd181615ea0565b600060208284031215615c1b578081fd5b8151611dd181615ea0565b600060208284031215615c37578081fd5b5035919050565b60008060408385031215615c50578182fd5b8235915060208301356159d181615ea0565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015615ca857858101830151858201604001528201615c8c565b81811115615cb95783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616c6c657220646f6573206e6f74206861766520706f776572000000000000604082015260600190565b848152610240810160208083018660005b6009811015615d6957815183529183019190830190600101615d4c565b50505061014083018560005b6007811015615d9b5781516001600160a01b031683529183019190830190600101615d75565b5050505082151561022083015295945050505050565b60008219821115615dc457615dc4615e75565b500190565b600082615de457634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615615e0357615e03615e75565b500290565b600082821015615e1a57615e1a615e75565b500390565b600181811c90821680615e3357607f821691505b60208210811415615e5457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615e6e57615e6e615e75565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612c1057600080fd5b8015158114612c1057600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203f93d98ee695fb7a2482cd7aa2b42a01728a1a20eb4cc06595cd54b3caaa40c764736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : stablecoin (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7


Deployed Bytecode Sourcemap

8066:35707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21173:122;;;;;;;;;;-1:-1:-1;21173:122:0;;;;;:::i;:::-;;:::i;:::-;;19708:153;;;;;;;;;;-1:-1:-1;19708:153:0;;;;;:::i;:::-;;:::i;13720:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14723:161;;;;;;;;;;-1:-1:-1;14723:161:0;;;;;:::i;:::-;;:::i;:::-;;;8942:14:1;;8935:22;8917:41;;8905:2;8890:18;14723:161:0;8872:92:1;9126:44:0;;;;;;;;;;-1:-1:-1;9126:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21008:25:1;;;20996:2;20981:18;9126:44:0;20963:76:1;22062:149:0;;;;;;;;;;-1:-1:-1;22062:149:0;;;;;:::i;:::-;;:::i;9672:55::-;;;;;;;;;;;;;;;;22223:140;;;;;;;;;;-1:-1:-1;22223:140:0;;;;;:::i;:::-;;:::i;10343:30::-;;;;;;;;;;;;;;;;15925:87;;;;;;;;;;-1:-1:-1;15994:10:0;;15925:87;;43656:114;;;;;;;;;;-1:-1:-1;43656:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;43744:18:0;43720:4;43744:18;;;:9;:18;;;;;;;;;43656:114;9443:28;;;;;;;;;;-1:-1:-1;9443:28:0;;;;-1:-1:-1;;;;;9443:28:0;;;;;;-1:-1:-1;;;;;7921:32:1;;;7903:51;;7891:2;7876:18;9443:28:0;7858:102:1;11080:41:0;;;;;;;;;;-1:-1:-1;11080:41:0;;;;;;;-1:-1:-1;;;;;11080:41:0;;;13997:95;;;;;;;;;;-1:-1:-1;14077:7:0;;13997:95;;20128:106;;;;;;;;;;-1:-1:-1;20128:106:0;;;;;:::i;:::-;;:::i;10240:34::-;;;;;;;;;;;;;;;;11697:32;;;;;;;;;;-1:-1:-1;11697:32:0;;;;;;;;;;;14892:394;;;;;;;;;;-1:-1:-1;14892:394:0;;;;;:::i;:::-;;:::i;19245:296::-;;;;;;;;;;-1:-1:-1;19245:296:0;;;;;:::i;:::-;;:::i;8692:56::-;;;;;;;;;;-1:-1:-1;8692:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25972:580;;;;;;;;;;-1:-1:-1;25972:580:0;;;;;:::i;:::-;;:::i;16975:253::-;;;;;;;;;;-1:-1:-1;16975:253:0;;;;;:::i;:::-;;:::i;13906:83::-;;;;;;;;;;-1:-1:-1;13972:9:0;;13906:83;;13972:9;;;;22230:36:1;;22218:2;22203:18;13906:83:0;22185:87:1;8755:57:0;;;;;;;;;;-1:-1:-1;8755:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17691:479;;;;;;;;;;-1:-1:-1;17691:479:0;;;;;:::i;:::-;;:::i;10941:42::-;;;;;;;;;;;;;;;;15294:218;;;;;;;;;;-1:-1:-1;15294:218:0;;;;;:::i;:::-;;:::i;19094:143::-;;;;;;;;;;-1:-1:-1;19094:143:0;;;;;:::i;:::-;;:::i;16146:377::-;;;;;;;;;;-1:-1:-1;16146:377:0;;;;;:::i;:::-;;:::i;11163:19::-;;;;;;;;;;-1:-1:-1;11163:19:0;;;;-1:-1:-1;;;;;11163:19:0;;;20634:96;;;;;;;;;;-1:-1:-1;20634:96:0;;;;;:::i;:::-;;:::i;18836:111::-;;;;;;;;;;-1:-1:-1;18836:111:0;;;;;:::i;:::-;;:::i;16531:436::-;;;;;;;;;;-1:-1:-1;16531:436:0;;;;;:::i;:::-;;:::i;25246:307::-;;;;;;;;;;-1:-1:-1;25246:307:0;;;;;:::i;:::-;;:::i;11128:28::-;;;;;;;;;;-1:-1:-1;11128:28:0;;;;-1:-1:-1;;;;;11128:28:0;;;11255:40;;;;;;;;;;-1:-1:-1;11255:40:0;;;;-1:-1:-1;;;11255:40:0;;;;;;24984:254;;;;;;;;;;-1:-1:-1;24984:254:0;;;;;:::i;:::-;;:::i;17236:447::-;;;;;;;;;;-1:-1:-1;17236:447:0;;;;;:::i;:::-;;:::i;32612:123::-;;;;;;;;;;-1:-1:-1;32612:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;32700:27:0;32676:4;32700:27;;;:18;:27;;;;;;;;;32612:123;11614:37;;;;;;;;;;-1:-1:-1;11614:37:0;;;;;;;;10905:29;;;;;;;;;;;;;;;;20001:89;;;;;;;;;;-1:-1:-1;20001:89:0;;;;;:::i;:::-;;:::i;20761:101::-;;;;;;;;;;-1:-1:-1;20761:101:0;;;;;:::i;:::-;;:::i;22553:1153::-;;;;;;;;;;-1:-1:-1;22553:1153:0;;;;;:::i;:::-;;:::i;18959:127::-;;;;;;;;;;-1:-1:-1;18959:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;19049:29:0;19025:4;19049:29;;;:20;:29;;;;;;;;;18959:127;19892:101;;;;;;;;;;-1:-1:-1;19892:101:0;;;;;:::i;:::-;;:::i;16024:108::-;;;;;;;;;;-1:-1:-1;16024:108:0;;;;;:::i;:::-;;:::i;6275:90::-;;;;;;;;;;-1:-1:-1;6346:11:0;;-1:-1:-1;;;;;6346:11:0;6275:90;;10044:34;;;;;;;;;;;;;;;;21652:117;;;;;;;;;;-1:-1:-1;21652:117:0;;;;;:::i;:::-;;:::i;14100:198::-;;;;;;;;;;-1:-1:-1;14100:198:0;;;;;:::i;:::-;;:::i;6500:148::-;;;;;;;;;;;;;:::i;24447:529::-;;;;;;;;;;-1:-1:-1;24447:529:0;;;;;:::i;:::-;;:::i;10992:36::-;;;;;;;;;;-1:-1:-1;10992:36:0;;;;;;;;43415:107;;;;;;;;;;-1:-1:-1;43415:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;43499:14:0;43472:7;43499:14;;;:6;:14;;;;;;;43415:107;20998:126;;;;;;;;;;-1:-1:-1;20998:126:0;;;;;:::i;:::-;;:::i;11353:47::-;;;;;;;;;;;;;;;;11574:33;;;;;;;;;;;;;;;;20242:116;;;;;;;;;;-1:-1:-1;20242:116:0;;;;;:::i;:::-;;:::i;11658:32::-;;;;;;;;;;-1:-1:-1;11658:32:0;;;;;;;;;;;27023:193;;;;;;;;;;;;;:::i;15797:120::-;;;;;;;;;;-1:-1:-1;15797:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;15889:20:0;15865:4;15889:20;;;:11;:20;;;;;;;;;15797:120;21777:113;;;;;;;;;;-1:-1:-1;21777:113:0;;;;;:::i;:::-;;:::i;9075:44::-;;;;;;;;;;-1:-1:-1;9075:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6184:79;;;;;;;;;;-1:-1:-1;6222:7:0;6249:6;-1:-1:-1;;;;;6249:6:0;6184:79;;10468:31;;;;;;;;;;;;;;;;21412:121;;;;;;;;;;-1:-1:-1;21412:121:0;;;;;:::i;:::-;;:::i;13811:87::-;;;;;;;;;;;;;:::i;43059:348::-;;;;;;;;;;-1:-1:-1;43059:348:0;;;;;:::i;:::-;;:::i;39438:518::-;;;;;;;;;;-1:-1:-1;39438:518:0;;;;;:::i;:::-;;:::i;27889:221::-;;;;;;;;;;-1:-1:-1;27889:221:0;;;;;:::i;:::-;;:::i;19549:151::-;;;;;;;;;;-1:-1:-1;19549:151:0;;;;;:::i;:::-;;:::i;21541:103::-;;;;;;;;;;-1:-1:-1;21541:103:0;;;;;:::i;:::-;;:::i;15520:269::-;;;;;;;;;;-1:-1:-1;15520:269:0;;;;;:::i;:::-;;:::i;10566:32::-;;;;;;;;;;;;;;;;7243:305;;;;;;;;;;;;;:::i;14310:254::-;;;;;;;;;;-1:-1:-1;14310:254:0;;;;;:::i;:::-;;:::i;20500:103::-;;;;;;;;;;-1:-1:-1;20500:103:0;;;;;:::i;:::-;;:::i;10151:28::-;;;;;;;;;;;;;;;;10663:30;;;;;;;;;;;;;;;;9406;;;;;;;;;;-1:-1:-1;9406:30:0;;;;-1:-1:-1;;;;;9406:30:0;;;6908:89;;;;;;;;;;-1:-1:-1;6980:9:0;;6908:89;;8870:46;;;;;;;;;;-1:-1:-1;8870:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23714:725;;;;;;;;;;-1:-1:-1;23714:725:0;;;;;:::i;:::-;;:::i;26564:103::-;;;;;;;;;;-1:-1:-1;26564:103:0;;;;;:::i;:::-;;:::i;11035:32::-;;;;;;;;;;-1:-1:-1;11035:32:0;;;;;;;;;;;39964:327;;;;;;;;;;-1:-1:-1;39964:327:0;;;;;:::i;:::-;;:::i;22371:174::-;;;;;;;;;;-1:-1:-1;22371:174:0;;;;;:::i;:::-;;:::i;11475:27::-;;;;;;;;;;;;;;;;26830:171;;;;;;;;;;-1:-1:-1;26830:171:0;;;;;:::i;:::-;;:::i;11302:38::-;;;;;;;;;;-1:-1:-1;11302:38:0;;;;-1:-1:-1;;;11302:38:0;;;;;;25561:100;;;;;;;;;;-1:-1:-1;25642:11:0;;-1:-1:-1;;;;;25642:11:0;25561:100;;9933:34;;;;;;;;;;;;;;;;11736:26;;;;;;;;;;-1:-1:-1;11736:26:0;;;;;;;;;;;40299:159;;;;;;;;;;-1:-1:-1;40299:159:0;;;;;:::i;:::-;;:::i;:::-;;;;;;20512:4:1;20554:3;20543:9;20539:19;20531:27;;20591:6;20585:13;20574:9;20567:32;20655:4;20647:6;20643:17;20637:24;20630:4;20619:9;20615:20;20608:54;20718:4;20710:6;20706:17;20700:24;20693:4;20682:9;20678:20;20671:54;20781:4;20773:6;20769:17;20763:24;20756:4;20745:9;20741:20;20734:54;20844:4;20836:6;20832:17;20826:24;20819:4;20808:9;20804:20;20797:54;20521:336;;;;;27578:264:0;;;;;;;;;;-1:-1:-1;27578:264:0;;;;;:::i;:::-;;:::i;11509:35::-;;;;;;;;;;;;;;;;9734:46;;;;;;;;;;;;;;;;10784:28;;;;;;;;;;;;;;;;21303:97;;;;;;;;;;-1:-1:-1;21303:97:0;;;;;:::i;:::-;;:::i;11189:25::-;;;;;;;;;;-1:-1:-1;11189:25:0;;;;-1:-1:-1;;;;;11189:25:0;;;11407:61;;;;;;;;;;;;;;;;39331:99;;;;;;;;;;-1:-1:-1;39331:99:0;;;;;:::i;:::-;;:::i;7005:226::-;;;;;;;;;;-1:-1:-1;7005:226:0;;;;;:::i;:::-;;:::i;14572:143::-;;;;;;;;;;-1:-1:-1;14572:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;14680:18:0;;;14653:7;14680:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14572:143;43530:118;;;;;;;;;;-1:-1:-1;43530:118:0;;;;;:::i;:::-;;:::i;20366:126::-;;;;;;;;;;-1:-1:-1;20366:126:0;;;;;:::i;:::-;;:::i;25797:110::-;;;;;;;;;;-1:-1:-1;25797:110:0;;;;;:::i;:::-;;:::i;27230:243::-;;;;;;;;;;-1:-1:-1;27230:243:0;;;;;:::i;:::-;;:::i;26715:107::-;;;;;;;;;;-1:-1:-1;26715:107:0;;;;;:::i;:::-;;:::i;6656:244::-;;;;;;;;;;-1:-1:-1;6656:244:0;;;;;:::i;:::-;;:::i;21898:156::-;;;;;;;;;;-1:-1:-1;21898:156:0;;;;;:::i;:::-;;:::i;13606:106::-;;;;;;;;;;-1:-1:-1;2610:10:0;13655:7;13682:22;;;:8;:22;;;;;;13606:106;;20870:120;;;;;;;;;;-1:-1:-1;20870:120:0;;;;;:::i;:::-;;:::i;25673:112::-;;;;;;;;;;-1:-1:-1;25760:17:0;;-1:-1:-1;;;;;25760:17:0;25673:112;;21173:122;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;21262:18:0;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:25;21173:122::o;19708:153::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19809:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;19809:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19708:153::o;13720:83::-;13757:13;13790:5;13783:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13720:83;:::o;14723:161::-;14798:4;14815:39;2610:10;14838:7;14847:6;14815:8;:39::i;:::-;-1:-1:-1;14872:4:0;14723:161;;;;;:::o;22062:149::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;22131:13:::1;:22:::0;;-1:-1:-1;;;;;22131:22:0;;::::1;-1:-1:-1::0;;;;;;22131:22:0;;::::1;::::0;::::1;::::0;;:13:::1;22164:32:::0;;;:24:::1;:32;::::0;;;;:39;;-1:-1:-1;;22164:39:0::1;22131:22:::0;22164:39:::1;::::0;;22062:149::o;22223:140::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;22335:20:::1;:10:::0;22348:7:::1;22335:20;:::i;:::-;22303:29;:52:::0;-1:-1:-1;22223:140:0:o;20128:106::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20200:17:::1;:26:::0;;-1:-1:-1;;20200:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20128:106::o;14892:394::-;-1:-1:-1;;;;;15033:16:0;;14990:4;15033:16;;;:8;:16;;;;;;15015:15;:34;15007:70;;;;-1:-1:-1;;;15007:70:0;;18641:2:1;15007:70:0;;;18623:21:1;18680:2;18660:18;;;18653:30;-1:-1:-1;;;18699:18:1;;;18692:52;18761:18;;15007:70:0;18613:172:1;15007:70:0;15088:36;15098:6;15106:9;15117:6;15088:9;:36::i;:::-;15135:121;15144:6;2610:10;15166:89;15204:6;15166:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15166:19:0;;;;;;:11;:19;;;;;;;;2610:10;15166:33;;;;;;;;;;:37;:89::i;:::-;15135:8;:121::i;:::-;-1:-1:-1;15274:4:0;14892:394;;;;;:::o;19245:296::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;19348:8;19334:11:::1;19376:158;19393:6;19389:1;:10;19376:158;;;19454:4;19418:20;:33;19439:8;;19448:1;19439:11;;;;;-1:-1:-1::0;;;19439:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19418:33:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19418:33:0;:40;;-1:-1:-1;;19418:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;19504:3:0::1;19376:158;;;;6483:1;19245:296:::0;;:::o;25972:580::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26044:14:::1;26151:4;;26156:1;26151:7;;;;;-1:-1:-1::0;;;26151:7:0::1;;;;;;;;;;;;;;;26141:4;;26146:1;26141:7;;;;;-1:-1:-1::0;;;26141:7:0::1;;;;;;;;;;;;;;;26131:4;;26136:1;26131:7;;;;;-1:-1:-1::0;;;26131:7:0::1;;;;;;;;;;;;;;;26121:4;;26126:1;26121:7;;;;;-1:-1:-1::0;;;26121:7:0::1;;;;;;;;;;;;;;;26111:4;;26116:1;26111:7;;;;;-1:-1:-1::0;;;26111:7:0::1;;;;;;;;;;;;;;;26101:4;;26106:1;26101:7;;;;;-1:-1:-1::0;;;26101:7:0::1;;;;;;;;;;;;;;;26091:4;;26096:1;26091:7;;;;;-1:-1:-1::0;;;26091:7:0::1;;;;;;;;;;;;;;;26081:4;;26086:1;26081:7;;;;;-1:-1:-1::0;;;26081:7:0::1;;;;;;;;;;;;;;;26071:4;;26076:1;26071:7;;;;;-1:-1:-1::0;;;26071:7:0::1;;;;;;;;;;;;;;;26061:4;;26066:1;26061:7;;;;;-1:-1:-1::0;;;26061:7:0::1;;;;;;;;;;;;;;;:17;;;;:::i;:::-;:27;;;;:::i;:::-;:37;;;;:::i;:::-;:47;;;;:::i;:::-;:57;;;;:::i;:::-;:67;;;;:::i;:::-;:77;;;;:::i;:::-;:87;;;;:::i;:::-;:97;;;;:::i;:::-;26044:114;;26182:4;26173:6;:13;26169:54;;;26203:8;::::0;::::1;26169:54;26253:4;;26258:1;26253:7;;;;;-1:-1:-1::0;;;26253:7:0::1;;;;;;;;;;;::::0;;;::::1;;26235:15;:25:::0;-1:-1:-1;26287:4:0;;26292:1:::1;26287:7:::0;;::::1;;;-1:-1:-1::0;;;26287:7:0::1;;;;;;;;;;;::::0;;;::::1;;26271:13;:23:::0;-1:-1:-1;26315:4:0;;26320:1:::1;26315:7:::0;;::::1;;;-1:-1:-1::0;;;26315:7:0::1;;;;;;;;;;;::::0;;;::::1;;26305;:17:::0;-1:-1:-1;26349:4:0;;26354:1:::1;26349:7:::0;;::::1;;;-1:-1:-1::0;;;26349:7:0::1;;;;;;;;;;;::::0;;;::::1;;26333:13;:23:::0;-1:-1:-1;26381:4:0;;26386:1:::1;26381:7:::0;;::::1;;;-1:-1:-1::0;;;26381:7:0::1;;;;;;;;;;;::::0;;;::::1;;26367:11;:21:::0;-1:-1:-1;26414:4:0;;26419:1:::1;26414:7:::0;;::::1;;;-1:-1:-1::0;;;26414:7:0::1;;;;;;;;;;;::::0;;;::::1;;26399:12;:22:::0;-1:-1:-1;26446:4:0;;26451:1:::1;26446:7:::0;;::::1;;;-1:-1:-1::0;;;26446:7:0::1;;;;;;;;;;;::::0;;;::::1;;26432:11;:21:::0;-1:-1:-1;26478:4:0;;26483:1:::1;26478:7:::0;;::::1;;;-1:-1:-1::0;;;26478:7:0::1;;;;;;;;;;;::::0;;;::::1;;26464:11;:21:::0;-1:-1:-1;26508:4:0;;26513:1:::1;26508:7:::0;;::::1;;;-1:-1:-1::0;;;26508:7:0::1;;;;;;;;;;;::::0;;;::::1;;26496:9;:19:::0;-1:-1:-1;26537:4:0;;26542:1:::1;26537:7:::0;;::::1;;;-1:-1:-1::0;;;26537:7:0::1;;;;;;;;;;;::::0;;;::::1;;26526:8;:18:::0;-1:-1:-1;;;;25972:580:0:o;16975:253::-;17041:7;17080;;17069;:18;;17061:73;;;;-1:-1:-1;;;17061:73:0;;10775:2:1;17061:73:0;;;10757:21:1;10814:2;10794:18;;;10787:30;10853:34;10833:18;;;10826:62;-1:-1:-1;;;10904:18:1;;;10897:40;10954:19;;17061:73:0;10747:232:1;17061:73:0;17145:19;17168:10;:8;:10::i;:::-;17145:33;-1:-1:-1;17196:24:0;:7;17145:33;17196:11;:24::i;:::-;17189:31;16975:253;-1:-1:-1;;;16975:253:0:o;17691:479::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17773:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17765:60;;;::::0;-1:-1:-1;;;17765:60:0;;12699:2:1;17765:60:0::1;::::0;::::1;12681:21:1::0;12738:2;12718:18;;;12711:30;12777:29;12757:18;;;12750:57;12824:18;;17765:60:0::1;12671:177:1::0;17765:60:0::1;17841:9;17836:327;17860:9;:16:::0;17856:20;::::1;17836:327;;;17918:7;-1:-1:-1::0;;;;;17902:23:0::1;:9;17912:1;17902:12;;;;;;-1:-1:-1::0;;;17902:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;17902:12:0::1;:23;17898:254;;;17961:9;17971:16:::0;;:20:::1;::::0;17990:1:::1;::::0;17971:20:::1;:::i;:::-;17961:31;;;;;;-1:-1:-1::0;;;17961:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;17946:9:::1;:12:::0;;-1:-1:-1;;;;;17961:31:0;;::::1;::::0;17956:1;;17946:12;::::1;;;-1:-1:-1::0;;;17946:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;17946:46:0::1;-1:-1:-1::0;;;;;17946:46:0;;::::1;;::::0;;18011:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;18050:11:::1;:20:::0;;;;:28;;-1:-1:-1;;18050:28:0::1;::::0;;18097:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;18097:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18097:15:0;;;;;-1:-1:-1;;;;;;18097:15:0::1;::::0;;;;;17836:327:::1;17691:479:::0;:::o;17898:254::-:1;17878:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17836:327;;;;17691:479:::0;:::o;15294:218::-;2610:10;15382:4;15431:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15431:34:0;;;;;;;;;;15382:4;;15399:83;;15422:7;;15431:50;;15470:10;15431:38;:50::i;19094:143::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19190:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:39;;-1:-1:-1;;19190:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19094:143::o;16146:377::-;2610:10;16198:14;16247:19;;;:11;:19;;;;;;;;16246:20;16238:77;;;;-1:-1:-1;;;16238:77:0;;19757:2:1;16238:77:0;;;19739:21:1;19796:2;19776:18;;;19769:30;19835:34;19815:18;;;19808:62;-1:-1:-1;;;19886:18:1;;;19879:42;19938:19;;16238:77:0;19729:234:1;16238:77:0;16327:15;16351:19;16362:7;16351:10;:19::i;:::-;-1:-1:-1;;;;;;;;;16399:15:0;;;;;;:7;:15;;;;;;16326:44;;-1:-1:-1;16399:28:0;;:15;-1:-1:-1;16326:44:0;16399:19;:28::i;:::-;-1:-1:-1;;;;;16381:15:0;;;;;;:7;:15;;;;;:46;16448:7;;:20;;16460:7;16448:11;:20::i;:::-;16438:7;:30;16492:10;;:23;;16507:7;16492:14;:23::i;:::-;16479:10;:36;-1:-1:-1;;;16146:377:0:o;20634:96::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20700:13:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20700:22:0;;::::1;::::0;;;::::1;::::0;;20634:96::o;18836:111::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18905:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;18905:34:0::1;18935:4;18905:34;::::0;;18836:111::o;16531:436::-;16621:7;16660;;16649;:18;;16641:62;;;;-1:-1:-1;;;16641:62:0;;13766:2:1;16641:62:0;;;13748:21:1;13805:2;13785:18;;;13778:30;13844:33;13824:18;;;13817:61;13895:18;;16641:62:0;13738:181:1;16641:62:0;16719:17;16714:246;;16754:15;16778:19;16789:7;16778:10;:19::i;:::-;-1:-1:-1;16753:44:0;;-1:-1:-1;16812:14:0;;-1:-1:-1;;;;;16812:14:0;16714:246;16861:23;16892:19;16903:7;16892:10;:19::i;:::-;-1:-1:-1;16859:52:0;;-1:-1:-1;16926:22:0;;-1:-1:-1;;;;;16926:22:0;25246:307;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;25312:28;25304:67;;;;-1:-1:-1;;;25304:67:0;;;;;;;:::i;:::-;25382:10;:20;;-1:-1:-1;;;;;25382:20:0;;;-1:-1:-1;;;;;;25382:20:0;;;;;;;:10;25413:27;;;:18;:27;;;;;;;;:34;;-1:-1:-1;;25413:34:0;;;25382:20;25413:34;;;;;;25458:20;:29;;;;;:36;;;;;;;;25505:24;:33;;;;;:40;;;;;;;;;;25246:307::o;24984:254::-;25052:4;25069:19;25109:15;;;;;;;;;-1:-1:-1;;;;;25109:15:0;-1:-1:-1;;;;;25109:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25091:66:0;;25166:4;25173:11;25091:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25203:27:0;;;;;:14;:27;;;;;;;;;24984:254;-1:-1:-1;;;24984:254:0:o;17236:447::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17433:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17432:21;17424:61;;;::::0;-1:-1:-1;;;17424:61:0;;12699:2:1;17424:61:0::1;::::0;::::1;12681:21:1::0;12738:2;12718:18;;;12711:30;12777:29;12757:18;;;12750:57;12824:18;;17424:61:0::1;12671:177:1::0;17424:61:0::1;-1:-1:-1::0;;;;;17499:16:0;::::1;17518:1;17499:16:::0;;;:7:::1;:16;::::0;;;;;:20;17496:108:::1;;-1:-1:-1::0;;;;;17575:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17555:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17536:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17496:108:::1;-1:-1:-1::0;;;;;17614:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;17614:27:0::1;17637:4;17614:27:::0;;::::1;::::0;;;17652:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;17652:23:0::1;::::0;;::::1;::::0;;17236:447::o;20001:89::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20066:7:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20066:16:0;;::::1;::::0;;;::::1;::::0;;20001:89::o;20761:101::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20832:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;20832:22:0;;::::1;::::0;;;::::1;::::0;;20761:101::o;22553:1153::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;22621:28;22613:67;;;;-1:-1:-1;;;22613:67:0;;;;;;;:::i;:::-;22695:6;22691:1008;;;22718:19;22758:15;;;;;;;;;-1:-1:-1;;;;;22758:15:0;-1:-1:-1;;;;;22758:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22740:70:0;;22819:4;22826:15;;;;;;;;;-1:-1:-1;;;;;22826:15:0;-1:-1:-1;;;;;22826:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22740:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22718:131;-1:-1:-1;;;;;;22870:25:0;;22866:196;;22948:15;;;;;;;;;-1:-1:-1;;;;;22948:15:0;-1:-1:-1;;;;;22948:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22930:77:0;;23016:4;23023:15;;;;;;;;;-1:-1:-1;;;;;23023:15:0;-1:-1:-1;;;;;23023:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22930:116;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22916:130;;22866:196;23078:13;:27;;-1:-1:-1;;;;;23078:27:0;;;-1:-1:-1;;;;;;23078:27:0;;;;;;;:13;23120:27;;;:14;:27;;;;;;;;:35;;-1:-1:-1;;23120:35:0;;;;;;23170:19;:28;;;;;-1:-1:-1;;;23170:28:0;-1:-1:-1;;;;23170:28:0;;;;;;23238:13;;;;;23213:39;;:24;:39;;;;;;:46;;;;;23078:27;23213:46;;;22553:1153;:::o;22691:1008::-;23294:19;23334:15;;;;;;;;;-1:-1:-1;;;;;23334:15:0;-1:-1:-1;;;;;23334:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23402:4;;23316:91;;-1:-1:-1;;;23316:91:0;;-1:-1:-1;;;;;23316:70:0;;;;;;:91;;23395:4;;23402;;;;23316:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23294:113;-1:-1:-1;;;;;;23428:25:0;;23424:178;;23506:15;;;;;;;;;-1:-1:-1;;;;;23506:15:0;-1:-1:-1;;;;;23506:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23581:4;;23488:98;;-1:-1:-1;;;23488:98:0;;-1:-1:-1;;;;;23488:77:0;;;;;;:98;;23574:4;;23581;;;;23488:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23474:112;;23424:178;23618:13;:27;;-1:-1:-1;;;;;;23618:27:0;-1:-1:-1;;;;;23618:27:0;;;;;;;;;;23660:19;:27;;-1:-1:-1;;;;23660:27:0;;;22691:1008;22553:1153;:::o;19892:101::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;19963:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;19963:22:0;;::::1;::::0;;;::::1;::::0;;19892:101::o;16024:108::-;16102:22;16120:4;16102:15;:22;:::i;:::-;2610:10;16077:22;;;;:8;:22;;;;;:47;-1:-1:-1;16024:108:0:o;21652:117::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21734:16:::1;:27:::0;;-1:-1:-1;;;;;;21734:27:0::1;-1:-1:-1::0;;;;;21734:27:0;;;::::1;::::0;;;::::1;::::0;;21652:117::o;14100:198::-;-1:-1:-1;;;;;14190:20:0;;14166:7;14190:20;;;:11;:20;;;;;;;;14186:49;;;-1:-1:-1;;;;;;14219:16:0;;;;;:7;:16;;;;;;;14100:198::o;14186:49::-;-1:-1:-1;;;;;14273:16:0;;;;;;:7;:16;;;;;;14253:37;;:19;:37::i;6500:148::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;6607:1:::1;6591:6:::0;;6570:40:::1;::::0;-1:-1:-1;;;;;6591:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6570:40:0;6607:1;;6570:40:::1;6638:1;6621:19:::0;;-1:-1:-1;;;;;;6621:19:0::1;::::0;;6500:148::o;24447:529::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;24537:28;24529:67;;;;-1:-1:-1;;;24529:67:0;;;;;;;:::i;:::-;24607:19;24647:15;;;;;;;;;-1:-1:-1;;;;;24647:15:0;-1:-1:-1;;;;;24647:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24629:66:0;;24704:4;24711:11;24629:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24607:116;-1:-1:-1;;;;;;24744:25:0;;24740:181;;24822:15;;;;;;;;;-1:-1:-1;;;;;24822:15:0;-1:-1:-1;;;;;24822:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24804:73:0;;24886:4;24893:11;24804:101;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24790:115;;24740:181;-1:-1:-1;;;;;24931:27:0;;;;;:14;:27;;;;;:37;;-1:-1:-1;;24931:37:0;;;;;;;;;;-1:-1:-1;24447:529:0:o;20998:126::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21086:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:30;;-1:-1:-1;;21086:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20998:126::o;20242:116::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20321:14:::1;:29:::0;20242:116::o;27023:193::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;27094:49:::1;27127:5;27094:14;27106:1;27094:7;;:11;;:14;;;;:::i;:::-;:18:::0;::::1;:49::i;:::-;27079:12;:64:::0;27154:14:::1;:12;:14::i;:::-;27179:21;:29:::0;;-1:-1:-1;;;;27179:29:0::1;::::0;;27023:193::o;21777:113::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21857:15:::1;:25:::0;;-1:-1:-1;;;;;;21857:25:0::1;-1:-1:-1::0;;;;;21857:25:0;;;::::1;::::0;;;::::1;::::0;;21777:113::o;21412:121::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21496:17:::1;:29:::0;;-1:-1:-1;;;;;;21496:29:0::1;-1:-1:-1::0;;;;;21496:29:0;;;::::1;::::0;;;::::1;::::0;;21412:121::o;13811:87::-;13850:13;13883:7;13876:14;;;;;:::i;43059:348::-;43163:15;;-1:-1:-1;;;;;43163:15:0;2610:10;-1:-1:-1;;;;;43147:31:0;;:63;;;-1:-1:-1;6346:11:0;;-1:-1:-1;;;;;6346:11:0;2610:10;43182:28;43147:63;43139:92;;;;-1:-1:-1;;;43139:92:0;;15708:2:1;43139:92:0;;;15690:21:1;15747:2;15727:18;;;15720:30;-1:-1:-1;;;15766:18:1;;;15759:46;15822:18;;43139:92:0;15680:166:1;43139:92:0;43246:6;43242:158;;;-1:-1:-1;;;;;43286:14:0;;;;;;:6;:14;;;;;;:26;;43305:6;43286:18;:26::i;:::-;-1:-1:-1;;;;;43269:14:0;;;;;;:6;:14;;;;;:43;43059:348;;;:::o;43242:158::-;-1:-1:-1;;;;;43362:14:0;;;;;;:6;:14;;;;;;:26;;43381:6;43362:18;:26::i;43242:158::-;43059:348;;;:::o;39438:518::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;39630:7;39677:15:::1;39609:18;::::0;39729:220:::1;39752:10;39748:1;:14;39729:220;;;39820:11;39794;;39806:1;39794:14;;;;;-1:-1:-1::0;;;39794:14:0::1;;;;;;;;;;;;;;;39811:6;39794:23;;;;:::i;:::-;:37;;;;:::i;:::-;39784:47;;39872:65;;;;;;;;39880:7;;39888:1;39880:10;;;;;-1:-1:-1::0;;;39880:10:0::1;;;;;;;;;;;;;;;39872:65;;;;39892:11;39872:65;;;;39905:7;39872:65;;;;39914:7;;39922:1;39914:10;;;;;-1:-1:-1::0;;;39914:10:0::1;;;;;;;;;;;;;;;39872:65;;;;39926:7;;39934:1;39926:10;;;;;-1:-1:-1::0;;;39926:10:0::1;;;;;;;;;;;;;;;39872:65;;::::0;39846:11:::1;:23;39858:7;;39866:1;39858:10;;;;;-1:-1:-1::0;;;39858:10:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39846:23:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;39846:23:0;:91;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;39764:3;::::1;::::0;::::1;:::i;:::-;;;;39729:220;;;;6483:1;;;39438:518:::0;;;;;;;;:::o;27889:221::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;27981:28;27973:67;;;;-1:-1:-1;;;27973:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28051:29:0;;;2610:10;28051:51;;-1:-1:-1;;;;;;28051:51:0;;;;;;;-1:-1:-1;;;;;8690:32:1;;;28051:51:0;;;8672::1;8739:18;;;8732:34;;;8645:18;;28051:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19549:151::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19649:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:43;;-1:-1:-1;;19649:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19549:151::o;21541:103::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21617:12:::1;:19:::0;;-1:-1:-1;;;;;;21617:19:0::1;-1:-1:-1::0;;;;;21617:19:0;;;::::1;::::0;;;::::1;::::0;;21541:103::o;15520:269::-;15613:4;15630:129;2610:10;15653:7;15662:96;15701:15;15662:96;;;;;;;;;;;;;;;;;2610:10;15662:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15662:34:0;;;;;;;;;;;;:38;:96::i;7243:305::-;7295:14;;-1:-1:-1;;;;;7295:14:0;7313:10;7295:28;7287:76;;;;-1:-1:-1;;;7287:76:0;;20170:2:1;7287:76:0;;;20152:21:1;20209:2;20189:18;;;20182:30;20248:34;20228:18;;;20221:62;-1:-1:-1;;;20299:18:1;;;20292:33;20342:19;;7287:76:0;20142:225:1;7287:76:0;7400:9;;7382:15;:27;7374:72;;;;-1:-1:-1;;;7374:72:0;;18281:2:1;7374:72:0;;;18263:21:1;18320:2;18300:18;;;18293:30;18359:33;18339:18;;;18332:61;18410:18;;7374:72:0;18253:181:1;7374:72:0;7491:14;;;7483:6;;7462:44;;-1:-1:-1;;;;;7491:14:0;;;;7483:6;;;;-1:-1:-1;;;;;;;;;;;7462:44:0;;7526:14;;;7517:23;;-1:-1:-1;;;;;;7517:23:0;-1:-1:-1;;;;;7526:14:0;;;7517:23;;;;;;7243:305::o;14310:254::-;2610:10;14388:4;14431:22;;;:8;:22;;;;;;14413:15;:40;14405:76;;;;-1:-1:-1;;;14405:76:0;;18641:2:1;14405:76:0;;;18623:21:1;18680:2;18660:18;;;18653:30;-1:-1:-1;;;18699:18:1;;;18692:52;18761:18;;14405:76:0;18613:172:1;14405:76:0;14492:42;2610:10;14516:9;14527:6;14492:9;:42::i;20500:103::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20573:10:::1;:22:::0;20500:103::o;23714:725::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;23785:28;23777:67;;;;-1:-1:-1;;;23777:67:0;;;;;;;:::i;:::-;23961:19;24001:15;;;;;;;;;-1:-1:-1;;;;;24001:15:0;-1:-1:-1;;;;;24001:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23983:66:0;;24058:4;24065:7;23983:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23961:112;-1:-1:-1;;;;;;24092:25:0;;24088:191;;24170:15;;;;;;;;;-1:-1:-1;;;;;24170:15:0;-1:-1:-1;;;;;24170:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24152:73:0;;24234:4;24241:7;24152:97;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24138:111;;24088:191;-1:-1:-1;;;;;24293:27:0;24323:5;24293:27;;;:14;:27;;;;;;;;:35;;-1:-1:-1;;24293:35:0;;;;;;24343:13;:27;;-1:-1:-1;;;;;;24343:27:0;;;;;;;24385:24;:39;;;;;:46;;;;;24293:35;24385:46;;;-1:-1:-1;23714:725:0:o;26564:103::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26644:15:::1;:5:::0;26652:7:::1;26644:15;:::i;:::-;26629:12;:30:::0;-1:-1:-1;26564:103:0:o;39964:327::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;40110:15:::1;40088:19;40110:15:::0;40158:20:::1;:11:::0;40172:6:::1;40158:20;:::i;:::-;:34;;;;:::i;:::-;40229:54;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40207:19:0;;::::1;-1:-1:-1::0;40207:19:0;;;:11:::1;:19:::0;;;;;:76;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;40207:76:0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;-1:-1:-1;40207:76:0;::::1;::::0;;::::1;::::0;39964:327::o;22371:174::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;22443:28;22435:67;;;;-1:-1:-1;;;22435:67:0;;;;;;;:::i;:::-;22513:15;:24;;-1:-1:-1;;;;;22513:24:0;;;;;-1:-1:-1;;;;;;22513:24:0;;;;;;;;;22371:174::o;26830:171::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26907:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;26907:32:0::1;-1:-1:-1::0;;;;26907:32:0;;::::1;;::::0;;26955:38:::1;::::0;::::1;::::0;::::1;::::0;26931:8;8942:14:1;8935:22;8917:41;;8905:2;8890:18;;8872:92;26955:38:0::1;;;;;;;;26830:171:::0;:::o;40299:159::-;40359:14;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40359:14:0;-1:-1:-1;;;;;;40408:20:0;40386:19;40408:20;;;:11;:20;;;;;;;;;40386:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40299:159::o;27578:264::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;27656:28;27648:67;;;;-1:-1:-1;;;27648:67:0;;;;;;;:::i;:::-;27742:48;;27727:9;;2610:10;;27776:9;;27727;27742:48;27727:9;27742:48;27776:9;2610:10;27742:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27726:64;;;27809:4;27801:33;;;;-1:-1:-1;;;27801:33:0;;17578:2:1;27801:33:0;;;17560:21:1;17617:2;17597:18;;;17590:30;-1:-1:-1;;;17636:18:1;;;17629:46;17692:18;;27801:33:0;17550:166:1;21303:97:0;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21375:11:::1;:17:::0;;-1:-1:-1;;;;;;21375:17:0::1;-1:-1:-1::0;;;;;21375:17:0;;;::::1;::::0;;;::::1;::::0;;21303:97::o;39331:99::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;39400:22:::1;39414:7;39400:13;:22::i;7005:226::-:0;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;7086:6:::1;::::0;;;7069:23;;-1:-1:-1;;;;;;7069:23:0;;::::1;-1:-1:-1::0;;;;;7086:6:0;::::1;7069:23;::::0;;;7103:19:::1;::::0;;7145:22:::1;7163:4:::0;7145:15:::1;:22;:::i;:::-;7133:9;:34:::0;7220:1:::1;7204:6:::0;;7183:40:::1;::::0;-1:-1:-1;;;;;7204:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7183:40:0;7220:1;;7183:40:::1;7005:226:::0;:::o;43530:118::-;43591:7;43618:21;43631:7;43618:12;:21::i;20366:126::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20462:22:::1;:12:::0;20477:7:::1;20462:22;:::i;:::-;20445:14;:39:::0;-1:-1:-1;20366:126:0:o;25797:110::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25864:27:0::1;25894:5;25864:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25864:35:0::1;::::0;;25797:110::o;27230:243::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;27312:15:::1;:5:::0;27320:7:::1;27312:15;:::i;:::-;27297:12;:30:::0;27338:15:::1;32181:23:::0;;32163:15;:41;32231:21;;32215:13;:37;32273:15;;32263:7;:25;32315:21;;32299:13;:37;32361:19;;32347:11;:33;32406:20;;32391:12;:35;32451:19;;32437:11;:33;32495:19;;32481:11;:33;32537:17;;32525:9;:29;32576:16;;32565:8;:27;32119:481;27338:15:::1;-1:-1:-1::0;27364:21:0::1;:28:::0;;-1:-1:-1;;;;27364:28:0::1;-1:-1:-1::0;;;27364:28:0::1;::::0;;27403:17:::1;:24:::0;;-1:-1:-1;;27403:24:0::1;27388:4;27403:24;::::0;;27453:12:::1;27438;:27:::0;27230:243::o;26715:107::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26790:11:::1;:24:::0;26715:107::o;6656:244::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6745:22:0;::::1;6737:73;;;::::0;-1:-1:-1;;;6737:73:0;;11186:2:1;6737:73:0::1;::::0;::::1;11168:21:1::0;11225:2;11205:18;;;11198:30;11264:34;11244:18;;;11237:62;-1:-1:-1;;;11315:18:1;;;11308:36;11361:19;;6737:73:0::1;11158:228:1::0;6737:73:0::1;6847:6;::::0;;6826:38:::1;::::0;-1:-1:-1;;;;;6826:38:0;;::::1;::::0;6847:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6826:38:0;::::1;6875:6;:17:::0;;-1:-1:-1;;;;;;6875:17:0::1;-1:-1:-1::0;;;;;6875:17:0;;;::::1;::::0;;;::::1;::::0;;6656:244::o;21898:156::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21970:15:::1;:25:::0;;-1:-1:-1;;;;;21970:25:0;;::::1;-1:-1:-1::0;;;;;;21970:25:0;;::::1;::::0;::::1;::::0;;:15:::1;22006:33:::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;22006:40:0::1;21970:25:::0;22006:40:::1;::::0;;21898:156::o;20870:120::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20955:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:27;;-1:-1:-1;;20955:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20870:120::o;1502:250::-;1560:7;1584:6;1580:47;;-1:-1:-1;1614:1:0;1607:8;;1580:47;1639:9;1651:5;1655:1;1651;:5;:::i;:::-;1639:17;-1:-1:-1;1684:1:0;1675:5;1679:1;1639:17;1675:5;:::i;:::-;:10;1667:56;;;;-1:-1:-1;;;1667:56:0;;14535:2:1;1667:56:0;;;14517:21:1;14574:2;14554:18;;;14547:30;14613:34;14593:18;;;14586:62;-1:-1:-1;;;14664:18:1;;;14657:31;14705:19;;1667:56:0;14507:223:1;1760:132:0;1818:7;1845:39;1849:1;1852;1845:39;;;;;;;;;;;;;;;;;:3;:39::i;32743:337::-;-1:-1:-1;;;;;32836:19:0;;32828:68;;;;-1:-1:-1;;;32828:68:0;;17173:2:1;32828:68:0;;;17155:21:1;17212:2;17192:18;;;17185:30;17251:34;17231:18;;;17224:62;-1:-1:-1;;;17302:18:1;;;17295:34;17346:19;;32828:68:0;17145:226:1;32828:68:0;-1:-1:-1;;;;;32915:21:0;;32907:68;;;;-1:-1:-1;;;32907:68:0;;11593:2:1;32907:68:0;;;11575:21:1;11632:2;11612:18;;;11605:30;11671:34;11651:18;;;11644:62;-1:-1:-1;;;11722:18:1;;;11715:32;11764:19;;32907:68:0;11565:224:1;32907:68:0;-1:-1:-1;;;;;32988:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33040:32;;21008:25:1;;;33040:32:0;;20981:18:1;33040:32:0;;;;;;;32743:337;;;:::o;33088:3790::-;-1:-1:-1;;;;;33212:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;33231:13:0;;;;;;:9;:13;;;;;;;;33212:32;33210:35;33202:84;;;;-1:-1:-1;;;33202:84:0;;18992:2:1;33202:84:0;;;18974:21:1;19031:2;19011:18;;;19004:30;19070:34;19050:18;;;19043:62;-1:-1:-1;;;19121:18:1;;;19114:34;19165:19;;33202:84:0;18964:226:1;33202:84:0;33301:13;;;;;;;:34;;;;-1:-1:-1;33318:17:0;;;;33301:34;33297:463;;;33352:15;33402:12;33385:14;;33370:12;;:29;;;;:::i;:::-;:44;33352:62;;33433:10;33429:112;;;-1:-1:-1;;;;;33473:18:0;;;;;;:12;:18;;;;;;;;33472:19;33464:61;;;;-1:-1:-1;;;33464:61:0;;10417:2:1;33464:61:0;;;10399:21:1;10456:2;10436:18;;;10429:30;10495:31;10475:18;;;10468:59;10544:18;;33464:61:0;10389:179:1;33464:61:0;33569:13;;-1:-1:-1;;;;;33561:21:0;;;33569:13;;33561:21;:35;;;;;33586:10;33561:35;33557:192;;;-1:-1:-1;;;;;33617:16:0;;;;;;:12;:16;;;;;;;:23;;-1:-1:-1;;33617:23:0;33636:4;33617:23;;;33662:7;;;;33617:23;33662:7;33659:75;;;-1:-1:-1;;;;;33694:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;33694:20:0;33710:4;33694:20;;;33659:75;33297:463;;-1:-1:-1;;;;;33778:18:0;;33770:68;;;;-1:-1:-1;;;33770:68:0;;16053:2:1;33770:68:0;;;16035:21:1;16092:2;16072:18;;;16065:30;16131:34;16111:18;;;16104:62;-1:-1:-1;;;16182:18:1;;;16175:35;16227:19;;33770:68:0;16025:227:1;33770:68:0;-1:-1:-1;;;;;33857:16:0;;33849:64;;;;-1:-1:-1;;;33849:64:0;;10013:2:1;33849:64:0;;;9995:21:1;10052:2;10032:18;;;10025:30;10091:34;10071:18;;;10064:62;-1:-1:-1;;;10142:18:1;;;10135:33;10185:19;;33849:64:0;9985:225:1;33849:64:0;-1:-1:-1;;;;;33932:18:0;;;;;;:14;:18;;;;;;;;:27;33924:63;;;;-1:-1:-1;;;33924:63:0;;13055:2:1;33924:63:0;;;13037:21:1;13094:2;13074:18;;;13067:30;13133:25;13113:18;;;13106:53;13176:18;;33924:63:0;13027:173:1;33924:63:0;34015:1;34006:6;:10;33998:64;;;;-1:-1:-1;;;33998:64:0;;15298:2:1;33998:64:0;;;15280:21:1;15337:2;15317:18;;;15310:30;15376:34;15356:18;;;15349:62;-1:-1:-1;;;15427:18:1;;;15420:39;15476:19;;33998:64:0;15270:231:1;33998:64:0;-1:-1:-1;;;;;34077:28:0;;;;;;:24;:28;;;;;;;;34073:148;;34159:14;;34130:25;34148:6;34130:13;34140:2;34130:9;:13::i;:::-;:17;;:25::i;:::-;:43;;34122:87;;;;-1:-1:-1;;;34122:87:0;;19397:2:1;34122:87:0;;;19379:21:1;19436:2;19416:18;;;19409:30;19475:33;19455:18;;;19448:61;19526:18;;34122:87:0;19369:181:1;34122:87:0;-1:-1:-1;;;;;34235:26:0;;;;;;:20;:26;;;;;;;;:35;;;:72;;-1:-1:-1;;;;;;34274:24:0;;;;;;:20;:24;;;;;;;;:33;34235:72;34231:180;;;34342:12;;34332:6;:22;;34324:75;;;;-1:-1:-1;;;34324:75:0;;14126:2:1;34324:75:0;;;14108:21:1;14165:2;14145:18;;;14138:30;14204:34;14184:18;;;14177:62;-1:-1:-1;;;14255:18:1;;;14248:38;14303:19;;34324:75:0;14098:230:1;34324:75:0;-1:-1:-1;;;;;34428:31:0;;;;;;:25;:31;;;;;;;;34427:32;:56;;;;-1:-1:-1;34470:13:0;;-1:-1:-1;;;;;34464:19:0;;;34470:13;;34464:19;34427:56;34423:293;;;34518:10;;34508:6;:20;;34500:51;;;;-1:-1:-1;;;34500:51:0;;12352:2:1;34500:51:0;;;12334:21:1;12391:2;12371:18;;;12364:30;-1:-1:-1;;;12410:18:1;;;12403:48;12468:18;;34500:51:0;12324:168:1;34500:51:0;-1:-1:-1;;;;;34607:15:0;;;;;;:9;:15;;;;;;34589:33;;:15;:33;:::i;:::-;34574:11;;:48;;34566:90;;;;-1:-1:-1;;;34566:90:0;;17923:2:1;34566:90:0;;;17905:21:1;17962:2;17942:18;;;17935:30;18001:31;17981:18;;;17974:59;18050:18;;34566:90:0;17895:179:1;34566:90:0;-1:-1:-1;;;;;34671:15:0;;;;;;:9;:15;;;;;34689;34671:33;;34423:293;-1:-1:-1;;;;;34776:12:0;;34791:1;34776:12;;;:6;:12;;;;;;:16;34772:135;;-1:-1:-1;;;;;34847:12:0;;;;;;:6;:12;;;;;;34827:33;;:15;34854:4;34827:9;:15::i;:::-;:19;;:33::i;:::-;34817:6;:43;;34809:86;;;;-1:-1:-1;;;34809:86:0;;13407:2:1;34809:86:0;;;13389:21:1;13446:2;13426:18;;;13419:30;13485:32;13465:18;;;13458:60;13535:18;;34809:86:0;13379:180:1;34809:86:0;34968:13;;;;;;;:45;;;;-1:-1:-1;;;;;;34985:17:0;;35012:1;34985:17;;;:11;:17;;;;;:24;;;:28;;34968:45;34964:228;;;35030:19;35044:4;35030:13;:19::i;:::-;-1:-1:-1;;;;;35120:17:0;;;;;;:11;:17;;;;;;;;:24;;;35102:6;:12;;;;;;;35082:63;;35120:24;35082:33;;;35132:4;35082:9;:15::i;:63::-;35072:6;:73;;35064:116;;;;-1:-1:-1;;;35064:116:0;;16459:2:1;35064:116:0;;;16441:21:1;16498:2;16478:18;;;16471:30;16537:32;16517:18;;;16510:60;16587:18;;35064:116:0;16431:180:1;35064:116:0;35488:28;35519:24;35537:4;35519:9;:24::i;:::-;35615:29;;35488:55;;-1:-1:-1;35591:53:0;;;;;;;35673;;-1:-1:-1;35710:16:0;;-1:-1:-1;;;35710:16:0;;;;35709:17;35673:53;:91;;;;-1:-1:-1;35751:13:0;;-1:-1:-1;;;;;35743:21:0;;;35751:13;;35743:21;;35673:91;:129;;;;-1:-1:-1;35781:21:0;;-1:-1:-1;;;35781:21:0;;;;35673:129;35655:623;;;35829:16;:23;;-1:-1:-1;;;;35829:23:0;;-1:-1:-1;;;35829:23:0;;;;35958:70;;35981:4;;-1:-1:-1;;;;;35988:10:0;36000:20;35829:23;35958:14;:70::i;:::-;36044:22;36069:31;36104:13;:11;:13::i;:::-;36136:10;;36132:95;;-1:-1:-1;;;36132:95:0;;36043:74;;-1:-1:-1;36043:74:0;;-1:-1:-1;;;;;;36136:10:0;;;36132:31;;:95;;36164:20;;36043:74;;;;-1:-1:-1;;;36207:19:0;;;;;36132:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36242:16:0;:24;;-1:-1:-1;;;;36242:24:0;;;-1:-1:-1;;;;35655:623:0;-1:-1:-1;;;;;36486:24:0;;36359:12;36486:24;;;:18;:24;;;;;;36374:4;;36486:24;;;:50;;-1:-1:-1;;;;;;36514:22:0;;;;;;:18;:22;;;;;;;;36486:50;36483:228;;;-1:-1:-1;36562:5:0;36483:228;;;36610:13;;-1:-1:-1;;;;;36604:19:0;;;36610:13;;36604:19;:36;;;;-1:-1:-1;36627:13:0;;;;;;;36604:36;36600:100;;;36661:16;:23;;-1:-1:-1;;36661:23:0;36680:4;36661:23;;;36600:100;36797:38;36812:4;36817:2;36820:6;36827:7;36797:14;:38::i;:::-;-1:-1:-1;;36846:16:0;:24;;-1:-1:-1;;36846:24:0;;;-1:-1:-1;;;;33088:3790:0:o;1302:192::-;1388:7;1424:12;1416:6;;;;1408:29;;;;-1:-1:-1;;;1408:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1448:9:0;1460:5;1464:1;1460;:5;:::i;:::-;1448:17;1302:192;-1:-1:-1;;;;;1302:192:0:o;29492:163::-;29533:7;29554:15;29571;29590:19;:17;:19::i;:::-;29553:56;;-1:-1:-1;29553:56:0;-1:-1:-1;29627:20:0;29553:56;;29627:11;:20::i;:::-;29620:27;;;;29492:163;:::o;969:181::-;1027:7;;1059:5;1063:1;1059;:5;:::i;:::-;1047:17;;1088:1;1083;:6;;1075:46;;;;-1:-1:-1;;;1075:46:0;;11996:2:1;1075:46:0;;;11978:21:1;12035:2;12015:18;;;12008:30;12074:29;12054:18;;;12047:57;12121:18;;1075:46:0;11968:177:1;28277:419:0;28336:7;28345;28354;28363;28372;28381;28402:23;28427:12;28441:18;28463:20;28475:7;28463:11;:20::i;:::-;28401:82;;;;;;28495:15;28512:23;28537:12;28553:50;28565:7;28574:4;28580:10;28592;:8;:10::i;:::-;28553:11;:50::i;:::-;28494:109;;;;-1:-1:-1;28494:109:0;;-1:-1:-1;28654:15:0;;-1:-1:-1;28671:4:0;;-1:-1:-1;28677:10:0;;-1:-1:-1;28277:419:0;;-1:-1:-1;;;;;28277:419:0:o;1158:136::-;1216:7;1243:43;1247:1;1250;1243:43;;;;;;;;;;;;;;;;;:3;:43::i;31129:978::-;31175:15;;:20;:42;;;;-1:-1:-1;31199:13:0;;:18;31175:42;:64;;;;-1:-1:-1;31221:13:0;;:18;31175:64;:80;;;;-1:-1:-1;31243:7:0;;:12;31175:80;:100;;;;-1:-1:-1;31259:11:0;;:16;31175:100;:121;;;;-1:-1:-1;31279:12:0;;:17;31175:121;:141;;;;-1:-1:-1;31300:11:0;;:16;31175:141;:161;;;;-1:-1:-1;31320:11:0;;:16;31175:161;:179;;;;-1:-1:-1;31340:9:0;;:14;31175:179;:196;;;;-1:-1:-1;31358:8:0;;:13;31175:196;31172:208;;;31129:978::o;31172:208::-;31426:15;;;31400:23;:41;31476:13;;;31452:21;:37;31518:7;;;31500:15;:25;31560:13;;;31536:21;:37;31606:11;;;31584:19;:33;31651:12;;;31628:20;:35;31696:11;;;31674:19;:33;31740:11;;;31718:19;:33;31782:9;;;31762:17;:29;31821:8;;;31802:16;:27;-1:-1:-1;31850:19:0;;;;31880:17;;;;31908:11;;;;31930:17;;;;31958:15;;;;31984:16;;;32011:15;;;32037;;;32063:13;;;32087:12;31129:978::o;37592:808::-;-1:-1:-1;;;;;37673:20:0;;37651:19;37673:20;;;:11;:20;;;;;;;;37651:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;:42;;37729:20;;37651:42;37729:20;:::i;:::-;37728:37;;;;:::i;:::-;37704:61;;37776:23;37815:4;:12;;;37802:4;:10;;;:25;;;;:::i;:::-;37776:51;;37862:4;:8;;;37844:15;:26;37840:111;;;-1:-1:-1;;;;;;;;37887:20:0;37917:1;37887:20;;;:11;:20;;;;;:27;;:31;37592:808::o;37840:111::-;37961:16;37998:4;:9;;;37980:15;:27;;;;:::i;:::-;37961:46;;38035:13;38024:8;:24;38020:63;;;38065:7;;;;37592:808;:::o;38020:63::-;38093:19;38115:24;38126:13;38115:8;:24;:::i;:::-;38093:46;-1:-1:-1;38150:21:0;38174:29;38188:15;38093:46;38174:29;:::i;:::-;38150:53;;38214:21;38251:4;:11;;;38238:4;:10;;;:24;;;;:::i;:::-;38214:48;;38295:13;38279;:29;38275:118;;;38355:10;;:26;;38368:13;;38355:26;:::i;:::-;-1:-1:-1;;;;;38325:20:0;;;;;;:11;:20;;;;;:27;;:56;38275:118;37592:808;;;;;;;;:::o;38408:915::-;-1:-1:-1;;;;;38511:20:0;;38469:7;38511:20;;;:11;:20;;;;;;;;38489:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38542:57;;-1:-1:-1;38586:1:0;;38408:915;-1:-1:-1;;38408:915:0:o;38542:57::-;38609:21;38658:4;:12;;;38645:4;:9;;;38634:4;:8;;;:20;;;;:::i;:::-;38633:37;;;;:::i;:::-;38609:61;;38681:23;38720:4;:12;;;38707:4;:10;;;:25;;;;:::i;:::-;38681:51;;38767:4;:8;;;38749:15;:26;38745:67;;;-1:-1:-1;38799:1:0;;38408:915;-1:-1:-1;;;;38408:915:0:o;38745:67::-;38822:16;38859:4;:9;;;38841:15;:27;;;;:::i;:::-;38822:46;;38896:13;38885:8;:24;38881:75;;;-1:-1:-1;;;38933:11:0;;;;38408:915;-1:-1:-1;;38408:915:0:o;38881:75::-;38966:19;38988:24;38999:13;38988:8;:24;:::i;:::-;38966:46;-1:-1:-1;39023:21:0;39047:29;39061:15;38966:46;39047:29;:::i;:::-;39023:53;;39087:21;39124:4;:11;;;39111:4;:10;;;:24;;;;:::i;:::-;39087:48;;39168:13;39152;:29;39148:139;;;39218:10;;39198:17;;39218:26;;39231:13;;39218:26;:::i;:::-;39198:46;38408:915;-1:-1:-1;;;;;;;;;;38408:915:0:o;39148:139::-;-1:-1:-1;;;39304:11:0;;;;;;38408:915;-1:-1:-1;;;;;38408:915:0:o;1900:278::-;1986:7;2021:12;2014:5;2006:28;;;;-1:-1:-1;;;2006:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2045:9:0;2057:5;2061:1;2057;:5;:::i;40539:834::-;40650:7;40646:40;;40672:14;:12;:14::i;:::-;-1:-1:-1;;;;;40711:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40735:22:0;;;;;;:11;:22;;;;;;;;40734:23;40711:46;40707:597;;;40774:48;40796:6;40804:9;40815:6;40774:21;:48::i;:::-;40707:597;;;-1:-1:-1;;;;;40845:19:0;;;;;;:11;:19;;;;;;;;40844:20;:46;;;;-1:-1:-1;;;;;;40868:22:0;;;;;;:11;:22;;;;;;;;40844:46;40840:464;;;40907:46;40927:6;40935:9;40946:6;40907:19;:46::i;40840:464::-;-1:-1:-1;;;;;40976:19:0;;;;;;:11;:19;;;;;;;;40975:20;:47;;;;-1:-1:-1;;;;;;41000:22:0;;;;;;:11;:22;;;;;;;;40999:23;40975:47;40971:333;;;41039:44;41057:6;41065:9;41076:6;41039:17;:44::i;40971:333::-;-1:-1:-1;;;;;41105:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41128:22:0;;;;;;:11;:22;;;;;;;;41105:45;41101:203;;;41167:48;41189:6;41197:9;41208:6;41167:21;:48::i;41101:203::-;41248:44;41266:6;41274:9;41285:6;41248:17;:44::i;:::-;41328:7;41324:41;;41350:15;32181:23;;32163:15;:41;32231:21;;32215:13;:37;32273:15;;32263:7;:25;32315:21;;32299:13;:37;32361:19;;32347:11;:33;32406:20;;32391:12;:35;32451:19;;32437:11;:33;32495:19;;32481:11;:33;32537:17;;32525:9;:29;32576:16;;32565:8;:27;32119:481;36886:698;36931:23;;:::i;:::-;36956:31;;:::i;:::-;37009:13;;36999:23;;37043:7;;36999;37033;;;:17;;;;37071:11;;37061:7;;;;:21;;;;37103:12;;37093:7;;;;:22;;;;37136:11;;37126:7;;;;:21;;;;37168:13;;37158:7;;;;:23;;;;37202:11;;37192:7;;;;:21;;;;37234:9;;37224:7;;;:19;37264:8;;37254:7;;;:18;37303:17;;-1:-1:-1;;;;;37303:17:0;;;37285:35;;37349:11;;;;37331:15;;;:29;;;;37389:15;;;;37371;;;:33;;;;37433:16;;;;37415:15;;;:34;;;;37478:15;;;;37460;;;:33;37522:13;;;;37504:15;;;:31;37564:12;;;;;37546:15;;;:30;36999:4;;36886:698::o;29663:561::-;29760:7;;29796;;29713;;;;;29820:289;29844:9;:16;29840:20;;29820:289;;;29910:7;29886;:21;29894:9;29904:1;29894:12;;;;;;-1:-1:-1;;;29894:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29894:12:0;29886:21;;;;;;;;;;;;;:31;;:66;;;29945:7;29921;:21;29929:9;29939:1;29929:12;;;;;;-1:-1:-1;;;29929:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29929:12:0;29921:21;;;;;;;;;;;;;:31;29886:66;29882:97;;;29962:7;;29971;;29954:25;;;;;;;29663:561;;:::o;29882:97::-;30004:34;30016:7;:21;30024:9;30034:1;30024:12;;;;;;-1:-1:-1;;;30024:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30024:12:0;30016:21;;;;;;;;;;;;;30004:7;;:11;:34::i;:::-;29994:44;;30063:34;30075:7;:21;30083:9;30093:1;30083:12;;;;;;-1:-1:-1;;;30083:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30083:12:0;30075:21;;;;;;;;;;;;;30063:7;;:11;:34::i;:::-;30053:44;-1:-1:-1;29862:3:0;;;;:::i;:::-;;;;29820:289;;;-1:-1:-1;30145:7:0;;30133;;:20;;:11;:20::i;:::-;30123:7;:30;30119:61;;;30163:7;;30172;;30155:25;;;;;;29663:561;;:::o;30119:61::-;30199:7;;30208;;-1:-1:-1;29663:561:0;-1:-1:-1;29663:561:0:o;28704:343::-;28764:7;28773;28782;28802:12;28817:32;28841:7;28817:23;:32::i;:::-;28802:47;;28860:18;28881:35;28908:7;28881:26;:35::i;:::-;28860:56;-1:-1:-1;28927:23:0;28953:33;28860:56;28953:17;:7;28965:4;28953:11;:17::i;:33::-;28927:59;29022:4;;-1:-1:-1;29028:10:0;;-1:-1:-1;28704:343:0;;-1:-1:-1;;;28704:343:0:o;29055:429::-;29170:7;;;;29226:24;:7;29238:11;29226;:24::i;:::-;29208:42;-1:-1:-1;29261:12:0;29276:21;:4;29285:11;29276:8;:21::i;:::-;29261:36;-1:-1:-1;29308:18:0;29329:27;:10;29344:11;29329:14;:27::i;:::-;29308:48;-1:-1:-1;29367:23:0;29393:33;29308:48;29393:17;:7;29405:4;29393:11;:17::i;:33::-;29445:7;;;;-1:-1:-1;29471:4:0;;-1:-1:-1;29055:429:0;;-1:-1:-1;;;;;;;29055:429:0:o;42485:566::-;42588:15;42605:23;42630:12;42644:23;42669:12;42683:18;42705:19;42716:7;42705:10;:19::i;:::-;-1:-1:-1;;;;;42753:15:0;;;;;;:7;:15;;;;;;42587:137;;-1:-1:-1;42587:137:0;;-1:-1:-1;42587:137:0;;-1:-1:-1;42587:137:0;-1:-1:-1;42587:137:0;-1:-1:-1;42587:137:0;-1:-1:-1;42753:28:0;;42773:7;42753:19;:28::i;:::-;-1:-1:-1;;;;;42735:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42810:7;:15;;;;:28;;42830:7;42810:19;:28::i;:::-;-1:-1:-1;;;;;42792:15:0;;;;;;;:7;:15;;;;;;:46;;;;42870:18;;;;;;;:39;;42893:15;42870:22;:39::i;:::-;-1:-1:-1;;;;;42849:18:0;;;;;;:7;:18;;;;;:60;42923:26;42938:10;42923:14;:26::i;:::-;42960:23;42972:4;42978;42960:11;:23::i;:::-;43016:9;-1:-1:-1;;;;;42999:44:0;43008:6;-1:-1:-1;;;;;42999:44:0;;43027:15;42999:44;;;;21008:25:1;;20996:2;20981:18;;20963:76;42999:44:0;;;;;;;;42485:566;;;;;;;;;:::o;41891:586::-;41992:15;42009:23;42034:12;42048:23;42073:12;42087:18;42109:19;42120:7;42109:10;:19::i;:::-;-1:-1:-1;;;;;42157:15:0;;;;;;:7;:15;;;;;;41991:137;;-1:-1:-1;41991:137:0;;-1:-1:-1;41991:137:0;;-1:-1:-1;41991:137:0;-1:-1:-1;41991:137:0;-1:-1:-1;41991:137:0;-1:-1:-1;42157:28:0;;41991:137;42157:19;:28::i;:::-;-1:-1:-1;;;;;42139:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42217:18;;;;;:7;:18;;;;;:39;;42240:15;42217:22;:39::i;:::-;-1:-1:-1;;;;;42196:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42288:7;:18;;;;:39;;42311:15;42288:22;:39::i;41381:502::-;41480:15;41497:23;41522:12;41536:23;41561:12;41575:18;41597:19;41608:7;41597:10;:19::i;:::-;-1:-1:-1;;;;;41645:15:0;;;;;;:7;:15;;;;;;41479:137;;-1:-1:-1;41479:137:0;;-1:-1:-1;41479:137:0;;-1:-1:-1;41479:137:0;-1:-1:-1;41479:137:0;-1:-1:-1;41479:137:0;-1:-1:-1;41645:28:0;;41479:137;41645:19;:28::i;18182:642::-;18285:15;18302:23;18327:12;18341:23;18366:12;18380:18;18402:19;18413:7;18402:10;:19::i;:::-;-1:-1:-1;;;;;18450:15:0;;;;;;:7;:15;;;;;;18284:137;;-1:-1:-1;18284:137:0;;-1:-1:-1;18284:137:0;;-1:-1:-1;18284:137:0;-1:-1:-1;18284:137:0;-1:-1:-1;18284:137:0;-1:-1:-1;18450:28:0;;18470:7;18450:19;:28::i;:::-;-1:-1:-1;;;;;18432:15:0;;;;;;:7;:15;;;;;;;;:46;;;;18507:7;:15;;;;:28;;18527:7;18507:19;:28::i;30603:170::-;30675:7;30702:63;30749:5;30702:28;30714:15;;30702:7;:11;;:28;;;;:::i;30781:336::-;30894:16;;30856:7;;;;30894:16;;:31;;30924:1;30894:31;;;30913:8;;30894:31;30876:49;;30943:166;31093:5;30943:131;31066:7;31054:9;;31040:11;;31026;;31011:12;;30997:11;;30981:13;;30971:7;;30955:13;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:68;;;;:::i;:::-;:82;;;;:::i;:::-;:96;;;;:::i;:::-;:108;;;;:::i;:::-;:118;;;;:::i;:::-;30943:7;;:11;:131::i;30236:355::-;30299:19;30322:10;:8;:10::i;:::-;30299:33;-1:-1:-1;30343:18:0;30364:27;:10;30299:33;30364:14;:27::i;:::-;30443:4;30427:22;;;;:7;:22;;;;;;30343:48;;-1:-1:-1;30427:38:0;;30343:48;30427:26;:38::i;:::-;30418:4;30402:22;;;;:7;:22;;;;;;;;:63;;;;30479:11;:26;;;;;;30476:107;;;30561:4;30545:22;;;;:7;:22;;;;;;:38;;30572:10;30545:26;:38::i;:::-;30536:4;30520:22;;;;:7;:22;;;;;:63;30236:355;;;:::o;28122:147::-;28200:7;;:17;;28212:4;28200:11;:17::i;:::-;28190:7;:27;28241:10;;:20;;28256:4;28241:14;:20::i;:::-;28228:10;:33;-1:-1:-1;;28122:147:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:392::-;2151:6;2159;2212:2;2200:9;2191:7;2187:23;2183:32;2180:2;;;2233:6;2225;2218:22;2180:2;2277:9;2264:23;2296:31;2321:5;2296:31;:::i;:::-;2346:5;-1:-1:-1;2403:2:1;2388:18;;2375:32;2416:30;2375:32;2416:30;:::i;2483:325::-;2551:6;2559;2612:2;2600:9;2591:7;2587:23;2583:32;2580:2;;;2633:6;2625;2618:22;2580:2;2677:9;2664:23;2696:31;2721:5;2696:31;:::i;:::-;2746:5;2798:2;2783:18;;;;2770:32;;-1:-1:-1;;;2570:238:1:o;2813:460::-;2887:6;2895;2903;2956:2;2944:9;2935:7;2931:23;2927:32;2924:2;;;2977:6;2969;2962:22;2924:2;3021:9;3008:23;3040:31;3065:5;3040:31;:::i;:::-;3090:5;-1:-1:-1;3142:2:1;3127:18;;3114:32;;-1:-1:-1;3198:2:1;3183:18;;3170:32;3211:30;3170:32;3211:30;:::i;:::-;3260:7;3250:17;;;2914:359;;;;;:::o;3278:462::-;3364:6;3372;3380;3388;3441:3;3429:9;3420:7;3416:23;3412:33;3409:2;;;3463:6;3455;3448:22;3409:2;3507:9;3494:23;3526:31;3551:5;3526:31;:::i;:::-;3576:5;3628:2;3613:18;;3600:32;;-1:-1:-1;3679:2:1;3664:18;;3651:32;;3730:2;3715:18;3702:32;;-1:-1:-1;3399:341:1;-1:-1:-1;;;3399:341:1:o;3745:457::-;3831:6;3839;3892:2;3880:9;3871:7;3867:23;3863:32;3860:2;;;3913:6;3905;3898:22;3860:2;3958:9;3945:23;3991:18;3983:6;3980:30;3977:2;;;4028:6;4020;4013:22;3977:2;4072:70;4134:7;4125:6;4114:9;4110:22;4072:70;:::i;:::-;4161:8;;4046:96;;-1:-1:-1;3850:352:1;-1:-1:-1;;;;3850:352:1:o;4207:1454::-;4401:6;4409;4417;4425;4433;4441;4449;4457;4510:3;4498:9;4489:7;4485:23;4481:33;4478:2;;;4532:6;4524;4517:22;4478:2;4577:9;4564:23;4606:18;4647:2;4639:6;4636:14;4633:2;;;4668:6;4660;4653:22;4633:2;4712:70;4774:7;4765:6;4754:9;4750:22;4712:70;:::i;:::-;4801:8;;-1:-1:-1;4686:96:1;-1:-1:-1;4889:2:1;4874:18;;4861:32;;-1:-1:-1;4905:16:1;;;4902:2;;;4939:6;4931;4924:22;4902:2;4983:72;5047:7;5036:8;5025:9;5021:24;4983:72;:::i;:::-;5074:8;;-1:-1:-1;4957:98:1;-1:-1:-1;5162:2:1;5147:18;;5134:32;;-1:-1:-1;5178:16:1;;;5175:2;;;5212:6;5204;5197:22;5175:2;5256:72;5320:7;5309:8;5298:9;5294:24;5256:72;:::i;:::-;5347:8;;-1:-1:-1;5230:98:1;-1:-1:-1;5435:2:1;5420:18;;5407:32;;-1:-1:-1;5451:16:1;;;5448:2;;;5485:6;5477;5470:22;5448:2;;5529:72;5593:7;5582:8;5571:9;5567:24;5529:72;:::i;:::-;4468:1193;;;;-1:-1:-1;4468:1193:1;;-1:-1:-1;4468:1193:1;;;;;;5620:8;-1:-1:-1;;;4468:1193:1:o;6128:251::-;6184:6;6237:2;6225:9;6216:7;6212:23;6208:32;6205:2;;;6258:6;6250;6243:22;6205:2;6302:9;6289:23;6321:28;6343:5;6321:28;:::i;6384:255::-;6451:6;6504:2;6492:9;6483:7;6479:23;6475:32;6472:2;;;6525:6;6517;6510:22;6472:2;6562:9;6556:16;6581:28;6603:5;6581:28;:::i;6932:190::-;6991:6;7044:2;7032:9;7023:7;7019:23;7015:32;7012:2;;;7065:6;7057;7050:22;7012:2;-1:-1:-1;7093:23:1;;7002:120;-1:-1:-1;7002:120:1:o;7127:319::-;7192:6;7200;7253:2;7241:9;7232:7;7228:23;7224:32;7221:2;;;7274:6;7266;7259:22;7221:2;7315:9;7302:23;7292:33;;7375:2;7364:9;7360:18;7347:32;7388:28;7410:5;7388:28;:::i;8189:304::-;-1:-1:-1;;;;;8419:15:1;;;8401:34;;8471:15;;8466:2;8451:18;;8444:43;8351:2;8336:18;;8318:175::o;9203:603::-;9315:4;9344:2;9373;9362:9;9355:21;9405:6;9399:13;9448:6;9443:2;9432:9;9428:18;9421:34;9473:4;9486:140;9500:6;9497:1;9494:13;9486:140;;;9595:14;;;9591:23;;9585:30;9561:17;;;9580:2;9557:26;9550:66;9515:10;;9486:140;;;9644:6;9641:1;9638:13;9635:2;;;9714:4;9709:2;9700:6;9689:9;9685:22;9681:31;9674:45;9635:2;-1:-1:-1;9790:2:1;9769:15;-1:-1:-1;;9765:29:1;9750:45;;;;9797:2;9746:54;;9324:482;-1:-1:-1;;;9324:482:1:o;14735:356::-;14937:2;14919:21;;;14956:18;;;14949:30;15015:34;15010:2;14995:18;;14988:62;15082:2;15067:18;;14909:182::o;16616:350::-;16818:2;16800:21;;;16857:2;16837:18;;;16830:30;16896:28;16891:2;16876:18;;16869:56;16957:2;16942:18;;16790:176::o;21044:1039::-;21361:25;;;21348:3;21333:19;;21405:2;21427:18;;;21487:6;21306:4;21521:167;21535:4;21532:1;21529:11;21521:167;;;21594:13;;21582:26;;21628:12;;;;21663:15;;;;21555:1;21548:9;21521:167;;;21525:3;;;21725;21714:9;21710:19;21777:6;21803:1;21813:211;21829:4;21824:3;21821:13;21813:211;;;21898:15;;-1:-1:-1;;;;;21894:41:1;21880:56;;21958:14;;;;21997:17;;;;21932:1;21844:11;21813:211;;;-1:-1:-1;;;;7521:13:1;;7514:21;22072:3;22057:19;;7502:34;21315:768;;;;;;;:::o;22277:128::-;22317:3;22348:1;22344:6;22341:1;22338:13;22335:2;;;22354:18;;:::i;:::-;-1:-1:-1;22390:9:1;;22325:80::o;22410:217::-;22450:1;22476;22466:2;;-1:-1:-1;;;22501:31:1;;22555:4;22552:1;22545:15;22583:4;22508:1;22573:15;22466:2;-1:-1:-1;22612:9:1;;22456:171::o;22632:168::-;22672:7;22738:1;22734;22730:6;22726:14;22723:1;22720:21;22715:1;22708:9;22701:17;22697:45;22694:2;;;22745:18;;:::i;:::-;-1:-1:-1;22785:9:1;;22684:116::o;22805:125::-;22845:4;22873:1;22870;22867:8;22864:2;;;22878:18;;:::i;:::-;-1:-1:-1;22915:9:1;;22854:76::o;22935:380::-;23014:1;23010:12;;;;23057;;;23078:2;;23132:4;23124:6;23120:17;23110:27;;23078:2;23185;23177:6;23174:14;23154:18;23151:38;23148:2;;;23231:10;23226:3;23222:20;23219:1;23212:31;23266:4;23263:1;23256:15;23294:4;23291:1;23284:15;23148:2;;22990:325;;;:::o;23320:135::-;23359:3;-1:-1:-1;;23380:17:1;;23377:2;;;23400:18;;:::i;:::-;-1:-1:-1;23447:1:1;23436:13;;23367:88::o;23460:127::-;23521:10;23516:3;23512:20;23509:1;23502:31;23552:4;23549:1;23542:15;23576:4;23573:1;23566:15;23592:131;-1:-1:-1;;;;;23667:31:1;;23657:42;;23647:2;;23713:1;23710;23703:12;23728:118;23814:5;23807:13;23800:21;23793:5;23790:32;23780:2;;23836:1;23833;23826:12

Swarm Source

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