ETH Price: $3,528.93 (+5.20%)

Token

Woodpile (AXE+1)
 

Overview

Max Total Supply

1,000,000 AXE+1

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,967.501532846346133596 AXE+1

Value
$0.00
0xa8c3341783b465442ef23358c886d3f1a0d1f0ce
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
woodpileToken

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-09-05
*/

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

// This token TG is @woodpiletoken. 50% of tokens are burnt in the fire.

// This token has 5% taxes to buy and sell, antibot. Adjust slippage.

// This token buys AXECAP token to climb its rev share ladder and redistribute rev share to WOODPILE holders. This token also has a reve share
// from trading taxes.

//

// 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 woodpileToken is Ownable, ERC20 {
    using Address for address;

    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Woodpile";
    string private constant _symbol = "AXE+1";

    bool public isTradingEnabled;

    uint256 public initialSupply = 1000000 * (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", 1, 1, 2, 2, 2, 2);

    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"}]

60a060405269d3c21bcecceda100000060075560075460085561271060075460646200002c919062000696565b620000389190620006b6565b600955620186a0600754600162000050919062000696565b6200005c9190620006b6565b600b556040805160e081018252636261736560e01b8152600160208201819052918101919091526002606082018190526080820181905260a0820181905260c090910152600f80546001600160e81b031916690202020201016261736560981b179055348015620000cc57600080fd5b5060405180604001604052806008815260200167576f6f6470696c6560c01b815250604051806040016040528060058152602001644158452b3160d81b81525060006200011e620004b660201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060046200017683826200077d565b5060056200018582826200077d565b505060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa15801562000213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000239919062000849565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000287573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ad919062000849565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000849565b600680546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000355816001620004ba565b6001601760006200036e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526017909252812080549092166001908117909255601590620003c76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601585528382208054871660019081179091556018865284832080548816821790558784168352601995869052848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620004666000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620004ae620004a56000546001600160a01b031690565b600754620005b6565b505062000891565b3390565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503620005625760405162461bcd60e51b815260206004820152604360248201527f46756e6963756c61723a204175746f6d61746564206d61726b6574206d616b6560448201527f72207061697220697320616c72656164792073657420746f20746861742076616064820152626c756560e81b608482015260a4015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b0382166200060e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000559565b80600360008282546200062291906200087b565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620006b057620006b062000680565b92915050565b600082620006d457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200070457607f821691505b6020821081036200072557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200067b57600081815260208120601f850160051c81016020861015620007545750805b601f850160051c820191505b81811015620007755782815560010162000760565b505050505050565b81516001600160401b03811115620007995762000799620006d9565b620007b181620007aa8454620006ef565b846200072b565b602080601f831160018114620007e95760008415620007d05750858301515b600019600386901b1c1916600185901b17855562000775565b600085815260208120601f198616915b828110156200081a57888601518255948401946001909101908401620007f9565b5085821015620008395787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200085c57600080fd5b81516001600160a01b03811681146200087457600080fd5b9392505050565b80820180821115620006b057620006b062000680565b6080516136fd620008ad60003960006104e101526136fd6000f3fe60806040526004361061028c5760003560e01c806375cb1bd11161015a578063aee50b1e116100c1578063d32215761161007a578063d3221576146107e7578063dd62ed3e14610807578063e625724614610827578063f2fde38b14610847578063fd72e22a14610867578063fe0175351461088757600080fd5b8063aee50b1e146106ed578063b62496f51461070d578063bea9849e1461073d578063c02466681461075d578063cd43e2281461077d578063d2d7ad83146107d157600080fd5b80638da5cb5b116101135780638da5cb5b14610644578063924241e31461066257806395d89b4114610682578063a457c2d714610697578063a9059cbb146106b7578063aa4bde28146106d757600080fd5b806375cb1bd11461058e57806376dca835146105ae578063781edb3c146105ce5780637c0a893d146105ee578063880bcbc11461060e5780638c0b5e221461062e57600080fd5b806327a14fc2116101fe57806345a42329116101b757806345a42329146104af57806349bd5a5e146104cf5780634d78fdc6146105035780634f225e6d1461052357806370a0823114610543578063715018a61461057957600080fd5b806327a14fc2146104135780632cc25d1414610433578063313ce5671461044857806334cf1fea14610464578063378dc3dc14610479578063395093511461048f57600080fd5b806314fbc5f31161025057806314fbc5f3146103475780631694505e1461036657806318160ddd1461039e5780631e293c10146103bd5780631fcfefcd146103dd57806323b872dd146103f357600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f0578063098df585146103105780630bd05b691461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506006546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108bb565b6040516102c5919061315b565b3480156102fc57600080fd5b506102b961030b3660046131c1565b61094d565b34801561031c57600080fd5b5061033061032b3660046131ed565b610967565b005b34801561033e57600080fd5b50610330610b13565b34801561035357600080fd5b506010546102b990610100900460ff1681565b34801561037257600080fd5b50600654610386906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103aa57600080fd5b506003545b6040519081526020016102c5565b3480156103c957600080fd5b506103306103d83660046131ed565b610ba0565b3480156103e957600080fd5b506103af60135481565b3480156103ff57600080fd5b506102b961040e366004613206565b610c69565b34801561041f57600080fd5b5061033061042e3660046131ed565b610c8d565b34801561043f57600080fd5b50610330610d5a565b34801561045457600080fd5b50604051601281526020016102c5565b34801561047057600080fd5b50610330611032565b34801561048557600080fd5b506103af60075481565b34801561049b57600080fd5b506102b96104aa3660046131c1565b611099565b3480156104bb57600080fd5b506103306104ca366004613255565b6110bb565b3480156104db57600080fd5b506103867f000000000000000000000000000000000000000000000000000000000000000081565b34801561050f57600080fd5b5061033061051e36600461328e565b6111db565b34801561052f57600080fd5b50600d54610386906001600160a01b031681565b34801561054f57600080fd5b506103af61055e36600461328e565b6001600160a01b031660009081526001602052604090205490565b34801561058557600080fd5b506103306112c4565b34801561059a57600080fd5b506103306105a93660046132b2565b611338565b3480156105ba57600080fd5b506103306105c9366004613313565b611653565b3480156105da57600080fd5b506103306105e9366004613255565b6116f7565b3480156105fa57600080fd5b5061033061060936600461328e565b6117b9565b34801561061a57600080fd5b50610330610629366004613255565b61192c565b34801561063a57600080fd5b506103af60085481565b34801561065057600080fd5b506000546001600160a01b0316610386565b34801561066e57600080fd5b50600c54610386906001600160a01b031681565b34801561068e57600080fd5b506102e36119ee565b3480156106a357600080fd5b506102b96106b23660046131c1565b6119fd565b3480156106c357600080fd5b506102b96106d23660046131c1565b611a78565b3480156106e357600080fd5b506103af60095481565b3480156106f957600080fd5b506103306107083660046131ed565b611a86565b34801561071957600080fd5b506102b961072836600461328e565b601a6020526000908152604090205460ff1681565b34801561074957600080fd5b5061033061075836600461328e565b611b5a565b34801561076957600080fd5b50610330610778366004613255565b611c56565b34801561078957600080fd5b50600f5460ff600160b81b8204811691600160c81b8104821691600160d81b909104165b6040805160ff948516815292841660208401529216918101919091526060016102c5565b3480156107dd57600080fd5b506103af600b5481565b3480156107f357600080fd5b50610330610802366004613255565b611d18565b34801561081357600080fd5b506103af610822366004613356565b611d9a565b34801561083357600080fd5b50610330610842366004613313565b611dc5565b34801561085357600080fd5b5061033061086236600461328e565b611e19565b34801561087357600080fd5b50600e54610386906001600160a01b031681565b34801561089357600080fd5b50600f5460ff600160c01b8204811691600160d01b8104821691600160e01b909104166107ad565b6060600480546108ca90613384565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690613384565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b60003361095b818585611f03565b60019150505b92915050565b6000546001600160a01b0316331461099a5760405162461bcd60e51b8152600401610991906133be565b60405180910390fd5b47811115610a045760405162461bcd60e51b815260206004820152603160248201527f46756e6963756c61723a2043616e6e6f742073656e64206d6f7265207468616e60448201527020636f6e74726163742062616c616e636560781b6064820152608401610991565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a51576040519150601f19603f3d011682016040523d82523d6000602084013e610a56565b606091505b505090508015610b0f57600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed91906133f3565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610b3d5760405162461bcd60e51b8152600401610991906133be565b6006805460ff60a01b1916600160a01b179055601254600003610b705743601255426011556010805460ff191660011790555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610bca5760405162461bcd60e51b8152600401610991906133be565b6008548103610c365760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d61785478416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608401610991565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610c77858285612027565b610c828585856120a1565b506001949350505050565b6000546001600160a01b03163314610cb75760405162461bcd60e51b8152600401610991906133be565b6009548103610d275760405162461bcd60e51b815260206004820152603660248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d617857616c6c6044820152756574416d6f756e7420746f2073616d652076616c756560501b6064820152608401610991565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610d845760405162461bcd60e51b8152600401610991906133be565b600060115411610de25760405162461bcd60e51b8152602060048201526024808201527f46756e6963756c61723a204c61756e6368206d7573742068617665206f6363756044820152631c9c995960e21b6064820152608401610991565b601054610100900460ff1615610e555760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a204c61756e636820746f6b656e73206861766520616c6044820152711c9958591e481899595b8818db185a5b595960721b6064820152608401610991565b600560125443610e659190613426565b11610ecb5760405162461bcd60e51b815260206004820152603060248201527f46756e6963756c61723a204f6e6c7920636c61696d206c61756e636820746f6b60448201526f0cadce640c2cce8cae440d8c2eadcc6d60831b6064820152608401610991565b306000908152600160205260409020546010805461ff001916610100179055601354811015610f575760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a2041207377617020616e64206c6971756966792068616044820152711cc8185b1c9958591e481bd8d8dd5c9c995960721b6064820152608401610991565b60138054600091829055903063a9059cbb610f7a6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190613439565b9050801561102d5760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b6000546001600160a01b0316331461105c5760405162461bcd60e51b8152600401610991906133be565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b60003361095b8185856110ac8383611d9a565b6110b69190613456565b611f03565b6000546001600160a01b031633146110e55760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150361117b5760405162461bcd60e51b815260206004820152603b60248201527f46756e6963756c61723a205468652073656c65637465642077616c6c6574206960448201527f7320616c72656164792073657420746f207468652076616c75652000000000006064820152608401610991565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146112055760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03811660009081526014602052604090205460ff166112775760405162461bcd60e51b815260206004820152602160248201527f46756e6963756c61723a204163636f756e74206973206e6f7420626c636f6b656044820152601960fa1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610991906133be565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113625760405162461bcd60e51b8152600401610991906133be565b600c546001600160a01b0384811691161461145b576001600160a01b0383166113e15760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206c69717569646974793157616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600c546040516f1b1a5c5d5a591a5d1e4c55d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611554576001600160a01b0382166114da5760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206c69717569646974793257616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600d546040516f1b1a5c5d5a591a5d1e4c95d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461102d576001600160a01b0381166115d35760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206f7065726174696f6e7357616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600e546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b0316331461167d5760405162461bcd60e51b8152600401610991906133be565b61168a600f8484846125e2565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146117215760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036117615760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91016111cf565b6000546001600160a01b031633146117e35760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03811660009081526014602052604090205460ff161561185a5760405162461bcd60e51b815260206004820152602560248201527f46756e6963756c61723a204163636f756e7420697320616c726561647920626c6044820152641bd8dad95960da1b6064820152608401610991565b60105460ff16156118da576202a300601154426118779190613426565b106118da5760405162461bcd60e51b815260206004820152602d60248201527f46756e6963756c61723a2054696d6520746f20626c6f636b206163636f756e7460448201526c1cc81a185cc8195e1c1a5c9959609a1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146119565760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036119965760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111cf565b6060600580546108ca90613384565b60003381611a0b8286611d9a565b905083811015611a6b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610991565b610c828286868403611f03565b60003361095b8185856120a1565b6000546001600160a01b03163314611ab05760405162461bcd60e51b8152600401610991906133be565b600b548103611b275760405162461bcd60e51b815260206004820152603e60248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d696e696d756d60448201527f546f6b656e734265666f72655377617020746f2073616d652076616c756500006064820152608401610991565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611b845760405162461bcd60e51b8152600401610991906133be565b6006546001600160a01b0390811690821603611bf95760405162461bcd60e51b815260206004820152602e60248201527f46756e6963756c61723a2054686520726f7574657220616c726561647920686160448201526d732074686174206164647265737360901b6064820152608401610991565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c805760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611cc05760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111cf565b6000546001600160a01b03163314611d425760405162461bcd60e51b8152600401610991906133be565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111cf565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611def5760405162461bcd60e51b8152600401610991906133be565b611dfc600f848484612799565b6040516b62617365466565732d42757960a01b8152600c016116a4565b6000546001600160a01b03163314611e435760405162461bcd60e51b8152600401610991906133be565b6001600160a01b038116611ea85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b038216611fc65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006120338484611d9a565b9050600019811461209b578181101561208e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610991565b61209b8484848403611f03565b50505050565b6001600160a01b0383166120c75760405162461bcd60e51b8152600401610991906134be565b6001600160a01b0382166120ed5760405162461bcd60e51b815260040161099190613503565b806000036121015761102d8383600061294d565b6001600160a01b03831660009081526015602052604090205460ff1615801561214357506001600160a01b03821660009081526015602052604090205460ff16155b156123f957600654600160a01b900460ff166121b35760405162461bcd60e51b815260206004820152602960248201527f46756e6963756c61723a2054726164696e672069732063757272656e746c79206044820152683234b9b0b13632b21760b91b6064820152608401610991565b6001600160a01b03821660009081526014602052604090205460ff161561221c5760405162461bcd60e51b815260206004820152601d60248201527f46756e6963756c61723a204163636f756e7420697320626c6f636b65640000006044820152606401610991565b6001600160a01b03831660009081526014602052604090205460ff16156122855760405162461bcd60e51b815260206004820152601d60248201527f46756e6963756c61723a204163636f756e7420697320626c6f636b65640000006044820152606401610991565b6001600160a01b03821660009081526018602052604090205460ff161580156122c757506001600160a01b03831660009081526018602052604090205460ff16155b15612338576008548111156123385760405162461bcd60e51b815260206004820152603160248201527f46756e6963756c61723a2042757920616d6f756e742065786365656473207468604482015270329036b0bc2a3c213abca0b6b7bab73a1760791b6064820152608401610991565b6001600160a01b03821660009081526019602052604090205460ff166123f9576009548161237b846001600160a01b031660009081526001602052604090205490565b6123859190613456565b11156123f95760405162461bcd60e51b815260206004820152603e60248201527f46756e6963756c61723a2045787065637465642077616c6c657420616d6f756e60448201527f74206578636565647320746865206d617857616c6c6574416d6f756e742e00006064820152608401610991565b6001600160a01b038084166000908152601a602052604080822054928516825290205461242e9160ff90811691168585612a7e565b600b543060009081526001602052604090205460065491111590600160a01b900460ff16801561245b5750805b801561246a5750600a5460ff16155b80156124815750601b546301000000900460ff1615155b80156124a557506001600160a01b0383166000908152601a602052604090205460ff165b156124ca57600a805460ff191660011790556124bf612ca6565b600a805460ff191690555b600a5460009060ff161580156124e95750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff168061252b57506001600160a01b03841660009081526017602052604090205460ff165b15612534575060005b80801561254c5750601b546301000000900460ff1615155b156125d057601b5460009060649061256e906301000000900460ff1686613546565b6125789190613573565b90506125848185613426565b935060006011541180156125a657506005601254436125a39190613426565b11155b156125c35780601360008282546125bd9190613456565b90915550505b6125ce86308361294d565b505b6125db85858561294d565b5050505050565b835460ff848116600160c01b909204161461267257604051721b1a5c5d5a591a5d1e4c51995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160c01b8304811692908716916000805160206136a8833981519152916126539160489190911b90613587565b60405180910390a4835460ff60c01b1916600160c01b60ff8516021784555b835460ff838116600160d01b909204161461270257604051721b1a5c5d5a591a5d1e4c91995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160d01b8304811692908616916000805160206136a8833981519152916126e39160489190911b90613587565b60405180910390a4835460ff60d01b1916600160d01b60ff8416021784555b835460ff828116600160e01b909204161461209b57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160e01b8304811692908516916000805160206136a8833981519152916127739160489190911b90613587565b60405180910390a4835460ff8216600160e01b0260ff60e01b1990911617845550505050565b835460ff848116600160b81b909204161461282857604051716c6971756964697479314665654f6e42757960701b81526012016040519081900381208554909160ff600160b81b8304811692908716916000805160206136a8833981519152916128099160489190911b90613587565b60405180910390a4835460ff60b81b1916600160b81b60ff8516021784555b835460ff838116600160c81b90920416146128b757604051716c6971756964697479324665654f6e42757960701b81526012016040519081900381208554909160ff600160c81b8304811692908616916000805160206136a8833981519152916128989160489190911b90613587565b60405180910390a4835460ff60c81b1916600160c81b60ff8416021784555b835460ff828116600160d81b909204161461209b57604051716f7065726174696f6e734665654f6e42757960701b81526012016040519081900381208554909160ff600160d81b8304811692908516916000805160206136a8833981519152916129279160489190911b90613587565b60405180910390a4835460ff8216600160d81b0260ff60d81b1990911617845550505050565b6001600160a01b0383166129735760405162461bcd60e51b8152600401610991906134be565b6001600160a01b0382166129995760405162461bcd60e51b815260040161099190613503565b6001600160a01b03831660009081526001602052604090205481811015612a115760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610991565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a719086815260200190565b60405180910390a361209b565b601b805462ffffff191690558315612b0e5760105460ff168015612ab05750600560125442612aad9190613426565b11155b15612ac757601b805460ff19166064179055612b0e565b600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b8215612b5b57600f54601b8054600160c01b830460ff90811661ffff1990921691909117610100600160d01b85048316021762ff00001916600160e01b9093041662010000029190911790555b82158015612b67575083155b8015612bad57506001600160a01b03821660009081526016602052604090205460ff1680612bad57506001600160a01b03811660009081526016602052604090205460ff165b15612bf957600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b601b5460ff620100008204811691612c199161010082048116911661359e565b612c23919061359e565b601b805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b30600090815260016020526040812054601b549091479160029060ff63010000008204811691612cd7911686613546565b612ce19190613573565b612ceb9190613573565b90506000612cf98285613426565b9050612d0481612e3b565b6000612d108447613426565b601b54909150600090612d289060029060ff166135b7565b601b54612d3f91906301000000900460ff166135d9565b601b5460ff91821692506000916002918491612d5c911686613546565b612d669190613573565b612d709190613573565b601b549091506000908390612d8d90610100900460ff1686613546565b612d979190613573565b90506000612da58284613456565b612daf9086613426565b600e54909150612dc8906001600160a01b031682612f95565b600d54612dde906001600160a01b031683612f95565b8615612e3057612dee87846130ae565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e7057612e706135f2565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed91906133f3565b81600181518110612f0057612f006135f2565b6001600160a01b039283166020918202929092010152600654612f269130911684611f03565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f5f908590600190869030904290600401613608565b600060405180830381600087803b158015612f7957600080fd5b505af1158015612f8d573d6000803e3d6000fd5b505050505050565b80471015612fe55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610991565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613032576040519150601f19603f3d011682016040523d82523d6000602084013e613037565b606091505b505090508061102d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610991565b6006546130c69030906001600160a01b031684611f03565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613136573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125db9190613679565b600060208083528351808285015260005b818110156131885785810183015185820160400152820161316c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131be57600080fd5b50565b600080604083850312156131d457600080fd5b82356131df816131a9565b946020939093013593505050565b6000602082840312156131ff57600080fd5b5035919050565b60008060006060848603121561321b57600080fd5b8335613226816131a9565b92506020840135613236816131a9565b929592945050506040919091013590565b80151581146131be57600080fd5b6000806040838503121561326857600080fd5b8235613273816131a9565b9150602083013561328381613247565b809150509250929050565b6000602082840312156132a057600080fd5b81356132ab816131a9565b9392505050565b6000806000606084860312156132c757600080fd5b83356132d2816131a9565b925060208401356132e2816131a9565b915060408401356132f2816131a9565b809150509250925092565b803560ff8116811461330e57600080fd5b919050565b60008060006060848603121561332857600080fd5b613331846132fd565b925061333f602085016132fd565b915061334d604085016132fd565b90509250925092565b6000806040838503121561336957600080fd5b8235613374816131a9565b91506020830135613283816131a9565b600181811c9082168061339857607f821691505b6020821081036133b857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561340557600080fd5b81516132ab816131a9565b634e487b7160e01b600052601160045260246000fd5b8181038181111561096157610961613410565b60006020828403121561344b57600080fd5b81516132ab81613247565b8082018082111561096157610961613410565b60208082526035908201527f46756e6963756c61723a204163636f756e7420697320616c7265616479207468604082015274652076616c7565206f6620276578636c756465642760581b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761096157610961613410565b634e487b7160e01b600052601260045260246000fd5b6000826135825761358261355d565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff818116838216019081111561096157610961613410565b600060ff8316806135ca576135ca61355d565b8060ff84160491505092915050565b60ff828116828216039081111561096157610961613410565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136585784516001600160a01b031683529383019391830191600101613633565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561368e57600080fd5b835192506020840151915060408401519050925092509256fe00edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea26469706673582212201a8d3cf6b4fb2d849292160ab653a4699d3e1d607fec434217f78d2cc8dd3df364736f6c63430008110033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806375cb1bd11161015a578063aee50b1e116100c1578063d32215761161007a578063d3221576146107e7578063dd62ed3e14610807578063e625724614610827578063f2fde38b14610847578063fd72e22a14610867578063fe0175351461088757600080fd5b8063aee50b1e146106ed578063b62496f51461070d578063bea9849e1461073d578063c02466681461075d578063cd43e2281461077d578063d2d7ad83146107d157600080fd5b80638da5cb5b116101135780638da5cb5b14610644578063924241e31461066257806395d89b4114610682578063a457c2d714610697578063a9059cbb146106b7578063aa4bde28146106d757600080fd5b806375cb1bd11461058e57806376dca835146105ae578063781edb3c146105ce5780637c0a893d146105ee578063880bcbc11461060e5780638c0b5e221461062e57600080fd5b806327a14fc2116101fe57806345a42329116101b757806345a42329146104af57806349bd5a5e146104cf5780634d78fdc6146105035780634f225e6d1461052357806370a0823114610543578063715018a61461057957600080fd5b806327a14fc2146104135780632cc25d1414610433578063313ce5671461044857806334cf1fea14610464578063378dc3dc14610479578063395093511461048f57600080fd5b806314fbc5f31161025057806314fbc5f3146103475780631694505e1461036657806318160ddd1461039e5780631e293c10146103bd5780631fcfefcd146103dd57806323b872dd146103f357600080fd5b8063064a59d01461029857806306fdde03146102ce578063095ea7b3146102f0578063098df585146103105780630bd05b691461033257600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506006546102b990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102da57600080fd5b506102e36108bb565b6040516102c5919061315b565b3480156102fc57600080fd5b506102b961030b3660046131c1565b61094d565b34801561031c57600080fd5b5061033061032b3660046131ed565b610967565b005b34801561033e57600080fd5b50610330610b13565b34801561035357600080fd5b506010546102b990610100900460ff1681565b34801561037257600080fd5b50600654610386906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b3480156103aa57600080fd5b506003545b6040519081526020016102c5565b3480156103c957600080fd5b506103306103d83660046131ed565b610ba0565b3480156103e957600080fd5b506103af60135481565b3480156103ff57600080fd5b506102b961040e366004613206565b610c69565b34801561041f57600080fd5b5061033061042e3660046131ed565b610c8d565b34801561043f57600080fd5b50610330610d5a565b34801561045457600080fd5b50604051601281526020016102c5565b34801561047057600080fd5b50610330611032565b34801561048557600080fd5b506103af60075481565b34801561049b57600080fd5b506102b96104aa3660046131c1565b611099565b3480156104bb57600080fd5b506103306104ca366004613255565b6110bb565b3480156104db57600080fd5b506103867f00000000000000000000000098662987564eca04206a2060a6fc9b4edd24ed7c81565b34801561050f57600080fd5b5061033061051e36600461328e565b6111db565b34801561052f57600080fd5b50600d54610386906001600160a01b031681565b34801561054f57600080fd5b506103af61055e36600461328e565b6001600160a01b031660009081526001602052604090205490565b34801561058557600080fd5b506103306112c4565b34801561059a57600080fd5b506103306105a93660046132b2565b611338565b3480156105ba57600080fd5b506103306105c9366004613313565b611653565b3480156105da57600080fd5b506103306105e9366004613255565b6116f7565b3480156105fa57600080fd5b5061033061060936600461328e565b6117b9565b34801561061a57600080fd5b50610330610629366004613255565b61192c565b34801561063a57600080fd5b506103af60085481565b34801561065057600080fd5b506000546001600160a01b0316610386565b34801561066e57600080fd5b50600c54610386906001600160a01b031681565b34801561068e57600080fd5b506102e36119ee565b3480156106a357600080fd5b506102b96106b23660046131c1565b6119fd565b3480156106c357600080fd5b506102b96106d23660046131c1565b611a78565b3480156106e357600080fd5b506103af60095481565b3480156106f957600080fd5b506103306107083660046131ed565b611a86565b34801561071957600080fd5b506102b961072836600461328e565b601a6020526000908152604090205460ff1681565b34801561074957600080fd5b5061033061075836600461328e565b611b5a565b34801561076957600080fd5b50610330610778366004613255565b611c56565b34801561078957600080fd5b50600f5460ff600160b81b8204811691600160c81b8104821691600160d81b909104165b6040805160ff948516815292841660208401529216918101919091526060016102c5565b3480156107dd57600080fd5b506103af600b5481565b3480156107f357600080fd5b50610330610802366004613255565b611d18565b34801561081357600080fd5b506103af610822366004613356565b611d9a565b34801561083357600080fd5b50610330610842366004613313565b611dc5565b34801561085357600080fd5b5061033061086236600461328e565b611e19565b34801561087357600080fd5b50600e54610386906001600160a01b031681565b34801561089357600080fd5b50600f5460ff600160c01b8204811691600160d01b8104821691600160e01b909104166107ad565b6060600480546108ca90613384565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690613384565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b60003361095b818585611f03565b60019150505b92915050565b6000546001600160a01b0316331461099a5760405162461bcd60e51b8152600401610991906133be565b60405180910390fd5b47811115610a045760405162461bcd60e51b815260206004820152603160248201527f46756e6963756c61723a2043616e6e6f742073656e64206d6f7265207468616e60448201527020636f6e74726163742062616c616e636560781b6064820152608401610991565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a51576040519150601f19603f3d011682016040523d82523d6000602084013e610a56565b606091505b505090508015610b0f57600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed91906133f3565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610b3d5760405162461bcd60e51b8152600401610991906133be565b6006805460ff60a01b1916600160a01b179055601254600003610b705743601255426011556010805460ff191660011790555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610bca5760405162461bcd60e51b8152600401610991906133be565b6008548103610c365760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d61785478416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608401610991565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b600033610c77858285612027565b610c828585856120a1565b506001949350505050565b6000546001600160a01b03163314610cb75760405162461bcd60e51b8152600401610991906133be565b6009548103610d275760405162461bcd60e51b815260206004820152603660248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d617857616c6c6044820152756574416d6f756e7420746f2073616d652076616c756560501b6064820152608401610991565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610d845760405162461bcd60e51b8152600401610991906133be565b600060115411610de25760405162461bcd60e51b8152602060048201526024808201527f46756e6963756c61723a204c61756e6368206d7573742068617665206f6363756044820152631c9c995960e21b6064820152608401610991565b601054610100900460ff1615610e555760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a204c61756e636820746f6b656e73206861766520616c6044820152711c9958591e481899595b8818db185a5b595960721b6064820152608401610991565b600560125443610e659190613426565b11610ecb5760405162461bcd60e51b815260206004820152603060248201527f46756e6963756c61723a204f6e6c7920636c61696d206c61756e636820746f6b60448201526f0cadce640c2cce8cae440d8c2eadcc6d60831b6064820152608401610991565b306000908152600160205260409020546010805461ff001916610100179055601354811015610f575760405162461bcd60e51b815260206004820152603260248201527f46756e6963756c61723a2041207377617020616e64206c6971756966792068616044820152711cc8185b1c9958591e481bd8d8dd5c9c995960721b6064820152608401610991565b60138054600091829055903063a9059cbb610f7a6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190613439565b9050801561102d5760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b6000546001600160a01b0316331461105c5760405162461bcd60e51b8152600401610991906133be565b6006805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b60003361095b8185856110ac8383611d9a565b6110b69190613456565b611f03565b6000546001600160a01b031633146110e55760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150361117b5760405162461bcd60e51b815260206004820152603b60248201527f46756e6963756c61723a205468652073656c65637465642077616c6c6574206960448201527f7320616c72656164792073657420746f207468652076616c75652000000000006064820152608401610991565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6000546001600160a01b031633146112055760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03811660009081526014602052604090205460ff166112775760405162461bcd60e51b815260206004820152602160248201527f46756e6963756c61723a204163636f756e74206973206e6f7420626c636f6b656044820152601960fa1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610991906133be565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113625760405162461bcd60e51b8152600401610991906133be565b600c546001600160a01b0384811691161461145b576001600160a01b0383166113e15760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206c69717569646974793157616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600c546040516f1b1a5c5d5a591a5d1e4c55d85b1b195d60821b81526001600160a01b0391821691851690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611554576001600160a01b0382166114da5760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206c69717569646974793257616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600d546040516f1b1a5c5d5a591a5d1e4c95d85b1b195d60821b81526001600160a01b0391821691841690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461102d576001600160a01b0381166115d35760405162461bcd60e51b815260206004820152602b60248201527f46756e6963756c61723a20546865206f7065726174696f6e7357616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610991565b600e546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b0319909116179055505050565b6000546001600160a01b0316331461167d5760405162461bcd60e51b8152600401610991906133be565b61168a600f8484846125e2565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146117215760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036117615760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91016111cf565b6000546001600160a01b031633146117e35760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03811660009081526014602052604090205460ff161561185a5760405162461bcd60e51b815260206004820152602560248201527f46756e6963756c61723a204163636f756e7420697320616c726561647920626c6044820152641bd8dad95960da1b6064820152608401610991565b60105460ff16156118da576202a300601154426118779190613426565b106118da5760405162461bcd60e51b815260206004820152602d60248201527f46756e6963756c61723a2054696d6520746f20626c6f636b206163636f756e7460448201526c1cc81a185cc8195e1c1a5c9959609a1b6064820152608401610991565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146119565760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036119965760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111cf565b6060600580546108ca90613384565b60003381611a0b8286611d9a565b905083811015611a6b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610991565b610c828286868403611f03565b60003361095b8185856120a1565b6000546001600160a01b03163314611ab05760405162461bcd60e51b8152600401610991906133be565b600b548103611b275760405162461bcd60e51b815260206004820152603e60248201527f46756e6963756c61723a2043616e6e6f7420757064617465206d696e696d756d60448201527f546f6b656e734265666f72655377617020746f2073616d652076616c756500006064820152608401610991565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b03163314611b845760405162461bcd60e51b8152600401610991906133be565b6006546001600160a01b0390811690821603611bf95760405162461bcd60e51b815260206004820152602e60248201527f46756e6963756c61723a2054686520726f7574657220616c726561647920686160448201526d732074686174206164647265737360901b6064820152608401610991565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c805760405162461bcd60e51b8152600401610991906133be565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503611cc05760405162461bcd60e51b815260040161099190613469565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111cf565b6000546001600160a01b03163314611d425760405162461bcd60e51b8152600401610991906133be565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111cf565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b03163314611def5760405162461bcd60e51b8152600401610991906133be565b611dfc600f848484612799565b6040516b62617365466565732d42757960a01b8152600c016116a4565b6000546001600160a01b03163314611e435760405162461bcd60e51b8152600401610991906133be565b6001600160a01b038116611ea85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b038216611fc65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006120338484611d9a565b9050600019811461209b578181101561208e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610991565b61209b8484848403611f03565b50505050565b6001600160a01b0383166120c75760405162461bcd60e51b8152600401610991906134be565b6001600160a01b0382166120ed5760405162461bcd60e51b815260040161099190613503565b806000036121015761102d8383600061294d565b6001600160a01b03831660009081526015602052604090205460ff1615801561214357506001600160a01b03821660009081526015602052604090205460ff16155b156123f957600654600160a01b900460ff166121b35760405162461bcd60e51b815260206004820152602960248201527f46756e6963756c61723a2054726164696e672069732063757272656e746c79206044820152683234b9b0b13632b21760b91b6064820152608401610991565b6001600160a01b03821660009081526014602052604090205460ff161561221c5760405162461bcd60e51b815260206004820152601d60248201527f46756e6963756c61723a204163636f756e7420697320626c6f636b65640000006044820152606401610991565b6001600160a01b03831660009081526014602052604090205460ff16156122855760405162461bcd60e51b815260206004820152601d60248201527f46756e6963756c61723a204163636f756e7420697320626c6f636b65640000006044820152606401610991565b6001600160a01b03821660009081526018602052604090205460ff161580156122c757506001600160a01b03831660009081526018602052604090205460ff16155b15612338576008548111156123385760405162461bcd60e51b815260206004820152603160248201527f46756e6963756c61723a2042757920616d6f756e742065786365656473207468604482015270329036b0bc2a3c213abca0b6b7bab73a1760791b6064820152608401610991565b6001600160a01b03821660009081526019602052604090205460ff166123f9576009548161237b846001600160a01b031660009081526001602052604090205490565b6123859190613456565b11156123f95760405162461bcd60e51b815260206004820152603e60248201527f46756e6963756c61723a2045787065637465642077616c6c657420616d6f756e60448201527f74206578636565647320746865206d617857616c6c6574416d6f756e742e00006064820152608401610991565b6001600160a01b038084166000908152601a602052604080822054928516825290205461242e9160ff90811691168585612a7e565b600b543060009081526001602052604090205460065491111590600160a01b900460ff16801561245b5750805b801561246a5750600a5460ff16155b80156124815750601b546301000000900460ff1615155b80156124a557506001600160a01b0383166000908152601a602052604090205460ff165b156124ca57600a805460ff191660011790556124bf612ca6565b600a805460ff191690555b600a5460009060ff161580156124e95750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff168061252b57506001600160a01b03841660009081526017602052604090205460ff165b15612534575060005b80801561254c5750601b546301000000900460ff1615155b156125d057601b5460009060649061256e906301000000900460ff1686613546565b6125789190613573565b90506125848185613426565b935060006011541180156125a657506005601254436125a39190613426565b11155b156125c35780601360008282546125bd9190613456565b90915550505b6125ce86308361294d565b505b6125db85858561294d565b5050505050565b835460ff848116600160c01b909204161461267257604051721b1a5c5d5a591a5d1e4c51995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160c01b8304811692908716916000805160206136a8833981519152916126539160489190911b90613587565b60405180910390a4835460ff60c01b1916600160c01b60ff8516021784555b835460ff838116600160d01b909204161461270257604051721b1a5c5d5a591a5d1e4c91995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160d01b8304811692908616916000805160206136a8833981519152916126e39160489190911b90613587565b60405180910390a4835460ff60d01b1916600160d01b60ff8416021784555b835460ff828116600160e01b909204161461209b57604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b81526013016040519081900381208554909160ff600160e01b8304811692908516916000805160206136a8833981519152916127739160489190911b90613587565b60405180910390a4835460ff8216600160e01b0260ff60e01b1990911617845550505050565b835460ff848116600160b81b909204161461282857604051716c6971756964697479314665654f6e42757960701b81526012016040519081900381208554909160ff600160b81b8304811692908716916000805160206136a8833981519152916128099160489190911b90613587565b60405180910390a4835460ff60b81b1916600160b81b60ff8516021784555b835460ff838116600160c81b90920416146128b757604051716c6971756964697479324665654f6e42757960701b81526012016040519081900381208554909160ff600160c81b8304811692908616916000805160206136a8833981519152916128989160489190911b90613587565b60405180910390a4835460ff60c81b1916600160c81b60ff8416021784555b835460ff828116600160d81b909204161461209b57604051716f7065726174696f6e734665654f6e42757960701b81526012016040519081900381208554909160ff600160d81b8304811692908516916000805160206136a8833981519152916129279160489190911b90613587565b60405180910390a4835460ff8216600160d81b0260ff60d81b1990911617845550505050565b6001600160a01b0383166129735760405162461bcd60e51b8152600401610991906134be565b6001600160a01b0382166129995760405162461bcd60e51b815260040161099190613503565b6001600160a01b03831660009081526001602052604090205481811015612a115760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610991565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a719086815260200190565b60405180910390a361209b565b601b805462ffffff191690558315612b0e5760105460ff168015612ab05750600560125442612aad9190613426565b11155b15612ac757601b805460ff19166064179055612b0e565b600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b8215612b5b57600f54601b8054600160c01b830460ff90811661ffff1990921691909117610100600160d01b85048316021762ff00001916600160e01b9093041662010000029190911790555b82158015612b67575083155b8015612bad57506001600160a01b03821660009081526016602052604090205460ff1680612bad57506001600160a01b03811660009081526016602052604090205460ff165b15612bf957600f54601b8054600160b81b830460ff90811661ffff1990921691909117610100600160c81b85048316021762ff00001916600160d81b9093041662010000029190911790555b601b5460ff620100008204811691612c199161010082048116911661359e565b612c23919061359e565b601b805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b30600090815260016020526040812054601b549091479160029060ff63010000008204811691612cd7911686613546565b612ce19190613573565b612ceb9190613573565b90506000612cf98285613426565b9050612d0481612e3b565b6000612d108447613426565b601b54909150600090612d289060029060ff166135b7565b601b54612d3f91906301000000900460ff166135d9565b601b5460ff91821692506000916002918491612d5c911686613546565b612d669190613573565b612d709190613573565b601b549091506000908390612d8d90610100900460ff1686613546565b612d979190613573565b90506000612da58284613456565b612daf9086613426565b600e54909150612dc8906001600160a01b031682612f95565b600d54612dde906001600160a01b031683612f95565b8615612e3057612dee87846130ae565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e7057612e706135f2565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed91906133f3565b81600181518110612f0057612f006135f2565b6001600160a01b039283166020918202929092010152600654612f269130911684611f03565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f5f908590600190869030904290600401613608565b600060405180830381600087803b158015612f7957600080fd5b505af1158015612f8d573d6000803e3d6000fd5b505050505050565b80471015612fe55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610991565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613032576040519150601f19603f3d011682016040523d82523d6000602084013e613037565b606091505b505090508061102d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610991565b6006546130c69030906001600160a01b031684611f03565b600654600c5460405163f305d71960e01b81523060048201526024810185905260016044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613136573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125db9190613679565b600060208083528351808285015260005b818110156131885785810183015185820160400152820161316c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131be57600080fd5b50565b600080604083850312156131d457600080fd5b82356131df816131a9565b946020939093013593505050565b6000602082840312156131ff57600080fd5b5035919050565b60008060006060848603121561321b57600080fd5b8335613226816131a9565b92506020840135613236816131a9565b929592945050506040919091013590565b80151581146131be57600080fd5b6000806040838503121561326857600080fd5b8235613273816131a9565b9150602083013561328381613247565b809150509250929050565b6000602082840312156132a057600080fd5b81356132ab816131a9565b9392505050565b6000806000606084860312156132c757600080fd5b83356132d2816131a9565b925060208401356132e2816131a9565b915060408401356132f2816131a9565b809150509250925092565b803560ff8116811461330e57600080fd5b919050565b60008060006060848603121561332857600080fd5b613331846132fd565b925061333f602085016132fd565b915061334d604085016132fd565b90509250925092565b6000806040838503121561336957600080fd5b8235613374816131a9565b91506020830135613283816131a9565b600181811c9082168061339857607f821691505b6020821081036133b857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561340557600080fd5b81516132ab816131a9565b634e487b7160e01b600052601160045260246000fd5b8181038181111561096157610961613410565b60006020828403121561344b57600080fd5b81516132ab81613247565b8082018082111561096157610961613410565b60208082526035908201527f46756e6963756c61723a204163636f756e7420697320616c7265616479207468604082015274652076616c7565206f6620276578636c756465642760581b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761096157610961613410565b634e487b7160e01b600052601260045260246000fd5b6000826135825761358261355d565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff818116838216019081111561096157610961613410565b600060ff8316806135ca576135ca61355d565b8060ff84160491505092915050565b60ff828116828216039081111561096157610961613410565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136585784516001600160a01b031683529383019391830191600101613633565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561368e57600080fd5b835192506020840151915060408401519050925092509256fe00edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606ea26469706673582212201a8d3cf6b4fb2d849292160ab653a4699d3e1d607fec434217f78d2cc8dd3df364736f6c63430008110033

Deployed Bytecode Sourcemap

12834:19606:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13099:28;;;;;;;;;;-1:-1:-1;13099:28:0;;;;-1:-1:-1;;;13099:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;13099:28:0;;;;;;;;7499:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8430:201::-;;;;;;;;;;-1:-1:-1;8430:201:0;;;;;:::i;:::-;;:::i;24321:345::-;;;;;;;;;;-1:-1:-1;24321:345:0;;;;;:::i;:::-;;:::i;:::-;;17553:321;;;;;;;;;;;;;:::i;14043:32::-;;;;;;;;;;-1:-1:-1;14043:32:0;;;;;;;;;;;12916:30;;;;;;;;;;-1:-1:-1;12916:30:0;;;;-1:-1:-1;;;;;12916:30:0;;;;;;-1:-1:-1;;;;;1579:32:1;;;1561:51;;1549:2;1534:18;12916:30:0;1400:218:1;7819:108:0;;;;;;;;;;-1:-1:-1;7907:12:0;;7819:108;;;1769:25:1;;;1757:2;1742:18;7819:108:0;1623:177:1;22692:273:0;;;;;;;;;;-1:-1:-1;22692:273:0;;;;;:::i;:::-;;:::i;14167:27::-;;;;;;;;;;;;;;;;8641:295;;;;;;;;;;-1:-1:-1;8641:295:0;;;;;:::i;:::-;;:::i;22971:278::-;;;;;;;;;;-1:-1:-1;22971:278:0;;;;;:::i;:::-;;:::i;23588:727::-;;;;;;;;;;;;;:::i;7718:93::-;;;;;;;;;;-1:-1:-1;7718:93:0;;7801:2;2408:36:1;;2396:2;2381:18;7718:93:0;2266:184:1;17880:139:0;;;;;;;;;;;;;:::i;13136:49::-;;;;;;;;;;;;;;;;8944:238;;;;;;;;;;-1:-1:-1;8944:238:0;;;;;:::i;:::-;;:::i;19216:349::-;;;;;;;;;;-1:-1:-1;19216:349:0;;;;;:::i;:::-;;:::i;12953:38::-;;;;;;;;;;;;;;;18976:234;;;;;;;;;;-1:-1:-1;18976:234:0;;;;;:::i;:::-;;:::i;13552:31::-;;;;;;;;;;-1:-1:-1;13552:31:0;;;;-1:-1:-1;;;;;13552:31:0;;;7935:127;;;;;;;;;;-1:-1:-1;7935:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8036:18:0;8009:7;8036:18;;;:9;:18;;;;;;;7935:127;6686:148;;;;;;;;;;;;;:::i;20592:1077::-;;;;;;;;;;-1:-1:-1;20592:1077:0;;;;;:::i;:::-;;:::i;22032:345::-;;;;;;;;;;-1:-1:-1;22032:345:0;;;;;:::i;:::-;;:::i;20245:341::-;;;;;;;;;;-1:-1:-1;20245:341:0;;;;;:::i;:::-;;:::i;18573:397::-;;;;;;;;;;-1:-1:-1;18573:397:0;;;;;:::i;:::-;;:::i;19881:358::-;;;;;;;;;;-1:-1:-1;19881:358:0;;;;;:::i;:::-;;:::i;13247:42::-;;;;;;;;;;;;;;;;6472:79;;;;;;;;;;-1:-1:-1;6510:7:0;6537:6;-1:-1:-1;;;;;6537:6:0;6472:79;;13514:31;;;;;;;;;;-1:-1:-1;13514:31:0;;;;-1:-1:-1;;;;;13514:31:0;;;7607:104;;;;;;;;;;;;;:::i;9190:436::-;;;;;;;;;;-1:-1:-1;9190:436:0;;;;;:::i;:::-;;:::i;8070:193::-;;;;;;;;;;-1:-1:-1;8070:193:0;;;;;:::i;:::-;;:::i;13340:60::-;;;;;;;;;;;;;;;;23255:327;;;;;;;;;;-1:-1:-1;23255:327:0;;;;;:::i;:::-;;:::i;14593:57::-;;;;;;;;;;-1:-1:-1;14593:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22383:303;;;;;;;;;;-1:-1:-1;22383:303:0;;;;;:::i;:::-;;:::i;19571:304::-;;;;;;;;;;-1:-1:-1;19571:304:0;;;;;:::i;:::-;;:::i;24690:170::-;;;;;;;;;;-1:-1:-1;24777:5:0;:24;;-1:-1:-1;;;24777:24:0;;;;;-1:-1:-1;;;24802:24:0;;;;;-1:-1:-1;;;24827:24:0;;;;24690: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;24690:170:0;4447:340:1;13438:67:0;;;;;;;;;;;;;;;;18350:217;;;;;;;;;;-1:-1:-1;18350:217:0;;;;;:::i;:::-;;:::i;8271:151::-;;;;;;;;;;-1:-1:-1;8271:151:0;;;;;:::i;:::-;;:::i;21693:333::-;;;;;;;;;;-1:-1:-1;21693:333:0;;;;;:::i;:::-;;:::i;6842:244::-;;;;;;;;;;-1:-1:-1;6842:244:0;;;;;:::i;:::-;;:::i;13590:31::-;;;;;;;;;;-1:-1:-1;13590:31:0;;;;-1:-1:-1;;;;;13590:31:0;;;24866:174;;;;;;;;;;-1:-1:-1;24954:5:0;:25;;-1:-1:-1;;;24954:25:0;;;;;-1:-1:-1;;;24980:25:0;;;;;-1:-1:-1;;;25006:25:0;;;;24866:174;;7499:100;7553:13;7586:5;7579:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7499:100;:::o;8430:201::-;8513:4;5885:10;8569:32;5885:10;8585:7;8594:6;8569:8;:32::i;:::-;8619:4;8612:11;;;8430:201;;;;;:::o;24321:345::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;;;;;;;;;24411:21:::1;24401:6;:31;;24393:93;;;::::0;-1:-1:-1;;;24393:93:0;;6133:2:1;24393: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;;24393:93:0::1;5931:413:1::0;24393:93:0::1;24498:12;6537:6:::0;;24516:42:::1;::::0;-1:-1:-1;;;;;6537:6:0;;;;24546;;24498:12;24516:42;24498:12;24516:42;24546:6;6537;24516:42:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24497:61;;;24573:7;24569:90;;;24616:15;::::0;:22:::1;::::0;;-1:-1:-1;;;24616:22:0;;;;24602:45:::1;::::0;-1:-1:-1;;;;;24616:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24602:45;::::0;;-1:-1:-1;;;;;7007:32:1;;;6989:51;;7071:2;7056:18;;7049:34;;;6962:18;24602:45:0::1;;;;;;;24569:90;24382:284;24321:345:::0;:::o;17553:321::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;17610:16:::1;:23:::0;;-1:-1:-1;;;;17610:23:0::1;-1:-1:-1::0;;;17610:23:0::1;::::0;;17647:18:::1;::::0;17610:23;17647;17644:175:::1;;17708:12;17687:18;:33:::0;17759:15:::1;17735:21;:39:::0;17789:11:::1;:18:::0;;-1:-1:-1;;17789:18:0::1;-1:-1:-1::0;17789:18:0::1;::::0;;17644:175:::1;17834:32;::::0;17860:5:::1;::::0;17834:32;;::::1;::::0;17860:5;;17834:32:::1;17553:321::o:0;22692:273::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;22793:11:::1;;22781:8;:23:::0;22773:86:::1;;;::::0;-1:-1:-1;;;22773:86:0;;7296:2:1;22773: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;;22773:86:0::1;7094:414:1::0;22773:86:0::1;22912:11;::::0;22875:49:::1;::::0;22902:8;;22875:49:::1;::::0;;;::::1;22935:11;:22:::0;22692:273::o;8641:295::-;8772:4;5885:10;8830:38;8846:4;5885:10;8861:6;8830:15;:38::i;:::-;8879:27;8889:4;8895:2;8899:6;8879:9;:27::i;:::-;-1:-1:-1;8924:4:0;;8641:295;-1:-1:-1;;;;8641:295:0:o;22971:278::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;23067:15:::1;;23055:8;:27:::0;23047:93:::1;;;::::0;-1:-1:-1;;;23047:93:0;;7715:2:1;23047: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;;23047:93:0::1;7513:418:1::0;23047:93:0::1;23188:15;::::0;23156:48:::1;::::0;23178:8;;23156:48:::1;::::0;;;::::1;23215:15;:26:::0;22971:278::o;23588:727::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;23673:1:::1;23649:21;;:25;23641:74;;;::::0;-1:-1:-1;;;23641:74:0;;8138:2:1;23641: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;;23641:74:0::1;7936:400:1::0;23641:74:0::1;23729:20;::::0;::::1;::::0;::::1;;;23728:21;23720:84;;;::::0;-1:-1:-1;;;23720:84:0;;8543:2:1;23720: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;;23720:84:0::1;8341:414:1::0;23720:84:0::1;23853:1;23832:18;;23817:12;:33;;;;:::i;:::-;:37;23809:98;;;::::0;-1:-1:-1;;;23809:98:0;;9227:2:1;23809: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;;23809:98:0::1;9025:412:1::0;23809:98:0::1;23953:4;23912:20;8036:18:::0;;;:9;:18;;;;;;23964:20:::1;:27:::0;;-1:-1:-1;;23964:27:0::1;;;::::0;;24004:12:::1;::::0;-1:-1:-1;;24004:28:0::1;23996:91;;;::::0;-1:-1:-1;;;23996:91:0;;9644:2:1;23996: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;;23996:91:0::1;9442:414:1::0;23996:91:0::1;24109:12;::::0;;24092:14:::1;24126:16:::0;;;;24109:12;24185:4:::1;24170:30;24201:7;6510::::0;6537:6;-1:-1:-1;;;;;6537:6:0;;6472:79;24201:7:::1;24170:47;::::0;-1:-1:-1;;;;;;24170:47:0::1;::::0;;;;;;-1:-1:-1;;;;;7007:32:1;;;24170:47:0::1;::::0;::::1;6989:51:1::0;7056:18;;;7049:34;;;6962:18;;24170:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24153:64;;24232:7;24228:80;;;24260:36;::::0;;24282:4:::1;6989:51:1::0;;7071:2;7056:18;;7049:34;;;24260:36:0::1;::::0;6962:18:1;24260:36:0::1;;;;;;;24228:80;23636:679;;;23588:727::o:0;17880:139::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;17939:16:::1;:24:::0;;-1:-1:-1;;;;17939:24:0::1;::::0;;17979:32:::1;::::0;17939:24;;17958:5:::1;::::0;17979:32:::1;::::0;17958:5;;17979:32:::1;17880:139::o:0;8944:238::-;9032:4;5885:10;9088:64;5885:10;9104:7;9141:10;9113:25;5885:10;9104:7;9113:9;:25::i;:::-;:38;;;;:::i;:::-;9088:8;:64::i;19216:349::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19324:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;19316:118:::1;;;::::0;-1:-1:-1;;;19316:118:0;;10443:2:1;19316: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;;19316:118:0::1;10241:423:1::0;19316:118:0::1;-1:-1:-1::0;;;;;19445:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;19445:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19507:50;;154:41:1;;;19507:50:0::1;::::0;127:18:1;19507:50:0::1;;;;;;;;19216:349:::0;;:::o;18976:234::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19055:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;19047:65;;;::::0;-1:-1:-1;;;19047:65:0;;10871:2:1;19047: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;;19047:65:0::1;10669:397:1::0;19047:65:0::1;-1:-1:-1::0;;;;;19123:19:0;::::1;19145:5;19123:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;19123:27:0::1;::::0;;19166:36;19145:5;;19123:19;19166:36:::1;::::0;19145:5;;19166:36:::1;18976:234:::0;:::o;6686:148::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;6793:1:::1;6777:6:::0;;6756:40:::1;::::0;-1:-1:-1;;;;;6777:6:0;;::::1;::::0;6756:40:::1;::::0;6793:1;;6756:40:::1;6824:1;6807:19:::0;;-1:-1:-1;;;;;;6807:19:0::1;::::0;;6686:148::o;20592:1077::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;20731:16:::1;::::0;-1:-1:-1;;;;;20731:39:0;;::::1;:16:::0;::::1;:39;20727:305;;-1:-1:-1::0;;;;;20795:33:0;::::1;20787:89;;;::::0;-1:-1:-1;;;20787:89:0;;11273:2:1;20787: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;;20787:89:0::1;11071:407:1::0;20787:89:0::1;20950:16;::::0;20896:71:::1;::::0;-1:-1:-1;;;11685:31:1;;-1:-1:-1;;;;;20950:16:0;;::::1;::::0;20896:71;::::1;::::0;11741:2:1;11732:12;20896:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20982:16;:38:::0;;-1:-1:-1;;;;;;20982:38:0::1;-1:-1:-1::0;;;;;20982:38:0;::::1;;::::0;;20727:305:::1;21046:16;::::0;-1:-1:-1;;;;;21046:39:0;;::::1;:16:::0;::::1;:39;21042:305;;-1:-1:-1::0;;;;;21110:33:0;::::1;21102:89;;;::::0;-1:-1:-1;;;21102:89:0;;11957:2:1;21102: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;;21102:89:0::1;11755:407:1::0;21102:89:0::1;21265:16;::::0;21211:71:::1;::::0;-1:-1:-1;;;12369:31:1;;-1:-1:-1;;;;;21265:16:0;;::::1;::::0;21211:71;::::1;::::0;12425:2:1;12416:12;21211:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21297:16;:38:::0;;-1:-1:-1;;;;;;21297:38:0::1;-1:-1:-1::0;;;;;21297:38:0;::::1;;::::0;;21042:305:::1;21361:16;::::0;-1:-1:-1;;;;;21361:39:0;;::::1;:16:::0;::::1;:39;21357:305;;-1:-1:-1::0;;;;;21425:33:0;::::1;21417:89;;;::::0;-1:-1:-1;;;21417:89:0;;12641:2:1;21417: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;;21417:89:0::1;12439:407:1::0;21417:89:0::1;21580:16;::::0;21526:71:::1;::::0;-1:-1:-1;;;13053:31:1;;-1:-1:-1;;;;;21580:16:0;;::::1;::::0;21526:71;::::1;::::0;13109:2:1;13100:12;21526:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21612:16;:38:::0;;-1:-1:-1;;;;;21612:38:0;::::1;-1:-1:-1::0;;;;;;21612:38:0;;::::1;;::::0;;20592:1077;;;:::o;22032:345::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;22171:93:::1;22195:5;22201:20;22222;22243;22171:23;:93::i;:::-;22280:89;::::0;-1:-1:-1;;;13325:28:1;;13378:2;13369:12;22280: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;22280:89:0;;;;::::1;::::0;;;;;4625:2:1;22280:89:0;;::::1;22032:345:::0;;;:::o;20245:341::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20350:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;20342:115:::1;;;;-1:-1:-1::0;;;20342:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20468:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;20468:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20533:45;;154:41:1;;;20533:45:0::1;::::0;127:18:1;20533:45:0::1;14:187:1::0;18573:397:0;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18651:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18650:20;18642:70;;;::::0;-1:-1:-1;;;18642:70:0;;14016:2:1;18642: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;;18642:70:0::1;13814:401:1::0;18642:70:0::1;18727:11;::::0;::::1;;18723:152;;;18807:6;18782:21;;18764:15;:39;;;;:::i;:::-;18763:50;18755:108;;;::::0;-1:-1:-1;;;18755:108:0;;14422:2:1;18755: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;;18755:108:0::1;14220:409:1::0;18755:108:0::1;-1:-1:-1::0;;;;;18885:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;18885:26:0::1;18907:4;18885:26:::0;;::::1;::::0;;;18927:35;;18907:4;;18885:19;18927:35:::1;::::0;::::1;18573:397:::0;:::o;19881:358::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19991:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;19983:120:::1;;;;-1:-1:-1::0;;;19983:120:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20114:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;20114:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20184:47;;154:41:1;;;20184:47:0::1;::::0;127:18:1;20184:47:0::1;14:187:1::0;7607:104:0;7663:13;7696:7;7689:14;;;;;:::i;9190:436::-;9283:4;5885:10;9283:4;9366:25;5885:10;9383:7;9366:9;:25::i;:::-;9339:52;;9430:15;9410:16;:35;;9402:85;;;;-1:-1:-1;;;9402:85:0;;14836:2:1;9402: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;;9402:85:0;14634:401:1;9402:85:0;9523:60;9532:5;9539:7;9567:15;9548:16;:34;9523:8;:60::i;8070:193::-;8149:4;5885:10;8205:28;5885:10;8222:2;8226:6;8205:9;:28::i;23255:327::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;23359:23:::1;;23347:8;:35:::0;23339:109:::1;;;::::0;-1:-1:-1;;;23339:109:0;;15242:2:1;23339: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;;23339:109:0::1;15040:426:1::0;23339:109:0::1;23505:23;::::0;23464:65:::1;::::0;23495:8;;23464:65:::1;::::0;;;::::1;23540:23;:34:::0;23255:327::o;22383:303::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;22489:15:::1;::::0;-1:-1:-1;;;;;22489:15:0;;::::1;22467:38:::0;;::::1;::::0;22459:96:::1;;;::::0;-1:-1:-1;;;22459:96:0;;15673:2:1;22459: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;;22459:96:0::1;15471:410:1::0;22459:96:0::1;22613:15;::::0;22571:59:::1;::::0;-1:-1:-1;;;;;22613:15:0;;::::1;::::0;22571:59;::::1;::::0;::::1;::::0;22613:15:::1;::::0;22571:59:::1;22641:15;:37:::0;;-1:-1:-1;;;;;;22641:37:0::1;-1:-1:-1::0;;;;;22641:37:0;;;::::1;::::0;;;::::1;::::0;;22383:303::o;19571:304::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19666:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19658:104:::1;;;;-1:-1:-1::0;;;19658:104:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19773:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19773:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19827:40;;154:41:1;;;19827:40:0::1;::::0;127:18:1;19827:40:0::1;14:187:1::0;18350:217:0;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18445:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;18445:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18509:50;;154:41:1;;;18509:50:0::1;::::0;127:18:1;18509:50:0::1;14:187:1::0;8271:151:0;-1:-1:-1;;;;;8387:18:0;;;8360:7;8387:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8271:151::o;21693:333::-;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;21828:89:::1;21851:5;21857:19;21877;21897;21828:22;:89::i;:::-;21933:85;::::0;-1:-1:-1;;;16088:27:1;;16140:2;16131:12;21933:85:0::1;15886:263:1::0;6842:244:0;6599:6;;-1:-1:-1;;;;;6599:6:0;5885:10;6599:22;6591:67;;;;-1:-1:-1;;;6591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6931:22:0;::::1;6923:73;;;::::0;-1:-1:-1;;;6923:73:0;;16356:2:1;6923: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;;6923:73:0::1;16154:402:1::0;6923:73:0::1;7033:6;::::0;;7012:38:::1;::::0;-1:-1:-1;;;;;7012:38:0;;::::1;::::0;7033:6;::::1;::::0;7012:38:::1;::::0;::::1;7061:6;:17:::0;;-1:-1:-1;;;;;;7061:17:0::1;-1:-1:-1::0;;;;;7061:17:0;;;::::1;::::0;;;::::1;::::0;;6842:244::o;11721:380::-;-1:-1:-1;;;;;11857:19:0;;11849:68;;;;-1:-1:-1;;;11849:68:0;;16763:2:1;11849: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;;11849:68:0;16561:400:1;11849:68:0;-1:-1:-1;;;;;11936:21:0;;11928:68;;;;-1:-1:-1;;;11928:68:0;;17168:2:1;11928: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;;11928:68:0;16966:398:1;11928:68:0;-1:-1:-1;;;;;12009:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12061:32;;1769:25:1;;;12061:32:0;;1742:18:1;12061:32:0;;;;;;;11721:380;;;:::o;12109:453::-;12244:24;12271:25;12281:5;12288:7;12271:9;:25::i;:::-;12244:52;;-1:-1:-1;;12311:16:0;:37;12307:248;;12393:6;12373:16;:26;;12365:68;;;;-1:-1:-1;;;12365:68:0;;17571:2:1;12365:68:0;;;17553:21:1;17610:2;17590:18;;;17583:30;17649:31;17629:18;;;17622:59;17698:18;;12365:68:0;17369:353:1;12365:68:0;12477:51;12486:5;12493:7;12521:6;12502:16;:25;12477:8;:51::i;:::-;12233:329;12109:453;;;:::o;25059:2166::-;-1:-1:-1;;;;;25191:18:0;;25183:68;;;;-1:-1:-1;;;25183:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25270:16:0;;25262:64;;;;-1:-1:-1;;;25262:64:0;;;;;;;:::i;:::-;25343:6;25353:1;25343:11;25339:93;;25371:28;25387:4;25393:2;25397:1;25371:15;:28::i;25339:93::-;-1:-1:-1;;;;;25449:35:0;;;;;;:29;:35;;;;;;;;25448:36;:74;;;;-1:-1:-1;;;;;;25489:33:0;;;;;;:29;:33;;;;;;;;25488:34;25448:74;25444:752;;;25547:16;;-1:-1:-1;;;25547:16:0;;;;25539:70;;;;-1:-1:-1;;;25539:70:0;;18739:2:1;25539: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;;25539:70:0;18537:405:1;25539:70:0;-1:-1:-1;;;;;25633:14:0;;;;;;:10;:14;;;;;;;;25632:15;25624:57;;;;-1:-1:-1;;;25624:57:0;;19149:2:1;25624:57:0;;;19131:21:1;19188:2;19168:18;;;19161:30;19227:31;19207:18;;;19200:59;19276:18;;25624:57:0;18947:353:1;25624:57:0;-1:-1:-1;;;;;25705:16:0;;;;;;:10;:16;;;;;;;;25704:17;25696:59;;;;-1:-1:-1;;;25696:59:0;;19149:2:1;25696:59:0;;;19131:21:1;19188:2;19168:18;;;19161:30;19227:31;19207:18;;;19200:59;19276:18;;25696:59:0;18947:353:1;25696:59:0;-1:-1:-1;;;;;25775:38:0;;;;;;:34;:38;;;;;;;;25774:39;:84;;;;-1:-1:-1;;;;;;25818:40:0;;;;;;:34;:40;;;;;;;;25817:41;25774:84;25770:208;;;25897:11;;25887:6;:21;;25879:83;;;;-1:-1:-1;;;25879:83:0;;19507:2:1;25879: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;;25879:83:0;19305:413:1;25879:83:0;-1:-1:-1;;;;;25997:33:0;;;;;;:29;:33;;;;;;;;25992:193;;26087:15;;26076:6;26060:13;26070:2;-1:-1:-1;;;;;8036:18:0;8009:7;8036:18;;;:9;:18;;;;;;;7935:127;26060:13;:22;;;;:::i;:::-;26059:43;;26051:118;;;;-1:-1:-1;;;26051:118:0;;19925:2:1;26051: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;;26051:118:0;19723:426:1;26051:118:0;-1:-1:-1;;;;;26221:31:0;;;;;;;:25;:31;;;;;;;26254:29;;;;;;;;26208:86;;26221:31;;;;;26254:29;26247:4;26280:2;26208:12;:86::i;:::-;26348:23;;26338:4;26305:12;8036:18;;;:9;:18;;;;;;26402:16;;-1:-1:-1;;26320:51:0;;-1:-1:-1;;;26402:16:0;;;;:40;;;;;26435:7;26402:40;:67;;;;-1:-1:-1;26460:9:0;;;;26459:10;26402:67;:97;;;;-1:-1:-1;26486:9:0;;;;;;;:13;;26402:97;:143;;;;-1:-1:-1;;;;;;26516:29:0;;;;;;:25;:29;;;;;;;;26402:143;26384:280;;;26572:9;:16;;-1:-1:-1;;26572:16:0;26584:4;26572:16;;;26603:17;:15;:17::i;:::-;26635:9;:17;;-1:-1:-1;;26635:17:0;;;26384:280;26692:9;;26676:12;;26692:9;;26691:10;:30;;;;-1:-1:-1;26705:16:0;;-1:-1:-1;;;26705:16:0;;;;26691:30;-1:-1:-1;;;;;26738:24:0;;;;;;:18;:24;;;;;;26676:45;;-1:-1:-1;26738:24:0;;;:50;;-1:-1:-1;;;;;;26766:22:0;;;;;;:18;:22;;;;;;;;26738:50;26734:98;;;-1:-1:-1;26815:5:0;26734:98;26846:7;:24;;;;-1:-1:-1;26857:9:0;;;;;;;:13;;26846:24;26842:332;;;26911:9;;26887:11;;26924:3;;26902:18;;26911:9;;;;;26902:6;:18;:::i;:::-;26901:26;;;;:::i;:::-;26887:40;-1:-1:-1;26951:12:0;26887:40;26951:6;:12;:::i;:::-;26942:21;;27006:1;26982:21;;:25;:69;;;;;27049:1;27027:18;;27012:12;:33;;;;:::i;:::-;:38;;26982:69;26978:129;;;27088:3;27072:12;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;26978:129:0;27121:41;27137:4;27151;27158:3;27121:15;:41::i;:::-;26872:302;26842:332;27184:33;27200:4;27206:2;27210:6;27184:15;:33::i;:::-;25172:2053;;25059:2166;;;:::o;28465:939::-;28631:23;;:47;;;;-1:-1:-1;;;28631:23:0;;;;:47;28627:250;;28700:104;;-1:-1:-1;;;20786:34:1;;20845:2;20836:12;28700:104:0;;;;;;;;28743:23;;28700:104;;28743:23;-1:-1:-1;;;28743:23:0;;;;;28700:104;;;;-1:-1:-1;;;;;;;;;;;28700:104:0;;;28789:14;;;;;;28700:104;:::i;:::-;;;;;;;;28819:46;;-1:-1:-1;;;;28819:46:0;-1:-1:-1;;;28819:46:0;;;;;;;28627:250;28891:23;;:47;;;;-1:-1:-1;;;28891:23:0;;;;:47;28887:250;;28960:104;;-1:-1:-1;;;21275:34:1;;21334:2;21325:12;28960:104:0;;;;;;;;29003:23;;28960:104;;29003:23;-1:-1:-1;;;29003:23:0;;;;;28960:104;;;;-1:-1:-1;;;;;;;;;;;28960:104:0;;;29049:14;;;;;;28960:104;:::i;:::-;;;;;;;;29079:46;;-1:-1:-1;;;;29079:46:0;-1:-1:-1;;;29079:46:0;;;;;;;28887:250;29151:23;;:47;;;;-1:-1:-1;;;29151:23:0;;;;:47;29147:250;;29220:104;;-1:-1:-1;;;21550:34:1;;21609:2;21600:12;29220:104:0;;;;;;;;29263:23;;29220:104;;29263:23;-1:-1:-1;;;29263:23:0;;;;;29220:104;;;;-1:-1:-1;;;;;;;;;;;29220:104:0;;;29309:14;;;;;;29220:104;:::i;:::-;;;;;;;;29339:46;;;;;-1:-1:-1;;;29339:46:0;-1:-1:-1;;;;29339:46:0;;;;;;28465:939;;;;:::o;29410:914::-;29572:22;;:45;;;;-1:-1:-1;;;29572:22:0;;;;:45;29568:243;;29639:101;;-1:-1:-1;;;21825:33:1;;21883:2;21874:12;29639:101:0;;;;;;;;29681:22;;29639:101;;29681:22;-1:-1:-1;;;29681:22:0;;;;;29639:101;;;;-1:-1:-1;;;;;;;;;;;29639:101:0;;;29725:14;;;;;;29639:101;:::i;:::-;;;;;;;;29755:44;;-1:-1:-1;;;;29755:44:0;-1:-1:-1;;;29755:44:0;;;;;;;29568:243;29825:22;;:45;;;;-1:-1:-1;;;29825:22:0;;;;:45;29821:243;;29892:101;;-1:-1:-1;;;22099:33:1;;22157:2;22148:12;29892:101:0;;;;;;;;29934:22;;29892:101;;29934:22;-1:-1:-1;;;29934:22:0;;;;;29892:101;;;;-1:-1:-1;;;;;;;;;;;29892:101:0;;;29978:14;;;;;;29892:101;:::i;:::-;;;;;;;;30008:44;;-1:-1:-1;;;;30008:44:0;-1:-1:-1;;;30008:44:0;;;;;;;29821:243;30078:22;;:45;;;;-1:-1:-1;;;30078:22:0;;;;:45;30074:243;;30145:101;;-1:-1:-1;;;22373:33:1;;22431:2;22422:12;30145:101:0;;;;;;;;30187:22;;30145:101;;30187:22;-1:-1:-1;;;30187:22:0;;;;;30145:101;;;;-1:-1:-1;;;;;;;;;;;30145:101:0;;;30231:14;;;;;;30145:101;:::i;:::-;;;;;;;;30261:44;;;;;-1:-1:-1;;;30261:44:0;-1:-1:-1;;;;30261:44:0;;;;;;29410:914;;;;:::o;9634:840::-;-1:-1:-1;;;;;9765:18:0;;9757:68;;;;-1:-1:-1;;;9757:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9844:16:0;;9836:64;;;;-1:-1:-1;;;9836:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9986:15:0;;9964:19;9986:15;;;:9;:15;;;;;;10020:21;;;;10012:72;;;;-1:-1:-1;;;10012:72:0;;22647:2:1;10012: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;;10012:72:0;22445:402:1;10012:72:0;-1:-1:-1;;;;;10120:15:0;;;;;;;:9;:15;;;;;;10138:20;;;10120:38;;10338:13;;;;;;;;;;:23;;;;;;10390:26;;;;;;10152:6;1769:25:1;;1757:2;1742:18;;1623:177;10390:26:0;;;;;;;;10429:37;23588:727;27233:1224;27332:14;:18;;-1:-1:-1;;27390:18:0;;;27421:362;;;;27457:11;;;;:56;;;;;27512:1;27490:18;;27472:15;:36;;;;:::i;:::-;:41;;27457:56;27453:319;;;27534:14;:20;;-1:-1:-1;;27534:20:0;27551:3;27534:20;;;27453:319;;;27612:5;:24;27595:14;:41;;-1:-1:-1;;;27612:24:0;;;;;;-1:-1:-1;;27655:41:0;;;;;;;27612:24;-1:-1:-1;;;27672:24:0;;;;27655:41;;-1:-1:-1;;27715:41:0;-1:-1:-1;;;27732:24:0;;;;27715:41;;;;;;;;27453:319;27797:10;27793:199;;;27841:5;:25;27824:14;:42;;-1:-1:-1;;;27841:25:0;;;;;;-1:-1:-1;;27881:42:0;;;;;;;27841:25;-1:-1:-1;;;27898:25:0;;;;27881:42;;-1:-1:-1;;27938:42:0;-1:-1:-1;;;27955:25:0;;;;27938:42;;;;;;;;27793:199;28007:10;28006:11;:27;;;;;28022:11;28021:12;28006:27;:105;;;;-1:-1:-1;;;;;;28038:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;28077:33:0;;;;;;:29;:33;;;;;;;;28038:72;28002:291;;;28145:5;:24;28128:14;:41;;-1:-1:-1;;;28145:24:0;;;;;;-1:-1:-1;;28184:41:0;;;;;;;28145:24;-1:-1:-1;;;28201:24:0;;;;28184:41;;-1:-1:-1;;28240:41:0;-1:-1:-1;;;28257:24:0;;;;28240:41;;;;;;;;28002:291;28349:14;;;;;;;;;28315:31;;28349:14;28332;;;;;28315;:31;:::i;:::-;:48;;;;:::i;:::-;28303:9;:60;;;;;;;;;;-1:-1:-1;;28303:60:0;;;;;;;;28379:70;;;28391:14;;;;;;;;;;23220:36:1;;28303:60:0;28407:14;;;;23287:2:1;23272:18;;23265:45;28423:14:0;;;;;23326:18:1;;;23319:45;28439:9:0;;;;;23395:2:1;23380:18;;23373:45;28379:70:0;;;;;;;23207:3:1;28379:70:0;;;27233:1224;;;;:::o;30332:1163::-;30422:4;30378:23;8036:18;;;:9;:18;;;;;;30564:9;;8036:18;;30467:21;;30576:1;;30564:9;;;;;;;30528:32;;30546:14;8036:18;30528:32;:::i;:::-;30527:46;;;;:::i;:::-;:50;;;;:::i;:::-;30501:76;-1:-1:-1;30588:20:0;30611:33;30501:76;30611:15;:33;:::i;:::-;30588:56;;30657:31;30675:12;30657:17;:31::i;:::-;30701:27;30731:41;30755:17;30731:21;:41;:::i;:::-;30818:14;;30701:71;;-1:-1:-1;30783:19:0;;30818:18;;30835:1;;30818:14;;:18;:::i;:::-;30805:9;;:32;;;:9;;;;;:32;:::i;:::-;30901:14;;30783:54;;;;;-1:-1:-1;30848:27:0;;30933:1;;30783:54;;30879:36;;30901:14;30879:19;:36;:::i;:::-;30878:52;;;;:::i;:::-;:56;;;;:::i;:::-;30998:14;;30848:86;;-1:-1:-1;30945:27:0;;31016:11;;30976:36;;30998:14;;;;;30976:19;:36;:::i;:::-;30975:52;;;;:::i;:::-;30945:82;-1:-1:-1;31038:27:0;31091:42;30945:82;31091:19;:42;:::i;:::-;31068:66;;:19;:66;:::i;:::-;31173:16;;31038:96;;-1:-1:-1;31147:64:0;;-1:-1:-1;;;;;31173:16:0;31038:96;31147:17;:64::i;:::-;31248:16;;31222:64;;-1:-1:-1;;;;;31248:16:0;31266:19;31222:17;:64::i;:::-;31303:19;;31299:189;;31339:51;31353:15;31370:19;31339:13;:51::i;:::-;31410:66;;;23957:25:1;;;24013:2;23998:18;;23991:34;;;24041:18;;;24034:34;;;31410:66:0;;23945:2:1;23930:18;31410:66:0;;;;;;;31299:189;30367:1128;;;;;;;;;30332:1163::o;31503:500::-;31594:16;;;31608:1;31594:16;;;;;;;;31570:21;;31594:16;;;;;;;;;;-1:-1:-1;31594:16:0;31570:40;;31639:4;31621;31626:1;31621:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31621:23:0;;;:7;;;;;;;;;;:23;;;;31665:15;;:22;;;-1:-1:-1;;;31665:22:0;;;;:15;;;;;:20;;:22;;;;;31621:7;;31665:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31655:4;31660:1;31655:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31655:32:0;;;:7;;;;;;;;;:32;31730:15;;31698:62;;31715:4;;31730:15;31748:11;31698:8;:62::i;:::-;31771:15;;:224;;-1:-1:-1;;;31771:224:0;;-1:-1:-1;;;;;31771:15:0;;;;:66;;:224;;31852:11;;31771:15;;31922:4;;31949;;31969:15;;31771:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31559:444;31503:500;:::o;2745:322::-;2859:6;2834:21;:31;;2821:86;;;;-1:-1:-1;;;2821:86:0;;25530:2:1;2821:86:0;;;25512:21:1;25569:2;25549:18;;;25542:30;25608:31;25588:18;;;25581:59;25657:18;;2821:86:0;25328:353:1;2821:86:0;2915:12;2933:9;-1:-1:-1;;;;;2933:14:0;2955:6;2933:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2914:52;;;2984:7;2971:91;;;;-1:-1:-1;;;2971:91:0;;25888:2:1;2971: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;;2971:91:0;25686:422:1;32011:426:0;32125:15;;32093:62;;32110:4;;-1:-1:-1;;;;;32125:15:0;32143:11;32093:8;:62::i;:::-;32166:15;;32372:16;;32166:263;;-1:-1:-1;;;32166:263:0;;32240:4;32166:263;;;26454:34:1;26504:18;;;26497:34;;;32166:15:0;26547:18:1;;;26540:34;;;26590:18;;;26583:34;-1:-1:-1;;;;;32372:16:0;;;26633:19:1;;;26626:44;32403:15:0;26686:19:1;;;26679:35;32166:15:0;;;:31;;32206:9;;26388:19:1;;32166: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://1a8d3cf6b4fb2d849292160ab653a4699d3e1d607fec434217f78d2cc8dd3df3
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.