ETH Price: $3,634.20 (+9.37%)

Token

Walnuts ($WALNUTS)
 

Overview

Max Total Supply

420,000,000 $WALNUTS

Holders

171 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
143,250.062932676343652308 $WALNUTS

Value
$0.00
0xc26339da21a997f3b02ccdac10f37df80ff0c014
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Meme token for entertainment purposes and swap aggregator.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
deezWalnuts

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-12-19
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

library Address {
	function isContract(address account) internal view returns (bool) {
		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

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

		(bool success, ) = recipient.call{value: amount}("");
		require(
			success,
			"Address: unable to send value, recipient may have reverted"
		);
	}

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

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

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

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(
			address(this).balance >= value,
			"Address: insufficient balance for call"
		);
		require(isContract(target), "Address: call to non-contract");

		(bool success, bytes memory returndata) = target.call{value: value}(
		data
		);
		return _verifyCallResult(success, returndata, errorMessage);
	}

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

	function functionStaticCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");

		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

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

	function functionDelegateCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");

		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function _verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) private pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

   function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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


    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract deezWalnuts is Ownable, ERC20 {
    using Address for address;

    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Walnuts";
    string private constant _symbol = "$WALNUTS";

    bool public isTradingEnabled;

    uint256 public initialSupply = 420000000 * (10**18);

    // max buy and sell tx is 100% of initialSupply
    uint256 public maxTxAmount = initialSupply;

    // max wallet is 1% of initialSupply
    uint256 public maxWalletAmount = initialSupply * 100 / 10000;

    bool private _swapping;
    uint256 public minimumTokensBeforeSwap = initialSupply * 1 / 100000;

    address public liquidity1Wallet;
    address public liquidity2Wallet;
    address public operationsWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 liquidity1FeeOnBuy;
        uint8 liquidity1FeeOnSell;
        uint8 liquidity2FeeOnBuy;
        uint8 liquidity2FeeOnSell;
        uint8 operationsFeeOnBuy;
        uint8 operationsFeeOnSell;
    }

    // Base taxes
    CustomTaxPeriod private _base = CustomTaxPeriod("base", 0, 0, 0, 0, 0, 0);

    bool private _isLaunched;
    bool public _launchTokensClaimed;
    uint256 private _launchStartTimestamp;
    uint256 private _launchBlockNumber;
    uint256 public launchTokens;

    mapping (address => bool) private _isBlocked;
    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _feeOnSelectedWalletTransfers;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidity1Fee;
    uint8 private _liquidity2Fee;
    uint8 private _operationsFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
    event BlockedAccountChange(address indexed holder, bool indexed status);
    event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
    event WalletChange(string indexed indentifier,address indexed newWallet,address indexed oldWallet);
    event FeeChange(string indexed identifier,uint8 liquidity1Fee,uint8 liquidity2Fee,uint8 operationsFee);
    event CustomTaxPeriodChange(uint256 indexed newValue,uint256 indexed oldValue,string indexed taxType,bytes23 period);
    event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
    event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
    event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue);
    event ClaimOverflow(address token, uint256 amount);
    event TradingStatusChange(bool indexed newValue, bool indexed oldValue);
    event FeesApplied(uint8 liquidity1Fee,uint8 liquidity2Fee,uint8 operationsFee,uint8 totalFee);

    constructor() ERC20(_name, _symbol) {
        liquidity1Wallet = owner();
        liquidity2Wallet = owner();
        operationsWallet = owner();

        IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isAllowedToTradeWhenDisabled[owner()] = true;
        _isAllowedToTradeWhenDisabled[address(this)] = true;

        _isExcludedFromMaxTransactionLimit[address(this)] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;

        _mint(owner(), initialSupply);
    }

    receive() external payable {}

    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
        if(_launchBlockNumber == 0) {
            _launchBlockNumber = block.number;
            _launchStartTimestamp = block.timestamp;
            _isLaunched = true;
        }
        emit TradingStatusChange(true, false);
    }
    function deactivateTrading() external onlyOwner {
        isTradingEnabled = false;
        emit TradingStatusChange(false, true);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value,"Funicular: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit AutomatedMarketMakerPairChange(pair, value);
    }
    function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }
    function blockAccount(address account) external onlyOwner {
        require(!_isBlocked[account], "Funicular: Account is already blocked");
        if (_isLaunched) {
            require((block.timestamp - _launchStartTimestamp) < 172800, "Funicular: Time to block accounts has expired");
        }
        _isBlocked[account] = true;
        emit BlockedAccountChange(account, true);
    }
    function unblockAccount(address account) external onlyOwner {
        require(_isBlocked[account], "Funicular: Account is not blcoked");
        _isBlocked[account] = false;
        emit BlockedAccountChange(account, false);
    }
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
        require(_feeOnSelectedWalletTransfers[account] != value,"Funicular: The selected wallet is already set to the value ");
        _feeOnSelectedWalletTransfers[account] = value;
        emit FeeOnSelectedWalletTransfersChange(account, value);
    }
    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFee[account] != excluded,"Funicular: Account is already the value of 'excluded'");
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }
    function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxTransactionLimit[account] != excluded,"Funicular: Account is already the value of 'excluded'");
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }
    function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxWalletLimit[account] != excluded,"Funicular: Account is already the value of 'excluded'");
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }
    function setWallets(address newLiquidity1Wallet,address newLiquidity2Wallet,address newOperationsWallet) external onlyOwner {
        if (liquidity1Wallet != newLiquidity1Wallet) {
            require(newLiquidity1Wallet != address(0), "Funicular: The liquidity1Wallet cannot be 0");
            emit WalletChange("liquidity1Wallet", newLiquidity1Wallet, liquidity1Wallet);
            liquidity1Wallet = newLiquidity1Wallet;
        }
        if (liquidity2Wallet != newLiquidity2Wallet) {
            require(newLiquidity2Wallet != address(0), "Funicular: The liquidity2Wallet cannot be 0");
            emit WalletChange("liquidity2Wallet", newLiquidity2Wallet, liquidity2Wallet);
            liquidity2Wallet = newLiquidity2Wallet;
        }
        if (operationsWallet != newOperationsWallet) {
            require(newOperationsWallet != address(0), "Funicular: The operationsWallet cannot be 0");
            emit WalletChange("operationsWallet", newOperationsWallet, operationsWallet);
            operationsWallet = newOperationsWallet;
        }
    }
    // Base fees
    function setBaseFeesOnBuy(uint8 _liquidity1FeeOnBuy,uint8 _liquidity2FeeOnBuy,uint8 _operationsFeeOnBuy) external onlyOwner {
        _setCustomBuyTaxPeriod(_base,_liquidity1FeeOnBuy,_liquidity2FeeOnBuy,_operationsFeeOnBuy);
        emit FeeChange("baseFees-Buy",_liquidity1FeeOnBuy,_liquidity2FeeOnBuy,_operationsFeeOnBuy);
    }
    function setBaseFeesOnSell(uint8 _liquidity1FeeOnSell,uint8 _liquidity2FeeOnSell,uint8 _operationsFeeOnSell) external onlyOwner {
        _setCustomSellTaxPeriod(_base,_liquidity1FeeOnSell,_liquidity2FeeOnSell,_operationsFeeOnSell);
        emit FeeChange("baseFees-Sell",_liquidity1FeeOnSell,_liquidity2FeeOnSell,_operationsFeeOnSell);
    }
    function setUniswapRouter(address newAddress) external onlyOwner {
        require(newAddress != address(uniswapV2Router),"Funicular: The router already has that address");
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
    }
    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxTxAmount, "Funicular: Cannot update maxTxAmount to same value");
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }
    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(newValue != maxWalletAmount,"Funicular: Cannot update maxWalletAmount to same value");
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }
    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(newValue != minimumTokensBeforeSwap,"Funicular: Cannot update minimumTokensBeforeSwap to same value");
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }
    function claimLaunchTokens() external onlyOwner {
		require(_launchStartTimestamp > 0, "Funicular: Launch must have occurred");
		require(!_launchTokensClaimed, "Funicular: Launch tokens have already been claimed");
		require(block.number - _launchBlockNumber > 5, "Funicular: Only claim launch tokens after launch");
		uint256 tokenBalance = balanceOf(address(this));
		_launchTokensClaimed = true;
		require(launchTokens <= tokenBalance, "Funicular: A swap and liquify has already occurred");
		uint256 amount = launchTokens;
		launchTokens = 0;
        (bool success) = IERC20(address(this)).transfer(owner(), amount);
        if (success){
            emit ClaimOverflow(address(this), amount);
        }
    }
    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(amount <= address(this).balance, "Funicular: Cannot send more than contract balance");
        (bool success, ) = address(owner()).call{ value: amount }("");
        if (success) {
            emit ClaimOverflow(uniswapV2Router.WETH(), amount);
        }
    }

    // Getters
    function getBaseBuyFees() external view returns (uint8,uint8,uint8) {
        return (_base.liquidity1FeeOnBuy,_base.liquidity2FeeOnBuy,_base.operationsFeeOnBuy);
    }
    function getBaseSellFees() external view returns (uint8,uint8,uint8) {
        return (_base.liquidity1FeeOnSell,_base.liquidity2FeeOnSell,_base.operationsFeeOnSell);
    }
    // Main
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
            require(isTradingEnabled, "Funicular: Trading is currently disabled.");
            require(!_isBlocked[to], "Funicular: Account is blocked");
            require(!_isBlocked[from], "Funicular: Account is blocked");
            if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
                require(amount <= maxTxAmount, "Funicular: Buy amount exceeds the maxTxBuyAmount.");
            }
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require((balanceOf(to) + amount) <= maxWalletAmount, "Funicular: Expected wallet amount exceeds the maxWalletAmount.");
            }
        }

        _adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], from, to);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            amount = amount - fee;
            if (_launchStartTimestamp > 0 && (block.number - _launchBlockNumber <= 5)) {
                launchTokens += fee;
            }
            super._transfer(from, address(this), fee);
        }
        super._transfer(from, to, amount);
    }

    function _adjustTaxes(bool isBuyFromLp,bool isSelltoLp,address from,address to) private {
        _liquidity1Fee = 0;
        _liquidity2Fee = 0;
        _operationsFee = 0;

        if (isBuyFromLp) {
            if (_isLaunched && block.timestamp - _launchBlockNumber <= 5) {
                _liquidity1Fee = 100;
            } else {
                _liquidity1Fee = _base.liquidity1FeeOnBuy;
                _liquidity2Fee = _base.liquidity2FeeOnBuy;
                _operationsFee = _base.operationsFeeOnBuy;
            }
        }
        if (isSelltoLp) {
            _liquidity1Fee = _base.liquidity1FeeOnSell;
            _liquidity2Fee = _base.liquidity2FeeOnSell;
            _operationsFee = _base.operationsFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
            _liquidity1Fee = _base.liquidity1FeeOnBuy;
            _liquidity2Fee = _base.liquidity2FeeOnBuy;
            _operationsFee = _base.operationsFeeOnBuy;
        }
        _totalFee = _liquidity1Fee + _liquidity2Fee + _operationsFee;
        emit FeesApplied(_liquidity1Fee, _liquidity2Fee, _operationsFee, _totalFee);
    }

    function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidity1FeeOnSell,uint8 _liquidity2FeeOnSell,uint8 _operationsFeeOnSell) private {
        if (map.liquidity1FeeOnSell != _liquidity1FeeOnSell) {
            emit CustomTaxPeriodChange(_liquidity1FeeOnSell,map.liquidity1FeeOnSell,"liquidity1FeeOnSell",map.periodName);
            map.liquidity1FeeOnSell = _liquidity1FeeOnSell;
        }
        if (map.liquidity2FeeOnSell != _liquidity2FeeOnSell) {
            emit CustomTaxPeriodChange(_liquidity2FeeOnSell,map.liquidity2FeeOnSell,"liquidity2FeeOnSell",map.periodName);
            map.liquidity2FeeOnSell = _liquidity2FeeOnSell;
        }
        if (map.operationsFeeOnSell != _operationsFeeOnSell) {
            emit CustomTaxPeriodChange(_operationsFeeOnSell,map.operationsFeeOnSell,"operationsFeeOnSell",map.periodName);
            map.operationsFeeOnSell = _operationsFeeOnSell;
        }
    }
    function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,uint8 _liquidity1FeeOnBuy,uint8 _liquidity2FeeOnBuy,uint8 _operationsFeeOnBuy) private {
        if (map.liquidity1FeeOnBuy != _liquidity1FeeOnBuy) {
            emit CustomTaxPeriodChange(_liquidity1FeeOnBuy,map.liquidity1FeeOnBuy,"liquidity1FeeOnBuy",map.periodName);
            map.liquidity1FeeOnBuy = _liquidity1FeeOnBuy;
        }
        if (map.liquidity2FeeOnBuy != _liquidity2FeeOnBuy) {
            emit CustomTaxPeriodChange(_liquidity2FeeOnBuy,map.liquidity2FeeOnBuy,"liquidity2FeeOnBuy",map.periodName);
            map.liquidity2FeeOnBuy = _liquidity2FeeOnBuy;
        }
        if (map.operationsFeeOnBuy != _operationsFeeOnBuy) {
            emit CustomTaxPeriodChange(_operationsFeeOnBuy,map.operationsFeeOnBuy,"operationsFeeOnBuy",map.periodName);
            map.operationsFeeOnBuy = _operationsFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;

        uint256 amountToLiquify = (contractBalance * _liquidity1Fee) / _totalFee / 2;
        uint256 amountToSwap = contractBalance - amountToLiquify;

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - (_liquidity1Fee / 2);
        uint256 amountETHLiquidity1 = (ETHBalanceAfterSwap * _liquidity1Fee) / totalETHFee / 2;
        uint256 amountETHLiquidity2 = (ETHBalanceAfterSwap * _liquidity2Fee) / totalETHFee;
        uint256 amountETHOperations = ETHBalanceAfterSwap - (amountETHLiquidity1  + amountETHLiquidity2);

        Address.sendValue(payable(operationsWallet),amountETHOperations);
        Address.sendValue(payable(liquidity2Wallet),amountETHLiquidity2);

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity1);
            emit SwapAndLiquify(amountToSwap, amountETHLiquidity1, amountToLiquify);
        }
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            1, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            liquidity1Wallet,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidity1Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidity2Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidity1Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liquidity2Fee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"_launchTokensClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLaunchTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity1Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity2Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint8","name":"_liquidity1FeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidity2FeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidity1FeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_liquidity2FeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidity1Wallet","type":"address"},{"internalType":"address","name":"newLiquidity2Wallet","type":"address"},{"internalType":"address","name":"newOperationsWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526b015b6a759f4835dc2400000060075560075460085561271060075460646200002e91906200068f565b6200003a9190620006af565b600955620186a060075460016200005291906200068f565b6200005e9190620006af565b600b556040805160e081018252636261736560e01b8152600060208201819052918101829052606081018290526080810182905260a0810182905260c00152600f80546001600160e81b031916636261736560981b179055348015620000c357600080fd5b506040518060400160405280600781526020016657616c6e75747360c81b815250604051806040016040528060088152602001672457414c4e55545360c01b815250600062000117620004af60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060046200016f838262000776565b5060056200017e828262000776565b505060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa1580156200020c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000232919062000842565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a6919062000842565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031a919062000842565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200034e816001620004b3565b600160176000620003676000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526017909252812080549092166001908117909255601590620003c06000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308082526015855283822080548716600190811790915560188652848320805488168217905587841683526019958690528483208054881682179055600654909316825283822080548716841790558152918220805490941681179093556200045f6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620004a76200049e6000546001600160a01b031690565b600754620005af565b50506200088a565b3390565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036200055b5760405162461bcd60e51b815260206004820152604360248201527f46756e6963756c61723a204175746f6d61746564206d61726b6574206d616b6560448201527f72207061697220697320616c72656164792073657420746f20746861742076616064820152626c756560e81b608482015260a4015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620006075760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000552565b80600360008282546200061b919062000874565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620006a957620006a962000679565b92915050565b600082620006cd57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006fd57607f821691505b6020821081036200071e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200067457600081815260208120601f850160051c810160208610156200074d5750805b601f850160051c820191505b818110156200076e5782815560010162000759565b505050505050565b81516001600160401b03811115620007925762000792620006d2565b620007aa81620007a38454620006e8565b8462000724565b602080601f831160018114620007e25760008415620007c95750858301515b600019600386901b1c1916600185901b1785556200076e565b600085815260208120601f198616915b828110156200081357888601518255948401946001909101908401620007f2565b5085821015620008325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200085557600080fd5b81516001600160a01b03811681146200086d57600080fd5b9392505050565b80820180821115620006a957620006a962000679565b6080516136fd620008a660003960006104e101526136fd6000f3fe60806040526004361061028c5760003560e01c806375cb1bd11161015a578063aee50b1e116100c1578063d32215761161007a578063d3221576146107e7578063dd62ed3e14610807578063e625724614610827578063f2fde38b14610847578063fd72e22a14610867578063fe0175351461088757600080fd5b8063aee50b1e146106ed578063b62496f51461070d578063bea9849e1461073d578063c02466681461075d578063cd43e2281461077d578063d2d7ad83146107d157600080fd5b80638da5cb5b116101135780638da5cb5b14610644578063924241e31461066257806395d89b4114610682578063a457c2d714610697578063a9059cbb146106b7578063aa4bde28146106d757600080fd5b806375cb1bd11461058e57806376dca835146105ae578063781edb3c146105ce5780637c0a893d146105ee578063880bcbc11461060e5780638c0b5e221461062e57600080fd5b806327a14fc2116101fe57806345a42329116101b757806345a42329146104af57806349bd5a5e146104cf5780634d78fdc6146105035780634f225e6d1461052357806370a0823114610543578063715018a61461057957600080fd5b806327a14fc2146104135780632cc25d1414610433578063313ce5671461044857806334cf1fea14610464578063378dc3dc14610479578063395093511461048f57600080fd5b806314fbc5f31161025057806314fbc5f3146103475780631694505e1461036657806318160ddd1461039e5780631e293c10146103bd5780631fcfefcd146103dd57806323b872dd146103f357600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f0578063098df585146103105780630bd05b691461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506006546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108bb565b6040516102c5919061315b565b3480156102fc57600080fd5b506102b961030b3660046131c1565b61094d565b34801561031c57600080fd5b5061033061032b3660046131ed565b610967565b005b34801561033e57600080fd5b50610330610b13565b34801561035357600080fd5b506010546102b990610100900460ff1681565b34801561037257600080fd5b50600654610386906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103aa57600080fd5b506003545b6040519081526020016102c5565b3480156103c957600080fd5b506103306103d83660046131ed565b610ba0565b3480156103e957600080fd5b506103af60135481565b3480156103ff57600080fd5b506102b961040e366004613206565b610c69565b34801561041f57600080fd5b5061033061042e3660046131ed565b610c8d565b34801561043f57600080fd5b50610330610d5a565b34801561045457600080fd5b50604051601281526020016102c5565b34801561047057600080fd5b50610330611032565b34801561048557600080fd5b506103af60075481565b34801561049b57600080fd5b506102b96104aa3660046131c1565b611099565b3480156104bb57600080fd5b506103306104ca366004613255565b6110bb565b3480156104db57600080fd5b506103867f000000000000000000000000000000000000000000000000000000000000000081565b34801561050f57600080fd5b5061033061051e36600461328e565b6111db565b34801561052f57600080fd5b50600d54610386906001600160a01b031681565b34801561054f57600080fd5b506103af61055e36600461328e565b6001600160a01b031660009081526001602052604090205490565b34801561058557600080fd5b506103306112c4565b34801561059a57600080fd5b506103306105a93660046132b2565b611338565b3480156105ba57600080fd5b506103306105c9366004613313565b611653565b3480156105da57600080fd5b506103306105e9366004613255565b6116f7565b3480156105fa57600080fd5b5061033061060936600461328e565b6117b9565b34801561061a57600080fd5b50610330610629366004613255565b61192c565b34801561063a57600080fd5b506103af60085481565b34801561065057600080fd5b506000546001600160a01b0316610386565b34801561066e57600080fd5b50600c54610386906001600160a01b031681565b34801561068e57600080fd5b506102e36119ee565b3480156106a357600080fd5b506102b96106b23660046131c1565b6119fd565b3480156106c357600080fd5b506102b96106d23660046131c1565b611a78565b3480156106e357600080fd5b506103af60095481565b3480156106f957600080fd5b506103306107083660046131ed565b611a86565b34801561071957600080fd5b506102b961072836600461328e565b601a6020526000908152604090205460ff1681565b34801561074957600080fd5b5061033061075836600461328e565b611b5a565b34801561076957600080fd5b50610330610778366004613255565b611c56565b34801561078957600080fd5b50600f5460ff600160b81b8204811691600160c81b8104821691600160d81b909104165b6040805160ff948516815292841660208401529216918101919091526060016102c5565b3480156107dd57600080fd5b506103af600b5481565b3480156107f357600080fd5b50610330610802366004613255565b611d18565b34801561081357600080fd5b506103af610822366004613356565b611d9a565b34801561083357600080fd5b50610330610842366004613313565b611dc5565b34801561085357600080fd5b5061033061086236600461328e565b611e19565b34801561087357600080fd5b50600e54610386906001600160a01b031681565b34801561089357600080fd5b50600f5460ff600160c01b8204811691600160d01b8104821691600160e01b909104166107ad565b6060600480546108ca90613384565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690613384565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b60003361095b818585611f03565b60019150505b92915050565b6000546001600160a01b0316331461099a5760405162461bcd60e51b8152600401610991906133be565b60405180910390fd5b47811115610a045760405162461bcd60e51b815260206004820152603160248201527f46756e6963756c61723a2043616e6e6f742073656e64206d6f7265207468616e60448201527020636f6e74726163742062616c616e636560781b6064820152608401610991565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a51576040519150601f19603f3d011682016040523d82523d6000602084013e610a56565b606091505b505090508015610b0f57600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed91906133f3565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610b3d5760405162461bcd60e51b8152600401610991906133be565b6006805460ff60a01b1916600160a01b179055601254600003610b705743601255426011556010805460ff191660011790555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610bca5760405162461bcd60e51b8152600401610991906133be565b6008548103610c365760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d61785478416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608401610991565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610c77858285612027565b610c828585856120a1565b506001949350505050565b6000546001600160a01b03163314610cb75760405162461bcd60e51b8152600401610991906133be565b6009548103610d275760405162461bcd60e51b815260206004820152603660248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d617857616c6c6044820152756574416d6f756e7420746f2073616d652076616c756560501b6064820152608401610991565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610d845760405162461bcd60e51b8152600401610991906133be565b600060115411610de25760405162461bcd60e51b8152602060048201526024808201527f46756e6963756c61723a204c61756e6368206d7573742068617665206f6363756044820152631c9c995960e21b6064820152608401610991565b601054610100900460ff1615610e555760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a204c61756e636820746f6b656e73206861766520616c6044820152711c9958591e481899595b8818db185a5b595960721b6064820152608401610991565b600560125443610e659190613426565b11610ecb5760405162461bcd60e51b815260206004820152603060248201527f46756e6963756c61723a204f6e6c7920636c61696d206c61756e636820746f6b60448201526f0cadce640c2cce8cae440d8c2eadcc6d60831b6064820152608401610991565b306000908152600160205260409020546010805461ff001916610100179055601354811015610f575760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a2041207377617020616e64206c6971756966792068616044820152711cc8185b1c9958591e481bd8d8dd5c9c995960721b6064820152608401610991565b60138054600091829055903063a9059cbb610f7a6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190613439565b9050801561102d5760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b6000546001600160a01b0316331461105c5760405162461bcd60e51b8152600401610991906133be565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b60003361095b8185856110ac8383611d9a565b6110b69190613456565b611f03565b6000546001600160a01b031633146110e55760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150361117b5760405162461bcd60e51b815260206004820152603b60248201527f46756e6963756c61723a205468652073656c65637465642077616c6c6574206960448201527f7320616c72656164792073657420746f207468652076616c75652000000000006064820152608401610991565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146112055760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03811660009081526014602052604090205460ff166112775760405162461bcd60e51b815260206004820152602160248201527f46756e6963756c61723a204163636f756e74206973206e6f7420626c636f6b656044820152601960fa1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610991906133be565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113625760405162461bcd60e51b8152600401610991906133be565b600c546001600160a01b0384811691161461145b576001600160a01b0383166113e15760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206c69717569646974793157616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600c546040516f1b1a5c5d5a591a5d1e4c55d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611554576001600160a01b0382166114da5760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206c69717569646974793257616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600d546040516f1b1a5c5d5a591a5d1e4c95d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461102d576001600160a01b0381166115d35760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206f7065726174696f6e7357616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600e546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b0316331461167d5760405162461bcd60e51b8152600401610991906133be565b61168a600f8484846125e2565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146117215760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036117615760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91016111cf565b6000546001600160a01b031633146117e35760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03811660009081526014602052604090205460ff161561185a5760405162461bcd60e51b815260206004820152602560248201527f46756e6963756c61723a204163636f756e7420697320616c726561647920626c6044820152641bd8dad95960da1b6064820152608401610991565b60105460ff16156118da576202a300601154426118779190613426565b106118da5760405162461bcd60e51b815260206004820152602d60248201527f46756e6963756c61723a2054696d6520746f20626c6f636b206163636f756e7460448201526c1cc81a185cc8195e1c1a5c9959609a1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146119565760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036119965760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111cf565b6060600580546108ca90613384565b60003381611a0b8286611d9a565b905083811015611a6b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610991565b610c828286868403611f03565b60003361095b8185856120a1565b6000546001600160a01b03163314611ab05760405162461bcd60e51b8152600401610991906133be565b600b548103611b275760405162461bcd60e51b815260206004820152603e60248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d696e696d756d60448201527f546f6b656e734265666f72655377617020746f2073616d652076616c756500006064820152608401610991565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611b845760405162461bcd60e51b8152600401610991906133be565b6006546001600160a01b0390811690821603611bf95760405162461bcd60e51b815260206004820152602e60248201527f46756e6963756c61723a2054686520726f7574657220616c726561647920686160448201526d732074686174206164647265737360901b6064820152608401610991565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c805760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611cc05760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111cf565b6000546001600160a01b03163314611d425760405162461bcd60e51b8152600401610991906133be565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111cf565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611def5760405162461bcd60e51b8152600401610991906133be565b611dfc600f848484612799565b6040516b62617365466565732d42757960a01b8152600c016116a4565b6000546001600160a01b03163314611e435760405162461bcd60e51b8152600401610991906133be565b6001600160a01b038116611ea85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b038216611fc65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006120338484611d9a565b9050600019811461209b578181101561208e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610991565b61209b8484848403611f03565b50505050565b6001600160a01b0383166120c75760405162461bcd60e51b8152600401610991906134be565b6001600160a01b0382166120ed5760405162461bcd60e51b815260040161099190613503565b806000036121015761102d8383600061294d565b6001600160a01b03831660009081526015602052604090205460ff1615801561214357506001600160a01b03821660009081526015602052604090205460ff16155b156123f957600654600160a01b900460ff166121b35760405162461bcd60e51b815260206004820152602960248201527f46756e6963756c61723a2054726164696e672069732063757272656e746c79206044820152683234b9b0b13632b21760b91b6064820152608401610991565b6001600160a01b03821660009081526014602052604090205460ff161561221c5760405162461bcd60e51b815260206004820152601d60248201527f46756e6963756c61723a204163636f756e7420697320626c6f636b65640000006044820152606401610991565b6001600160a01b03831660009081526014602052604090205460ff16156122855760405162461bcd60e51b815260206004820152601d60248201527f46756e6963756c61723a204163636f756e7420697320626c6f636b65640000006044820152606401610991565b6001600160a01b03821660009081526018602052604090205460ff161580156122c757506001600160a01b03831660009081526018602052604090205460ff16155b15612338576008548111156123385760405162461bcd60e51b815260206004820152603160248201527f46756e6963756c61723a2042757920616d6f756e742065786365656473207468604482015270329036b0bc2a3c213abca0b6b7bab73a1760791b6064820152608401610991565b6001600160a01b03821660009081526019602052604090205460ff166123f9576009548161237b846001600160a01b031660009081526001602052604090205490565b6123859190613456565b11156123f95760405162461bcd60e51b815260206004820152603e60248201527f46756e6963756c61723a2045787065637465642077616c6c657420616d6f756e60448201527f74206578636565647320746865206d617857616c6c6574416d6f756e742e00006064820152608401610991565b6001600160a01b038084166000908152601a602052604080822054928516825290205461242e9160ff90811691168585612a7e565b600b543060009081526001602052604090205460065491111590600160a01b900460ff16801561245b5750805b801561246a5750600a5460ff16155b80156124815750601b546301000000900460ff1615155b80156124a557506001600160a01b0383166000908152601a602052604090205460ff165b156124ca57600a805460ff191660011790556124bf612ca6565b600a805460ff191690555b600a5460009060ff161580156124e95750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff168061252b57506001600160a01b03841660009081526017602052604090205460ff165b15612534575060005b80801561254c5750601b546301000000900460ff1615155b156125d057601b5460009060649061256e906301000000900460ff1686613546565b6125789190613573565b90506125848185613426565b935060006011541180156125a657506005601254436125a39190613426565b11155b156125c35780601360008282546125bd9190613456565b90915550505b6125ce86308361294d565b505b6125db85858561294d565b5050505050565b835460ff848116600160c01b909204161461267257604051721b1a5c5d5a591a5d1e4c51995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160c01b8304811692908716916000805160206136a8833981519152916126539160489190911b90613587565b60405180910390a4835460ff60c01b1916600160c01b60ff8516021784555b835460ff838116600160d01b909204161461270257604051721b1a5c5d5a591a5d1e4c91995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160d01b8304811692908616916000805160206136a8833981519152916126e39160489190911b90613587565b60405180910390a4835460ff60d01b1916600160d01b60ff8416021784555b835460ff828116600160e01b909204161461209b57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160e01b8304811692908516916000805160206136a8833981519152916127739160489190911b90613587565b60405180910390a4835460ff8216600160e01b0260ff60e01b1990911617845550505050565b835460ff848116600160b81b909204161461282857604051716c6971756964697479314665654f6e42757960701b81526012016040519081900381208554909160ff600160b81b8304811692908716916000805160206136a8833981519152916128099160489190911b90613587565b60405180910390a4835460ff60b81b1916600160b81b60ff8516021784555b835460ff838116600160c81b90920416146128b757604051716c6971756964697479324665654f6e42757960701b81526012016040519081900381208554909160ff600160c81b8304811692908616916000805160206136a8833981519152916128989160489190911b90613587565b60405180910390a4835460ff60c81b1916600160c81b60ff8416021784555b835460ff828116600160d81b909204161461209b57604051716f7065726174696f6e734665654f6e42757960701b81526012016040519081900381208554909160ff600160d81b8304811692908516916000805160206136a8833981519152916129279160489190911b90613587565b60405180910390a4835460ff8216600160d81b0260ff60d81b1990911617845550505050565b6001600160a01b0383166129735760405162461bcd60e51b8152600401610991906134be565b6001600160a01b0382166129995760405162461bcd60e51b815260040161099190613503565b6001600160a01b03831660009081526001602052604090205481811015612a115760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610991565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a719086815260200190565b60405180910390a361209b565b601b805462ffffff191690558315612b0e5760105460ff168015612ab05750600560125442612aad9190613426565b11155b15612ac757601b805460ff19166064179055612b0e565b600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b8215612b5b57600f54601b8054600160c01b830460ff90811661ffff1990921691909117610100600160d01b85048316021762ff00001916600160e01b9093041662010000029190911790555b82158015612b67575083155b8015612bad57506001600160a01b03821660009081526016602052604090205460ff1680612bad57506001600160a01b03811660009081526016602052604090205460ff165b15612bf957600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b601b5460ff620100008204811691612c199161010082048116911661359e565b612c23919061359e565b601b805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b30600090815260016020526040812054601b549091479160029060ff63010000008204811691612cd7911686613546565b612ce19190613573565b612ceb9190613573565b90506000612cf98285613426565b9050612d0481612e3b565b6000612d108447613426565b601b54909150600090612d289060029060ff166135b7565b601b54612d3f91906301000000900460ff166135d9565b601b5460ff91821692506000916002918491612d5c911686613546565b612d669190613573565b612d709190613573565b601b549091506000908390612d8d90610100900460ff1686613546565b612d979190613573565b90506000612da58284613456565b612daf9086613426565b600e54909150612dc8906001600160a01b031682612f95565b600d54612dde906001600160a01b031683612f95565b8615612e3057612dee87846130ae565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e7057612e706135f2565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed91906133f3565b81600181518110612f0057612f006135f2565b6001600160a01b039283166020918202929092010152600654612f269130911684611f03565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f5f908590600190869030904290600401613608565b600060405180830381600087803b158015612f7957600080fd5b505af1158015612f8d573d6000803e3d6000fd5b505050505050565b80471015612fe55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610991565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613032576040519150601f19603f3d011682016040523d82523d6000602084013e613037565b606091505b505090508061102d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610991565b6006546130c69030906001600160a01b031684611f03565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613136573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125db9190613679565b600060208083528351808285015260005b818110156131885785810183015185820160400152820161316c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131be57600080fd5b50565b600080604083850312156131d457600080fd5b82356131df816131a9565b946020939093013593505050565b6000602082840312156131ff57600080fd5b5035919050565b60008060006060848603121561321b57600080fd5b8335613226816131a9565b92506020840135613236816131a9565b929592945050506040919091013590565b80151581146131be57600080fd5b6000806040838503121561326857600080fd5b8235613273816131a9565b9150602083013561328381613247565b809150509250929050565b6000602082840312156132a057600080fd5b81356132ab816131a9565b9392505050565b6000806000606084860312156132c757600080fd5b83356132d2816131a9565b925060208401356132e2816131a9565b915060408401356132f2816131a9565b809150509250925092565b803560ff8116811461330e57600080fd5b919050565b60008060006060848603121561332857600080fd5b613331846132fd565b925061333f602085016132fd565b915061334d604085016132fd565b90509250925092565b6000806040838503121561336957600080fd5b8235613374816131a9565b91506020830135613283816131a9565b600181811c9082168061339857607f821691505b6020821081036133b857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561340557600080fd5b81516132ab816131a9565b634e487b7160e01b600052601160045260246000fd5b8181038181111561096157610961613410565b60006020828403121561344b57600080fd5b81516132ab81613247565b8082018082111561096157610961613410565b60208082526035908201527f46756e6963756c61723a204163636f756e7420697320616c7265616479207468604082015274652076616c7565206f6620276578636c756465642760581b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761096157610961613410565b634e487b7160e01b600052601260045260246000fd5b6000826135825761358261355d565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff818116838216019081111561096157610961613410565b600060ff8316806135ca576135ca61355d565b8060ff84160491505092915050565b60ff828116828216039081111561096157610961613410565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136585784516001600160a01b031683529383019391830191600101613633565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561368e57600080fd5b835192506020840151915060408401519050925092509256fe00edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea2646970667358221220740722f52283cea3b1b693a4c074fd493abe82e4eb189a7c9bd39fcff15e993d64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806375cb1bd11161015a578063aee50b1e116100c1578063d32215761161007a578063d3221576146107e7578063dd62ed3e14610807578063e625724614610827578063f2fde38b14610847578063fd72e22a14610867578063fe0175351461088757600080fd5b8063aee50b1e146106ed578063b62496f51461070d578063bea9849e1461073d578063c02466681461075d578063cd43e2281461077d578063d2d7ad83146107d157600080fd5b80638da5cb5b116101135780638da5cb5b14610644578063924241e31461066257806395d89b4114610682578063a457c2d714610697578063a9059cbb146106b7578063aa4bde28146106d757600080fd5b806375cb1bd11461058e57806376dca835146105ae578063781edb3c146105ce5780637c0a893d146105ee578063880bcbc11461060e5780638c0b5e221461062e57600080fd5b806327a14fc2116101fe57806345a42329116101b757806345a42329146104af57806349bd5a5e146104cf5780634d78fdc6146105035780634f225e6d1461052357806370a0823114610543578063715018a61461057957600080fd5b806327a14fc2146104135780632cc25d1414610433578063313ce5671461044857806334cf1fea14610464578063378dc3dc14610479578063395093511461048f57600080fd5b806314fbc5f31161025057806314fbc5f3146103475780631694505e1461036657806318160ddd1461039e5780631e293c10146103bd5780631fcfefcd146103dd57806323b872dd146103f357600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f0578063098df585146103105780630bd05b691461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506006546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108bb565b6040516102c5919061315b565b3480156102fc57600080fd5b506102b961030b3660046131c1565b61094d565b34801561031c57600080fd5b5061033061032b3660046131ed565b610967565b005b34801561033e57600080fd5b50610330610b13565b34801561035357600080fd5b506010546102b990610100900460ff1681565b34801561037257600080fd5b50600654610386906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103aa57600080fd5b506003545b6040519081526020016102c5565b3480156103c957600080fd5b506103306103d83660046131ed565b610ba0565b3480156103e957600080fd5b506103af60135481565b3480156103ff57600080fd5b506102b961040e366004613206565b610c69565b34801561041f57600080fd5b5061033061042e3660046131ed565b610c8d565b34801561043f57600080fd5b50610330610d5a565b34801561045457600080fd5b50604051601281526020016102c5565b34801561047057600080fd5b50610330611032565b34801561048557600080fd5b506103af60075481565b34801561049b57600080fd5b506102b96104aa3660046131c1565b611099565b3480156104bb57600080fd5b506103306104ca366004613255565b6110bb565b3480156104db57600080fd5b506103867f000000000000000000000000ad81c983fe6cb7875de4b078faec58fa4243e2eb81565b34801561050f57600080fd5b5061033061051e36600461328e565b6111db565b34801561052f57600080fd5b50600d54610386906001600160a01b031681565b34801561054f57600080fd5b506103af61055e36600461328e565b6001600160a01b031660009081526001602052604090205490565b34801561058557600080fd5b506103306112c4565b34801561059a57600080fd5b506103306105a93660046132b2565b611338565b3480156105ba57600080fd5b506103306105c9366004613313565b611653565b3480156105da57600080fd5b506103306105e9366004613255565b6116f7565b3480156105fa57600080fd5b5061033061060936600461328e565b6117b9565b34801561061a57600080fd5b50610330610629366004613255565b61192c565b34801561063a57600080fd5b506103af60085481565b34801561065057600080fd5b506000546001600160a01b0316610386565b34801561066e57600080fd5b50600c54610386906001600160a01b031681565b34801561068e57600080fd5b506102e36119ee565b3480156106a357600080fd5b506102b96106b23660046131c1565b6119fd565b3480156106c357600080fd5b506102b96106d23660046131c1565b611a78565b3480156106e357600080fd5b506103af60095481565b3480156106f957600080fd5b506103306107083660046131ed565b611a86565b34801561071957600080fd5b506102b961072836600461328e565b601a6020526000908152604090205460ff1681565b34801561074957600080fd5b5061033061075836600461328e565b611b5a565b34801561076957600080fd5b50610330610778366004613255565b611c56565b34801561078957600080fd5b50600f5460ff600160b81b8204811691600160c81b8104821691600160d81b909104165b6040805160ff948516815292841660208401529216918101919091526060016102c5565b3480156107dd57600080fd5b506103af600b5481565b3480156107f357600080fd5b50610330610802366004613255565b611d18565b34801561081357600080fd5b506103af610822366004613356565b611d9a565b34801561083357600080fd5b50610330610842366004613313565b611dc5565b34801561085357600080fd5b5061033061086236600461328e565b611e19565b34801561087357600080fd5b50600e54610386906001600160a01b031681565b34801561089357600080fd5b50600f5460ff600160c01b8204811691600160d01b8104821691600160e01b909104166107ad565b6060600480546108ca90613384565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690613384565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b60003361095b818585611f03565b60019150505b92915050565b6000546001600160a01b0316331461099a5760405162461bcd60e51b8152600401610991906133be565b60405180910390fd5b47811115610a045760405162461bcd60e51b815260206004820152603160248201527f46756e6963756c61723a2043616e6e6f742073656e64206d6f7265207468616e60448201527020636f6e74726163742062616c616e636560781b6064820152608401610991565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a51576040519150601f19603f3d011682016040523d82523d6000602084013e610a56565b606091505b505090508015610b0f57600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed91906133f3565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610b3d5760405162461bcd60e51b8152600401610991906133be565b6006805460ff60a01b1916600160a01b179055601254600003610b705743601255426011556010805460ff191660011790555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610bca5760405162461bcd60e51b8152600401610991906133be565b6008548103610c365760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d61785478416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608401610991565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610c77858285612027565b610c828585856120a1565b506001949350505050565b6000546001600160a01b03163314610cb75760405162461bcd60e51b8152600401610991906133be565b6009548103610d275760405162461bcd60e51b815260206004820152603660248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d617857616c6c6044820152756574416d6f756e7420746f2073616d652076616c756560501b6064820152608401610991565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610d845760405162461bcd60e51b8152600401610991906133be565b600060115411610de25760405162461bcd60e51b8152602060048201526024808201527f46756e6963756c61723a204c61756e6368206d7573742068617665206f6363756044820152631c9c995960e21b6064820152608401610991565b601054610100900460ff1615610e555760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a204c61756e636820746f6b656e73206861766520616c6044820152711c9958591e481899595b8818db185a5b595960721b6064820152608401610991565b600560125443610e659190613426565b11610ecb5760405162461bcd60e51b815260206004820152603060248201527f46756e6963756c61723a204f6e6c7920636c61696d206c61756e636820746f6b60448201526f0cadce640c2cce8cae440d8c2eadcc6d60831b6064820152608401610991565b306000908152600160205260409020546010805461ff001916610100179055601354811015610f575760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a2041207377617020616e64206c6971756966792068616044820152711cc8185b1c9958591e481bd8d8dd5c9c995960721b6064820152608401610991565b60138054600091829055903063a9059cbb610f7a6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190613439565b9050801561102d5760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b6000546001600160a01b0316331461105c5760405162461bcd60e51b8152600401610991906133be565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b60003361095b8185856110ac8383611d9a565b6110b69190613456565b611f03565b6000546001600160a01b031633146110e55760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150361117b5760405162461bcd60e51b815260206004820152603b60248201527f46756e6963756c61723a205468652073656c65637465642077616c6c6574206960448201527f7320616c72656164792073657420746f207468652076616c75652000000000006064820152608401610991565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146112055760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03811660009081526014602052604090205460ff166112775760405162461bcd60e51b815260206004820152602160248201527f46756e6963756c61723a204163636f756e74206973206e6f7420626c636f6b656044820152601960fa1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610991906133be565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113625760405162461bcd60e51b8152600401610991906133be565b600c546001600160a01b0384811691161461145b576001600160a01b0383166113e15760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206c69717569646974793157616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600c546040516f1b1a5c5d5a591a5d1e4c55d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611554576001600160a01b0382166114da5760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206c69717569646974793257616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600d546040516f1b1a5c5d5a591a5d1e4c95d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461102d576001600160a01b0381166115d35760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206f7065726174696f6e7357616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600e546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b0316331461167d5760405162461bcd60e51b8152600401610991906133be565b61168a600f8484846125e2565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146117215760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036117615760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91016111cf565b6000546001600160a01b031633146117e35760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03811660009081526014602052604090205460ff161561185a5760405162461bcd60e51b815260206004820152602560248201527f46756e6963756c61723a204163636f756e7420697320616c726561647920626c6044820152641bd8dad95960da1b6064820152608401610991565b60105460ff16156118da576202a300601154426118779190613426565b106118da5760405162461bcd60e51b815260206004820152602d60248201527f46756e6963756c61723a2054696d6520746f20626c6f636b206163636f756e7460448201526c1cc81a185cc8195e1c1a5c9959609a1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146119565760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036119965760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111cf565b6060600580546108ca90613384565b60003381611a0b8286611d9a565b905083811015611a6b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610991565b610c828286868403611f03565b60003361095b8185856120a1565b6000546001600160a01b03163314611ab05760405162461bcd60e51b8152600401610991906133be565b600b548103611b275760405162461bcd60e51b815260206004820152603e60248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d696e696d756d60448201527f546f6b656e734265666f72655377617020746f2073616d652076616c756500006064820152608401610991565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611b845760405162461bcd60e51b8152600401610991906133be565b6006546001600160a01b0390811690821603611bf95760405162461bcd60e51b815260206004820152602e60248201527f46756e6963756c61723a2054686520726f7574657220616c726561647920686160448201526d732074686174206164647265737360901b6064820152608401610991565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c805760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611cc05760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111cf565b6000546001600160a01b03163314611d425760405162461bcd60e51b8152600401610991906133be565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111cf565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611def5760405162461bcd60e51b8152600401610991906133be565b611dfc600f848484612799565b6040516b62617365466565732d42757960a01b8152600c016116a4565b6000546001600160a01b03163314611e435760405162461bcd60e51b8152600401610991906133be565b6001600160a01b038116611ea85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b038216611fc65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006120338484611d9a565b9050600019811461209b578181101561208e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610991565b61209b8484848403611f03565b50505050565b6001600160a01b0383166120c75760405162461bcd60e51b8152600401610991906134be565b6001600160a01b0382166120ed5760405162461bcd60e51b815260040161099190613503565b806000036121015761102d8383600061294d565b6001600160a01b03831660009081526015602052604090205460ff1615801561214357506001600160a01b03821660009081526015602052604090205460ff16155b156123f957600654600160a01b900460ff166121b35760405162461bcd60e51b815260206004820152602960248201527f46756e6963756c61723a2054726164696e672069732063757272656e746c79206044820152683234b9b0b13632b21760b91b6064820152608401610991565b6001600160a01b03821660009081526014602052604090205460ff161561221c5760405162461bcd60e51b815260206004820152601d60248201527f46756e6963756c61723a204163636f756e7420697320626c6f636b65640000006044820152606401610991565b6001600160a01b03831660009081526014602052604090205460ff16156122855760405162461bcd60e51b815260206004820152601d60248201527f46756e6963756c61723a204163636f756e7420697320626c6f636b65640000006044820152606401610991565b6001600160a01b03821660009081526018602052604090205460ff161580156122c757506001600160a01b03831660009081526018602052604090205460ff16155b15612338576008548111156123385760405162461bcd60e51b815260206004820152603160248201527f46756e6963756c61723a2042757920616d6f756e742065786365656473207468604482015270329036b0bc2a3c213abca0b6b7bab73a1760791b6064820152608401610991565b6001600160a01b03821660009081526019602052604090205460ff166123f9576009548161237b846001600160a01b031660009081526001602052604090205490565b6123859190613456565b11156123f95760405162461bcd60e51b815260206004820152603e60248201527f46756e6963756c61723a2045787065637465642077616c6c657420616d6f756e60448201527f74206578636565647320746865206d617857616c6c6574416d6f756e742e00006064820152608401610991565b6001600160a01b038084166000908152601a602052604080822054928516825290205461242e9160ff90811691168585612a7e565b600b543060009081526001602052604090205460065491111590600160a01b900460ff16801561245b5750805b801561246a5750600a5460ff16155b80156124815750601b546301000000900460ff1615155b80156124a557506001600160a01b0383166000908152601a602052604090205460ff165b156124ca57600a805460ff191660011790556124bf612ca6565b600a805460ff191690555b600a5460009060ff161580156124e95750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff168061252b57506001600160a01b03841660009081526017602052604090205460ff165b15612534575060005b80801561254c5750601b546301000000900460ff1615155b156125d057601b5460009060649061256e906301000000900460ff1686613546565b6125789190613573565b90506125848185613426565b935060006011541180156125a657506005601254436125a39190613426565b11155b156125c35780601360008282546125bd9190613456565b90915550505b6125ce86308361294d565b505b6125db85858561294d565b5050505050565b835460ff848116600160c01b909204161461267257604051721b1a5c5d5a591a5d1e4c51995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160c01b8304811692908716916000805160206136a8833981519152916126539160489190911b90613587565b60405180910390a4835460ff60c01b1916600160c01b60ff8516021784555b835460ff838116600160d01b909204161461270257604051721b1a5c5d5a591a5d1e4c91995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160d01b8304811692908616916000805160206136a8833981519152916126e39160489190911b90613587565b60405180910390a4835460ff60d01b1916600160d01b60ff8416021784555b835460ff828116600160e01b909204161461209b57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160e01b8304811692908516916000805160206136a8833981519152916127739160489190911b90613587565b60405180910390a4835460ff8216600160e01b0260ff60e01b1990911617845550505050565b835460ff848116600160b81b909204161461282857604051716c6971756964697479314665654f6e42757960701b81526012016040519081900381208554909160ff600160b81b8304811692908716916000805160206136a8833981519152916128099160489190911b90613587565b60405180910390a4835460ff60b81b1916600160b81b60ff8516021784555b835460ff838116600160c81b90920416146128b757604051716c6971756964697479324665654f6e42757960701b81526012016040519081900381208554909160ff600160c81b8304811692908616916000805160206136a8833981519152916128989160489190911b90613587565b60405180910390a4835460ff60c81b1916600160c81b60ff8416021784555b835460ff828116600160d81b909204161461209b57604051716f7065726174696f6e734665654f6e42757960701b81526012016040519081900381208554909160ff600160d81b8304811692908516916000805160206136a8833981519152916129279160489190911b90613587565b60405180910390a4835460ff8216600160d81b0260ff60d81b1990911617845550505050565b6001600160a01b0383166129735760405162461bcd60e51b8152600401610991906134be565b6001600160a01b0382166129995760405162461bcd60e51b815260040161099190613503565b6001600160a01b03831660009081526001602052604090205481811015612a115760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610991565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a719086815260200190565b60405180910390a361209b565b601b805462ffffff191690558315612b0e5760105460ff168015612ab05750600560125442612aad9190613426565b11155b15612ac757601b805460ff19166064179055612b0e565b600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b8215612b5b57600f54601b8054600160c01b830460ff90811661ffff1990921691909117610100600160d01b85048316021762ff00001916600160e01b9093041662010000029190911790555b82158015612b67575083155b8015612bad57506001600160a01b03821660009081526016602052604090205460ff1680612bad57506001600160a01b03811660009081526016602052604090205460ff165b15612bf957600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b601b5460ff620100008204811691612c199161010082048116911661359e565b612c23919061359e565b601b805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b30600090815260016020526040812054601b549091479160029060ff63010000008204811691612cd7911686613546565b612ce19190613573565b612ceb9190613573565b90506000612cf98285613426565b9050612d0481612e3b565b6000612d108447613426565b601b54909150600090612d289060029060ff166135b7565b601b54612d3f91906301000000900460ff166135d9565b601b5460ff91821692506000916002918491612d5c911686613546565b612d669190613573565b612d709190613573565b601b549091506000908390612d8d90610100900460ff1686613546565b612d979190613573565b90506000612da58284613456565b612daf9086613426565b600e54909150612dc8906001600160a01b031682612f95565b600d54612dde906001600160a01b031683612f95565b8615612e3057612dee87846130ae565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e7057612e706135f2565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed91906133f3565b81600181518110612f0057612f006135f2565b6001600160a01b039283166020918202929092010152600654612f269130911684611f03565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f5f908590600190869030904290600401613608565b600060405180830381600087803b158015612f7957600080fd5b505af1158015612f8d573d6000803e3d6000fd5b505050505050565b80471015612fe55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610991565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613032576040519150601f19603f3d011682016040523d82523d6000602084013e613037565b606091505b505090508061102d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610991565b6006546130c69030906001600160a01b031684611f03565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613136573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125db9190613679565b600060208083528351808285015260005b818110156131885785810183015185820160400152820161316c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131be57600080fd5b50565b600080604083850312156131d457600080fd5b82356131df816131a9565b946020939093013593505050565b6000602082840312156131ff57600080fd5b5035919050565b60008060006060848603121561321b57600080fd5b8335613226816131a9565b92506020840135613236816131a9565b929592945050506040919091013590565b80151581146131be57600080fd5b6000806040838503121561326857600080fd5b8235613273816131a9565b9150602083013561328381613247565b809150509250929050565b6000602082840312156132a057600080fd5b81356132ab816131a9565b9392505050565b6000806000606084860312156132c757600080fd5b83356132d2816131a9565b925060208401356132e2816131a9565b915060408401356132f2816131a9565b809150509250925092565b803560ff8116811461330e57600080fd5b919050565b60008060006060848603121561332857600080fd5b613331846132fd565b925061333f602085016132fd565b915061334d604085016132fd565b90509250925092565b6000806040838503121561336957600080fd5b8235613374816131a9565b91506020830135613283816131a9565b600181811c9082168061339857607f821691505b6020821081036133b857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561340557600080fd5b81516132ab816131a9565b634e487b7160e01b600052601160045260246000fd5b8181038181111561096157610961613410565b60006020828403121561344b57600080fd5b81516132ab81613247565b8082018082111561096157610961613410565b60208082526035908201527f46756e6963756c61723a204163636f756e7420697320616c7265616479207468604082015274652076616c7565206f6620276578636c756465642760581b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761096157610961613410565b634e487b7160e01b600052601260045260246000fd5b6000826135825761358261355d565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff818116838216019081111561096157610961613410565b600060ff8316806135ca576135ca61355d565b8060ff84160491505092915050565b60ff828116828216039081111561096157610961613410565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136585784516001600160a01b031683529383019391830191600101613633565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561368e57600080fd5b835192506020840151915060408401519050925092509256fe00edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea2646970667358221220740722f52283cea3b1b693a4c074fd493abe82e4eb189a7c9bd39fcff15e993d64736f6c63430008110033

Deployed Bytecode Sourcemap

12509:19608:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:28;;;;;;;;;;-1:-1:-1;12774:28:0;;;;-1:-1:-1;;;12774:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;12774:28:0;;;;;;;;7174:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8105:201::-;;;;;;;;;;-1:-1:-1;8105:201:0;;;;;:::i;:::-;;:::i;23998:345::-;;;;;;;;;;-1:-1:-1;23998:345:0;;;;;:::i;:::-;;:::i;:::-;;17230:321;;;;;;;;;;;;;:::i;13720:32::-;;;;;;;;;;-1:-1:-1;13720:32:0;;;;;;;;;;;12589:30;;;;;;;;;;-1:-1:-1;12589:30:0;;;;-1:-1:-1;;;;;12589:30:0;;;;;;-1:-1:-1;;;;;1579:32:1;;;1561:51;;1549:2;1534:18;12589:30:0;1400:218:1;7494:108:0;;;;;;;;;;-1:-1:-1;7582:12:0;;7494:108;;;1769:25:1;;;1757:2;1742:18;7494:108:0;1623:177:1;22369:273:0;;;;;;;;;;-1:-1:-1;22369:273:0;;;;;:::i;:::-;;:::i;13844:27::-;;;;;;;;;;;;;;;;8316:295;;;;;;;;;;-1:-1:-1;8316:295:0;;;;;:::i;:::-;;:::i;22648:278::-;;;;;;;;;;-1:-1:-1;22648:278:0;;;;;:::i;:::-;;:::i;23265:727::-;;;;;;;;;;;;;:::i;7393:93::-;;;;;;;;;;-1:-1:-1;7393:93:0;;7476:2;2408:36:1;;2396:2;2381:18;7393:93:0;2266:184:1;17557:139:0;;;;;;;;;;;;;:::i;12811:51::-;;;;;;;;;;;;;;;;8619:238;;;;;;;;;;-1:-1:-1;8619:238:0;;;;;:::i;:::-;;:::i;18893:349::-;;;;;;;;;;-1:-1:-1;18893:349:0;;;;;:::i;:::-;;:::i;12626:38::-;;;;;;;;;;;;;;;18653:234;;;;;;;;;;-1:-1:-1;18653:234:0;;;;;:::i;:::-;;:::i;13229:31::-;;;;;;;;;;-1:-1:-1;13229:31:0;;;;-1:-1:-1;;;;;13229:31:0;;;7610:127;;;;;;;;;;-1:-1:-1;7610:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7711:18:0;7684:7;7711:18;;;:9;:18;;;;;;;7610:127;6361:148;;;;;;;;;;;;;:::i;20269:1077::-;;;;;;;;;;-1:-1:-1;20269:1077:0;;;;;:::i;:::-;;:::i;21709:345::-;;;;;;;;;;-1:-1:-1;21709:345:0;;;;;:::i;:::-;;:::i;19922:341::-;;;;;;;;;;-1:-1:-1;19922:341:0;;;;;:::i;:::-;;:::i;18250:397::-;;;;;;;;;;-1:-1:-1;18250:397:0;;;;;:::i;:::-;;:::i;19558:358::-;;;;;;;;;;-1:-1:-1;19558:358:0;;;;;:::i;:::-;;:::i;12924:42::-;;;;;;;;;;;;;;;;6147:79;;;;;;;;;;-1:-1:-1;6185:7:0;6212:6;-1:-1:-1;;;;;6212:6:0;6147:79;;13191:31;;;;;;;;;;-1:-1:-1;13191:31:0;;;;-1:-1:-1;;;;;13191:31:0;;;7282:104;;;;;;;;;;;;;:::i;8865:436::-;;;;;;;;;;-1:-1:-1;8865:436:0;;;;;:::i;:::-;;:::i;7745:193::-;;;;;;;;;;-1:-1:-1;7745:193:0;;;;;:::i;:::-;;:::i;13017:60::-;;;;;;;;;;;;;;;;22932:327;;;;;;;;;;-1:-1:-1;22932:327:0;;;;;:::i;:::-;;:::i;14270:57::-;;;;;;;;;;-1:-1:-1;14270:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22060:303;;;;;;;;;;-1:-1:-1;22060:303:0;;;;;:::i;:::-;;:::i;19248:304::-;;;;;;;;;;-1:-1:-1;19248:304:0;;;;;:::i;:::-;;:::i;24367:170::-;;;;;;;;;;-1:-1:-1;24454:5:0;:24;;-1:-1:-1;;;24454:24:0;;;;;-1:-1:-1;;;24479:24:0;;;;;-1:-1:-1;;;24504:24:0;;;;24367:170;;;;4667:4:1;4655:17;;;4637:36;;4709:17;;;4704:2;4689:18;;4682:45;4763:17;;4743:18;;;4736:45;;;;4625:2;4610:18;24367:170:0;4447:340:1;13115:67:0;;;;;;;;;;;;;;;;18027:217;;;;;;;;;;-1:-1:-1;18027:217:0;;;;;:::i;:::-;;:::i;7946:151::-;;;;;;;;;;-1:-1:-1;7946:151:0;;;;;:::i;:::-;;:::i;21370:333::-;;;;;;;;;;-1:-1:-1;21370:333:0;;;;;:::i;:::-;;:::i;6517:244::-;;;;;;;;;;-1:-1:-1;6517:244:0;;;;;:::i;:::-;;:::i;13267:31::-;;;;;;;;;;-1:-1:-1;13267:31:0;;;;-1:-1:-1;;;;;13267:31:0;;;24543:174;;;;;;;;;;-1:-1:-1;24631:5:0;:25;;-1:-1:-1;;;24631:25:0;;;;;-1:-1:-1;;;24657:25:0;;;;;-1:-1:-1;;;24683:25:0;;;;24543:174;;7174:100;7228:13;7261:5;7254:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7174:100;:::o;8105:201::-;8188:4;5560:10;8244:32;5560:10;8260:7;8269:6;8244:8;:32::i;:::-;8294:4;8287:11;;;8105:201;;;;;:::o;23998:345::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;;;;;;;;;24088:21:::1;24078:6;:31;;24070:93;;;::::0;-1:-1:-1;;;24070:93:0;;6133:2:1;24070:93:0::1;::::0;::::1;6115:21:1::0;6172:2;6152:18;;;6145:30;6211:34;6191:18;;;6184:62;-1:-1:-1;;;6262:18:1;;;6255:47;6319:19;;24070:93:0::1;5931:413:1::0;24070:93:0::1;24175:12;6212:6:::0;;24193:42:::1;::::0;-1:-1:-1;;;;;6212:6:0;;;;24223;;24175:12;24193:42;24175:12;24193:42;24223:6;6212;24193:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24174:61;;;24250:7;24246:90;;;24293:15;::::0;:22:::1;::::0;;-1:-1:-1;;;24293:22:0;;;;24279:45:::1;::::0;-1:-1:-1;;;;;24293:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24279:45;::::0;;-1:-1:-1;;;;;7007:32:1;;;6989:51;;7071:2;7056:18;;7049:34;;;6962:18;24279:45:0::1;;;;;;;24246:90;24059:284;23998:345:::0;:::o;17230:321::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;17287:16:::1;:23:::0;;-1:-1:-1;;;;17287:23:0::1;-1:-1:-1::0;;;17287:23:0::1;::::0;;17324:18:::1;::::0;17287:23;17324;17321:175:::1;;17385:12;17364:18;:33:::0;17436:15:::1;17412:21;:39:::0;17466:11:::1;:18:::0;;-1:-1:-1;;17466:18:0::1;-1:-1:-1::0;17466:18:0::1;::::0;;17321:175:::1;17511:32;::::0;17537:5:::1;::::0;17511:32;;::::1;::::0;17537:5;;17511:32:::1;17230:321::o:0;22369:273::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;22470:11:::1;;22458:8;:23:::0;22450:86:::1;;;::::0;-1:-1:-1;;;22450:86:0;;7296:2:1;22450:86:0::1;::::0;::::1;7278:21:1::0;7335:2;7315:18;;;7308:30;7374:34;7354:18;;;7347:62;-1:-1:-1;;;7425:18:1;;;7418:48;7483:19;;22450:86:0::1;7094:414:1::0;22450:86:0::1;22589:11;::::0;22552:49:::1;::::0;22579:8;;22552:49:::1;::::0;;;::::1;22612:11;:22:::0;22369:273::o;8316:295::-;8447:4;5560:10;8505:38;8521:4;5560:10;8536:6;8505:15;:38::i;:::-;8554:27;8564:4;8570:2;8574:6;8554:9;:27::i;:::-;-1:-1:-1;8599:4:0;;8316:295;-1:-1:-1;;;;8316:295:0:o;22648:278::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;22744:15:::1;;22732:8;:27:::0;22724:93:::1;;;::::0;-1:-1:-1;;;22724:93:0;;7715:2:1;22724:93:0::1;::::0;::::1;7697:21:1::0;7754:2;7734:18;;;7727:30;7793:34;7773:18;;;7766:62;-1:-1:-1;;;7844:18:1;;;7837:52;7906:19;;22724:93:0::1;7513:418:1::0;22724:93:0::1;22865:15;::::0;22833:48:::1;::::0;22855:8;;22833:48:::1;::::0;;;::::1;22892:15;:26:::0;22648:278::o;23265:727::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;23350:1:::1;23326:21;;:25;23318:74;;;::::0;-1:-1:-1;;;23318:74:0;;8138:2:1;23318:74:0::1;::::0;::::1;8120:21:1::0;8177:2;8157:18;;;8150:30;8216:34;8196:18;;;8189:62;-1:-1:-1;;;8267:18:1;;;8260:34;8311:19;;23318:74:0::1;7936:400:1::0;23318:74:0::1;23406:20;::::0;::::1;::::0;::::1;;;23405:21;23397:84;;;::::0;-1:-1:-1;;;23397:84:0;;8543:2:1;23397:84:0::1;::::0;::::1;8525:21:1::0;8582:2;8562:18;;;8555:30;8621:34;8601:18;;;8594:62;-1:-1:-1;;;8672:18:1;;;8665:48;8730:19;;23397:84:0::1;8341:414:1::0;23397:84:0::1;23530:1;23509:18;;23494:12;:33;;;;:::i;:::-;:37;23486:98;;;::::0;-1:-1:-1;;;23486:98:0;;9227:2:1;23486:98:0::1;::::0;::::1;9209:21:1::0;9266:2;9246:18;;;9239:30;9305:34;9285:18;;;9278:62;-1:-1:-1;;;9356:18:1;;;9349:46;9412:19;;23486:98:0::1;9025:412:1::0;23486:98:0::1;23630:4;23589:20;7711:18:::0;;;:9;:18;;;;;;23641:20:::1;:27:::0;;-1:-1:-1;;23641:27:0::1;;;::::0;;23681:12:::1;::::0;-1:-1:-1;;23681:28:0::1;23673:91;;;::::0;-1:-1:-1;;;23673:91:0;;9644:2:1;23673:91:0::1;::::0;::::1;9626:21:1::0;9683:2;9663:18;;;9656:30;9722:34;9702:18;;;9695:62;-1:-1:-1;;;9773:18:1;;;9766:48;9831:19;;23673:91:0::1;9442:414:1::0;23673:91:0::1;23786:12;::::0;;23769:14:::1;23803:16:::0;;;;23786:12;23862:4:::1;23847:30;23878:7;6185::::0;6212:6;-1:-1:-1;;;;;6212:6:0;;6147:79;23878:7:::1;23847:47;::::0;-1:-1:-1;;;;;;23847:47:0::1;::::0;;;;;;-1:-1:-1;;;;;7007:32:1;;;23847:47:0::1;::::0;::::1;6989:51:1::0;7056:18;;;7049:34;;;6962:18;;23847:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23830:64;;23909:7;23905:80;;;23937:36;::::0;;23959:4:::1;6989:51:1::0;;7071:2;7056:18;;7049:34;;;23937:36:0::1;::::0;6962:18:1;23937:36:0::1;;;;;;;23905:80;23313:679;;;23265:727::o:0;17557:139::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;17616:16:::1;:24:::0;;-1:-1:-1;;;;17616:24:0::1;::::0;;17656:32:::1;::::0;17616:24;;17635:5:::1;::::0;17656:32:::1;::::0;17635:5;;17656:32:::1;17557:139::o:0;8619:238::-;8707:4;5560:10;8763:64;5560:10;8779:7;8816:10;8788:25;5560:10;8779:7;8788:9;:25::i;:::-;:38;;;;:::i;:::-;8763:8;:64::i;18893:349::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19001:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;18993:118:::1;;;::::0;-1:-1:-1;;;18993:118:0;;10443:2:1;18993:118:0::1;::::0;::::1;10425:21:1::0;10482:2;10462:18;;;10455:30;10521:34;10501:18;;;10494:62;10592:29;10572:18;;;10565:57;10639:19;;18993:118:0::1;10241:423:1::0;18993:118:0::1;-1:-1:-1::0;;;;;19122:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;19122:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19184:50;;154:41:1;;;19184:50:0::1;::::0;127:18:1;19184:50:0::1;;;;;;;;18893:349:::0;;:::o;18653:234::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18732:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18724:65;;;::::0;-1:-1:-1;;;18724:65:0;;10871:2:1;18724:65:0::1;::::0;::::1;10853:21:1::0;10910:2;10890:18;;;10883:30;10949:34;10929:18;;;10922:62;-1:-1:-1;;;11000:18:1;;;10993:31;11041:19;;18724:65:0::1;10669:397:1::0;18724:65:0::1;-1:-1:-1::0;;;;;18800:19:0;::::1;18822:5;18800:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;18800:27:0::1;::::0;;18843:36;18822:5;;18800:19;18843:36:::1;::::0;18822:5;;18843:36:::1;18653:234:::0;:::o;6361:148::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;6468:1:::1;6452:6:::0;;6431:40:::1;::::0;-1:-1:-1;;;;;6452:6:0;;::::1;::::0;6431:40:::1;::::0;6468:1;;6431:40:::1;6499:1;6482:19:::0;;-1:-1:-1;;;;;;6482:19:0::1;::::0;;6361:148::o;20269:1077::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;20408:16:::1;::::0;-1:-1:-1;;;;;20408:39:0;;::::1;:16:::0;::::1;:39;20404:305;;-1:-1:-1::0;;;;;20472:33:0;::::1;20464:89;;;::::0;-1:-1:-1;;;20464:89:0;;11273:2:1;20464:89:0::1;::::0;::::1;11255:21:1::0;11312:2;11292:18;;;11285:30;11351:34;11331:18;;;11324:62;-1:-1:-1;;;11402:18:1;;;11395:41;11453:19;;20464:89:0::1;11071:407:1::0;20464:89:0::1;20627:16;::::0;20573:71:::1;::::0;-1:-1:-1;;;11685:31:1;;-1:-1:-1;;;;;20627:16:0;;::::1;::::0;20573:71;::::1;::::0;11741:2:1;11732:12;20573:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20659:16;:38:::0;;-1:-1:-1;;;;;;20659:38:0::1;-1:-1:-1::0;;;;;20659:38:0;::::1;;::::0;;20404:305:::1;20723:16;::::0;-1:-1:-1;;;;;20723:39:0;;::::1;:16:::0;::::1;:39;20719:305;;-1:-1:-1::0;;;;;20787:33:0;::::1;20779:89;;;::::0;-1:-1:-1;;;20779:89:0;;11957:2:1;20779:89:0::1;::::0;::::1;11939:21:1::0;11996:2;11976:18;;;11969:30;12035:34;12015:18;;;12008:62;-1:-1:-1;;;12086:18:1;;;12079:41;12137:19;;20779:89:0::1;11755:407:1::0;20779:89:0::1;20942:16;::::0;20888:71:::1;::::0;-1:-1:-1;;;12369:31:1;;-1:-1:-1;;;;;20942:16:0;;::::1;::::0;20888:71;::::1;::::0;12425:2:1;12416:12;20888:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20974:16;:38:::0;;-1:-1:-1;;;;;;20974:38:0::1;-1:-1:-1::0;;;;;20974:38:0;::::1;;::::0;;20719:305:::1;21038:16;::::0;-1:-1:-1;;;;;21038:39:0;;::::1;:16:::0;::::1;:39;21034:305;;-1:-1:-1::0;;;;;21102:33:0;::::1;21094:89;;;::::0;-1:-1:-1;;;21094:89:0;;12641:2:1;21094:89:0::1;::::0;::::1;12623:21:1::0;12680:2;12660:18;;;12653:30;12719:34;12699:18;;;12692:62;-1:-1:-1;;;12770:18:1;;;12763:41;12821:19;;21094:89:0::1;12439:407:1::0;21094:89:0::1;21257:16;::::0;21203:71:::1;::::0;-1:-1:-1;;;13053:31:1;;-1:-1:-1;;;;;21257:16:0;;::::1;::::0;21203:71;::::1;::::0;13109:2:1;13100:12;21203:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21289:16;:38:::0;;-1:-1:-1;;;;;21289:38:0;::::1;-1:-1:-1::0;;;;;;21289:38:0;;::::1;;::::0;;20269:1077;;;:::o;21709:345::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;21848:93:::1;21872:5;21878:20;21899;21920;21848:23;:93::i;:::-;21957:89;::::0;-1:-1:-1;;;13325:28:1;;13378:2;13369:12;21957:89:0::1;;::::0;;;;;::::1;::::0;;4667:4:1;4655:17;;;4637:36;;4709:17;;;4704:2;4689:18;;4682:45;4763:17;;4743:18;;;4736:45;21957:89:0;;;;::::1;::::0;;;;;4625:2:1;21957:89:0;;::::1;21709:345:::0;;;:::o;19922:341::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20027:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;20019:115:::1;;;;-1:-1:-1::0;;;20019:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20145:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;20145:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20210:45;;154:41:1;;;20210:45:0::1;::::0;127:18:1;20210:45:0::1;14:187:1::0;18250:397:0;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18328:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18327:20;18319:70;;;::::0;-1:-1:-1;;;18319:70:0;;14016:2:1;18319:70:0::1;::::0;::::1;13998:21:1::0;14055:2;14035:18;;;14028:30;14094:34;14074:18;;;14067:62;-1:-1:-1;;;14145:18:1;;;14138:35;14190:19;;18319:70:0::1;13814:401:1::0;18319:70:0::1;18404:11;::::0;::::1;;18400:152;;;18484:6;18459:21;;18441:15;:39;;;;:::i;:::-;18440:50;18432:108;;;::::0;-1:-1:-1;;;18432:108:0;;14422:2:1;18432:108:0::1;::::0;::::1;14404:21:1::0;14461:2;14441:18;;;14434:30;14500:34;14480:18;;;14473:62;-1:-1:-1;;;14551:18:1;;;14544:43;14604:19;;18432:108:0::1;14220:409:1::0;18432:108:0::1;-1:-1:-1::0;;;;;18562:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;18562:26:0::1;18584:4;18562:26:::0;;::::1;::::0;;;18604:35;;18584:4;;18562:19;18604:35:::1;::::0;::::1;18250:397:::0;:::o;19558:358::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19668:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;19660:120:::1;;;;-1:-1:-1::0;;;19660:120:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19791:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;19791:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19861:47;;154:41:1;;;19861:47:0::1;::::0;127:18:1;19861:47:0::1;14:187:1::0;7282:104:0;7338:13;7371:7;7364:14;;;;;:::i;8865:436::-;8958:4;5560:10;8958:4;9041:25;5560:10;9058:7;9041:9;:25::i;:::-;9014:52;;9105:15;9085:16;:35;;9077:85;;;;-1:-1:-1;;;9077:85:0;;14836:2:1;9077:85:0;;;14818:21:1;14875:2;14855:18;;;14848:30;14914:34;14894:18;;;14887:62;-1:-1:-1;;;14965:18:1;;;14958:35;15010:19;;9077:85:0;14634:401:1;9077:85:0;9198:60;9207:5;9214:7;9242:15;9223:16;:34;9198:8;:60::i;7745:193::-;7824:4;5560:10;7880:28;5560:10;7897:2;7901:6;7880:9;:28::i;22932:327::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;23036:23:::1;;23024:8;:35:::0;23016:109:::1;;;::::0;-1:-1:-1;;;23016:109:0;;15242:2:1;23016:109:0::1;::::0;::::1;15224:21:1::0;15281:2;15261:18;;;15254:30;15320:34;15300:18;;;15293:62;15391:32;15371:18;;;15364:60;15441:19;;23016:109:0::1;15040:426:1::0;23016:109:0::1;23182:23;::::0;23141:65:::1;::::0;23172:8;;23141:65:::1;::::0;;;::::1;23217:23;:34:::0;22932:327::o;22060:303::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;22166:15:::1;::::0;-1:-1:-1;;;;;22166:15:0;;::::1;22144:38:::0;;::::1;::::0;22136:96:::1;;;::::0;-1:-1:-1;;;22136:96:0;;15673:2:1;22136:96:0::1;::::0;::::1;15655:21:1::0;15712:2;15692:18;;;15685:30;15751:34;15731:18;;;15724:62;-1:-1:-1;;;15802:18:1;;;15795:44;15856:19;;22136:96:0::1;15471:410:1::0;22136:96:0::1;22290:15;::::0;22248:59:::1;::::0;-1:-1:-1;;;;;22290:15:0;;::::1;::::0;22248:59;::::1;::::0;::::1;::::0;22290:15:::1;::::0;22248:59:::1;22318:15;:37:::0;;-1:-1:-1;;;;;;22318:37:0::1;-1:-1:-1::0;;;;;22318:37:0;;;::::1;::::0;;;::::1;::::0;;22060:303::o;19248:304::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19343:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19335:104:::1;;;;-1:-1:-1::0;;;19335:104:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19450:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19450:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19504:40;;154:41:1;;;19504:40:0::1;::::0;127:18:1;19504:40:0::1;14:187:1::0;18027:217:0;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18122:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;18122:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18186:50;;154:41:1;;;18186:50:0::1;::::0;127:18:1;18186:50:0::1;14:187:1::0;7946:151:0;-1:-1:-1;;;;;8062:18:0;;;8035:7;8062:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7946:151::o;21370:333::-;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;21505:89:::1;21528:5;21534:19;21554;21574;21505:22;:89::i;:::-;21610:85;::::0;-1:-1:-1;;;16088:27:1;;16140:2;16131:12;21610:85:0::1;15886:263:1::0;6517:244:0;6274:6;;-1:-1:-1;;;;;6274:6:0;5560:10;6274:22;6266:67;;;;-1:-1:-1;;;6266:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6606:22:0;::::1;6598:73;;;::::0;-1:-1:-1;;;6598:73:0;;16356:2:1;6598:73:0::1;::::0;::::1;16338:21:1::0;16395:2;16375:18;;;16368:30;16434:34;16414:18;;;16407:62;-1:-1:-1;;;16485:18:1;;;16478:36;16531:19;;6598:73:0::1;16154:402:1::0;6598:73:0::1;6708:6;::::0;;6687:38:::1;::::0;-1:-1:-1;;;;;6687:38:0;;::::1;::::0;6708:6;::::1;::::0;6687:38:::1;::::0;::::1;6736:6;:17:::0;;-1:-1:-1;;;;;;6736:17:0::1;-1:-1:-1::0;;;;;6736:17:0;;;::::1;::::0;;;::::1;::::0;;6517:244::o;11396:380::-;-1:-1:-1;;;;;11532:19:0;;11524:68;;;;-1:-1:-1;;;11524:68:0;;16763:2:1;11524:68:0;;;16745:21:1;16802:2;16782:18;;;16775:30;16841:34;16821:18;;;16814:62;-1:-1:-1;;;16892:18:1;;;16885:34;16936:19;;11524:68:0;16561:400:1;11524:68:0;-1:-1:-1;;;;;11611:21:0;;11603:68;;;;-1:-1:-1;;;11603:68:0;;17168:2:1;11603:68:0;;;17150:21:1;17207:2;17187:18;;;17180:30;17246:34;17226:18;;;17219:62;-1:-1:-1;;;17297:18:1;;;17290:32;17339:19;;11603:68:0;16966:398:1;11603:68:0;-1:-1:-1;;;;;11684:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11736:32;;1769:25:1;;;11736:32:0;;1742:18:1;11736:32:0;;;;;;;11396:380;;;:::o;11784:453::-;11919:24;11946:25;11956:5;11963:7;11946:9;:25::i;:::-;11919:52;;-1:-1:-1;;11986:16:0;:37;11982:248;;12068:6;12048:16;:26;;12040:68;;;;-1:-1:-1;;;12040:68:0;;17571:2:1;12040:68:0;;;17553:21:1;17610:2;17590:18;;;17583:30;17649:31;17629:18;;;17622:59;17698:18;;12040:68:0;17369:353:1;12040:68:0;12152:51;12161:5;12168:7;12196:6;12177:16;:25;12152:8;:51::i;:::-;11908:329;11784:453;;;:::o;24736:2166::-;-1:-1:-1;;;;;24868:18:0;;24860:68;;;;-1:-1:-1;;;24860:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24947:16:0;;24939:64;;;;-1:-1:-1;;;24939:64:0;;;;;;;:::i;:::-;25020:6;25030:1;25020:11;25016:93;;25048:28;25064:4;25070:2;25074:1;25048:15;:28::i;25016:93::-;-1:-1:-1;;;;;25126:35:0;;;;;;:29;:35;;;;;;;;25125:36;:74;;;;-1:-1:-1;;;;;;25166:33:0;;;;;;:29;:33;;;;;;;;25165:34;25125:74;25121:752;;;25224:16;;-1:-1:-1;;;25224:16:0;;;;25216:70;;;;-1:-1:-1;;;25216:70:0;;18739:2:1;25216:70:0;;;18721:21:1;18778:2;18758:18;;;18751:30;18817:34;18797:18;;;18790:62;-1:-1:-1;;;18868:18:1;;;18861:39;18917:19;;25216:70:0;18537:405:1;25216:70:0;-1:-1:-1;;;;;25310:14:0;;;;;;:10;:14;;;;;;;;25309:15;25301:57;;;;-1:-1:-1;;;25301:57:0;;19149:2:1;25301:57:0;;;19131:21:1;19188:2;19168:18;;;19161:30;19227:31;19207:18;;;19200:59;19276:18;;25301:57:0;18947:353:1;25301:57:0;-1:-1:-1;;;;;25382:16:0;;;;;;:10;:16;;;;;;;;25381:17;25373:59;;;;-1:-1:-1;;;25373:59:0;;19149:2:1;25373:59:0;;;19131:21:1;19188:2;19168:18;;;19161:30;19227:31;19207:18;;;19200:59;19276:18;;25373:59:0;18947:353:1;25373:59:0;-1:-1:-1;;;;;25452:38:0;;;;;;:34;:38;;;;;;;;25451:39;:84;;;;-1:-1:-1;;;;;;25495:40:0;;;;;;:34;:40;;;;;;;;25494:41;25451:84;25447:208;;;25574:11;;25564:6;:21;;25556:83;;;;-1:-1:-1;;;25556:83:0;;19507:2:1;25556:83:0;;;19489:21:1;19546:2;19526:18;;;19519:30;19585:34;19565:18;;;19558:62;-1:-1:-1;;;19636:18:1;;;19629:47;19693:19;;25556:83:0;19305:413:1;25556:83:0;-1:-1:-1;;;;;25674:33:0;;;;;;:29;:33;;;;;;;;25669:193;;25764:15;;25753:6;25737:13;25747:2;-1:-1:-1;;;;;7711:18:0;7684:7;7711:18;;;:9;:18;;;;;;;7610:127;25737:13;:22;;;;:::i;:::-;25736:43;;25728:118;;;;-1:-1:-1;;;25728:118:0;;19925:2:1;25728:118:0;;;19907:21:1;19964:2;19944:18;;;19937:30;20003:34;19983:18;;;19976:62;20074:32;20054:18;;;20047:60;20124:19;;25728:118:0;19723:426:1;25728:118:0;-1:-1:-1;;;;;25898:31:0;;;;;;;:25;:31;;;;;;;25931:29;;;;;;;;25885:86;;25898:31;;;;;25931:29;25924:4;25957:2;25885:12;:86::i;:::-;26025:23;;26015:4;25982:12;7711:18;;;:9;:18;;;;;;26079:16;;-1:-1:-1;;25997:51:0;;-1:-1:-1;;;26079:16:0;;;;:40;;;;;26112:7;26079:40;:67;;;;-1:-1:-1;26137:9:0;;;;26136:10;26079:67;:97;;;;-1:-1:-1;26163:9:0;;;;;;;:13;;26079:97;:143;;;;-1:-1:-1;;;;;;26193:29:0;;;;;;:25;:29;;;;;;;;26079:143;26061:280;;;26249:9;:16;;-1:-1:-1;;26249:16:0;26261:4;26249:16;;;26280:17;:15;:17::i;:::-;26312:9;:17;;-1:-1:-1;;26312:17:0;;;26061:280;26369:9;;26353:12;;26369:9;;26368:10;:30;;;;-1:-1:-1;26382:16:0;;-1:-1:-1;;;26382:16:0;;;;26368:30;-1:-1:-1;;;;;26415:24:0;;;;;;:18;:24;;;;;;26353:45;;-1:-1:-1;26415:24:0;;;:50;;-1:-1:-1;;;;;;26443:22:0;;;;;;:18;:22;;;;;;;;26415:50;26411:98;;;-1:-1:-1;26492:5:0;26411:98;26523:7;:24;;;;-1:-1:-1;26534:9:0;;;;;;;:13;;26523:24;26519:332;;;26588:9;;26564:11;;26601:3;;26579:18;;26588:9;;;;;26579:6;:18;:::i;:::-;26578:26;;;;:::i;:::-;26564:40;-1:-1:-1;26628:12:0;26564:40;26628:6;:12;:::i;:::-;26619:21;;26683:1;26659:21;;:25;:69;;;;;26726:1;26704:18;;26689:12;:33;;;;:::i;:::-;:38;;26659:69;26655:129;;;26765:3;26749:12;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;26655:129:0;26798:41;26814:4;26828;26835:3;26798:15;:41::i;:::-;26549:302;26519:332;26861:33;26877:4;26883:2;26887:6;26861:15;:33::i;:::-;24849:2053;;24736:2166;;;:::o;28142:939::-;28308:23;;:47;;;;-1:-1:-1;;;28308:23:0;;;;:47;28304:250;;28377:104;;-1:-1:-1;;;20786:34:1;;20845:2;20836:12;28377:104:0;;;;;;;;28420:23;;28377:104;;28420:23;-1:-1:-1;;;28420:23:0;;;;;28377:104;;;;-1:-1:-1;;;;;;;;;;;28377:104:0;;;28466:14;;;;;;28377:104;:::i;:::-;;;;;;;;28496:46;;-1:-1:-1;;;;28496:46:0;-1:-1:-1;;;28496:46:0;;;;;;;28304:250;28568:23;;:47;;;;-1:-1:-1;;;28568:23:0;;;;:47;28564:250;;28637:104;;-1:-1:-1;;;21275:34:1;;21334:2;21325:12;28637:104:0;;;;;;;;28680:23;;28637:104;;28680:23;-1:-1:-1;;;28680:23:0;;;;;28637:104;;;;-1:-1:-1;;;;;;;;;;;28637:104:0;;;28726:14;;;;;;28637:104;:::i;:::-;;;;;;;;28756:46;;-1:-1:-1;;;;28756:46:0;-1:-1:-1;;;28756:46:0;;;;;;;28564:250;28828:23;;:47;;;;-1:-1:-1;;;28828:23:0;;;;:47;28824:250;;28897:104;;-1:-1:-1;;;21550:34:1;;21609:2;21600:12;28897:104:0;;;;;;;;28940:23;;28897:104;;28940:23;-1:-1:-1;;;28940:23:0;;;;;28897:104;;;;-1:-1:-1;;;;;;;;;;;28897:104:0;;;28986:14;;;;;;28897:104;:::i;:::-;;;;;;;;29016:46;;;;;-1:-1:-1;;;29016:46:0;-1:-1:-1;;;;29016:46:0;;;;;;28142:939;;;;:::o;29087:914::-;29249:22;;:45;;;;-1:-1:-1;;;29249:22:0;;;;:45;29245:243;;29316:101;;-1:-1:-1;;;21825:33:1;;21883:2;21874:12;29316:101:0;;;;;;;;29358:22;;29316:101;;29358:22;-1:-1:-1;;;29358:22:0;;;;;29316:101;;;;-1:-1:-1;;;;;;;;;;;29316:101:0;;;29402:14;;;;;;29316:101;:::i;:::-;;;;;;;;29432:44;;-1:-1:-1;;;;29432:44:0;-1:-1:-1;;;29432:44:0;;;;;;;29245:243;29502:22;;:45;;;;-1:-1:-1;;;29502:22:0;;;;:45;29498:243;;29569:101;;-1:-1:-1;;;22099:33:1;;22157:2;22148:12;29569:101:0;;;;;;;;29611:22;;29569:101;;29611:22;-1:-1:-1;;;29611:22:0;;;;;29569:101;;;;-1:-1:-1;;;;;;;;;;;29569:101:0;;;29655:14;;;;;;29569:101;:::i;:::-;;;;;;;;29685:44;;-1:-1:-1;;;;29685:44:0;-1:-1:-1;;;29685:44:0;;;;;;;29498:243;29755:22;;:45;;;;-1:-1:-1;;;29755:22:0;;;;:45;29751:243;;29822:101;;-1:-1:-1;;;22373:33:1;;22431:2;22422:12;29822:101:0;;;;;;;;29864:22;;29822:101;;29864:22;-1:-1:-1;;;29864:22:0;;;;;29822:101;;;;-1:-1:-1;;;;;;;;;;;29822:101:0;;;29908:14;;;;;;29822:101;:::i;:::-;;;;;;;;29938:44;;;;;-1:-1:-1;;;29938:44:0;-1:-1:-1;;;;29938:44:0;;;;;;29087:914;;;;:::o;9309:840::-;-1:-1:-1;;;;;9440:18:0;;9432:68;;;;-1:-1:-1;;;9432:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9519:16:0;;9511:64;;;;-1:-1:-1;;;9511:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9661:15:0;;9639:19;9661:15;;;:9;:15;;;;;;9695:21;;;;9687:72;;;;-1:-1:-1;;;9687:72:0;;22647:2:1;9687:72:0;;;22629:21:1;22686:2;22666:18;;;22659:30;22725:34;22705:18;;;22698:62;-1:-1:-1;;;22776:18:1;;;22769:36;22822:19;;9687:72:0;22445:402:1;9687:72:0;-1:-1:-1;;;;;9795:15:0;;;;;;;:9;:15;;;;;;9813:20;;;9795:38;;10013:13;;;;;;;;;;:23;;;;;;10065:26;;;;;;9827:6;1769:25:1;;1757:2;1742:18;;1623:177;10065:26:0;;;;;;;;10104:37;23265:727;26910:1224;27009:14;:18;;-1:-1:-1;;27067:18:0;;;27098:362;;;;27134:11;;;;:56;;;;;27189:1;27167:18;;27149:15;:36;;;;:::i;:::-;:41;;27134:56;27130:319;;;27211:14;:20;;-1:-1:-1;;27211:20:0;27228:3;27211:20;;;27130:319;;;27289:5;:24;27272:14;:41;;-1:-1:-1;;;27289:24:0;;;;;;-1:-1:-1;;27332:41:0;;;;;;;27289:24;-1:-1:-1;;;27349:24:0;;;;27332:41;;-1:-1:-1;;27392:41:0;-1:-1:-1;;;27409:24:0;;;;27392:41;;;;;;;;27130:319;27474:10;27470:199;;;27518:5;:25;27501:14;:42;;-1:-1:-1;;;27518:25:0;;;;;;-1:-1:-1;;27558:42:0;;;;;;;27518:25;-1:-1:-1;;;27575:25:0;;;;27558:42;;-1:-1:-1;;27615:42:0;-1:-1:-1;;;27632:25:0;;;;27615:42;;;;;;;;27470:199;27684:10;27683:11;:27;;;;;27699:11;27698:12;27683:27;:105;;;;-1:-1:-1;;;;;;27715:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;27754:33:0;;;;;;:29;:33;;;;;;;;27715:72;27679:291;;;27822:5;:24;27805:14;:41;;-1:-1:-1;;;27822:24:0;;;;;;-1:-1:-1;;27861:41:0;;;;;;;27822:24;-1:-1:-1;;;27878:24:0;;;;27861:41;;-1:-1:-1;;27917:41:0;-1:-1:-1;;;27934:24:0;;;;27917:41;;;;;;;;27679:291;28026:14;;;;;;;;;27992:31;;28026:14;28009;;;;;27992;:31;:::i;:::-;:48;;;;:::i;:::-;27980:9;:60;;;;;;;;;;-1:-1:-1;;27980:60:0;;;;;;;;28056:70;;;28068:14;;;;;;;;;;23220:36:1;;27980:60:0;28084:14;;;;23287:2:1;23272:18;;23265:45;28100:14:0;;;;;23326:18:1;;;23319:45;28116:9:0;;;;;23395:2:1;23380:18;;23373:45;28056:70:0;;;;;;;23207:3:1;28056:70:0;;;26910:1224;;;;:::o;30009:1163::-;30099:4;30055:23;7711:18;;;:9;:18;;;;;;30241:9;;7711:18;;30144:21;;30253:1;;30241:9;;;;;;;30205:32;;30223:14;7711:18;30205:32;:::i;:::-;30204:46;;;;:::i;:::-;:50;;;;:::i;:::-;30178:76;-1:-1:-1;30265:20:0;30288:33;30178:76;30288:15;:33;:::i;:::-;30265:56;;30334:31;30352:12;30334:17;:31::i;:::-;30378:27;30408:41;30432:17;30408:21;:41;:::i;:::-;30495:14;;30378:71;;-1:-1:-1;30460:19:0;;30495:18;;30512:1;;30495:14;;:18;:::i;:::-;30482:9;;:32;;;:9;;;;;:32;:::i;:::-;30578:14;;30460:54;;;;;-1:-1:-1;30525:27:0;;30610:1;;30460:54;;30556:36;;30578:14;30556:19;:36;:::i;:::-;30555:52;;;;:::i;:::-;:56;;;;:::i;:::-;30675:14;;30525:86;;-1:-1:-1;30622:27:0;;30693:11;;30653:36;;30675:14;;;;;30653:19;:36;:::i;:::-;30652:52;;;;:::i;:::-;30622:82;-1:-1:-1;30715:27:0;30768:42;30622:82;30768:19;:42;:::i;:::-;30745:66;;:19;:66;:::i;:::-;30850:16;;30715:96;;-1:-1:-1;30824:64:0;;-1:-1:-1;;;;;30850:16:0;30715:96;30824:17;:64::i;:::-;30925:16;;30899:64;;-1:-1:-1;;;;;30925:16:0;30943:19;30899:17;:64::i;:::-;30980:19;;30976:189;;31016:51;31030:15;31047:19;31016:13;:51::i;:::-;31087:66;;;23957:25:1;;;24013:2;23998:18;;23991:34;;;24041:18;;;24034:34;;;31087:66:0;;23945:2:1;23930:18;31087:66:0;;;;;;;30976:189;30044:1128;;;;;;;;;30009:1163::o;31180:500::-;31271:16;;;31285:1;31271:16;;;;;;;;31247:21;;31271:16;;;;;;;;;;-1:-1:-1;31271:16:0;31247:40;;31316:4;31298;31303:1;31298:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31298:23:0;;;:7;;;;;;;;;;:23;;;;31342:15;;:22;;;-1:-1:-1;;;31342:22:0;;;;:15;;;;;:20;;:22;;;;;31298:7;;31342:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31332:4;31337:1;31332:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31332:32:0;;;:7;;;;;;;;;:32;31407:15;;31375:62;;31392:4;;31407:15;31425:11;31375:8;:62::i;:::-;31448:15;;:224;;-1:-1:-1;;;31448:224:0;;-1:-1:-1;;;;;31448:15:0;;;;:66;;:224;;31529:11;;31448:15;;31599:4;;31626;;31646:15;;31448:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31236:444;31180:500;:::o;2420:322::-;2534:6;2509:21;:31;;2496:86;;;;-1:-1:-1;;;2496:86:0;;25530:2:1;2496:86:0;;;25512:21:1;25569:2;25549:18;;;25542:30;25608:31;25588:18;;;25581:59;25657:18;;2496:86:0;25328:353:1;2496:86:0;2590:12;2608:9;-1:-1:-1;;;;;2608:14:0;2630:6;2608:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2589:52;;;2659:7;2646:91;;;;-1:-1:-1;;;2646:91:0;;25888:2:1;2646:91:0;;;25870:21:1;25927:2;25907:18;;;25900:30;25966:34;25946:18;;;25939:62;26037:28;26017:18;;;26010:56;26083:19;;2646:91:0;25686:422:1;31688:426:0;31802:15;;31770:62;;31787:4;;-1:-1:-1;;;;;31802:15:0;31820:11;31770:8;:62::i;:::-;31843:15;;32049:16;;31843:263;;-1:-1:-1;;;31843:263:0;;31917:4;31843:263;;;26454:34:1;26504:18;;;26497:34;;;31843:15:0;26547:18:1;;;26540:34;;;26590:18;;;26583:34;-1:-1:-1;;;;;32049:16:0;;;26633:19:1;;;26626:44;32080:15:0;26686:19:1;;;26679:35;31843:15:0;;;:31;;31883:9;;26388:19:1;;31843:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;814:70;759:131;:::o;895:315::-;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2455:118::-;2541:5;2534:13;2527:21;2520:5;2517:32;2507:60;;2563:1;2560;2553:12;2578:382;2643:6;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2759:9;2746:23;2778:31;2803:5;2778:31;:::i;:::-;2828:5;-1:-1:-1;2885:2:1;2870:18;;2857:32;2898:30;2857:32;2898:30;:::i;:::-;2947:7;2937:17;;;2578:382;;;;;:::o;3173:247::-;3232:6;3285:2;3273:9;3264:7;3260:23;3256:32;3253:52;;;3301:1;3298;3291:12;3253:52;3340:9;3327:23;3359:31;3384:5;3359:31;:::i;:::-;3409:5;3173:247;-1:-1:-1;;;3173:247:1:o;3425:529::-;3502:6;3510;3518;3571:2;3559:9;3550:7;3546:23;3542:32;3539:52;;;3587:1;3584;3577:12;3539:52;3626:9;3613:23;3645:31;3670:5;3645:31;:::i;:::-;3695:5;-1:-1:-1;3752:2:1;3737:18;;3724:32;3765:33;3724:32;3765:33;:::i;:::-;3817:7;-1:-1:-1;3876:2:1;3861:18;;3848:32;3889:33;3848:32;3889:33;:::i;:::-;3941:7;3931:17;;;3425:529;;;;;:::o;3959:156::-;4025:20;;4085:4;4074:16;;4064:27;;4054:55;;4105:1;4102;4095:12;4054:55;3959:156;;;:::o;4120:322::-;4191:6;4199;4207;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4299:27;4316:9;4299:27;:::i;:::-;4289:37;;4345:36;4377:2;4366:9;4362:18;4345:36;:::i;:::-;4335:46;;4400:36;4432:2;4421:9;4417:18;4400:36;:::i;:::-;4390:46;;4120:322;;;;;:::o;4792:388::-;4860:6;4868;4921:2;4909:9;4900:7;4896:23;4892:32;4889:52;;;4937:1;4934;4927:12;4889:52;4976:9;4963:23;4995:31;5020:5;4995:31;:::i;:::-;5045:5;-1:-1:-1;5102:2:1;5087:18;;5074:32;5115:33;5074:32;5115:33;:::i;5185:380::-;5264:1;5260:12;;;;5307;;;5328:61;;5382:4;5374:6;5370:17;5360:27;;5328:61;5435:2;5427:6;5424:14;5404:18;5401:38;5398:161;;5481:10;5476:3;5472:20;5469:1;5462:31;5516:4;5513:1;5506:15;5544:4;5541:1;5534:15;5398:161;;5185:380;;;:::o;5570:356::-;5772:2;5754:21;;;5791:18;;;5784:30;5850:34;5845:2;5830:18;;5823:62;5917:2;5902:18;;5570:356::o;6559:251::-;6629:6;6682:2;6670:9;6661:7;6657:23;6653:32;6650:52;;;6698:1;6695;6688:12;6650:52;6730:9;6724:16;6749:31;6774:5;6749:31;:::i;8760:127::-;8821:10;8816:3;8812:20;8809:1;8802:31;8852:4;8849:1;8842:15;8876:4;8873:1;8866:15;8892:128;8959:9;;;8980:11;;;8977:37;;;8994:18;;:::i;9861:245::-;9928:6;9981:2;9969:9;9960:7;9956:23;9952:32;9949:52;;;9997:1;9994;9987:12;9949:52;10029:9;10023:16;10048:28;10070:5;10048:28;:::i;10111:125::-;10176:9;;;10197:10;;;10194:36;;;10210:18;;:::i;13392:417::-;13594:2;13576:21;;;13633:2;13613:18;;;13606:30;13672:34;13667:2;13652:18;;13645:62;-1:-1:-1;;;13738:2:1;13723:18;;13716:51;13799:3;13784:19;;13392:417::o;17727:401::-;17929:2;17911:21;;;17968:2;17948:18;;;17941:30;18007:34;18002:2;17987:18;;17980:62;-1:-1:-1;;;18073:2:1;18058:18;;18051:35;18118:3;18103:19;;17727:401::o;18133:399::-;18335:2;18317:21;;;18374:2;18354:18;;;18347:30;18413:34;18408:2;18393:18;;18386:62;-1:-1:-1;;;18479:2:1;18464:18;;18457:33;18522:3;18507:19;;18133:399::o;20154:168::-;20227:9;;;20258;;20275:15;;;20269:22;;20255:37;20245:71;;20296:18;;:::i;20327:127::-;20388:10;20383:3;20379:20;20376:1;20369:31;20419:4;20416:1;20409:15;20443:4;20440:1;20433:15;20459:120;20499:1;20525;20515:35;;20530:18;;:::i;:::-;-1:-1:-1;20564:9:1;;20459:120::o;20859:209::-;-1:-1:-1;;21023:38:1;;;;21005:57;;20993:2;20978:18;;20859:209::o;22852:148::-;22940:4;22919:12;;;22933;;;22915:31;;22958:13;;22955:39;;;22974:18;;:::i;23429:165::-;23467:1;23501:4;23498:1;23494:12;23525:3;23515:37;;23532:18;;:::i;:::-;23584:3;23577:4;23574:1;23570:12;23566:22;23561:27;;;23429:165;;;;:::o;23599:151::-;23689:4;23682:12;;;23668;;;23664:31;;23707:14;;23704:40;;;23724:18;;:::i;24211:127::-;24272:10;24267:3;24263:20;24260:1;24253:31;24303:4;24300:1;24293:15;24327:4;24324:1;24317:15;24343:980;24605:4;24653:3;24642:9;24638:19;24684:6;24673:9;24666:25;24710:2;24748:6;24743:2;24732:9;24728:18;24721:34;24791:3;24786:2;24775:9;24771:18;24764:31;24815:6;24850;24844:13;24881:6;24873;24866:22;24919:3;24908:9;24904:19;24897:26;;24958:2;24950:6;24946:15;24932:29;;24979:1;24989:195;25003:6;25000:1;24997:13;24989:195;;;25068:13;;-1:-1:-1;;;;;25064:39:1;25052:52;;25159:15;;;;25124:12;;;;25100:1;25018:9;24989:195;;;-1:-1:-1;;;;;;;25240:32:1;;;;25235:2;25220:18;;25213:60;-1:-1:-1;;;25304:3:1;25289:19;25282:35;25201:3;24343:980;-1:-1:-1;;;24343:980:1:o;26725:306::-;26813:6;26821;26829;26882:2;26870:9;26861:7;26857:23;26853:32;26850:52;;;26898:1;26895;26888:12;26850:52;26927:9;26921:16;26911:26;;26977:2;26966:9;26962:18;26956:25;26946:35;;27021:2;27010:9;27006:18;27000:25;26990:35;;26725:306;;;;;:::o

Swarm Source

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