ETH Price: $2,926.04 (+4.73%)
 

Overview

Max Total Supply

1,000,000,000,000,000 CHAD

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
10,000,000,000,000 CHAD

Value
$0.00
0xdee575db81e0d4d6239be9e206a3212166462497
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:
Chad

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-08
*/

// SPDX-License-Identifier: MIT
/*
    Winners don't make excuses, they make moves.
    Will you be a $CHAD? Join us at https://t.me/officialchadtoken
    Follow $CHAD here: https://twitter.com/thechadtoken

    Tokenomics:
    0% Buy fee. Being a $CHAD is a mindset, it should not be taxed.

*/

pragma solidity >=0.6.0 <0.9.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

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

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

contract Chad is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

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

    uint256 private startingSupply = 1_000_000_000_000_000;

    string private _name = "Chad";
    string private _symbol = "CHAD";

    uint256 public _buyFee = 0;
    uint256 public _sellFee = 700;
    uint256 public _transferFee = 700;

    uint256 public _liquidityRatio = 2;
    uint256 public _marketingRatio = 3;
    uint256 public _devRatio = 2;

    uint256 private constant masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 constant private _decimals = 9;
    uint256 constant private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0x8479F2a22Faa4624ba353FefC114eB5b11a1CFf5);
    address payable private _devWallet = payable(0x4F11F611b8f8B8c7a3B548703b0Ab2555Ff30E07);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent = 20;
    uint256 private maxTxDivisor = 1000;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor;

    uint256 private maxWalletPercent = 5;
    uint256 private maxWalletDivisor = 100;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 5) / 1000;

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

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[_msgSender()] = _tTotal;

        // Set the owner.
        _owner = msg.sender;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

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

        // Approve the owner for PancakeSwap, timesaver.
        _approve(_msgSender(), _routerAddress, _tTotal);

        // Ever-growing sniper/tool blacklist
        _isSniperOrBlacklisted[0xE4882975f933A199C92b5A925C9A8fE65d599Aa8] = true;
        _isSniperOrBlacklisted[0x86C70C4a3BC775FB4030448c9fdb73Dc09dd8444] = true;
        _isSniperOrBlacklisted[0xa4A25AdcFCA938aa030191C297321323C57148Bd] = true;
        _isSniperOrBlacklisted[0x20C00AFf15Bb04cC631DB07ee9ce361ae91D12f8] = true;
        _isSniperOrBlacklisted[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniperOrBlacklisted[0x6e44DdAb5c29c9557F275C9DB6D12d670125FE17] = true;
        _isSniperOrBlacklisted[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniperOrBlacklisted[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniperOrBlacklisted[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniperOrBlacklisted[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniperOrBlacklisted[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniperOrBlacklisted[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniperOrBlacklisted[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniperOrBlacklisted[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniperOrBlacklisted[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniperOrBlacklisted[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniperOrBlacklisted[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniperOrBlacklisted[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniperOrBlacklisted[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniperOrBlacklisted[0x201044fa39866E6dD3552D922CDa815899F63f20] = true;
        _isSniperOrBlacklisted[0x6F3aC41265916DD06165b750D88AB93baF1a11F8] = true;
        _isSniperOrBlacklisted[0x27C71ef1B1bb5a9C9Ee0CfeCEf4072AbAc686ba6] = true;
        _isSniperOrBlacklisted[0xDEF441C00B5Ca72De73b322aA4e5FE2b21D2D593] = true;
        _isSniperOrBlacklisted[0x5668e6e8f3C31D140CC0bE918Ab8bB5C5B593418] = true;
        _isSniperOrBlacklisted[0x4b9BDDFB48fB1529125C14f7730346fe0E8b5b40] = true;
        _isSniperOrBlacklisted[0x7e2b3808cFD46fF740fBd35C584D67292A407b95] = true;
        _isSniperOrBlacklisted[0xe89C7309595E3e720D8B316F065ecB2730e34757] = true;
        _isSniperOrBlacklisted[0x725AD056625326B490B128E02759007BA5E4eBF1] = true;
        _isSniperOrBlacklisted[0x07bAe765074790b76C791834AB873bE27493C163] = true;
        _isSniperOrBlacklisted[0xae2Fc483527B8EF99EB5D9B44875F005ba1FaE13] = true;
        _isSniperOrBlacklisted[0x7DC3A1623191A26f7d1570514a78bBDa097036Bb] = true;
        _isSniperOrBlacklisted[0x77ad3a15b78101883AF36aD4A875e17c86AC65d1] = true;
        _isSniperOrBlacklisted[0x62A72e0F66313753A80A3dF2cdE5631057A5c5FE] = true;
        _isSniperOrBlacklisted[0x79b7a69d90c82E014Bf0315e164208119B510FA0] = true;
        _isSniperOrBlacklisted[0x758E8229Dd38cF11fA9E7c0D5f790b4CA16b3B16] = true;
        _isSniperOrBlacklisted[0xa6Ae57b1dA8238Cd149bC718c40578E4620b752c] = true;
        _isSniperOrBlacklisted[0x77223F67D845E3CbcD9cc19287E24e71F7228888] = true;
        _isSniperOrBlacklisted[0x5b6c9085476658Aa1dCC4E69AC6B2F575A206a25] = true;
        _isSniperOrBlacklisted[0xd985c35F566c9De55Df16ADE36852b0C40f4bF59] = true;
        _isSniperOrBlacklisted[0xBfB2b2ABa106bf954cd49D370C651e6A95339699] = true;



        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

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

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

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

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

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

    function setStartingProtections(uint8 _block) external onlyOwner{
        require (snipeBlockAmt == 0 && !_hasLiqBeenAdded);
        snipeBlockAmt = _block;
    }

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

    function setTaxes(uint256 buyFee, uint256 sellFee, uint256 transferFee) external onlyOwner {
        _buyFee = buyFee;
        _sellFee = sellFee;
        _transferFee = transferFee;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        require (liquidity + marketing == 100, "Must add up to 100%");
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

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

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

    function setWallets(address payable marketingWallet, address payable devWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
        _devWallet = payable(devWallet);
    }

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

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
            }
        }

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

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

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

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

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

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(((currentBalance - liquidityBalance) * _marketingRatio) / (_marketingRatio + _devRatio));
            _devWallet.transfer(address(this).balance);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );
    }

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

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

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Sniper rejected.");
            }

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

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

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

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (from == lpPair) {
            currentFee = _buyFee;
        } else if (to == lpPair) {
            currentFee = _sellFee;
        } else {
            currentFee = _transferFee;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);
        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_block","type":"uint8"}],"name":"setStartingProtections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060035566038d7ea4c6800060085560c0604052600460809081526310da185960e21b60a05260099062000035908262000c94565b5060408051808201909152600481526310d2105160e21b6020820152600a9062000060908262000c94565b506000600b556102bc600c819055600d556002600e8190556003600f556010556200008e6009600a62000e75565b6008546200009d919062000e8a565b6011819055601580546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560168054909116738479f2a22faa4624ba353fefc114eb5b11a1cff517905560178054600161ff0160a01b031916734f11f611b8f8b8c7a3b548703b0ab2555ff30e07179055601460188190556103e86019819055916200012d919062000e8a565b62000139919062000ea4565b601a5560195460185460085462000151919062000e8a565b6200015d919062000ea4565b601b556005601c556064601d55601d54601c546011546200017f919062000e8a565b6200018b919062000ea4565b601e55601d54601c54600854620001a3919062000e8a565b620001af919062000ea4565b601f556127106011546005620001c6919062000e8a565b620001d2919062000ea4565b6020556103e86011546005620001e9919062000e8a565b620001f5919062000ea4565b6021556022805461ffff191660019081179091556000602381905560248190556025819055602681905560278190556028805460ff19168317905560115491906200023d3390565b6001600160a01b03908116825260208083019390935260409182016000908120949094558354336001600160a01b0319918216179094556015546013805491909216941684179055805163c45a015560e01b8152905163c45a0155926004808401939192918290030181865afa158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e2919062000ec7565b6001600160a01b031663c9c65396601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000ec7565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620003b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003dd919062000ec7565b601480546001600160a01b0319166001600160a01b039283169081179091556000908152600260209081526040808320805460ff1916600190811790915530845260048352818420601354909516845293909152812060001990556005906200044e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549093168117909255600790620004d66000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620005226200050a3390565b6015546011546001600160a01b039091169062000aee565b60066020527f4cb4f7504b8a6b4952597cecbbd5e2f3bd3b97720d4e1cfe243f65d137285dbb8054600160ff1991821681179092557f876592c4475eca1b0d8eea3a3d15c308554da9973eff84f3627d331914ec9bae80548216831790557ff627483590045b01e5ec0b1a0e946949bf001311587471447afe11bd8ab0466880548216831790557f7b0d0d8194a608fcbcbdc0d4d976ae8f7e05518c8ce66fffcfa71d51c06f155880548216831790557f1b4ccb03f19e0a4fffa436c4fc60c7cb96d398283b0f6eb739806b47bd079f4c80548216831790557f61bc32a9fbe0d491ddfbfeea3ee6f3825dc02bb7c00e58c417898377fd6d806d80548216831790557f8358eb05a8d1376638eaf243a334abb4fc74b12b73b4a0eab411dfb92d5750cd80548216831790557f43315a920928a28d19ef52187e55b70fff5938914e823c406b86d934b884174e80548216831790557f6ecabf9902eb0d0a47fa86d71d596d44aae8b1122348e95b4f9b928d3da608b680548216831790557f6e8d2409ffd3ba40a424015e6eb94a4ba6ab703cb09bd8734b9e114b1730051880548216831790557fdccb5c819d9b253665d48a11ff183ee8b05ffd0fb20acbdf203b35831d23df9580548216831790557f2458932409b0db2908861718c0a17d1d1f9c88d5b1e7dea02711a25544f23f7e80548216831790557fcd577e87786c2eb6bf9c70815b7e05a973824ebfea045998feddb1c1fb88cdc680548216831790557fc36aab591618a511ea760622806c50775417280e19c37ac73178eb3fa663df7a80548216831790557f9e87942f9730e57a5ace6e787111079ed00f802c57f0c47f9da684219838563380548216831790557f9eb0d33b7d00b0f351add6645c6556b33694b9253a4486023c215a59f139265e80548216831790557f1aa65701ad71d25098a8c9454bd022b4f36b910c18b5ef5841916185e9d1356c80548216831790557f8c72d713c0053fea5ac6eecf2172c5c601c5572bd8dc326d0df61a3c71937e9180548216831790557fc790a13b56b4e2c534e1999ccc18879c09b15c5e7bbe93aac28ba4c9e29bc92c80548216831790557f7d4786da90a3c3c7a49a292b956bee46188b818ae39108880425b81b6a9f2f8280548216831790557f40331ccb602cdb0a90ed5ebec6e837211d49b7d36d69c4fa914824921751137480548216831790557f98885200c5879fcfc67a247abd138ebb8e0ab9c348213fec64f9950fed9f0cd480548216831790557e5a4e188a8b717bdb9756212b4d35786a5708f302bc96b706f580f0049fd98780548216831790557f154cf63539b38cb0c339eb14dcc13e0e4a41e2175975263ff561f5b77f6cd48b80548216831790557ff007fe7b2318185a934bd0d32fc4002c4e4a178fa7a4092c7b56168e8088d76780548216831790557fd56081618878e58b12a2221ee9eaaf43b711f64ecbb5d5e9f602f0130e321fcc80548216831790557f3137c0d10042102126f909ee422c962a233460a0d2065b1f3644d08e17fd57b980548216831790557f9be9fc1ac190cfc83dba7df2e4a8a889f780025a22d7c001e5f970a5cc5c336380548216831790557f71ab761c62c58ac33f908ac1558272ef575ce28cfe5f0adfbcd7f8c2ee44da9080548216831790557fa176e2bb4d41c39934002995fdc95b8bf156b924d25853e44f2a662d16bb675f80548216831790557f583e82aab39f2a2ebe97c4d66a79593dd774f01228ccc53a918e50bb6e66995680548216831790557f381c38d2f77df326c9f2b263f9da729e503738b6fb63708d2de456c1bd133706805482168317905573bfb2b2aba106bf954cd49d370c651e6a953396996000527f05df8675f130e6c8b6bc6270e063121e7658fc53a2a7ed63c8597c1b182ff8d78054909116909117905562000a983390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60115460405162000ae091815260200190565b60405180910390a362000ef2565b6001600160a01b03831662000b405760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b03821662000b8e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000b37565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c1a57607f821691505b60208210810362000c3b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000c8f57600081815260208120601f850160051c8101602086101562000c6a5750805b601f850160051c820191505b8181101562000c8b5782815560010162000c76565b5050505b505050565b81516001600160401b0381111562000cb05762000cb062000bef565b62000cc88162000cc1845462000c05565b8462000c41565b602080601f83116001811462000d00576000841562000ce75750858301515b600019600386901b1c1916600185901b17855562000c8b565b600085815260208120601f198616915b8281101562000d315788860151825594840194600190910190840162000d10565b508582101562000d505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000db757816000190482111562000d9b5762000d9b62000d60565b8085161562000da957918102915b93841c939080029062000d7b565b509250929050565b60008262000dd05750600162000e6f565b8162000ddf5750600062000e6f565b816001811462000df8576002811462000e035762000e23565b600191505062000e6f565b60ff84111562000e175762000e1762000d60565b50506001821b62000e6f565b5060208310610133831016604e8410600b841016171562000e48575081810a62000e6f565b62000e54838362000d76565b806000190482111562000e6b5762000e6b62000d60565b0290505b92915050565b600062000e83838362000dbf565b9392505050565b808202811582820484141762000e6f5762000e6f62000d60565b60008262000ec257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000eda57600080fd5b81516001600160a01b038116811462000e8357600080fd5b61273c8062000f026000396000f3fe6080604052600436106102765760003560e01c8063590f897e1161014f578063a457c2d7116100c1578063e79d41601161007a578063e79d416014610774578063e9dae5ed1461078a578063eafb5a3c146107aa578063eec2744e146107ca578063f6540ec7146107ea578063fb78680d1461080057600080fd5b8063a457c2d714610698578063a8edc797146106b8578063a9059cbb146106ce578063c49b9a80146106ee578063d3f6a1571461070e578063dd62ed3e1461072e57600080fd5b8063715018a611610113578063715018a6146105f757806380c581d11461060c578063893d20e81461062c57806389fd9bc11461064a5780638da5cb5b1461062c57806395d89b411461068357600080fd5b8063590f897e14610555578063590ffdce1461056b578063640384091461058b5780636639dd93146105a157806370a08231146105c157600080fd5b80633df9a8d2116101e85780634a74bb02116101ac5780634a74bb02146104865780634ef3cce5146104a75780634fb2e45d146104bd5780634fbee193146104dd57806350a8e01614610516578063571ac8b01461053557600080fd5b80633df9a8d2146103fa5780633f3cf56c1461041057806340b9a54b146104305780634129ecee14610446578063452ed4f11461046657600080fd5b806318160ddd1161023a57806318160ddd1461034957806323b872dd146103685780632600395714610388578063313ce567146103a8578063384f6b51146103c457806339509351146103da57600080fd5b806303fd2a4514610282578063044df726146102b557806306fdde03146102d75780630758d924146102f9578063095ea7b31461031957600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c157600080fd5b506102d56102d03660046122ac565b610820565b005b3480156102e357600080fd5b506102ec610873565b6040516102ac91906122df565b34801561030557600080fd5b50601354610298906001600160a01b031681565b34801561032557600080fd5b50610339610334366004612345565b610905565b60405190151581526020016102ac565b34801561035557600080fd5b506011545b6040519081526020016102ac565b34801561037457600080fd5b50610339610383366004612371565b61091c565b34801561039457600080fd5b506102d56103a33660046123b2565b610994565b3480156103b457600080fd5b50604051600981526020016102ac565b3480156103d057600080fd5b5061035a600e5481565b3480156103e657600080fd5b506103396103f5366004612345565b610a6d565b34801561040657600080fd5b5061035a600d5481565b34801561041c57600080fd5b506102d561042b3660046123b2565b610aa9565b34801561043c57600080fd5b5061035a600b5481565b34801561045257600080fd5b506102d56104613660046123d4565b610b18565b34801561047257600080fd5b50601454610298906001600160a01b031681565b34801561049257600080fd5b5060175461033990600160a81b900460ff1681565b3480156104b357600080fd5b5061035a600f5481565b3480156104c957600080fd5b506102d56104d83660046123f7565b610b6b565b3480156104e957600080fd5b506103396104f83660046123f7565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561052257600080fd5b5060225461033990610100900460ff1681565b34801561054157600080fd5b506103396105503660046123f7565b610cf2565b34801561056157600080fd5b5061035a600c5481565b34801561057757600080fd5b506102d5610586366004612414565b610d00565b34801561059757600080fd5b5061035a601b5481565b3480156105ad57600080fd5b506102d56105bc3660046123b2565b610d55565b3480156105cd57600080fd5b5061035a6105dc3660046123f7565b6001600160a01b031660009081526001602052604090205490565b34801561060357600080fd5b506102d5610dd9565b34801561061857600080fd5b506102d5610627366004612414565b610e58565b34801561063857600080fd5b506000546001600160a01b0316610298565b34801561065657600080fd5b506103396106653660046123f7565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561068f57600080fd5b506102ec610f36565b3480156106a457600080fd5b506103396106b3366004612345565b610f45565b3480156106c457600080fd5b5061035a60105481565b3480156106da57600080fd5b506103396106e9366004612345565b610f7c565b3480156106fa57600080fd5b506102d5610709366004612432565b610f93565b34801561071a57600080fd5b506102d561072936600461244d565b611015565b34801561073a57600080fd5b5061035a61074936600461244d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561078057600080fd5b5061035a60275481565b34801561079657600080fd5b506102d56107a5366004612486565b61106d565b3480156107b657600080fd5b506102d56107c53660046123f7565b6110a5565b3480156107d657600080fd5b506102d56107e5366004612414565b6113d1565b3480156107f657600080fd5b5061035a601f5481565b34801561080c57600080fd5b506102d561081b3660046124b2565b611426565b6000546001600160a01b031633146108535760405162461bcd60e51b815260040161084a906124e4565b60405180910390fd5b6022805492151560ff199384161790556028805491151591909216179055565b6060600980546108829061250f565b80601f01602080910402602001604051908101604052809291908181526020018280546108ae9061250f565b80156108fb5780601f106108d0576101008083540402835291602001916108fb565b820191906000526020600020905b8154815290600101906020018083116108de57829003601f168201915b5050505050905090565b600061091233848461148f565b5060015b92915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610981576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061097b90849061255f565b90915550505b61098c848484611588565b949350505050565b6000546001600160a01b031633146109be5760405162461bcd60e51b815260040161084a906124e4565b600081836011546109cf9190612572565b6109d99190612589565b90506103e86011546109eb9190612589565b811015610a465760405162461bcd60e51b815260206004820152602360248201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604482015262363c9760e91b606482015260840161084a565b601e8190556008548290610a5b908590612572565b610a659190612589565b601f55505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610912918590610aa49086906125ab565b61148f565b6000546001600160a01b03163314610ad35760405162461bcd60e51b815260040161084a906124e4565b60008183601154610ae49190612572565b610aee9190612589565b905080601a819055508183600854610b069190612572565b610b109190612589565b601b55505050565b6000546001600160a01b03163314610b425760405162461bcd60e51b815260040161084a906124e4565b602654158015610b5a5750602254610100900460ff16155b610b6357600080fd5b60ff16602655565b6000546001600160a01b03163314610b955760405162461bcd60e51b815260040161084a906124e4565b6001600160a01b038116610bbb5760405162461bcd60e51b815260040161084a906125be565b61deac196001600160a01b03821601610be65760405162461bcd60e51b815260040161084a906125be565b60008054610bff916001600160a01b0390911690610d00565b610c0a816001610d00565b6000546016546001600160a01b03918216911603610c3e57601680546001600160a01b0319166001600160a01b0383161790555b600080546001600160a01b03908116825260016020818152604080852054600483528186208786168752835281862055845490931684525290205415610ca757600080546001600160a01b03168082526001602052604090912054610ca591908390611588565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600061091682600019610905565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b815260040161084a906124e4565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d7f5760405162461bcd60e51b815260040161084a906124e4565b610d8981836125ab565b606414610dce5760405162461bcd60e51b81526020600482015260136024820152724d7573742061646420757020746f203130302560681b604482015260640161084a565b600e91909155600f55565b6000546001600160a01b03163314610e035760405162461bcd60e51b815260040161084a906124e4565b60008054610e1c916001600160a01b0390911690610d00565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e825760405162461bcd60e51b815260040161084a906124e4565b801515600003610eae57506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415610f0a5762093a8060035442610ec8919061255f565b11610f0a5760405162461bcd60e51b815260206004820152601260248201527127b732903bb2b2b59031b7b7b63237bbb71760711b604482015260640161084a565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6060600a80546108829061250f565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610912918590610aa490869061255f565b6000610f89338484611588565b5060019392505050565b6000546001600160a01b03163314610fbd5760405162461bcd60e51b815260040161084a906124e4565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061100a90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461103f5760405162461bcd60e51b815260040161084a906124e4565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000546001600160a01b031633146110975760405162461bcd60e51b815260040161084a906124e4565b600b92909255600c55600d55565b6000546001600160a01b031633146110cf5760405162461bcd60e51b815260040161084a906124e4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611138919061261b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a9919061261b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611218919061261b565b90506001600160a01b03811661139157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a919061261b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb919061261b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c919061261b565b601480546001600160a01b0319166001600160a01b03929092169190911790556113ad565b601480546001600160a01b0319166001600160a01b0383161790555b50601380546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146113fb5760405162461bcd60e51b815260040161084a906124e4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114505760405162461bcd60e51b815260040161084a906124e4565b828460115461145f9190612572565b6114699190612589565b602055601154819061147c908490612572565b6114869190612589565b60215550505050565b6001600160a01b0383166114db5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640161084a565b6001600160a01b0382166115275760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640161084a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166115d75760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b604482015260640161084a565b6001600160a01b0383166116245760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b604482015260640161084a565b6000821161165f5760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b604482015260640161084a565b611669848461194a565b1561186d5760285460ff1615611720576001600160a01b03841660009081526002602052604090205460ff16156116df576001600160a01b0383166000908152602960205260409020544390036116bf57600080fd5b6001600160a01b0383166000908152602960205260409020439055611720565b6001600160a01b03841660009081526029602052604090205443900361170457600080fd5b6001600160a01b03841660009081526029602052604090204390555b6001600160a01b03841660009081526002602052604090205460ff168061175f57506001600160a01b03831660009081526002602052604090205460ff165b156117b657601a548211156117b65760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e0000000000000000604482015260640161084a565b6015546001600160a01b038481169116148015906117ed57506001600160a01b03831660009081526002602052604090205460ff16155b1561186d57601e5482611815856001600160a01b031660009081526001602052604090205490565b61181f91906125ab565b111561186d5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e000000000000604482015260640161084a565b6001600160a01b03841660009081526005602052604090205460019060ff16806118af57506001600160a01b03841660009081526005602052604090205460ff165b156118b8575060005b6001600160a01b03841660009081526002602052604090205460ff161561193557601754600160a01b900460ff161580156118fc5750601754600160a81b900460ff165b1561193557306000908152600160205260408120549050602054811061193357602154811061192a57506021545b61193381611a08565b505b61194185858584611c01565b95945050505050565b600080546001600160a01b0384811691161480159061197757506000546001600160a01b03838116911614155b801561199c57506001600160a01b03821660009081526007602052604090205460ff16155b80156119c157506001600160a01b03831660009081526007602052604090205460ff16155b80156119d857506001600160a01b03821661dead14155b80156119ec57506001600160a01b03821615155b8015611a0157506001600160a01b0383163014155b9392505050565b6017805460ff60a01b1916600160a01b179055601054600f54600e54611a2e91906125ab565b611a3891906125ab565b15611bf15760006002601054600f54600e54611a5491906125ab565b611a5e91906125ab565b600e54611a6b9085612572565b611a759190612589565b611a7f9190612589565b90506000611a8d828461255f565b9050611a9881611ec0565b600047905060006002601054600f54600e54611ab491906125ab565b611abe91906125ab565b600e54611acb9085612572565b611ad59190612589565b611adf9190612589565b90508315611b3357611af18482612001565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611b3f858761255f565b1115611bec57601654601054600f546001600160a01b03909216916108fc91611b67916125ab565b600f54611b74858761255f565b611b7e9190612572565b611b889190612589565b6040518115909202916000818181858888f19350505050158015611bb0573d6000803e3d6000fd5b506017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611bea573d6000803e3d6000fd5b505b505050505b506017805460ff60a01b19169055565b60225460009060ff1615611ded576001600160a01b03851660009081526006602052604090205460ff1680611c4e57506001600160a01b03841660009081526006602052604090205460ff165b15611c8e5760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b604482015260640161084a565b602254610100900460ff16611d2457611ca7858561209b565b602254610100900460ff16158015611cc45750611cc4858561194a565b15611d1f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840161084a565b611ded565b6000602354118015611d4e57506001600160a01b03851660009081526002602052604090205460ff165b8015611d5f5750611d5f858561194a565b15611ded57602654602354611d74904361255f565b1015611ded576001600160a01b0384166000908152600660205260408120805460ff191660011790556027805491611dab83612638565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b03851660009081526001602052604081208054859290611e1590849061255f565b909155506000905082611e285783611e33565b611e338686866121b9565b6001600160a01b038616600090815260016020526040812080549293508392909190611e609084906125ab565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611eac91815260200190565b60405180910390a350600195945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ef557611ef5612651565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f72919061261b565b81600181518110611f8557611f85612651565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac94790611fcb908590600090869030904290600401612667565b600060405180830381600087803b158015611fe557600080fd5b505af1158015611ff9573d6000803e3d6000fd5b505050505050565b60135460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561206f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061209491906126d8565b5050505050565b602254610100900460ff16156120ff5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161084a565b612109828261194a565b15801561212357506014546001600160a01b038281169116145b15610f3257436023556001600160a01b03821660009081526007602052604090819020805460ff191660019081179091556022805461ff001916610100179055426024556017805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916121ad91901515815260200190565b60405180910390a15050565b60145460009081906001600160a01b03908116908616036121dd5750600b54612201565b6014546001600160a01b03908116908516036121fc5750600c54612201565b50600d545b60006127106122108386612572565b61221a9190612589565b3060009081526001602052604081208054929350839290919061223e9084906125ab565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361228d818561255f565b9695505050505050565b803580151581146122a757600080fd5b919050565b600080604083850312156122bf57600080fd5b6122c883612297565b91506122d660208401612297565b90509250929050565b600060208083528351808285015260005b8181101561230c578581018301518582016040015282016122f0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461234257600080fd5b50565b6000806040838503121561235857600080fd5b82356123638161232d565b946020939093013593505050565b60008060006060848603121561238657600080fd5b83356123918161232d565b925060208401356123a18161232d565b929592945050506040919091013590565b600080604083850312156123c557600080fd5b50508035926020909101359150565b6000602082840312156123e657600080fd5b813560ff81168114611a0157600080fd5b60006020828403121561240957600080fd5b8135611a018161232d565b6000806040838503121561242757600080fd5b82356122c88161232d565b60006020828403121561244457600080fd5b611a0182612297565b6000806040838503121561246057600080fd5b823561246b8161232d565b9150602083013561247b8161232d565b809150509250929050565b60008060006060848603121561249b57600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156124c857600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b600181811c9082168061252357607f821691505b60208210810361254357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091657610916612549565b808202811582820484141761091657610916612549565b6000826125a657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561091657610916612549565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006020828403121561262d57600080fd5b8151611a018161232d565b60006001820161264a5761264a612549565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126b75784516001600160a01b031683529383019391830191600101612692565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156126ed57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205f54baacbdb9f66638b11a71a8bb5c5af183ad3023bc62f2bc4f6c3e26ce99e064736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063590f897e1161014f578063a457c2d7116100c1578063e79d41601161007a578063e79d416014610774578063e9dae5ed1461078a578063eafb5a3c146107aa578063eec2744e146107ca578063f6540ec7146107ea578063fb78680d1461080057600080fd5b8063a457c2d714610698578063a8edc797146106b8578063a9059cbb146106ce578063c49b9a80146106ee578063d3f6a1571461070e578063dd62ed3e1461072e57600080fd5b8063715018a611610113578063715018a6146105f757806380c581d11461060c578063893d20e81461062c57806389fd9bc11461064a5780638da5cb5b1461062c57806395d89b411461068357600080fd5b8063590f897e14610555578063590ffdce1461056b578063640384091461058b5780636639dd93146105a157806370a08231146105c157600080fd5b80633df9a8d2116101e85780634a74bb02116101ac5780634a74bb02146104865780634ef3cce5146104a75780634fb2e45d146104bd5780634fbee193146104dd57806350a8e01614610516578063571ac8b01461053557600080fd5b80633df9a8d2146103fa5780633f3cf56c1461041057806340b9a54b146104305780634129ecee14610446578063452ed4f11461046657600080fd5b806318160ddd1161023a57806318160ddd1461034957806323b872dd146103685780632600395714610388578063313ce567146103a8578063384f6b51146103c457806339509351146103da57600080fd5b806303fd2a4514610282578063044df726146102b557806306fdde03146102d75780630758d924146102f9578063095ea7b31461031957600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c157600080fd5b506102d56102d03660046122ac565b610820565b005b3480156102e357600080fd5b506102ec610873565b6040516102ac91906122df565b34801561030557600080fd5b50601354610298906001600160a01b031681565b34801561032557600080fd5b50610339610334366004612345565b610905565b60405190151581526020016102ac565b34801561035557600080fd5b506011545b6040519081526020016102ac565b34801561037457600080fd5b50610339610383366004612371565b61091c565b34801561039457600080fd5b506102d56103a33660046123b2565b610994565b3480156103b457600080fd5b50604051600981526020016102ac565b3480156103d057600080fd5b5061035a600e5481565b3480156103e657600080fd5b506103396103f5366004612345565b610a6d565b34801561040657600080fd5b5061035a600d5481565b34801561041c57600080fd5b506102d561042b3660046123b2565b610aa9565b34801561043c57600080fd5b5061035a600b5481565b34801561045257600080fd5b506102d56104613660046123d4565b610b18565b34801561047257600080fd5b50601454610298906001600160a01b031681565b34801561049257600080fd5b5060175461033990600160a81b900460ff1681565b3480156104b357600080fd5b5061035a600f5481565b3480156104c957600080fd5b506102d56104d83660046123f7565b610b6b565b3480156104e957600080fd5b506103396104f83660046123f7565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561052257600080fd5b5060225461033990610100900460ff1681565b34801561054157600080fd5b506103396105503660046123f7565b610cf2565b34801561056157600080fd5b5061035a600c5481565b34801561057757600080fd5b506102d5610586366004612414565b610d00565b34801561059757600080fd5b5061035a601b5481565b3480156105ad57600080fd5b506102d56105bc3660046123b2565b610d55565b3480156105cd57600080fd5b5061035a6105dc3660046123f7565b6001600160a01b031660009081526001602052604090205490565b34801561060357600080fd5b506102d5610dd9565b34801561061857600080fd5b506102d5610627366004612414565b610e58565b34801561063857600080fd5b506000546001600160a01b0316610298565b34801561065657600080fd5b506103396106653660046123f7565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561068f57600080fd5b506102ec610f36565b3480156106a457600080fd5b506103396106b3366004612345565b610f45565b3480156106c457600080fd5b5061035a60105481565b3480156106da57600080fd5b506103396106e9366004612345565b610f7c565b3480156106fa57600080fd5b506102d5610709366004612432565b610f93565b34801561071a57600080fd5b506102d561072936600461244d565b611015565b34801561073a57600080fd5b5061035a61074936600461244d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561078057600080fd5b5061035a60275481565b34801561079657600080fd5b506102d56107a5366004612486565b61106d565b3480156107b657600080fd5b506102d56107c53660046123f7565b6110a5565b3480156107d657600080fd5b506102d56107e5366004612414565b6113d1565b3480156107f657600080fd5b5061035a601f5481565b34801561080c57600080fd5b506102d561081b3660046124b2565b611426565b6000546001600160a01b031633146108535760405162461bcd60e51b815260040161084a906124e4565b60405180910390fd5b6022805492151560ff199384161790556028805491151591909216179055565b6060600980546108829061250f565b80601f01602080910402602001604051908101604052809291908181526020018280546108ae9061250f565b80156108fb5780601f106108d0576101008083540402835291602001916108fb565b820191906000526020600020905b8154815290600101906020018083116108de57829003601f168201915b5050505050905090565b600061091233848461148f565b5060015b92915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610981576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061097b90849061255f565b90915550505b61098c848484611588565b949350505050565b6000546001600160a01b031633146109be5760405162461bcd60e51b815260040161084a906124e4565b600081836011546109cf9190612572565b6109d99190612589565b90506103e86011546109eb9190612589565b811015610a465760405162461bcd60e51b815260206004820152602360248201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604482015262363c9760e91b606482015260840161084a565b601e8190556008548290610a5b908590612572565b610a659190612589565b601f55505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610912918590610aa49086906125ab565b61148f565b6000546001600160a01b03163314610ad35760405162461bcd60e51b815260040161084a906124e4565b60008183601154610ae49190612572565b610aee9190612589565b905080601a819055508183600854610b069190612572565b610b109190612589565b601b55505050565b6000546001600160a01b03163314610b425760405162461bcd60e51b815260040161084a906124e4565b602654158015610b5a5750602254610100900460ff16155b610b6357600080fd5b60ff16602655565b6000546001600160a01b03163314610b955760405162461bcd60e51b815260040161084a906124e4565b6001600160a01b038116610bbb5760405162461bcd60e51b815260040161084a906125be565b61deac196001600160a01b03821601610be65760405162461bcd60e51b815260040161084a906125be565b60008054610bff916001600160a01b0390911690610d00565b610c0a816001610d00565b6000546016546001600160a01b03918216911603610c3e57601680546001600160a01b0319166001600160a01b0383161790555b600080546001600160a01b03908116825260016020818152604080852054600483528186208786168752835281862055845490931684525290205415610ca757600080546001600160a01b03168082526001602052604090912054610ca591908390611588565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600061091682600019610905565b6000546001600160a01b03163314610d2a5760405162461bcd60e51b815260040161084a906124e4565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d7f5760405162461bcd60e51b815260040161084a906124e4565b610d8981836125ab565b606414610dce5760405162461bcd60e51b81526020600482015260136024820152724d7573742061646420757020746f203130302560681b604482015260640161084a565b600e91909155600f55565b6000546001600160a01b03163314610e035760405162461bcd60e51b815260040161084a906124e4565b60008054610e1c916001600160a01b0390911690610d00565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e825760405162461bcd60e51b815260040161084a906124e4565b801515600003610eae57506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415610f0a5762093a8060035442610ec8919061255f565b11610f0a5760405162461bcd60e51b815260206004820152601260248201527127b732903bb2b2b59031b7b7b63237bbb71760711b604482015260640161084a565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6060600a80546108829061250f565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610912918590610aa490869061255f565b6000610f89338484611588565b5060019392505050565b6000546001600160a01b03163314610fbd5760405162461bcd60e51b815260040161084a906124e4565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061100a90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461103f5760405162461bcd60e51b815260040161084a906124e4565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000546001600160a01b031633146110975760405162461bcd60e51b815260040161084a906124e4565b600b92909255600c55600d55565b6000546001600160a01b031633146110cf5760405162461bcd60e51b815260040161084a906124e4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611138919061261b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a9919061261b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611218919061261b565b90506001600160a01b03811661139157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a919061261b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb919061261b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c919061261b565b601480546001600160a01b0319166001600160a01b03929092169190911790556113ad565b601480546001600160a01b0319166001600160a01b0383161790555b50601380546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146113fb5760405162461bcd60e51b815260040161084a906124e4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114505760405162461bcd60e51b815260040161084a906124e4565b828460115461145f9190612572565b6114699190612589565b602055601154819061147c908490612572565b6114869190612589565b60215550505050565b6001600160a01b0383166114db5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640161084a565b6001600160a01b0382166115275760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640161084a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166115d75760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b604482015260640161084a565b6001600160a01b0383166116245760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b604482015260640161084a565b6000821161165f5760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b604482015260640161084a565b611669848461194a565b1561186d5760285460ff1615611720576001600160a01b03841660009081526002602052604090205460ff16156116df576001600160a01b0383166000908152602960205260409020544390036116bf57600080fd5b6001600160a01b0383166000908152602960205260409020439055611720565b6001600160a01b03841660009081526029602052604090205443900361170457600080fd5b6001600160a01b03841660009081526029602052604090204390555b6001600160a01b03841660009081526002602052604090205460ff168061175f57506001600160a01b03831660009081526002602052604090205460ff165b156117b657601a548211156117b65760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e0000000000000000604482015260640161084a565b6015546001600160a01b038481169116148015906117ed57506001600160a01b03831660009081526002602052604090205460ff16155b1561186d57601e5482611815856001600160a01b031660009081526001602052604090205490565b61181f91906125ab565b111561186d5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e000000000000604482015260640161084a565b6001600160a01b03841660009081526005602052604090205460019060ff16806118af57506001600160a01b03841660009081526005602052604090205460ff165b156118b8575060005b6001600160a01b03841660009081526002602052604090205460ff161561193557601754600160a01b900460ff161580156118fc5750601754600160a81b900460ff165b1561193557306000908152600160205260408120549050602054811061193357602154811061192a57506021545b61193381611a08565b505b61194185858584611c01565b95945050505050565b600080546001600160a01b0384811691161480159061197757506000546001600160a01b03838116911614155b801561199c57506001600160a01b03821660009081526007602052604090205460ff16155b80156119c157506001600160a01b03831660009081526007602052604090205460ff16155b80156119d857506001600160a01b03821661dead14155b80156119ec57506001600160a01b03821615155b8015611a0157506001600160a01b0383163014155b9392505050565b6017805460ff60a01b1916600160a01b179055601054600f54600e54611a2e91906125ab565b611a3891906125ab565b15611bf15760006002601054600f54600e54611a5491906125ab565b611a5e91906125ab565b600e54611a6b9085612572565b611a759190612589565b611a7f9190612589565b90506000611a8d828461255f565b9050611a9881611ec0565b600047905060006002601054600f54600e54611ab491906125ab565b611abe91906125ab565b600e54611acb9085612572565b611ad59190612589565b611adf9190612589565b90508315611b3357611af18482612001565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611b3f858761255f565b1115611bec57601654601054600f546001600160a01b03909216916108fc91611b67916125ab565b600f54611b74858761255f565b611b7e9190612572565b611b889190612589565b6040518115909202916000818181858888f19350505050158015611bb0573d6000803e3d6000fd5b506017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611bea573d6000803e3d6000fd5b505b505050505b506017805460ff60a01b19169055565b60225460009060ff1615611ded576001600160a01b03851660009081526006602052604090205460ff1680611c4e57506001600160a01b03841660009081526006602052604090205460ff165b15611c8e5760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b604482015260640161084a565b602254610100900460ff16611d2457611ca7858561209b565b602254610100900460ff16158015611cc45750611cc4858561194a565b15611d1f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840161084a565b611ded565b6000602354118015611d4e57506001600160a01b03851660009081526002602052604090205460ff165b8015611d5f5750611d5f858561194a565b15611ded57602654602354611d74904361255f565b1015611ded576001600160a01b0384166000908152600660205260408120805460ff191660011790556027805491611dab83612638565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b6001600160a01b03851660009081526001602052604081208054859290611e1590849061255f565b909155506000905082611e285783611e33565b611e338686866121b9565b6001600160a01b038616600090815260016020526040812080549293508392909190611e609084906125ab565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611eac91815260200190565b60405180910390a350600195945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ef557611ef5612651565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f72919061261b565b81600181518110611f8557611f85612651565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac94790611fcb908590600090869030904290600401612667565b600060405180830381600087803b158015611fe557600080fd5b505af1158015611ff9573d6000803e3d6000fd5b505050505050565b60135460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561206f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061209491906126d8565b5050505050565b602254610100900460ff16156120ff5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161084a565b612109828261194a565b15801561212357506014546001600160a01b038281169116145b15610f3257436023556001600160a01b03821660009081526007602052604090819020805460ff191660019081179091556022805461ff001916610100179055426024556017805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916121ad91901515815260200190565b60405180910390a15050565b60145460009081906001600160a01b03908116908616036121dd5750600b54612201565b6014546001600160a01b03908116908516036121fc5750600c54612201565b50600d545b60006127106122108386612572565b61221a9190612589565b3060009081526001602052604081208054929350839290919061223e9084906125ab565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361228d818561255f565b9695505050505050565b803580151581146122a757600080fd5b919050565b600080604083850312156122bf57600080fd5b6122c883612297565b91506122d660208401612297565b90509250929050565b600060208083528351808285015260005b8181101561230c578581018301518582016040015282016122f0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461234257600080fd5b50565b6000806040838503121561235857600080fd5b82356123638161232d565b946020939093013593505050565b60008060006060848603121561238657600080fd5b83356123918161232d565b925060208401356123a18161232d565b929592945050506040919091013590565b600080604083850312156123c557600080fd5b50508035926020909101359150565b6000602082840312156123e657600080fd5b813560ff81168114611a0157600080fd5b60006020828403121561240957600080fd5b8135611a018161232d565b6000806040838503121561242757600080fd5b82356122c88161232d565b60006020828403121561244457600080fd5b611a0182612297565b6000806040838503121561246057600080fd5b823561246b8161232d565b9150602083013561247b8161232d565b809150509250929050565b60008060006060848603121561249b57600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156124c857600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b600181811c9082168061252357607f821691505b60208210810361254357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091657610916612549565b808202811582820484141761091657610916612549565b6000826125a657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561091657610916612549565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006020828403121561262d57600080fd5b8151611a018161232d565b60006001820161264a5761264a612549565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126b75784516001600160a01b031683529383019391830191600101612692565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156126ed57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205f54baacbdb9f66638b11a71a8bb5c5af183ad3023bc62f2bc4f6c3e26ce99e064736f6c63430008120033

Deployed Bytecode Sourcemap

5985:21423:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7361:73;;;;;;;;;;;;7392:42;7361:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;7361:73:0;;;;;;;;19485:169;;;;;;;;;;-1:-1:-1;19485:169:0;;;;;:::i;:::-;;:::i;:::-;;15824:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7186:35::-;;;;;;;;;;-1:-1:-1;7186:35:0;;;;-1:-1:-1;;;;;7186:35:0;;;16437:161;;;;;;;;;;-1:-1:-1;16437:161:0;;;;;:::i;:::-;;:::i;:::-;;;2048:14:1;;2041:22;2023:41;;2011:2;1996:18;16437:161:0;1883:187:1;15559:83:0;;;;;;;;;;-1:-1:-1;15632:7:0;;15559:83;;;2221:25:1;;;2209:2;2194:18;15559:83:0;2075:177:1;17051:306:0;;;;;;;;;;-1:-1:-1;17051:306:0;;;;;:::i;:::-;;:::i;20346:325::-;;;;;;;;;;-1:-1:-1;20346:325:0;;;;;:::i;:::-;;:::i;15648:80::-;;;;;;;;;;-1:-1:-1;15648:80:0;;7021:1;3113:36:1;;3101:2;3086:18;15648:80:0;2971:184:1;6760:34:0;;;;;;;;;;;;;;;;17365:215;;;;;;;;;;-1:-1:-1;17365:215:0;;;;;:::i;:::-;;:::i;6718:33::-;;;;;;;;;;;;;;;;20102:236;;;;;;;;;;-1:-1:-1;20102:236:0;;;;;:::i;:::-;;:::i;6649:26::-;;;;;;;;;;;;;;;;19312:165;;;;;;;;;;-1:-1:-1;19312:165:0;;;;;:::i;:::-;;:::i;7228:21::-;;;;;;;;;;-1:-1:-1;7228:21:0;;;;-1:-1:-1;;;;;7228:21:0;;;7671:41;;;;;;;;;;-1:-1:-1;7671:41:0;;;;-1:-1:-1;;;7671:41:0;;;;;;6801:34;;;;;;;;;;;;;;;;14242:761;;;;;;;;;;-1:-1:-1;14242:761:0;;;;;:::i;:::-;;:::i;18748:125::-;;;;;;;;;;-1:-1:-1;18748:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18837:28:0;18813:4;18837:28;;;:19;:28;;;;;;;;;18748:125;8402:36;;;;;;;;;;-1:-1:-1;8402:36:0;;;;;;;;;;;16923:120;;;;;;;;;;-1:-1:-1;16923:120:0;;;;;:::i;:::-;;:::i;6682:29::-;;;;;;;;;;;;;;;;18881:134;;;;;;;;;;-1:-1:-1;18881:134:0;;;;;:::i;:::-;;:::i;7884:77::-;;;;;;;;;;;;;;;;19862:232;;;;;;;;;;-1:-1:-1;19862:232:0;;;;;:::i;:::-;;:::i;16137:117::-;;;;;;;;;;-1:-1:-1;16137:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;16230:16:0;16203:7;16230:16;;;:7;:16;;;;;;;16137:117;15011:195;;;;;;;;;;;;;:::i;18330:410::-;;;;;;;;;;-1:-1:-1;18330:410:0;;;;;:::i;:::-;;:::i;15910:80::-;;;;;;;;;;-1:-1:-1;15962:7:0;14220:6;-1:-1:-1;;;;;14220:6:0;15910:80;;19023:132;;;;;;;;;;-1:-1:-1;19023:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;19116:31:0;19092:4;19116:31;;;:22;:31;;;;;;;;;19023:132;15734:84;;;;;;;;;;;;;:::i;17588:225::-;;;;;;;;;;-1:-1:-1;17588:225:0;;;;;:::i;:::-;;:::i;6842:28::-;;;;;;;;;;;;;;;;16262:167;;;;;;;;;;-1:-1:-1;16262:167:0;;;;;:::i;:::-;;:::i;21187:171::-;;;;;;;;;;-1:-1:-1;21187:171:0;;;;;:::i;:::-;;:::i;20976:203::-;;;;;;;;;;-1:-1:-1;20976:203:0;;;;;:::i;:::-;;:::i;15996:133::-;;;;;;;;;;-1:-1:-1;15996:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16098:19:0;;;16080:7;16098:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15996:133;8613:32;;;;;;;;;;;;;;;;19662:192;;;;;;;;;;-1:-1:-1;19662:192:0;;;;;:::i;:::-;;:::i;17821:501::-;;;;;;;;;;-1:-1:-1;17821:501:0;;;;;:::i;:::-;;:::i;19163:141::-;;;;;;;;;;-1:-1:-1;19163:141:0;;;;;:::i;:::-;;:::i;8145:87::-;;;;;;;;;;;;;;;;20679:289;;;;;;;;;;-1:-1:-1;20679:289:0;;;;;:::i;:::-;;:::i;19485:169::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;;;;;;;;;19580:16:::1;:28:::0;;;::::1;;-1:-1:-1::0;;19580:28:0;;::::1;;::::0;;19619:15:::1;:27:::0;;;::::1;;::::0;;;::::1;;::::0;;19485:169::o;15824:80::-;15872:13;15896:5;15889:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:80;:::o;16437:161::-;16512:4;16529:39;466:10;16552:7;16561:6;16529:8;:39::i;:::-;-1:-1:-1;16586:4:0;16437:161;;;;;:::o;17051:306::-;-1:-1:-1;;;;;17172:19:0;;17151:4;17172:19;;;:11;:19;;;;;;;;17192:10;17172:31;;;;;;;;-1:-1:-1;;17172:52:0;17168:126;;-1:-1:-1;;;;;17241:19:0;;;;;;:11;:19;;;;;;;;17261:10;17241:31;;;;;;;:41;;17276:6;;17241:19;:41;;17276:6;;17241:41;:::i;:::-;;;;-1:-1:-1;;17168:126:0;17313:36;17323:6;17331:9;17342:6;17313:9;:36::i;:::-;17306:43;17051:306;-1:-1:-1;;;;17051:306:0:o;20346:325::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;20436:13:::1;20474:7;20463;20453;;:17;;;;:::i;:::-;20452:29;;;;:::i;:::-;20436:45;;20520:4;20510:7;;:14;;;;:::i;:::-;20500:5;:25;;20492:73;;;::::0;-1:-1:-1;;;20492:73:0;;7297:2:1;20492:73:0::1;::::0;::::1;7279:21:1::0;7336:2;7316:18;;;7309:30;7375:34;7355:18;;;7348:62;-1:-1:-1;;;7426:18:1;;;7419:33;7469:19;;20492:73:0::1;7095:399:1::0;20492:73:0::1;20576:14;:22:::0;;;20628:14:::1;::::0;20656:7;;20628:24:::1;::::0;20645:7;;20628:24:::1;:::i;:::-;20627:36;;;;:::i;:::-;20609:15;:54:::0;-1:-1:-1;;;20346:325:0:o;17365:215::-;466:10;17453:4;17502:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17502:34:0;;;;;;;;;;17453:4;;17470:80;;17493:7;;17502:47;;17539:10;;17502:47;:::i;:::-;17470:8;:80::i;20102:236::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;20191:13:::1;20229:7;20218;20208;;:17;;;;:::i;:::-;20207:29;;;;:::i;:::-;20191:45;;20262:5;20247:12;:20;;;;20323:7;20312;20295:14;;:24;;;;:::i;:::-;20294:36;;;;:::i;:::-;20278:13;:52:::0;-1:-1:-1;;;20102:236:0:o;19312:165::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;19396:13:::1;::::0;:18;:39;::::1;;;-1:-1:-1::0;19419:16:0::1;::::0;::::1;::::0;::::1;;;19418:17;19396:39;19387:49;;;::::0;::::1;;19447:22;;:13;:22:::0;19312:165::o;14242:761::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14323:22:0;::::1;14315:96;;;;-1:-1:-1::0;;;14315:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;14430:16:0;::::1;::::0;14422:90:::1;;;;-1:-1:-1::0;;;14422:90:0::1;;;;;;;:::i;:::-;14543:6;::::0;;14523:34:::1;::::0;-1:-1:-1;;;;;14543:6:0;;::::1;::::0;14523:19:::1;:34::i;:::-;14568:35;14588:8;14598:4;14568:19;:35::i;:::-;14656:6;::::0;14628:16:::1;::::0;-1:-1:-1;;;;;14656:6:0;;::::1;14628:16:::0;::::1;:35:::0;14624:90:::1;;14678:16;:36:::0;;-1:-1:-1;;;;;;14678:36:0::1;-1:-1:-1::0;;;;;14678:36:0;::::1;;::::0;;14624:90:::1;14777:6;::::0;;-1:-1:-1;;;;;14777:6:0;;::::1;16230:16:::0;;:7;:16;;;;;;;;;14735:11:::1;:19:::0;;;;;:29;;::::1;::::0;;;;;;;:49;14808:6;;;;::::1;16230:16:::0;;;;;;14798:21;14795:99:::1;;14846:6;::::0;;-1:-1:-1;;;;;14846:6:0::1;16230:16:::0;;;:7;:16;;;;;;;14836:46:::1;::::0;14846:6;14854:8;;14836:9:::1;:46::i;:::-;;14795:99;14914:6;:17:::0;;-1:-1:-1;;;;;;14914:17:0::1;-1:-1:-1::0;;;;;14914:17:0;::::1;::::0;;::::1;::::0;;14947:38:::1;::::0;14914:17;;;;14947:38:::1;::::0;14914:6;14947:38:::1;14242:761:::0;:::o;16923:120::-;16976:4;17000:35;17008:7;-1:-1:-1;;17000:7:0;:35::i;18881:134::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18969:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18969:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18881:134::o;19862:232::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;19958:21:::1;19970:9:::0;19958;:21:::1;:::i;:::-;19983:3;19958:28;19949:61;;;::::0;-1:-1:-1;;;19949:61:0;;8261:2:1;19949:61:0::1;::::0;::::1;8243:21:1::0;8300:2;8280:18;;;8273:30;-1:-1:-1;;;8319:18:1;;;8312:49;8378:18;;19949:61:0::1;8059:343:1::0;19949:61:0::1;20021:15;:27:::0;;;;20059:15:::1;:27:::0;19862:232::o;15011:195::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;15098:6:::1;::::0;;15078:34:::1;::::0;-1:-1:-1;;;;;15098:6:0;;::::1;::::0;15078:19:::1;:34::i;:::-;15140:1;15123:19:::0;;-1:-1:-1;;;;;;15123:19:0::1;::::0;;15158:40:::1;::::0;15140:1;;15158:40:::1;::::0;15140:1;;15158:40:::1;15011:195::o:0;18330:410::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;18411:16;::::1;;18422:5;18411:16:::0;18407:326:::1;;-1:-1:-1::0;;;;;;18444:13:0::1;18460:5;18444:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;18444:21:0::1;::::0;;18330:410::o;18407:326::-:1;18502:17;::::0;:22;18498:139:::1;;18591:7;18571:17;;18553:15;:35;;;;:::i;:::-;:45;18545:76;;;::::0;-1:-1:-1;;;18545:76:0;;8609:2:1;18545:76:0::1;::::0;::::1;8591:21:1::0;8648:2;8628:18;;;8621:30;-1:-1:-1;;;8667:18:1;;;8660:48;8725:18;;18545:76:0::1;8407:342:1::0;18545:76:0::1;-1:-1:-1::0;;;;;18651:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;18651:20:0::1;18667:4;18651:20;::::0;;18706:15:::1;18686:17;:35:::0;18407:326:::1;18330:410:::0;;:::o;15734:84::-;15784:13;15808:7;15801:14;;;;;:::i;17588:225::-;466:10;17681:4;17730:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17730:34:0;;;;;;;;;;17681:4;;17698:85;;17721:7;;17730:52;;17767:15;;17730:52;:::i;16262:167::-;16340:4;16357:42;466:10;16381:9;16392:6;16357:9;:42::i;:::-;-1:-1:-1;16417:4:0;;16262:167;-1:-1:-1;;;16262:167:0:o;21187:171::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;21264:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;21264:32:0::1;-1:-1:-1::0;;;;21264:32:0;;::::1;;::::0;;21312:38:::1;::::0;::::1;::::0;::::1;::::0;21288:8;2048:14:1;2041:22;2023:41;;2011:2;1996:18;;1883:187;21312:38:0::1;;;;;;;;21187:171:::0;:::o;20976:203::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;21086:16:::1;:43:::0;;-1:-1:-1;;;;;21086:43:0;;::::1;-1:-1:-1::0;;;;;;21086:43:0;;::::1;;::::0;;;21140:10:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;20976:203::o;19662:192::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;19764:7:::1;:16:::0;;;;19791:8:::1;:18:::0;19820:12:::1;:26:::0;19662:192::o;17821:501::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;17892:29:::1;17943:9;17892:61;;17964:16;18001:10;-1:-1:-1::0;;;;;18001:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17983:47:0::1;;18039:4;18046:10;-1:-1:-1::0;;;;;18046:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17983:81;::::0;-1:-1:-1;;;;;;17983:81:0::1;::::0;;;;;;-1:-1:-1;;;;;9240:15:1;;;17983:81:0::1;::::0;::::1;9222:34:1::0;9292:15;;9272:18;;;9265:43;9157:18;;17983:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17964:100:::0;-1:-1:-1;;;;;;18079:22:0;::::1;18075:207;;18145:10;-1:-1:-1::0;;;;;18145:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18127:50:0::1;;18186:4;18193:10;-1:-1:-1::0;;;;;18193:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18127:84;::::0;-1:-1:-1;;;;;;18127:84:0::1;::::0;;;;;;-1:-1:-1;;;;;9240:15:1;;;18127:84:0::1;::::0;::::1;9222:34:1::0;9292:15;;9272:18;;;9265:43;9157:18;;18127:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18118:6;:93:::0;;-1:-1:-1;;;;;;18118:93:0::1;-1:-1:-1::0;;;;;18118:93:0;;;::::1;::::0;;;::::1;::::0;;18075:207:::1;;;18253:6;:17:::0;;-1:-1:-1;;;;;;18253:17:0::1;-1:-1:-1::0;;;;;18253:17:0;::::1;;::::0;;18075:207:::1;-1:-1:-1::0;18292:9:0::1;:22:::0;;-1:-1:-1;;;;;;18292:22:0::1;-1:-1:-1::0;;;;;18292:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;17821:501:0:o;19163:141::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19255:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;19255:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19163:141::o;20679:289::-;9307:6;;-1:-1:-1;;;;;9307:6:0;466:10;9307:22;9299:52;;;;-1:-1:-1;;;9299:52:0;;;;;;;:::i;:::-;20879:16:::1;20859;20849:7;;:26;;;;:::i;:::-;20848:47;;;;:::i;:::-;20832:13;:63:::0;20920:7:::1;::::0;20947:13;;20920:23:::1;::::0;20930:13;;20920:23:::1;:::i;:::-;20919:41;;;;:::i;:::-;20906:10;:54:::0;-1:-1:-1;;;;20679:289:0:o;16606:309::-;-1:-1:-1;;;;;16700:20:0;;16692:52;;;;-1:-1:-1;;;16692:52:0;;9521:2:1;16692:52:0;;;9503:21:1;9560:2;9540:18;;;9533:30;-1:-1:-1;;;9579:18:1;;;9572:49;9638:18;;16692:52:0;9319:343:1;16692:52:0;-1:-1:-1;;;;;16763:21:0;;16755:53;;;;-1:-1:-1;;;16755:53:0;;9521:2:1;16755:53:0;;;9503:21:1;9560:2;9540:18;;;9533:30;-1:-1:-1;;;9579:18:1;;;9572:49;9638:18;;16755:53:0;9319:343:1;16755:53:0;-1:-1:-1;;;;;16821:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16874:33;;2221:25:1;;;16874:33:0;;2194:18:1;16874:33:0;;;;;;;16606:309;;;:::o;21697:1646::-;21776:4;-1:-1:-1;;;;;21801:18:0;;21793:51;;;;-1:-1:-1;;;21793:51:0;;9869:2:1;21793:51:0;;;9851:21:1;9908:2;9888:18;;;9881:30;-1:-1:-1;;;9927:18:1;;;9920:50;9987:18;;21793:51:0;9667:344:1;21793:51:0;-1:-1:-1;;;;;21863:16:0;;21855:49;;;;-1:-1:-1;;;21855:49:0;;9869:2:1;21855:49:0;;;9851:21:1;9908:2;9888:18;;;9881:30;-1:-1:-1;;;9927:18:1;;;9920:50;9987:18;;21855:49:0;9667:344:1;21855:49:0;21932:1;21923:6;:10;21915:31;;;;-1:-1:-1;;;21915:31:0;;10218:2:1;21915:31:0;;;10200:21:1;10257:1;10237:18;;;10230:29;-1:-1:-1;;;10275:18:1;;;10268:38;10323:18;;21915:31:0;10016:331:1;21915:31:0;21960:20;21971:4;21977:2;21960:10;:20::i;:::-;21957:707;;;22001:15;;;;21997:347;;;-1:-1:-1;;;;;22041:13:0;;;;;;:7;:13;;;;;;;;22037:292;;;-1:-1:-1;;;;;22086:13:0;;;;;;:9;:13;;;;;;22103:12;22086:29;;22078:38;;;;;;-1:-1:-1;;;;;22139:13:0;;;;;;:9;:13;;;;;22155:12;22139:28;;22037:292;;;-1:-1:-1;;;;;22224:15:0;;;;;;:9;:15;;;;;;22243:12;22224:31;;22216:40;;;;;;-1:-1:-1;;;;;22279:15:0;;;;;;:9;:15;;;;;22297:12;22279:30;;22037:292;-1:-1:-1;;;;;22361:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;22378:11:0;;;;;;:7;:11;;;;;;;;22361:28;22358:126;;;22427:12;;22417:6;:22;;22409:59;;;;-1:-1:-1;;;22409:59:0;;10554:2:1;22409:59:0;;;10536:21:1;10593:2;10573:18;;;10566:30;10632:26;10612:18;;;10605:54;10676:18;;22409:59:0;10352:348:1;22409:59:0;22507:14;;-1:-1:-1;;;;;22501:20:0;;;22507:14;;22501:20;;;;:36;;-1:-1:-1;;;;;;22526:11:0;;;;;;:7;:11;;;;;;;;22525:12;22501:36;22498:155;;;22592:14;;22582:6;22566:13;22576:2;-1:-1:-1;;;;;16230:16:0;16203:7;16230:16;;;:7;:16;;;;;;;16137:117;22566:13;:22;;;;:::i;:::-;:40;;22558:79;;;;-1:-1:-1;;;22558:79:0;;10907:2:1;22558:79:0;;;10889:21:1;10946:2;10926:18;;;10919:30;10985:28;10965:18;;;10958:56;11031:18;;22558:79:0;10705:350:1;22558:79:0;-1:-1:-1;;;;;22709:25:0;;22676:12;22709:25;;;:19;:25;;;;;;22691:4;;22709:25;;;:52;;-1:-1:-1;;;;;;22738:23:0;;;;;;:19;:23;;;;;;;;22709:52;22706:98;;;-1:-1:-1;22787:5:0;22706:98;-1:-1:-1;;;;;22820:11:0;;;;;;:7;:11;;;;;;;;22816:457;;;22853:16;;-1:-1:-1;;;22853:16:0;;;;22852:17;:59;;;;-1:-1:-1;22890:21:0;;-1:-1:-1;;;22890:21:0;;;;22852:59;22848:408;;;22995:4;22946:28;16230:16;;;:7;:16;;;;;;22946:55;;23048:13;;23024:20;:37;23020:221;;23113:10;;23089:20;:34;23086:77;;-1:-1:-1;23150:10:0;;23086:77;23185:36;23200:20;23185:14;:36::i;:::-;22927:329;22848:408;23291:44;23309:4;23315:2;23319:6;23327:7;23291:17;:44::i;:::-;23284:51;21697:1646;-1:-1:-1;;;;;21697:1646:0:o;21366:323::-;21434:4;14220:6;;-1:-1:-1;;;;;21458:15:0;;;14220:6;;21458:15;;;;:45;;-1:-1:-1;14193:7:0;14220:6;-1:-1:-1;;;;;21490:13:0;;;14220:6;;21490:13;;21458:45;:84;;;;-1:-1:-1;;;;;;21521:21:0;;;;;;:17;:21;;;;;;;;21520:22;21458:84;:125;;;;-1:-1:-1;;;;;;21560:23:0;;;;;;:17;:23;;;;;;;;21559:24;21458:125;:152;;;;-1:-1:-1;;;;;;21600:10:0;;7392:42;21600:10;;21458:152;:185;;;;-1:-1:-1;;;;;;21627:16:0;;;;21458:185;:223;;;;-1:-1:-1;;;;;;21660:21:0;;21676:4;21660:21;;21458:223;21451:230;21366:323;-1:-1:-1;;;21366:323:0:o;23351:1014::-;9181:16;:23;;-1:-1:-1;;;;9181:23:0;-1:-1:-1;;;9181:23:0;;;23476:9:::1;::::0;23458:15:::1;::::0;23440::::1;::::0;:33:::1;::::0;23458:15;23440:33:::1;:::i;:::-;:45;;;;:::i;:::-;23436:76:::0;23505:7:::1;23436:76;23522:17;23637:1;23623:9;;23605:15;;23587;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;23567:15;::::0;23544:38:::1;::::0;:20;:38:::1;:::i;:::-;23543:90;;;;:::i;:::-;23542:96;;;;:::i;:::-;23522:116:::0;-1:-1:-1;23651:20:0::1;23674:32;23522:116:::0;23674:20;:32:::1;:::i;:::-;23651:55;;23717:30;23734:12;23717:16;:30::i;:::-;23760:22;23785:21;23760:46;;23817:24;23933:1;23919:9;;23901:15;;23883;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;23863:15;::::0;23846:32:::1;::::0;:14;:32:::1;:::i;:::-;23845:84;;;;:::i;:::-;23844:90;;;;:::i;:::-;23817:117:::0;-1:-1:-1;23951:13:0;;23947:161:::1;;23981:41;23994:9;24005:16;23981:12;:41::i;:::-;24042:54;::::0;;11262:25:1;;;11318:2;11303:18;;11296:34;;;11346:18;;;11339:34;;;24042:54:0::1;::::0;11250:2:1;11235:18;24042:54:0::1;;;;;;;23947:161;24157:1;24122:32;24145:9:::0;24122:20;:32:::1;:::i;:::-;:36;24118:240;;;24175:16;::::0;24278:9:::1;::::0;24260:15:::1;::::0;-1:-1:-1;;;;;24175:16:0;;::::1;::::0;:114:::1;::::0;24260:27:::1;::::0;::::1;:::i;:::-;24240:15;::::0;24203:33:::1;24220:16:::0;24203:14;:33:::1;:::i;:::-;24202:53;;;;:::i;:::-;24201:87;;;;:::i;:::-;24175:114;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24304:10:0::1;::::0;:42:::1;::::0;-1:-1:-1;;;;;24304:10:0;;::::1;::::0;24324:21:::1;24304:42:::0;::::1;;;::::0;:10:::1;:42:::0;:10;:42;24324:21;24304:10;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24118:240;23425:940;;;;9215:1;-1:-1:-1::0;9227:16:0;:24;;-1:-1:-1;;;;9227:24:0;;;23351:1014::o;25640:1216::-;25761:16;;25740:4;;25761:16;;25757:858;;;-1:-1:-1;;;;;19116:31:0;;19092:4;19116:31;;;:22;:31;;;;;;;;25797:56;;;-1:-1:-1;;;;;;19116:31:0;;19092:4;19116:31;;;:22;:31;;;;;;;;25828:25;25793:123;;;25874:26;;-1:-1:-1;;;25874:26:0;;11586:2:1;25874:26:0;;;11568:21:1;11625:2;11605:18;;;11598:30;-1:-1:-1;;;11644:18:1;;;11637:46;11700:18;;25874:26:0;11384:340:1;25793:123:0;25937:16;;;;;;;25932:672;;25974:28;25993:4;25999:2;25974:18;:28::i;:::-;26026:16;;;;;;;26025:17;:41;;;;;26046:20;26057:4;26063:2;26046:10;:20::i;:::-;26021:137;;;26091:47;;-1:-1:-1;;;26091:47:0;;11931:2:1;26091:47:0;;;11913:21:1;11970:2;11950:18;;;11943:30;12009:34;11989:18;;;11982:62;-1:-1:-1;;;12060:18:1;;;12053:35;12105:19;;26091:47:0;11729:401:1;26021:137:0;25932:672;;;26217:1;26202:12;;:16;:55;;;;-1:-1:-1;;;;;;26244:13:0;;;;;;:7;:13;;;;;;;;26202:55;:101;;;;;26283:20;26294:4;26300:2;26283:10;:20::i;:::-;26198:391;;;26380:13;;26365:12;;26350:27;;:12;:27;:::i;:::-;:43;26346:224;;;-1:-1:-1;;;;;26422:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;26422:33:0;26451:4;26422:33;;;26482:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;26530:16:0;;-1:-1:-1;;;;;178:32:1;;160:51;;26530:16:0;;148:2:1;133:18;26530:16:0;;;;;;;26346:224;-1:-1:-1;;;;;26627:13:0;;;;;;:7;:13;;;;;:23;;26644:6;;26627:13;:23;;26644:6;;26627:23;:::i;:::-;;;;-1:-1:-1;26661:22:0;;-1:-1:-1;26687:7:0;26686:48;;26728:6;26686:48;;;26698:27;26708:4;26714:2;26718:6;26698:9;:27::i;:::-;-1:-1:-1;;;;;26745:11:0;;;;;;:7;:11;;;;;:29;;26661:73;;-1:-1:-1;26661:73:0;;26745:11;;;:29;;26661:73;;26745:29;:::i;:::-;;;;;;;;26807:2;-1:-1:-1;;;;;26792:34:0;26801:4;-1:-1:-1;;;;;26792:34:0;;26811:14;26792:34;;;;2221:25:1;;2209:2;2194:18;;2075:177;26792:34:0;;;;;;;;-1:-1:-1;26844:4:0;;25640:1216;-1:-1:-1;;;;;25640:1216:0:o;24373:417::-;24464:16;;;24478:1;24464:16;;;;;;;;24440:21;;24464:16;;;;;;;;;;-1:-1:-1;24464:16:0;24440:40;;24509:4;24491;24496:1;24491:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24491:23:0;;;:7;;;;;;;;;;:23;;;;24535:9;;:16;;;-1:-1:-1;;;24535:16:0;;;;:9;;;;;:14;;:16;;;;;24491:7;;24535:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24525:4;24530:1;24525:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24525:26:0;;;:7;;;;;;;;;:26;24564:9;;:218;;-1:-1:-1;;;24564:218:0;;:9;;;:60;;:218;;24639:11;;24564:9;;24709:4;;24736;;24756:15;;24564:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24429:361;24373:417;:::o;24798:332::-;24879:9;;:243;;-1:-1:-1;;;24879:243:0;;24945:4;24879:243;;;13865:34:1;13915:18;;;13908:34;;;24879:9:0;13958:18:1;;;13951:34;;;14001:18;;;13994:34;7392:42:0;14044:19:1;;;14037:44;25096:15:0;14097:19:1;;;14090:35;-1:-1:-1;;;;;24879:9:0;;;;:25;;24912:9;;13799:19:1;;24879:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24798:332;;:::o;25138:494::-;25220:16;;;;;;;25219:17;25211:65;;;;-1:-1:-1;;;25211:65:0;;14649:2:1;25211:65:0;;;14631:21:1;14688:2;14668:18;;;14661:30;14727:34;14707:18;;;14700:62;-1:-1:-1;;;14778:18:1;;;14771:33;14821:19;;25211:65:0;14447:399:1;25211:65:0;25292:20;25303:4;25309:2;25292:10;:20::i;:::-;25291:21;:37;;;;-1:-1:-1;25322:6:0;;-1:-1:-1;;;;;25316:12:0;;;25322:6;;25316:12;25291:37;25287:338;;;25374:12;25359;:27;-1:-1:-1;;;;;25401:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;25401:30:0;25427:4;25401:30;;;;;;25446:16;:23;;-1:-1:-1;;25446:23:0;25401:30;25446:23;;;25499:15;25484:12;:30;25531:21;:28;;-1:-1:-1;;;;25531:28:0;-1:-1:-1;;;25531:28:0;;;25579:34;;;;;;2048:14:1;;2041:22;2023:41;;2011:2;1996:18;;1883:187;25579:34:0;;;;;;;;25138:494;;:::o;26864:541::-;27004:6;;26943:7;;;;-1:-1:-1;;;;;27004:6:0;;;26996:14;;;;26992:197;;-1:-1:-1;27040:7:0;;26992:197;;;27075:6;;-1:-1:-1;;;;;27075:6:0;;;27069:12;;;;27065:124;;-1:-1:-1;27111:8:0;;27065:124;;;-1:-1:-1;27165:12:0;;27065:124;27201:17;6923:5;27221:19;27230:10;27221:6;:19;:::i;:::-;:38;;;;:::i;:::-;27286:4;27270:22;;;;:7;:22;;;;;:35;;27201:58;;-1:-1:-1;27201:58:0;;27270:22;;;:35;;27201:58;;27270:35;:::i;:::-;;;;-1:-1:-1;;27321:40:0;;2221:25:1;;;27344:4:0;;-1:-1:-1;;;;;27321:40:0;;;;;2209:2:1;2194:18;27321:40:0;;;;;;;27379:18;27388:9;27379:6;:18;:::i;:::-;27372:25;26864:541;-1:-1:-1;;;;;;26864:541:0:o;222:160:1:-;287:20;;343:13;;336:21;326:32;;316:60;;372:1;369;362:12;316:60;222:160;;;:::o;387:248::-;449:6;457;510:2;498:9;489:7;485:23;481:32;478:52;;;526:1;523;516:12;478:52;549:26;565:9;549:26;:::i;:::-;539:36;;594:35;625:2;614:9;610:18;594:35;:::i;:::-;584:45;;387:248;;;;;:::o;640:548::-;752:4;781:2;810;799:9;792:21;842:6;836:13;885:6;880:2;869:9;865:18;858:34;910:1;920:140;934:6;931:1;928:13;920:140;;;1029:14;;;1025:23;;1019:30;995:17;;;1014:2;991:26;984:66;949:10;;920:140;;;924:3;1109:1;1104:2;1095:6;1084:9;1080:22;1076:31;1069:42;1179:2;1172;1168:7;1163:2;1155:6;1151:15;1147:29;1136:9;1132:45;1128:54;1120:62;;;;640:548;;;;:::o;1427:131::-;-1:-1:-1;;;;;1502:31:1;;1492:42;;1482:70;;1548:1;1545;1538:12;1482:70;1427:131;:::o;1563:315::-;1631:6;1639;1692:2;1680:9;1671:7;1667:23;1663:32;1660:52;;;1708:1;1705;1698:12;1660:52;1747:9;1734:23;1766:31;1791:5;1766:31;:::i;:::-;1816:5;1868:2;1853:18;;;;1840:32;;-1:-1:-1;;;1563:315:1:o;2257:456::-;2334:6;2342;2350;2403:2;2391:9;2382:7;2378:23;2374:32;2371:52;;;2419:1;2416;2409:12;2371:52;2458:9;2445:23;2477:31;2502:5;2477:31;:::i;:::-;2527:5;-1:-1:-1;2584:2:1;2569:18;;2556:32;2597:33;2556:32;2597:33;:::i;:::-;2257:456;;2649:7;;-1:-1:-1;;;2703:2:1;2688:18;;;;2675:32;;2257:456::o;2718:248::-;2786:6;2794;2847:2;2835:9;2826:7;2822:23;2818:32;2815:52;;;2863:1;2860;2853:12;2815:52;-1:-1:-1;;2886:23:1;;;2956:2;2941:18;;;2928:32;;-1:-1:-1;2718:248:1:o;3160:269::-;3217:6;3270:2;3258:9;3249:7;3245:23;3241:32;3238:52;;;3286:1;3283;3276:12;3238:52;3325:9;3312:23;3375:4;3368:5;3364:16;3357:5;3354:27;3344:55;;3395:1;3392;3385:12;3434:247;3493:6;3546:2;3534:9;3525:7;3521:23;3517:32;3514:52;;;3562:1;3559;3552:12;3514:52;3601:9;3588:23;3620:31;3645:5;3620:31;:::i;3686:315::-;3751:6;3759;3812:2;3800:9;3791:7;3787:23;3783:32;3780:52;;;3828:1;3825;3818:12;3780:52;3867:9;3854:23;3886:31;3911:5;3886:31;:::i;4006:180::-;4062:6;4115:2;4103:9;4094:7;4090:23;4086:32;4083:52;;;4131:1;4128;4121:12;4083:52;4154:26;4170:9;4154:26;:::i;4191:404::-;4275:6;4283;4336:2;4324:9;4315:7;4311:23;4307:32;4304:52;;;4352:1;4349;4342:12;4304:52;4391:9;4378:23;4410:31;4435:5;4410:31;:::i;:::-;4460:5;-1:-1:-1;4517:2:1;4502:18;;4489:32;4530:33;4489:32;4530:33;:::i;:::-;4582:7;4572:17;;;4191:404;;;;;:::o;4993:316::-;5070:6;5078;5086;5139:2;5127:9;5118:7;5114:23;5110:32;5107:52;;;5155:1;5152;5145:12;5107:52;-1:-1:-1;;5178:23:1;;;5248:2;5233:18;;5220:32;;-1:-1:-1;5299:2:1;5284:18;;;5271:32;;4993:316;-1:-1:-1;4993:316:1:o;5314:385::-;5400:6;5408;5416;5424;5477:3;5465:9;5456:7;5452:23;5448:33;5445:53;;;5494:1;5491;5484:12;5445:53;-1:-1:-1;;5517:23:1;;;5587:2;5572:18;;5559:32;;-1:-1:-1;5638:2:1;5623:18;;5610:32;;5689:2;5674:18;5661:32;;-1:-1:-1;5314:385:1;-1:-1:-1;5314:385:1:o;5704:341::-;5906:2;5888:21;;;5945:2;5925:18;;;5918:30;-1:-1:-1;;;5979:2:1;5964:18;;5957:47;6036:2;6021:18;;5704:341::o;6050:380::-;6129:1;6125:12;;;;6172;;;6193:61;;6247:4;6239:6;6235:17;6225:27;;6193:61;6300:2;6292:6;6289:14;6269:18;6266:38;6263:161;;6346:10;6341:3;6337:20;6334:1;6327:31;6381:4;6378:1;6371:15;6409:4;6406:1;6399:15;6263:161;;6050:380;;;:::o;6435:127::-;6496:10;6491:3;6487:20;6484:1;6477:31;6527:4;6524:1;6517:15;6551:4;6548:1;6541:15;6567:128;6634:9;;;6655:11;;;6652:37;;;6669:18;;:::i;6700:168::-;6773:9;;;6804;;6821:15;;;6815:22;;6801:37;6791:71;;6842:18;;:::i;6873:217::-;6913:1;6939;6929:132;;6983:10;6978:3;6974:20;6971:1;6964:31;7018:4;7015:1;7008:15;7046:4;7043:1;7036:15;6929:132;-1:-1:-1;7075:9:1;;6873:217::o;7499:125::-;7564:9;;;7585:10;;;7582:36;;;7598:18;;:::i;7629:425::-;7831:2;7813:21;;;7870:2;7850:18;;;7843:30;7909:34;7904:2;7889:18;;7882:62;7980:31;7975:2;7960:18;;7953:59;8044:3;8029:19;;7629:425::o;8754:251::-;8824:6;8877:2;8865:9;8856:7;8852:23;8848:32;8845:52;;;8893:1;8890;8883:12;8845:52;8925:9;8919:16;8944:31;8969:5;8944:31;:::i;12135:135::-;12174:3;12195:17;;;12192:43;;12215:18;;:::i;:::-;-1:-1:-1;12262:1:1;12251:13;;12135:135::o;12407:127::-;12468:10;12463:3;12459:20;12456:1;12449:31;12499:4;12496:1;12489:15;12523:4;12520:1;12513:15;12539:980;12801:4;12849:3;12838:9;12834:19;12880:6;12869:9;12862:25;12906:2;12944:6;12939:2;12928:9;12924:18;12917:34;12987:3;12982:2;12971:9;12967:18;12960:31;13011:6;13046;13040:13;13077:6;13069;13062:22;13115:3;13104:9;13100:19;13093:26;;13154:2;13146:6;13142:15;13128:29;;13175:1;13185:195;13199:6;13196:1;13193:13;13185:195;;;13264:13;;-1:-1:-1;;;;;13260:39:1;13248:52;;13355:15;;;;13320:12;;;;13296:1;13214:9;13185:195;;;-1:-1:-1;;;;;;;13436:32:1;;;;13431:2;13416:18;;13409:60;-1:-1:-1;;;13500:3:1;13485:19;13478:35;13397:3;12539:980;-1:-1:-1;;;12539:980:1:o;14136:306::-;14224:6;14232;14240;14293:2;14281:9;14272:7;14268:23;14264:32;14261:52;;;14309:1;14306;14299:12;14261:52;14338:9;14332:16;14322:26;;14388:2;14377:9;14373:18;14367:25;14357:35;;14432:2;14421:9;14417:18;14411:25;14401:35;;14136:306;;;;;:::o

Swarm Source

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