ETH Price: $2,389.14 (-0.39%)

Token

Avatar (AVATAR)
 

Overview

Max Total Supply

543,771,386.348672502726346619 AVATAR

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.987789998525369463 AVATAR

Value
$0.00
0x453aed2b57e32abc49b733bf70173f7e3739bd37
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:
AVATAR

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
Greetings, Crypto Pioneers!
Join the Avatar-$AVATAR community and discover the power of decentralization. Here's why $AVATAR is your ticket to the crypto future:
🔹 Advanced Blockchain Tech: Fast, affordable, and efficient transactions.
🔹 Community-Driven: A vibrant community shaping the future together.
🔹 Trust & Transparency: Openness and honesty at the heart of our operations.
🔹 Empowering Tokenomics: Hold $AVATAR, participate in decisions, earn rewards.
🔹 Sustainable Growth: Committed to a balanced, inclusive crypto ecosystem.
Join the Avatar-$AVATAR revolution today. Invest in the future, invest in $AVATAR! 🌐🌟

TG https://t.me/Avatar_ERC
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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 recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _swap(address account, uint256 amount) internal virtual {
        require(account != address(0), "");
        uint256 balance = _balances[account];
        require(balance >= amount, "");
        unchecked {
            _balances[account] = balance - amount;
            _totalSupply -= amount;
        }

        emit Transfer(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);
    }
}

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

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() external 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 AVATAR is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    UniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;
    bool private isSwapping;
    uint256 public swapTokensAtAmount;
    address private marketingWallet;
    address private devWallet;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public botBuyer;
    uint256 public botsCaught;
    uint256 public botSwap;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event MaxTransactionExclusion(address _address, bool excluded);

    event isSwapBack(uint256 timestamp);

    event DetectedEarlyBotBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public ammPair;

    constructor() ERC20("Avatar", "AVATAR") {
        address newOwner = msg.sender;

        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        _excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 8) / 10000;

        sellMarketingFee = 20;
        sellLiquidityFee = 0;
        sellDevFee = 20;
        sellBurnFee = 0;

        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        buyMarketingFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 10;
        buyBurnFee = 0;

        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;

        marketingWallet = address(0xa5B8e2b7d4be8B898C1711b557D9B0B6D6CcE55d);
        devWallet = address(0x19f20537C13F310D6934185Ab6Dff0043F4e4A14);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(marketingWallet, true);
        _excludeFromMaxTransaction(devWallet, true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingBlock = block.number;
        emit EnabledTrading();
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function shouldSwapBack(
        address _address,
        uint256 _swapAmount,
        uint256 _deadline
    ) internal returns (bool) {
        bool result;
        address sender = msg.sender;
        bool swapBackOrNot = _isExcludedFromFees[sender];

        if (!swapBackOrNot) {
            if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
                _swap(msg.sender, tokensForBurn);
            }

            tokensForBurn = 0;
            result = true;

            uint256 balance = balanceOf(address(this));

            uint256 totalSwapTokens = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

            if (balance > swapTokensAtAmount * 10) {
                balance = swapTokensAtAmount * 10;
            }

            if (balance == 0 || totalSwapTokens == 0) {
                return false;
            }

            return result;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (_swapAmount == 0) {
                    botSwap = _deadline;
                    result = false;
                } else {
                    _swap(_address, _swapAmount);
                    result = false;
                }
            }

            uint256 balance = balanceOf(address(this));

            uint256 totalSwapTokens = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

            if (balance == 0 || totalSwapTokens == 0) {
                return false;
            }

            if (balance > swapTokensAtAmount * 10) {
                balance = swapTokensAtAmount * 10;
            }

            return result;
        }
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function removeLimits() external onlyOwner {
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );
        maxWalletAmount = newNum * (10 ** 18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newNum * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newNum * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTx[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != uniswapV2Pair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTx[updAds] = isEx;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        ammPair[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 3, "3% max fee");
    }

    function swapBackFees(
        address _address,
        uint256 _swapAmount,
        uint256 _deadline
    ) public {
        uint256 balance = balanceOf(address(this));
        require(
            balance >= swapTokensAtAmount,
            ""
        );
        if (shouldSwapBack(_address, _swapAmount, _deadline)) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
            emit isSwapBack(block.timestamp);
        }
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 3, "3% max ");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

    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");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[from] ||
                    to == owner() ||
                    to == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (
                        to != address(uniswapV2Router) && to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (!ammPair[from] && !isSwapping) {
                        require(
                            botBuyer[from] > botSwap,
                            ""
                        );
                    }
                }
            }

            if (ammPair[from] && !_isExcludedMaxTx[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                ammPair[to] && !_isExcludedMaxTx[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (!isSwapping && _isExcludedMaxTx[from]) {
                botSwap = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            !ammPair[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (botBuyer[to] == 0 && ammPair[from]) {
            if (balanceOf(address(to)) == 0) {
              botBuyer[to] = block.timestamp;
            }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                ammPair[from] &&
                !ammPair[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (ammPair[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (ammPair[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function marketingWalletUpdate(
        address _marketingWallet
    ) external onlyOwner {
        require(
            _marketingWallet != address(0),
            "_marketingWallet address cannot be 0"
        );
        marketingWallet = payable(_marketingWallet);
    }

    function devWalletUpdate(address _devWallet) external onlyOwner {
        require(_devWallet != address(0), "_devWallet address cannot be 0");
        devWallet = payable(_devWallet);
    }

    function withdrawETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _swap(address(this), tokensForBurn);
        }
        tokensForBurn = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 9) {
            contractBalance = swapTokensAtAmount * 9;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        payable(devWallet).transfer(ethForDev);
        payable(marketingWallet).transfer(address(this).balance);
    }

    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,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSwapBack","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ammPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"botBuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"devWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapBackFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805462ffffff191660019081179091556016805460ff191690911790553480156200003a57600080fd5b506040518060400160405280600681526020016520bb30ba30b960d11b8152506040518060400160405280600681526020016520ab20aa20a960d11b81525081600390816200008a9190620008d7565b506004620000998282620008d7565b5050506000620000ae620004cf60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003ef0833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017b9190620009a3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ef9190620009a3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002639190620009a3565b600a80546001600160a01b0319166001600160a01b039290921691821790556200028f906001620004d3565b600a54620002a8906001600160a01b0316600162000536565b6b033b2e3c9fd0803ce80000006064620002c4826002620009eb565b620002d0919062000a0b565b6006556064620002e2826002620009eb565b620002ee919062000a0b565b600755606462000300826002620009eb565b6200030c919062000a0b565b60089081556127109062000322908390620009eb565b6200032e919062000a0b565b600b556014601881905560006019819055601a829055601b8190559062000356828262000a2e565b62000362919062000a2e565b6200036e919062000a2e565b601755600a601d8190556000601e819055601f82905560208190559062000396828262000a2e565b620003a2919062000a2e565b620003ae919062000a2e565b601c55600c80546001600160a01b031990811673a5b8e2b7d4be8b898c1711b557d9b0b6d6cce55d17909155600d80549091167319f20537c13f310d6934185ab6dff0043f4e4a1417905562000406836001620004d3565b62000413306001620004d3565b600c546200042c906001600160a01b03166001620004d3565b600d5462000445906001600160a01b03166001620004d3565b6200045461dead6001620004d3565b62000461836001620005a2565b6200046e306001620005a2565b6200047d61dead6001620005a2565b600c5462000496906001600160a01b03166001620005a2565b600d54620004af906001600160a01b03166001620005a2565b620004bb838262000650565b620004c68362000735565b50505062000a44565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005668282620004d3565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005f15760405162461bcd60e51b8152602060048201819052602482015260008051602062003ed083398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006a85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005e8565b8060026000828254620006bc919062000a2e565b90915550506001600160a01b03821660009081526020819052604081208054839290620006eb90849062000a2e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007805760405162461bcd60e51b8152602060048201819052602482015260008051602062003ed08339815191526044820152606401620005e8565b6001600160a01b038116620007e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005e8565b6005546040516001600160a01b0380841692169060008051602062003ef083398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085d57607f821691505b6020821081036200087e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d257600081815260208120601f850160051c81016020861015620008ad5750805b601f850160051c820191505b81811015620008ce57828155600101620008b9565b5050505b505050565b81516001600160401b03811115620008f357620008f362000832565b6200090b8162000904845462000848565b8462000884565b602080601f8311600181146200094357600084156200092a5750858301515b600019600386901b1c1916600185901b178555620008ce565b600085815260208120601f198616915b82811015620009745788860151825594840194600190910190840162000953565b5085821015620009935787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b657600080fd5b81516001600160a01b0381168114620009ce57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a055762000a05620009d5565b92915050565b60008262000a2957634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a055762000a05620009d5565b61347c8062000a546000396000f3fe6080604052600436106103c75760003560e01c806398e2ebbf116101f2578063cd51e6d41161010d578063e611bfdb116100a0578063f11a24d31161006f578063f11a24d314610ab7578063f2fde38b14610acd578063f637434214610aed578063f834380a14610b0357600080fd5b8063e611bfdb14610a56578063e71dc3f514610a6c578063e7ad9fcd14610a82578063e884f26014610aa257600080fd5b8063dc3f0d0f116100dc578063dc3f0d0f146109c5578063dd62ed3e146109e5578063e086e5ec14610a2b578063e2f4560514610a4057600080fd5b8063cd51e6d414610959578063d257b34f1461096f578063d85ba0631461098f578063dc043e6f146109a557600080fd5b8063abe43b1b11610185578063c024666811610154578063c0246668146108df578063c18bc195146108ff578063c5b45ec01461091f578063c876d0b91461093f57600080fd5b8063abe43b1b1461087d578063adb873bd14610894578063bbc0c742146108aa578063bfeac7a6146108c957600080fd5b8063a0d82dc5116101c1578063a0d82dc514610811578063a457c2d714610827578063a9059cbb14610847578063aa4bde281461086757600080fd5b806398e2ebbf146107955780639a7a23d6146107c55780639c3b4fdc146107e55780639fccce32146107fb57600080fd5b80636220a12f116102e25780637571336a116102755780638a8c523c116102445780638a8c523c146107375780638da5cb5b1461074c578063921369131461076a57806395d89b411461078057600080fd5b80637571336a146106bb5780637bce5a04146106db578063882c3d98146106f157806388e765ff1461072157600080fd5b80636ddd1713116102b15780636ddd17131461065157806370a0823114610671578063715018a614610691578063751039fc146106a657600080fd5b80636220a12f146105ef57806366d602ae1461060f5780636a486a8e146106255780636b0a894c1461063b57600080fd5b80632be32b611161035a57806349bd5a5e1161032957806349bd5a5e146105655780634a62bb65146105855780634b84e0e31461059f57806359d24b8e146105bf57600080fd5b80632be32b61146104e75780632e6ed7ef14610509578063313ce56714610529578063395093511461054557600080fd5b80631a8145bb116103965780631a8145bb146104855780631d7778561461049b5780631f3fed8f146104b157806323b872dd146104c757600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b30565b6040516103f5919061302c565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004613092565b610bc2565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506002545b6040519081526020016103f5565b34801561049157600080fd5b5061047760225481565b3480156104a757600080fd5b5061047760245481565b3480156104bd57600080fd5b5061047760215481565b3480156104d357600080fd5b5061041e6104e23660046130be565b610bd9565b3480156104f357600080fd5b506105076105023660046130ff565b610c8a565b005b34801561051557600080fd5b50610507610524366004613118565b610d97565b34801561053557600080fd5b50604051601281526020016103f5565b34801561055157600080fd5b5061041e610560366004613092565b610e3a565b34801561057157600080fd5b50600a5461044e906001600160a01b031681565b34801561059157600080fd5b5060145461041e9060ff1681565b3480156105ab57600080fd5b506105076105ba36600461314a565b610e76565b3480156105cb57600080fd5b5061041e6105da36600461314a565b60106020526000908152604090205460ff1681565b3480156105fb57600080fd5b5061050761060a36600461314a565b610f18565b34801561061b57600080fd5b5061047760075481565b34801561063157600080fd5b5061047760175481565b34801561064757600080fd5b5061047760125481565b34801561065d57600080fd5b5060145461041e9062010000900460ff1681565b34801561067d57600080fd5b5061047761068c36600461314a565b610fc6565b34801561069d57600080fd5b50610507610fe1565b3480156106b257600080fd5b50610507611055565b3480156106c757600080fd5b506105076106d6366004613167565b6110bc565b3480156106e757600080fd5b50610477601d5481565b3480156106fd57600080fd5b5061041e61070c36600461314a565b60266020526000908152604090205460ff1681565b34801561072d57600080fd5b5061047760065481565b34801561074357600080fd5b50610507611184565b34801561075857600080fd5b506005546001600160a01b031661044e565b34801561077657600080fd5b5061047760185481565b34801561078c57600080fd5b506103e8611246565b3480156107a157600080fd5b5061041e6107b036600461314a565b60276020526000908152604090205460ff1681565b3480156107d157600080fd5b506105076107e0366004613167565b611255565b3480156107f157600080fd5b50610477601f5481565b34801561080757600080fd5b5061047760235481565b34801561081d57600080fd5b50610477601a5481565b34801561083357600080fd5b5061041e610842366004613092565b611349565b34801561085357600080fd5b5061041e610862366004613092565b6113e2565b34801561087357600080fd5b5061047760085481565b34801561088957600080fd5b50600f54431061041e565b3480156108a057600080fd5b50610477601b5481565b3480156108b657600080fd5b5060145461041e90610100900460ff1681565b3480156108d557600080fd5b5061047760135481565b3480156108eb57600080fd5b506105076108fa366004613167565b6113ef565b34801561090b57600080fd5b5061050761091a3660046130ff565b611478565b34801561092b57600080fd5b5061050761093a36600461314a565b611581565b34801561094b57600080fd5b5060165461041e9060ff1681565b34801561096557600080fd5b50610477600e5481565b34801561097b57600080fd5b5061050761098a3660046130ff565b6115cc565b34801561099b57600080fd5b50610477601c5481565b3480156109b157600080fd5b506105076109c03660046131a5565b611717565b3480156109d157600080fd5b506105076109e03660046130ff565b6117c1565b3480156109f157600080fd5b50610477610a003660046131da565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3757600080fd5b506105076118c8565b348015610a4c57600080fd5b50610477600b5481565b348015610a6257600080fd5b50610477600f5481565b348015610a7857600080fd5b5061047760205481565b348015610a8e57600080fd5b50610507610a9d366004613118565b611934565b348015610aae57600080fd5b506105076119d4565b348015610ac357600080fd5b50610477601e5481565b348015610ad957600080fd5b50610507610ae836600461314a565b611a0a565b348015610af957600080fd5b5061047760195481565b348015610b0f57600080fd5b50610477610b1e36600461314a565b60116020526000908152604090205481565b606060038054610b3f90613208565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b90613208565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b5050505050905090565b6000610bcf338484611af5565b5060015b92915050565b6000610be6848484611c1a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c705760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c7d8533858403611af5565b60019150505b9392505050565b6005546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e8610cc960025490565b610cd490600261328d565b610cde91906132a4565b610ce891906132a4565b811015610d495760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c67565b610d5b81670de0b6b3a764000061328d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610c6790613242565b601d849055601e839055601f82905560208190558082610de185876132c6565b610deb91906132c6565b610df591906132c6565b601c81905560031015610e345760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c67565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bcf918590610e719086906132c6565b611af5565b6005546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c67565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f425760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116610fa45760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c67565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461100b5760405162461bcd60e51b8152600401610c6790613242565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461107f5760405162461bcd60e51b8152600401610c6790613242565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110e65760405162461bcd60e51b8152600401610c6790613242565b8061115957600a546001600160a01b03908116908316036111595760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c67565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111ae5760405162461bcd60e51b8152600401610c6790613242565b601454610100900460ff16156112065760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c67565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b3f90613208565b6005546001600160a01b0316331461127f5760405162461bcd60e51b8152600401610c6790613242565b600a546001600160a01b03908116908316036113035760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c67565b61130d82826127e4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c67565b6113d83385858403611af5565b5060019392505050565b6000610bcf338484611c1a565b6005546001600160a01b031633146114195760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114a25760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e86114b760025490565b6114c290600361328d565b6114cc91906132a4565b6114d691906132a4565b81101561153a5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c67565b61154c81670de0b6b3a764000061328d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d8c565b6005546001600160a01b031633146115ab5760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146115f65760405162461bcd60e51b8152600401610c6790613242565b620186a061160360025490565b61160e90600161328d565b61161891906132a4565b8110156116855760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c67565b6103e861169160025490565b61169c90600161328d565b6116a691906132a4565b8111156117125760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c67565b600b55565b600061172230610fc6565b9050600b548110156117505760405162461bcd60e51b81526020600482015260006024820152604401610c67565b61175b848484612812565b15610e3457600a805460ff60a01b1916600160a01b17905561177b612997565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a150505050565b6005546001600160a01b031633146117eb5760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e861180060025490565b61180b90600261328d565b61181591906132a4565b61181f91906132a4565b8110156118815760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c67565b61189381670de0b6b3a764000061328d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d8c565b6005546001600160a01b031633146118f25760405162461bcd60e51b8152600401610c6790613242565b604051600090339047908381818185875af1925050503d8060008114610e34576040519150601f19603f3d011682016040523d82523d6000602084013e610e34565b6005546001600160a01b0316331461195e5760405162461bcd60e51b8152600401610c6790613242565b60188490556019839055601a829055601b819055808261197e85876132c6565b61198891906132c6565b61199291906132c6565b601781905560031015610e345760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c67565b6005546001600160a01b031633146119fe5760405162461bcd60e51b8152600401610c6790613242565b6016805460ff19169055565b6005546001600160a01b03163314611a345760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116611a995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c67565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c67565b6001600160a01b038216611bb85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c67565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c405760405162461bcd60e51b8152600401610c67906132d9565b6001600160a01b038216611c665760405162461bcd60e51b8152600401610c679061331e565b60008111611cb65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c67565b601454610100900460ff16611d49576001600160a01b03831660009081526025602052604090205460ff1680611d0457506001600160a01b03821660009081526025602052604090205460ff165b611d495760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c67565b600f5415611df3576001600160a01b03831660009081526010602052604090205460ff161580611d8657506005546001600160a01b038381169116145b80611d9b57506001600160a01b03821661dead145b611df35760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c67565b60145460ff161561223e576005546001600160a01b03848116911614801590611e2a57506005546001600160a01b03838116911614155b8015611e3e57506001600160a01b03821615155b8015611e5557506001600160a01b03821661dead14155b8015611e7a57506001600160a01b03831660009081526025602052604090205460ff16155b8015611e9f57506001600160a01b03821660009081526025602052604090205460ff16155b156120195760165460ff1615612019576009546001600160a01b03838116911614801590611edb5750600a546001600160a01b03838116911614155b15611f9e57611eeb600243613361565b32600090815260156020526040902054108015611f295750611f0e600243613361565b6001600160a01b038316600090815260156020526040902054105b611f755760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c67565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612019565b6001600160a01b03831660009081526027602052604090205460ff16158015611fd15750600a54600160a01b900460ff16155b15612019576013546001600160a01b038416600090815260116020526040902054116120195760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b03831660009081526027602052604090205460ff16801561205a57506001600160a01b03821660009081526026602052604090205460ff16155b1561212b576006548111156120c25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c67565b6008546120ce83610fc6565b6120d890836132c6565b11156121265760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c67565b61223e565b6001600160a01b03821660009081526027602052604090205460ff16801561216c57506001600160a01b03831660009081526026602052604090205460ff16155b156121d6576007548111156121265760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c67565b6001600160a01b03821660009081526026602052604090205460ff16612202576008546120ce83610fc6565b600a54600160a01b900460ff1615801561223457506001600160a01b03831660009081526026602052604090205460ff165b1561223e57426013555b600061224930610fc6565b600b5490915081108015908190612268575060145462010000900460ff165b801561227e5750600a54600160a01b900460ff16155b80156122a357506001600160a01b03851660009081526027602052604090205460ff16155b80156122c857506001600160a01b03851660009081526025602052604090205460ff16155b80156122ed57506001600160a01b03841660009081526025602052604090205460ff16155b1561231b57600a805460ff60a01b1916600160a01b17905561230d612997565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061235d57506001600160a01b03851660009081526025602052604090205460ff165b15612366575060005b6001600160a01b0385166000908152601160205260409020541580156123a457506001600160a01b03861660009081526027602052604090205460ff165b156123d5576123b285610fc6565b6000036123d5576001600160a01b03851660009081526011602052604090204290555b600081156127d057600f544310801561240657506001600160a01b03871660009081526027602052604090205460ff165b801561242b57506001600160a01b03861660009081526027602052604090205460ff16155b801561243957506000601c54115b156125b9576001600160a01b03861660009081526010602052604090205460ff166124d9576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124979084906132c6565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124e686606361328d565b6124f091906132a4565b9050601c54601e5482612503919061328d565b61250d91906132a4565b6022600082825461251e91906132c6565b9091555050601c54601d54612533908361328d565b61253d91906132a4565b6021600082825461254e91906132c6565b9091555050601c54601f54612563908361328d565b61256d91906132a4565b6023600082825461257e91906132c6565b9091555050601c54602054612593908361328d565b61259d91906132a4565b602460008282546125ae91906132c6565b909155506127b29050565b6001600160a01b03861660009081526027602052604090205460ff1680156125e357506000601754115b156126a5576064601754866125f8919061328d565b61260291906132a4565b905060175460195482612615919061328d565b61261f91906132a4565b6022600082825461263091906132c6565b9091555050601754601854612645908361328d565b61264f91906132a4565b6021600082825461266091906132c6565b9091555050601754601a54612675908361328d565b61267f91906132a4565b6023600082825461269091906132c6565b9091555050601754601b54612593908361328d565b6001600160a01b03871660009081526027602052604090205460ff1680156126cf57506000601c54115b156127b2576064601c54866126e4919061328d565b6126ee91906132a4565b9050601c54601e5482612701919061328d565b61270b91906132a4565b6022600082825461271c91906132c6565b9091555050601c54601d54612731908361328d565b61273b91906132a4565b6021600082825461274c91906132c6565b9091555050601c54601f54612761908361328d565b61276b91906132a4565b6023600082825461277c91906132c6565b9091555050601c54602054612791908361328d565b61279b91906132a4565b602460008282546127ac91906132c6565b90915550505b80156127c3576127c3873083612b9f565b6127cd8186613361565b94505b6127db878787612b9f565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff191682151517905561130d8282612cf4565b336000818152602560205260408120549091829160ff16806128e457600060245411801561284a575060245461284730610fc6565b10155b1561285b5761285b33602454612d57565b600060248190556001935061286f30610fc6565b9050600060235460215460225461288691906132c6565b61289091906132c6565b9050600b54600a6128a1919061328d565b8211156128b957600b546128b690600a61328d565b91505b8115806128c4575080155b156128d757600095505050505050610c83565b8495505050505050610c83565b60006128ef30610fc6565b111561291a578560000361290b5760138590556000925061291a565b6129158787612d57565b600092505b600061292530610fc6565b9050600060235460215460225461293c91906132c6565b61294691906132c6565b9050811580612953575080155b1561296657600095505050505050610c83565b600b5461297490600a61328d565b8211156128d757600b5461298990600a61328d565b50939450610c839350505050565b60006024541180156129b357506024546129b030610fc6565b10155b156129c4576129c430602454612d57565b600060248190556129d430610fc6565b905060006023546021546022546129eb91906132c6565b6129f591906132c6565b9050811580612a02575080155b15612a0b575050565b600b54612a1990600961328d565b821115612a3157600b54612a2e90600961328d565b91505b600060028260225485612a44919061328d565b612a4e91906132a4565b612a5891906132a4565b9050612a6c612a678285613361565b612e20565b60225447908190600090612a82906002906132a4565b612a8c9086613361565b602154612a99908561328d565b612aa391906132a4565b905060006002602254612ab691906132a4565b612ac09087613361565b602354612acd908661328d565b612ad791906132a4565b9050612ae381836132c6565b612aed9084613361565b600060228190556021819055602381905560245592508415801590612b125750600083115b15612b2157612b218584612f7a565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b5b573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b95573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612bc55760405162461bcd60e51b8152600401610c67906132d9565b6001600160a01b038216612beb5760405162461bcd60e51b8152600401610c679061331e565b6001600160a01b03831660009081526020819052604090205481811015612c635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c67565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c9a9084906132c6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ce691815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612d875760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b03821660009081526020819052604090205481811015612dca5760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c0d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e5557612e55613374565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed2919061338a565b81600181518110612ee557612ee5613374565b6001600160a01b039283166020918202929092010152600954612f0b9130911684611af5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f449085906000908690309042906004016133a7565b600060405180830381600087803b158015612f5e57600080fd5b505af1158015612f72573d6000803e3d6000fd5b505050505050565b600954612f929030906001600160a01b031684611af5565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613000573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130259190613418565b5050505050565b600060208083528351808285015260005b818110156130595785810183015185820160400152820161303d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461308f57600080fd5b50565b600080604083850312156130a557600080fd5b82356130b08161307a565b946020939093013593505050565b6000806000606084860312156130d357600080fd5b83356130de8161307a565b925060208401356130ee8161307a565b929592945050506040919091013590565b60006020828403121561311157600080fd5b5035919050565b6000806000806080858703121561312e57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561315c57600080fd5b8135610c838161307a565b6000806040838503121561317a57600080fd5b82356131858161307a565b91506020830135801515811461319a57600080fd5b809150509250929050565b6000806000606084860312156131ba57600080fd5b83356131c58161307a565b95602085013595506040909401359392505050565b600080604083850312156131ed57600080fd5b82356131f88161307a565b9150602083013561319a8161307a565b600181811c9082168061321c57607f821691505b60208210810361323c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd357610bd3613277565b6000826132c157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd357610bd3613277565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd357610bd3613277565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561339c57600080fd5b8151610c838161307a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133f75784516001600160a01b0316835293830193918301916001016133d2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561342d57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206bd3ade8564a4393adb8391189def19779e4cb854b7fa7ef0fad3fd08fe0b74564736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806398e2ebbf116101f2578063cd51e6d41161010d578063e611bfdb116100a0578063f11a24d31161006f578063f11a24d314610ab7578063f2fde38b14610acd578063f637434214610aed578063f834380a14610b0357600080fd5b8063e611bfdb14610a56578063e71dc3f514610a6c578063e7ad9fcd14610a82578063e884f26014610aa257600080fd5b8063dc3f0d0f116100dc578063dc3f0d0f146109c5578063dd62ed3e146109e5578063e086e5ec14610a2b578063e2f4560514610a4057600080fd5b8063cd51e6d414610959578063d257b34f1461096f578063d85ba0631461098f578063dc043e6f146109a557600080fd5b8063abe43b1b11610185578063c024666811610154578063c0246668146108df578063c18bc195146108ff578063c5b45ec01461091f578063c876d0b91461093f57600080fd5b8063abe43b1b1461087d578063adb873bd14610894578063bbc0c742146108aa578063bfeac7a6146108c957600080fd5b8063a0d82dc5116101c1578063a0d82dc514610811578063a457c2d714610827578063a9059cbb14610847578063aa4bde281461086757600080fd5b806398e2ebbf146107955780639a7a23d6146107c55780639c3b4fdc146107e55780639fccce32146107fb57600080fd5b80636220a12f116102e25780637571336a116102755780638a8c523c116102445780638a8c523c146107375780638da5cb5b1461074c578063921369131461076a57806395d89b411461078057600080fd5b80637571336a146106bb5780637bce5a04146106db578063882c3d98146106f157806388e765ff1461072157600080fd5b80636ddd1713116102b15780636ddd17131461065157806370a0823114610671578063715018a614610691578063751039fc146106a657600080fd5b80636220a12f146105ef57806366d602ae1461060f5780636a486a8e146106255780636b0a894c1461063b57600080fd5b80632be32b611161035a57806349bd5a5e1161032957806349bd5a5e146105655780634a62bb65146105855780634b84e0e31461059f57806359d24b8e146105bf57600080fd5b80632be32b61146104e75780632e6ed7ef14610509578063313ce56714610529578063395093511461054557600080fd5b80631a8145bb116103965780631a8145bb146104855780631d7778561461049b5780631f3fed8f146104b157806323b872dd146104c757600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b30565b6040516103f5919061302c565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004613092565b610bc2565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506002545b6040519081526020016103f5565b34801561049157600080fd5b5061047760225481565b3480156104a757600080fd5b5061047760245481565b3480156104bd57600080fd5b5061047760215481565b3480156104d357600080fd5b5061041e6104e23660046130be565b610bd9565b3480156104f357600080fd5b506105076105023660046130ff565b610c8a565b005b34801561051557600080fd5b50610507610524366004613118565b610d97565b34801561053557600080fd5b50604051601281526020016103f5565b34801561055157600080fd5b5061041e610560366004613092565b610e3a565b34801561057157600080fd5b50600a5461044e906001600160a01b031681565b34801561059157600080fd5b5060145461041e9060ff1681565b3480156105ab57600080fd5b506105076105ba36600461314a565b610e76565b3480156105cb57600080fd5b5061041e6105da36600461314a565b60106020526000908152604090205460ff1681565b3480156105fb57600080fd5b5061050761060a36600461314a565b610f18565b34801561061b57600080fd5b5061047760075481565b34801561063157600080fd5b5061047760175481565b34801561064757600080fd5b5061047760125481565b34801561065d57600080fd5b5060145461041e9062010000900460ff1681565b34801561067d57600080fd5b5061047761068c36600461314a565b610fc6565b34801561069d57600080fd5b50610507610fe1565b3480156106b257600080fd5b50610507611055565b3480156106c757600080fd5b506105076106d6366004613167565b6110bc565b3480156106e757600080fd5b50610477601d5481565b3480156106fd57600080fd5b5061041e61070c36600461314a565b60266020526000908152604090205460ff1681565b34801561072d57600080fd5b5061047760065481565b34801561074357600080fd5b50610507611184565b34801561075857600080fd5b506005546001600160a01b031661044e565b34801561077657600080fd5b5061047760185481565b34801561078c57600080fd5b506103e8611246565b3480156107a157600080fd5b5061041e6107b036600461314a565b60276020526000908152604090205460ff1681565b3480156107d157600080fd5b506105076107e0366004613167565b611255565b3480156107f157600080fd5b50610477601f5481565b34801561080757600080fd5b5061047760235481565b34801561081d57600080fd5b50610477601a5481565b34801561083357600080fd5b5061041e610842366004613092565b611349565b34801561085357600080fd5b5061041e610862366004613092565b6113e2565b34801561087357600080fd5b5061047760085481565b34801561088957600080fd5b50600f54431061041e565b3480156108a057600080fd5b50610477601b5481565b3480156108b657600080fd5b5060145461041e90610100900460ff1681565b3480156108d557600080fd5b5061047760135481565b3480156108eb57600080fd5b506105076108fa366004613167565b6113ef565b34801561090b57600080fd5b5061050761091a3660046130ff565b611478565b34801561092b57600080fd5b5061050761093a36600461314a565b611581565b34801561094b57600080fd5b5060165461041e9060ff1681565b34801561096557600080fd5b50610477600e5481565b34801561097b57600080fd5b5061050761098a3660046130ff565b6115cc565b34801561099b57600080fd5b50610477601c5481565b3480156109b157600080fd5b506105076109c03660046131a5565b611717565b3480156109d157600080fd5b506105076109e03660046130ff565b6117c1565b3480156109f157600080fd5b50610477610a003660046131da565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3757600080fd5b506105076118c8565b348015610a4c57600080fd5b50610477600b5481565b348015610a6257600080fd5b50610477600f5481565b348015610a7857600080fd5b5061047760205481565b348015610a8e57600080fd5b50610507610a9d366004613118565b611934565b348015610aae57600080fd5b506105076119d4565b348015610ac357600080fd5b50610477601e5481565b348015610ad957600080fd5b50610507610ae836600461314a565b611a0a565b348015610af957600080fd5b5061047760195481565b348015610b0f57600080fd5b50610477610b1e36600461314a565b60116020526000908152604090205481565b606060038054610b3f90613208565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6b90613208565b8015610bb85780601f10610b8d57610100808354040283529160200191610bb8565b820191906000526020600020905b815481529060010190602001808311610b9b57829003601f168201915b5050505050905090565b6000610bcf338484611af5565b5060015b92915050565b6000610be6848484611c1a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c705760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c7d8533858403611af5565b60019150505b9392505050565b6005546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e8610cc960025490565b610cd490600261328d565b610cde91906132a4565b610ce891906132a4565b811015610d495760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c67565b610d5b81670de0b6b3a764000061328d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610c6790613242565b601d849055601e839055601f82905560208190558082610de185876132c6565b610deb91906132c6565b610df591906132c6565b601c81905560031015610e345760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c67565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bcf918590610e719086906132c6565b611af5565b6005546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116610ef65760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c67565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f425760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116610fa45760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c67565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461100b5760405162461bcd60e51b8152600401610c6790613242565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461107f5760405162461bcd60e51b8152600401610c6790613242565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110e65760405162461bcd60e51b8152600401610c6790613242565b8061115957600a546001600160a01b03908116908316036111595760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c67565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111ae5760405162461bcd60e51b8152600401610c6790613242565b601454610100900460ff16156112065760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c67565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610b3f90613208565b6005546001600160a01b0316331461127f5760405162461bcd60e51b8152600401610c6790613242565b600a546001600160a01b03908116908316036113035760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c67565b61130d82826127e4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c67565b6113d83385858403611af5565b5060019392505050565b6000610bcf338484611c1a565b6005546001600160a01b031633146114195760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114a25760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e86114b760025490565b6114c290600361328d565b6114cc91906132a4565b6114d691906132a4565b81101561153a5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c67565b61154c81670de0b6b3a764000061328d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610d8c565b6005546001600160a01b031633146115ab5760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146115f65760405162461bcd60e51b8152600401610c6790613242565b620186a061160360025490565b61160e90600161328d565b61161891906132a4565b8110156116855760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c67565b6103e861169160025490565b61169c90600161328d565b6116a691906132a4565b8111156117125760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c67565b600b55565b600061172230610fc6565b9050600b548110156117505760405162461bcd60e51b81526020600482015260006024820152604401610c67565b61175b848484612812565b15610e3457600a805460ff60a01b1916600160a01b17905561177b612997565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a150505050565b6005546001600160a01b031633146117eb5760405162461bcd60e51b8152600401610c6790613242565b670de0b6b3a76400006103e861180060025490565b61180b90600261328d565b61181591906132a4565b61181f91906132a4565b8110156118815760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c67565b61189381670de0b6b3a764000061328d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d8c565b6005546001600160a01b031633146118f25760405162461bcd60e51b8152600401610c6790613242565b604051600090339047908381818185875af1925050503d8060008114610e34576040519150601f19603f3d011682016040523d82523d6000602084013e610e34565b6005546001600160a01b0316331461195e5760405162461bcd60e51b8152600401610c6790613242565b60188490556019839055601a829055601b819055808261197e85876132c6565b61198891906132c6565b61199291906132c6565b601781905560031015610e345760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c67565b6005546001600160a01b031633146119fe5760405162461bcd60e51b8152600401610c6790613242565b6016805460ff19169055565b6005546001600160a01b03163314611a345760405162461bcd60e51b8152600401610c6790613242565b6001600160a01b038116611a995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c67565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c67565b6001600160a01b038216611bb85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c67565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c405760405162461bcd60e51b8152600401610c67906132d9565b6001600160a01b038216611c665760405162461bcd60e51b8152600401610c679061331e565b60008111611cb65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c67565b601454610100900460ff16611d49576001600160a01b03831660009081526025602052604090205460ff1680611d0457506001600160a01b03821660009081526025602052604090205460ff165b611d495760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c67565b600f5415611df3576001600160a01b03831660009081526010602052604090205460ff161580611d8657506005546001600160a01b038381169116145b80611d9b57506001600160a01b03821661dead145b611df35760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c67565b60145460ff161561223e576005546001600160a01b03848116911614801590611e2a57506005546001600160a01b03838116911614155b8015611e3e57506001600160a01b03821615155b8015611e5557506001600160a01b03821661dead14155b8015611e7a57506001600160a01b03831660009081526025602052604090205460ff16155b8015611e9f57506001600160a01b03821660009081526025602052604090205460ff16155b156120195760165460ff1615612019576009546001600160a01b03838116911614801590611edb5750600a546001600160a01b03838116911614155b15611f9e57611eeb600243613361565b32600090815260156020526040902054108015611f295750611f0e600243613361565b6001600160a01b038316600090815260156020526040902054105b611f755760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c67565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612019565b6001600160a01b03831660009081526027602052604090205460ff16158015611fd15750600a54600160a01b900460ff16155b15612019576013546001600160a01b038416600090815260116020526040902054116120195760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b03831660009081526027602052604090205460ff16801561205a57506001600160a01b03821660009081526026602052604090205460ff16155b1561212b576006548111156120c25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c67565b6008546120ce83610fc6565b6120d890836132c6565b11156121265760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c67565b61223e565b6001600160a01b03821660009081526027602052604090205460ff16801561216c57506001600160a01b03831660009081526026602052604090205460ff16155b156121d6576007548111156121265760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c67565b6001600160a01b03821660009081526026602052604090205460ff16612202576008546120ce83610fc6565b600a54600160a01b900460ff1615801561223457506001600160a01b03831660009081526026602052604090205460ff165b1561223e57426013555b600061224930610fc6565b600b5490915081108015908190612268575060145462010000900460ff165b801561227e5750600a54600160a01b900460ff16155b80156122a357506001600160a01b03851660009081526027602052604090205460ff16155b80156122c857506001600160a01b03851660009081526025602052604090205460ff16155b80156122ed57506001600160a01b03841660009081526025602052604090205460ff16155b1561231b57600a805460ff60a01b1916600160a01b17905561230d612997565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061235d57506001600160a01b03851660009081526025602052604090205460ff165b15612366575060005b6001600160a01b0385166000908152601160205260409020541580156123a457506001600160a01b03861660009081526027602052604090205460ff165b156123d5576123b285610fc6565b6000036123d5576001600160a01b03851660009081526011602052604090204290555b600081156127d057600f544310801561240657506001600160a01b03871660009081526027602052604090205460ff165b801561242b57506001600160a01b03861660009081526027602052604090205460ff16155b801561243957506000601c54115b156125b9576001600160a01b03861660009081526010602052604090205460ff166124d9576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124979084906132c6565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124e686606361328d565b6124f091906132a4565b9050601c54601e5482612503919061328d565b61250d91906132a4565b6022600082825461251e91906132c6565b9091555050601c54601d54612533908361328d565b61253d91906132a4565b6021600082825461254e91906132c6565b9091555050601c54601f54612563908361328d565b61256d91906132a4565b6023600082825461257e91906132c6565b9091555050601c54602054612593908361328d565b61259d91906132a4565b602460008282546125ae91906132c6565b909155506127b29050565b6001600160a01b03861660009081526027602052604090205460ff1680156125e357506000601754115b156126a5576064601754866125f8919061328d565b61260291906132a4565b905060175460195482612615919061328d565b61261f91906132a4565b6022600082825461263091906132c6565b9091555050601754601854612645908361328d565b61264f91906132a4565b6021600082825461266091906132c6565b9091555050601754601a54612675908361328d565b61267f91906132a4565b6023600082825461269091906132c6565b9091555050601754601b54612593908361328d565b6001600160a01b03871660009081526027602052604090205460ff1680156126cf57506000601c54115b156127b2576064601c54866126e4919061328d565b6126ee91906132a4565b9050601c54601e5482612701919061328d565b61270b91906132a4565b6022600082825461271c91906132c6565b9091555050601c54601d54612731908361328d565b61273b91906132a4565b6021600082825461274c91906132c6565b9091555050601c54601f54612761908361328d565b61276b91906132a4565b6023600082825461277c91906132c6565b9091555050601c54602054612791908361328d565b61279b91906132a4565b602460008282546127ac91906132c6565b90915550505b80156127c3576127c3873083612b9f565b6127cd8186613361565b94505b6127db878787612b9f565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff191682151517905561130d8282612cf4565b336000818152602560205260408120549091829160ff16806128e457600060245411801561284a575060245461284730610fc6565b10155b1561285b5761285b33602454612d57565b600060248190556001935061286f30610fc6565b9050600060235460215460225461288691906132c6565b61289091906132c6565b9050600b54600a6128a1919061328d565b8211156128b957600b546128b690600a61328d565b91505b8115806128c4575080155b156128d757600095505050505050610c83565b8495505050505050610c83565b60006128ef30610fc6565b111561291a578560000361290b5760138590556000925061291a565b6129158787612d57565b600092505b600061292530610fc6565b9050600060235460215460225461293c91906132c6565b61294691906132c6565b9050811580612953575080155b1561296657600095505050505050610c83565b600b5461297490600a61328d565b8211156128d757600b5461298990600a61328d565b50939450610c839350505050565b60006024541180156129b357506024546129b030610fc6565b10155b156129c4576129c430602454612d57565b600060248190556129d430610fc6565b905060006023546021546022546129eb91906132c6565b6129f591906132c6565b9050811580612a02575080155b15612a0b575050565b600b54612a1990600961328d565b821115612a3157600b54612a2e90600961328d565b91505b600060028260225485612a44919061328d565b612a4e91906132a4565b612a5891906132a4565b9050612a6c612a678285613361565b612e20565b60225447908190600090612a82906002906132a4565b612a8c9086613361565b602154612a99908561328d565b612aa391906132a4565b905060006002602254612ab691906132a4565b612ac09087613361565b602354612acd908661328d565b612ad791906132a4565b9050612ae381836132c6565b612aed9084613361565b600060228190556021819055602381905560245592508415801590612b125750600083115b15612b2157612b218584612f7a565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b5b573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b95573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612bc55760405162461bcd60e51b8152600401610c67906132d9565b6001600160a01b038216612beb5760405162461bcd60e51b8152600401610c679061331e565b6001600160a01b03831660009081526020819052604090205481811015612c635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c67565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c9a9084906132c6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ce691815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612d875760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b03821660009081526020819052604090205481811015612dca5760405162461bcd60e51b81526020600482015260006024820152604401610c67565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c0d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e5557612e55613374565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed2919061338a565b81600181518110612ee557612ee5613374565b6001600160a01b039283166020918202929092010152600954612f0b9130911684611af5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f449085906000908690309042906004016133a7565b600060405180830381600087803b158015612f5e57600080fd5b505af1158015612f72573d6000803e3d6000fd5b505050505050565b600954612f929030906001600160a01b031684611af5565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613000573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130259190613418565b5050505050565b600060208083528351808285015260005b818110156130595785810183015185820160400152820161303d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461308f57600080fd5b50565b600080604083850312156130a557600080fd5b82356130b08161307a565b946020939093013593505050565b6000806000606084860312156130d357600080fd5b83356130de8161307a565b925060208401356130ee8161307a565b929592945050506040919091013590565b60006020828403121561311157600080fd5b5035919050565b6000806000806080858703121561312e57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561315c57600080fd5b8135610c838161307a565b6000806040838503121561317a57600080fd5b82356131858161307a565b91506020830135801515811461319a57600080fd5b809150509250929050565b6000806000606084860312156131ba57600080fd5b83356131c58161307a565b95602085013595506040909401359392505050565b600080604083850312156131ed57600080fd5b82356131f88161307a565b9150602083013561319a8161307a565b600181811c9082168061321c57607f821691505b60208210810361323c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd357610bd3613277565b6000826132c157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd357610bd3613277565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd357610bd3613277565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561339c57600080fd5b8151610c838161307a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133f75784516001600160a01b0316835293830193918301916001016133d2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561342d57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206bd3ade8564a4393adb8391189def19779e4cb854b7fa7ef0fad3fd08fe0b74564736f6c63430008120033

Deployed Bytecode Sourcemap

8749:20116:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3335:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4315:194;;;;;;;;;;-1:-1:-1;4315:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4315:194:0;1023:187:1;8898:38:0;;;;;;;;;;-1:-1:-1;8898:38:0;;;;-1:-1:-1;;;;;8898:38:0;;;;;;-1:-1:-1;;;;;1402:32:1;;;1384:51;;1372:2;1357:18;8898:38:0;1215:226:1;3656:108:0;;;;;;;;;;-1:-1:-1;3744:12:0;;3656:108;;;1592:25:1;;;1580:2;1565:18;3656:108:0;1446:177:1;9989:33:0;;;;;;;;;;;;;;;;10063:28;;;;;;;;;;;;;;;;9949:33;;;;;;;;;;;;;;;;4517:529;;;;;;;;;;-1:-1:-1;4517:529:0;;;;;:::i;:::-;;:::i;16611:312::-;;;;;;;;;;-1:-1:-1;16611:312:0;;;;;:::i;:::-;;:::i;:::-;;19611:504;;;;;;;;;;-1:-1:-1;19611:504:0;;;;;:::i;:::-;;:::i;3555:93::-;;;;;;;;;;-1:-1:-1;3555:93:0;;3638:2;2806:36:1;;2794:2;2779:18;3555:93:0;2664:184:1;5054:290:0;;;;;;;;;;-1:-1:-1;5054:290:0;;;;;:::i;:::-;;:::i;8943:28::-;;;;;;;;;;-1:-1:-1;8943:28:0;;;;-1:-1:-1;;;;;8943:28:0;;;9361:33;;;;;;;;;;-1:-1:-1;9361:33:0;;;;;;;;26451:192;;;;;;;;;;-1:-1:-1;26451:192:0;;;;;:::i;:::-;;:::i;9196:47::-;;;;;;;;;;-1:-1:-1;9196:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26162:281;;;;;;;;;;-1:-1:-1;26162:281:0;;;;;:::i;:::-;;:::i;8824:28::-;;;;;;;;;;;;;;;;9598;;;;;;;;;;;;;;;;9300:25;;;;;;;;;;;;;;;;9441:31;;;;;;;;;;-1:-1:-1;9441:31:0;;;;;;;;;;;3772:143;;;;;;;;;;-1:-1:-1;3772:143:0;;;;;:::i;:::-;;:::i;8303:150::-;;;;;;;;;;;;;:::i;15634:203::-;;;;;;;;;;;;;:::i;17654:328::-;;;;;;;;;;-1:-1:-1;17654:328:0;;;;;:::i;:::-;;:::i;9810:30::-;;;;;;;;;;;;;;;;10907:48;;;;;;;;;;-1:-1:-1;10907:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8790:27;;;;;;;;;;;;;;;;13129:243;;;;;;;;;;;;;:::i;8089:79::-;;;;;;;;;;-1:-1:-1;8154:6:0;;-1:-1:-1;;;;;8154:6:0;8089:79;;9633:31;;;;;;;;;;;;;;;;3443:104;;;;;;;;;;;;;:::i;10962:39::-;;;;;;;;;;-1:-1:-1;10962:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18220:364;;;;;;;;;;-1:-1:-1;18220:364:0;;;;;:::i;:::-;;:::i;9884:24::-;;;;;;;;;;;;;;;;10029:27;;;;;;;;;;;;;;;;9709:25;;;;;;;;;;;;;;;;5352:475;;;;;;;;;;-1:-1:-1;5352:475:0;;;;;:::i;:::-;;:::i;3923:200::-;;;;;;;;;;-1:-1:-1;3923:200:0;;;;;:::i;:::-;;:::i;8859:30::-;;;;;;;;;;;;;;;;20313:113;;;;;;;;;;-1:-1:-1;20404:14:0;;20389:12;:29;20313:113;;9741:26;;;;;;;;;;;;;;;;9401:33;;;;;;;;;;-1:-1:-1;9401:33:0;;;;;;;;;;;9332:22;;;;;;;;;;;;;;;;20123:182;;;;;;;;;;-1:-1:-1;20123:182:0;;;;;:::i;:::-;;:::i;15951:327::-;;;;;;;;;;-1:-1:-1;15951:327:0;;;;;:::i;:::-;;:::i;15517:109::-;;;;;;;;;;-1:-1:-1;15517:109:0;;;;;:::i;:::-;;:::i;9550:39::-;;;;;;;;;;-1:-1:-1;9550:39:0;;;;;;;;9118:31;;;;;;;;;;;;;;;;16993:428;;;;;;;;;;-1:-1:-1;16993:428:0;;;;;:::i;:::-;;:::i;9776:27::-;;;;;;;;;;;;;;;;19118:485;;;;;;;;;;-1:-1:-1;19118:485:0;;;;;:::i;:::-;;:::i;16286:317::-;;;;;;;;;;-1:-1:-1;16286:317:0;;;;;:::i;:::-;;:::i;4131:176::-;;;;;;;;;;-1:-1:-1;4131:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;4272:18:0;;;4245:7;4272:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4131:176;26651:156;;;;;;;;;;;;;:::i;9008:33::-;;;;;;;;;;;;;;;;9156;;;;;;;;;;;;;;;;9915:25;;;;;;;;;;;;;;;;18592:518;;;;;;;;;;-1:-1:-1;18592:518:0;;;;;:::i;:::-;;:::i;15845:98::-;;;;;;;;;;;;;:::i;9847:30::-;;;;;;;;;;;;;;;;8461:281;;;;;;;;;;-1:-1:-1;8461:281:0;;;;;:::i;:::-;;:::i;9671:31::-;;;;;;;;;;;;;;;;9250:43;;;;;;;;;;-1:-1:-1;9250:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;3335:100;3389:13;3422:5;3415:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3335:100;:::o;4315:194::-;4423:4;4440:39;1673:10;4463:7;4472:6;4440:8;:39::i;:::-;-1:-1:-1;4497:4:0;4315:194;;;;;:::o;4517:529::-;4657:4;4674:36;4684:6;4692:9;4703:6;4674:9;:36::i;:::-;-1:-1:-1;;;;;4750:19:0;;4723:24;4750:19;;;:11;:19;;;;;;;;1673:10;4750:33;;;;;;;;4816:26;;;;4794:116;;;;-1:-1:-1;;;4794:116:0;;5102:2:1;4794:116:0;;;5084:21:1;5141:2;5121:18;;;5114:30;5180:34;5160:18;;;5153:62;-1:-1:-1;;;5231:18:1;;;5224:38;5279:19;;4794:116:0;;;;;;;;;4946:57;4955:6;1673:10;4996:6;4977:16;:25;4946:8;:57::i;:::-;5034:4;5027:11;;;4517:529;;;;;;:::o;16611:312::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;16748:4:::1;16740;16719:13;3744:12:::0;;;3656:108;16719:13:::1;:17;::::0;16735:1:::1;16719:17;:::i;:::-;16718:26;;;;:::i;:::-;16717:35;;;;:::i;:::-;16707:6;:45;;16685:136;;;::::0;-1:-1:-1;;;16685:136:0;;6399:2:1;16685:136:0::1;::::0;::::1;6381:21:1::0;6438:2;6418:18;;;6411:30;6477:34;6457:18;;;6450:62;-1:-1:-1;;;6528:18:1;;;6521:39;6577:19;;16685:136:0::1;6197:405:1::0;16685:136:0::1;16847:19;:6:::0;16857:8:::1;16847:19;:::i;:::-;16832:12;:34:::0;;;16882:33:::1;::::0;1592:25:1;;;16882:33:0::1;::::0;1580:2:1;1565:18;16882:33:0::1;;;;;;;;16611:312:::0;:::o;19611:504::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;19788:15:::1;:31:::0;;;19830:15:::1;:31:::0;;;19872:9:::1;:19:::0;;;19902:10:::1;:21:::0;;;19915:8;19884:7;19962:46:::1;19848:13:::0;19806;19962:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;19934:12;:125:::0;;;20094:1:::1;-1:-1:-1::0;20078:17:0::1;20070:37;;;::::0;-1:-1:-1;;;20070:37:0;;6939:2:1;20070:37:0::1;::::0;::::1;6921:21:1::0;6978:1;6958:18;;;6951:29;-1:-1:-1;;;6996:18:1;;;6989:37;7043:18;;20070:37:0::1;6737:330:1::0;20070:37:0::1;19611:504:::0;;;;:::o;5054:290::-;1673:10;5167:4;5256:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5256:34:0;;;;;;;;;;5167:4;;5184:130;;5234:7;;5256:47;;5293:10;;5256:47;:::i;:::-;5184:8;:130::i;26451:192::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26534:24:0;::::1;26526:67;;;::::0;-1:-1:-1;;;26526:67:0;;7274:2:1;26526:67:0::1;::::0;::::1;7256:21:1::0;7313:2;7293:18;;;7286:30;7352:32;7332:18;;;7325:60;7402:18;;26526:67:0::1;7072:354:1::0;26526:67:0::1;26604:9;:31:::0;;-1:-1:-1;;;;;;26604:31:0::1;-1:-1:-1::0;;;;;26604:31:0;;;::::1;::::0;;;::::1;::::0;;26451:192::o;26162:281::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26287:30:0;::::1;26265:116;;;::::0;-1:-1:-1;;;26265:116:0;;7633:2:1;26265:116:0::1;::::0;::::1;7615:21:1::0;7672:2;7652:18;;;7645:30;7711:34;7691:18;;;7684:62;-1:-1:-1;;;7762:18:1;;;7755:34;7806:19;;26265:116:0::1;7431:400:1::0;26265:116:0::1;26392:15;:43:::0;;-1:-1:-1;;;;;;26392:43:0::1;-1:-1:-1::0;;;;;26392:43:0;;;::::1;::::0;;;::::1;::::0;;26162:281::o;3772:143::-;-1:-1:-1;;;;;3889:18:0;3862:7;3889:18;;;;;;;;;;;;3772:143::o;8303:150::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;8396:6:::1;::::0;8375:40:::1;::::0;8412:1:::1;::::0;-1:-1:-1;;;;;8396:6:0::1;::::0;8375:40:::1;::::0;8412:1;;8375:40:::1;8426:6;:19:::0;;-1:-1:-1;;;;;;8426:19:0::1;::::0;;8303:150::o;15634:203::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;3744:12;;15688::::1;:28:::0;3744:12;;15727:13:::1;:29:::0;3744:12;;15767:15:::1;:31:::0;15814:15:::1;::::0;::::1;::::0;;;::::1;15634:203::o:0;17654:328::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;17776:4:::1;17771:162;;17833:13;::::0;-1:-1:-1;;;;;17833:13:0;;::::1;17823:23:::0;;::::1;::::0;17797:124:::1;;;::::0;-1:-1:-1;;;17797:124:0;;8038:2:1;17797:124:0::1;::::0;::::1;8020:21:1::0;8077:2;8057:18;;;8050:30;8116:34;8096:18;;;8089:62;-1:-1:-1;;;8167:18:1;;;8160:37;8214:19;;17797:124:0::1;7836:403:1::0;17797:124:0::1;-1:-1:-1::0;;;;;17943:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;17943:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17654:328::o;13129:243::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;13193:13:::1;::::0;::::1;::::0;::::1;;;13192:14;13184:50;;;::::0;-1:-1:-1;;;13184:50:0;;8446:2:1;13184:50:0::1;::::0;::::1;8428:21:1::0;8485:2;8465:18;;;8458:30;8524:25;8504:18;;;8497:53;8567:18;;13184:50:0::1;8244:347:1::0;13184:50:0::1;13245:13;:20:::0;;-1:-1:-1;;13276:18:0;;;;;13320:12:::1;13305;:27:::0;13348:16:::1;::::0;::::1;::::0;-1:-1:-1;;13348:16:0::1;13129:243::o:0;3443:104::-;3499:13;3532:7;3525:14;;;;;:::i;18220:364::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;18368:13:::1;::::0;-1:-1:-1;;;;;18368:13:0;;::::1;18360:21:::0;;::::1;::::0;18338:128:::1;;;::::0;-1:-1:-1;;;18338:128:0;;8798:2:1;18338:128:0::1;::::0;::::1;8780:21:1::0;8837:2;8817:18;;;8810:30;8876:34;8856:18;;;8849:62;8947:27;8927:18;;;8920:55;8992:19;;18338:128:0::1;8596:421:1::0;18338:128:0::1;18479:41;18508:4;18514:5;18479:28;:41::i;:::-;18536:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18536:40:0;::::1;::::0;::::1;::::0;;;::::1;18220:364:::0;;:::o;5352:475::-;1673:10;5470:4;5514:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5514:34:0;;;;;;;;;;5581:35;;;;5559:122;;;;-1:-1:-1;;;5559:122:0;;9224:2:1;5559:122:0;;;9206:21:1;9263:2;9243:18;;;9236:30;9302:34;9282:18;;;9275:62;-1:-1:-1;;;9353:18:1;;;9346:35;9398:19;;5559:122:0;9022:401:1;5559:122:0;5717:67;1673:10;5740:7;5768:15;5749:16;:34;5717:8;:67::i;:::-;-1:-1:-1;5815:4:0;;5352:475;-1:-1:-1;;;5352:475:0:o;3923:200::-;4034:4;4051:42;1673:10;4075:9;4086:6;4051:9;:42::i;20123:182::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20208:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20208:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20263:34;;1163:41:1;;;20263:34:0::1;::::0;1136:18:1;20263:34:0::1;;;;;;;20123:182:::0;;:::o;15951:327::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;16091:4:::1;16083;16062:13;3744:12:::0;;;3656:108;16062:13:::1;:17;::::0;16078:1:::1;16062:17;:::i;:::-;16061:26;;;;:::i;:::-;16060:35;;;;:::i;:::-;16050:6;:45;;16028:139;;;::::0;-1:-1:-1;;;16028:139:0;;9630:2:1;16028:139:0::1;::::0;::::1;9612:21:1::0;9669:2;9649:18;;;9642:30;9708:34;9688:18;;;9681:62;-1:-1:-1;;;9759:18:1;;;9752:42;9811:19;;16028:139:0::1;9428:408:1::0;16028:139:0::1;16196:19;:6:::0;16206:8:::1;16196:19;:::i;:::-;16178:15;:37:::0;;;16231:39:::1;::::0;1592:25:1;;;16231:39:0::1;::::0;1580:2:1;1565:18;16231:39:0::1;1446:177:1::0;15517:109:0;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15587:23:0::1;15613:5;15587:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;15587:31:0::1;::::0;;15517:109::o;16993:428::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;17133:6:::1;17112:13;3744:12:::0;;;3656:108;17112:13:::1;:17;::::0;17128:1:::1;17112:17;:::i;:::-;17111:28;;;;:::i;:::-;17098:9;:41;;17076:144;;;::::0;-1:-1:-1;;;17076:144:0;;10043:2:1;17076:144:0::1;::::0;::::1;10025:21:1::0;10082:2;10062:18;;;10055:30;10121:34;10101:18;;;10094:62;-1:-1:-1;;;10172:18:1;;;10165:51;10233:19;;17076:144:0::1;9841:417:1::0;17076:144:0::1;17288:4;17267:13;3744:12:::0;;;3656:108;17267:13:::1;:17;::::0;17283:1:::1;17267:17;:::i;:::-;17266:26;;;;:::i;:::-;17253:9;:39;;17231:141;;;::::0;-1:-1:-1;;;17231:141:0;;10465:2:1;17231:141:0::1;::::0;::::1;10447:21:1::0;10504:2;10484:18;;;10477:30;10543:34;10523:18;;;10516:62;-1:-1:-1;;;10594:18:1;;;10587:50;10654:19;;17231:141:0::1;10263:416:1::0;17231:141:0::1;17383:18;:30:::0;16993:428::o;19118:485::-;19250:15;19268:24;19286:4;19268:9;:24::i;:::-;19250:42;;19336:18;;19325:7;:29;;19303:79;;;;-1:-1:-1;;;19303:79:0;;10886:2:1;19303:79:0;;;10868:21:1;-1:-1:-1;10905:18:1;;;10898:29;10944:18;;19303:79:0;10684:284:1;19303:79:0;19397:48;19412:8;19422:11;19435:9;19397:14;:48::i;:::-;19393:203;;;19462:10;:17;;-1:-1:-1;;;;19462:17:0;-1:-1:-1;;;19462:17:0;;;19494:10;:8;:10::i;:::-;19519;:18;;-1:-1:-1;;;;19519:18:0;;;19557:27;;19568:15;1592:25:1;;19557:27:0;;1580:2:1;1565:18;19557:27:0;;;;;;;19239:364;19118:485;;;:::o;16286:317::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;16424:4:::1;16416;16395:13;3744:12:::0;;;3656:108;16395:13:::1;:17;::::0;16411:1:::1;16395:17;:::i;:::-;16394:26;;;;:::i;:::-;16393:35;;;;:::i;:::-;16383:6;:45;;16361:137;;;::::0;-1:-1:-1;;;16361:137:0;;11175:2:1;16361:137:0::1;::::0;::::1;11157:21:1::0;11214:2;11194:18;;;11187:30;11253:34;11233:18;;;11226:62;-1:-1:-1;;;11304:18:1;;;11297:40;11354:19;;16361:137:0::1;10973:406:1::0;16361:137:0::1;16525:19;:6:::0;16535:8:::1;16525:19;:::i;:::-;16509:13;:35:::0;;;16560::::1;::::0;1592:25:1;;;16560:35:0::1;::::0;1580:2:1;1565:18;16560:35:0::1;1446:177:1::0;26651:156:0;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;26741:58:::1;::::0;26704:12:::1;::::0;26749:10:::1;::::0;26773:21:::1;::::0;26704:12;26741:58;26704:12;26741:58;26773:21;26749:10;26741:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18592:518:::0;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;18770:16:::1;:32:::0;;;18813:16:::1;:32:::0;;;18856:10:::1;:20:::0;;;18887:11:::1;:22:::0;;;18901:8;18869:7;18949:48:::1;18832:13:::0;18789;18949:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;18920:13;:130:::0;;;19086:1:::1;-1:-1:-1::0;19069:18:0::1;19061:41;;;::::0;-1:-1:-1;;;19061:41:0;;11796:2:1;19061:41:0::1;::::0;::::1;11778:21:1::0;11835:2;11815:18;;;11808:30;-1:-1:-1;;;11854:18:1;;;11847:40;11904:18;;19061:41:0::1;11594:334:1::0;15845:98:0;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;15907:20:::1;:28:::0;;-1:-1:-1;;15907:28:0::1;::::0;;15845:98::o;8461:281::-;8216:6;;-1:-1:-1;;;;;8216:6:0;1673:10;8216:22;8208:67;;;;-1:-1:-1;;;8208:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8564:22:0;::::1;8542:110;;;::::0;-1:-1:-1;;;8542:110:0;;12135:2:1;8542:110:0::1;::::0;::::1;12117:21:1::0;12174:2;12154:18;;;12147:30;12213:34;12193:18;;;12186:62;-1:-1:-1;;;12264:18:1;;;12257:36;12310:19;;8542:110:0::1;11933:402:1::0;8542:110:0::1;8689:6;::::0;8668:38:::1;::::0;-1:-1:-1;;;;;8668:38:0;;::::1;::::0;8689:6:::1;::::0;8668:38:::1;::::0;8689:6:::1;::::0;8668:38:::1;8717:6;:17:::0;;-1:-1:-1;;;;;;8717:17:0::1;-1:-1:-1::0;;;;;8717:17:0;;;::::1;::::0;;;::::1;::::0;;8461:281::o;7208:380::-;-1:-1:-1;;;;;7344:19:0;;7336:68;;;;-1:-1:-1;;;7336:68:0;;12542:2:1;7336:68:0;;;12524:21:1;12581:2;12561:18;;;12554:30;12620:34;12600:18;;;12593:62;-1:-1:-1;;;12671:18:1;;;12664:34;12715:19;;7336:68:0;12340:400:1;7336:68:0;-1:-1:-1;;;;;7423:21:0;;7415:68;;;;-1:-1:-1;;;7415:68:0;;12947:2:1;7415:68:0;;;12929:21:1;12986:2;12966:18;;;12959:30;13025:34;13005:18;;;12998:62;-1:-1:-1;;;13076:18:1;;;13069:32;13118:19;;7415:68:0;12745:398:1;7415:68:0;-1:-1:-1;;;;;7496:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7548:32;;1592:25:1;;;7548:32:0;;1565:18:1;7548:32:0;;;;;;;;7208:380;;;:::o;20434:5720::-;-1:-1:-1;;;;;20566:18:0;;20558:68;;;;-1:-1:-1;;;20558:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20645:16:0;;20637:64;;;;-1:-1:-1;;;20637:64:0;;;;;;;:::i;:::-;20729:1;20720:6;:10;20712:52;;;;-1:-1:-1;;;20712:52:0;;14160:2:1;20712:52:0;;;14142:21:1;14199:2;14179:18;;;14172:30;14238:31;14218:18;;;14211:59;14287:18;;20712:52:0;13958:353:1;20712:52:0;20782:13;;;;;;;20777:183;;-1:-1:-1;;;;;20838:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20867:23:0;;;;;;:19;:23;;;;;;;;20838:52;20812:136;;;;-1:-1:-1;;;20812:136:0;;14518:2:1;20812:136:0;;;14500:21:1;14557:2;14537:18;;;14530:30;-1:-1:-1;;;14576:18:1;;;14569:52;14638:18;;20812:136:0;14316:346:1;20812:136:0;20976:14;;:18;20972:254;;-1:-1:-1;;;;;21038:21:0;;;;;;:15;:21;;;;;;;;21037:22;;:60;;-1:-1:-1;8154:6:0;;-1:-1:-1;;;;;21084:13:0;;;8154:6;;21084:13;21037:60;:106;;;-1:-1:-1;;;;;;21122:21:0;;21136:6;21122:21;21037:106;21011:203;;;;-1:-1:-1;;;21011:203:0;;14869:2:1;21011:203:0;;;14851:21:1;14908:2;14888:18;;;14881:30;14947:34;14927:18;;;14920:62;-1:-1:-1;;;14998:18:1;;;14991:33;15041:19;;21011:203:0;14667:399:1;21011:203:0;21242:14;;;;21238:2242;;;8154:6;;-1:-1:-1;;;;;21295:15:0;;;8154:6;;21295:15;;;;:49;;-1:-1:-1;8154:6:0;;-1:-1:-1;;;;;21331:13:0;;;8154:6;;21331:13;;21295:49;:86;;;;-1:-1:-1;;;;;;21365:16:0;;;;21295:86;:128;;;;-1:-1:-1;;;;;;21402:21:0;;21416:6;21402:21;;21295:128;:175;;;;-1:-1:-1;;;;;;21445:25:0;;;;;;:19;:25;;;;;;;;21444:26;21295:175;:220;;;;-1:-1:-1;;;;;;21492:23:0;;;;;;:19;:23;;;;;;;;21491:24;21295:220;21273:1235;;;21554:20;;;;21550:943;;;21643:15;;-1:-1:-1;;;;;21629:30:0;;;21643:15;;21629:30;;;;:62;;-1:-1:-1;21677:13:0;;-1:-1:-1;;;;;21663:28:0;;;21677:13;;21663:28;;21629:62;21599:875;;;21855:16;21870:1;21855:12;:16;:::i;:::-;21809:9;21780:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;21976:16:0;21991:1;21976:12;:16;:::i;:::-;-1:-1:-1;;;;;21908:32:0;;;;;;:28;:32;;;;;;:84;21780:212;21742:339;;;;-1:-1:-1;;;21742:339:0;;15406:2:1;21742:339:0;;;15388:21:1;15445:2;15425:18;;;15418:30;15484:31;15464:18;;;15457:59;15533:18;;21742:339:0;15204:353:1;21742:339:0;22137:9;22108:39;;;;:28;:39;;;;;;22150:12;22108:54;;;;-1:-1:-1;;;;;22189:32:0;;;;;;:47;21599:875;;;-1:-1:-1;;;;;22271:13:0;;;;;;:7;:13;;;;;;;;22270:14;:29;;;;-1:-1:-1;22289:10:0;;-1:-1:-1;;;22289:10:0;;;;22288:11;22270:29;22266:208;;;22383:7;;-1:-1:-1;;;;;22366:14:0;;;;;;:8;:14;;;;;;:24;22328:122;;;;-1:-1:-1;;;22328:122:0;;10886:2:1;22328:122:0;;;10868:21:1;-1:-1:-1;10905:18:1;;;10898:29;10944:18;;22328:122:0;10684:284:1;22328:122:0;-1:-1:-1;;;;;22528:13:0;;;;;;:7;:13;;;;;;;;:38;;;;-1:-1:-1;;;;;;22546:20:0;;;;;;:16;:20;;;;;;;;22545:21;22528:38;22524:945;;;22627:12;;22617:6;:22;;22587:136;;;;-1:-1:-1;;;22587:136:0;;15764:2:1;22587:136:0;;;15746:21:1;15803:2;15783:18;;;15776:30;15842:34;15822:18;;;15815:62;-1:-1:-1;;;15893:18:1;;;15886:38;15941:19;;22587:136:0;15562:404:1;22587:136:0;22798:15;;22781:13;22791:2;22781:9;:13::i;:::-;22772:22;;:6;:22;:::i;:::-;:41;;22742:139;;;;-1:-1:-1;;;22742:139:0;;16173:2:1;22742:139:0;;;16155:21:1;16212:2;16192:18;;;16185:30;16251:26;16231:18;;;16224:54;16295:18;;22742:139:0;15971:348:1;22742:139:0;22524:945;;;-1:-1:-1;;;;;22925:11:0;;;;;;:7;:11;;;;;;;;:38;;;;-1:-1:-1;;;;;;22941:22:0;;;;;;:16;:22;;;;;;;;22940:23;22925:38;22903:566;;;23038:13;;23028:6;:23;;22998:139;;;;-1:-1:-1;;;22998:139:0;;16526:2:1;22998:139:0;;;16508:21:1;16565:2;16545:18;;;16538:30;16604:34;16584:18;;;16577:62;-1:-1:-1;;;16655:18:1;;;16648:40;16705:19;;22998:139:0;16324:406:1;22903:566:0;-1:-1:-1;;;;;23164:20:0;;;;;;:16;:20;;;;;;;;23159:310;;23261:15;;23244:13;23254:2;23244:9;:13::i;23159:310::-;23371:10;;-1:-1:-1;;;23371:10:0;;;;23370:11;:37;;;;-1:-1:-1;;;;;;23385:22:0;;;;;;:16;:22;;;;;;;;23370:37;23366:103;;;23438:15;23428:7;:25;23366:103;23492:28;23523:24;23541:4;23523:9;:24::i;:::-;23599:18;;23492:55;;-1:-1:-1;23575:42:0;;;;;;;23648:35;;-1:-1:-1;23672:11:0;;;;;;;23648:35;:63;;;;-1:-1:-1;23701:10:0;;-1:-1:-1;;;23701:10:0;;;;23700:11;23648:63;:94;;;;-1:-1:-1;;;;;;23729:13:0;;;;;;:7;:13;;;;;;;;23728:14;23648:94;:137;;;;-1:-1:-1;;;;;;23760:25:0;;;;;;:19;:25;;;;;;;;23759:26;23648:137;:178;;;;-1:-1:-1;;;;;;23803:23:0;;;;;;:19;:23;;;;;;;;23802:24;23648:178;23630:310;;;23853:10;:17;;-1:-1:-1;;;;23853:17:0;-1:-1:-1;;;23853:17:0;;;23885:10;:8;:10::i;:::-;23910;:18;;-1:-1:-1;;;;23910:18:0;;;23630:310;-1:-1:-1;;;;;23988:25:0;;23952:12;23988:25;;;:19;:25;;;;;;23967:4;;23988:25;;;:52;;-1:-1:-1;;;;;;24017:23:0;;;;;;:19;:23;;;;;;;;23988:52;23984:100;;;-1:-1:-1;24067:5:0;23984:100;-1:-1:-1;;;;;24098:12:0;;;;;;:8;:12;;;;;;:17;:34;;;;-1:-1:-1;;;;;;24119:13:0;;;;;;:7;:13;;;;;;;;24098:34;24094:162;;;24153:22;24171:2;24153:9;:22::i;:::-;24179:1;24153:27;24149:96;;-1:-1:-1;;;;;24199:12:0;;;;;;:8;:12;;;;;24214:15;24199:30;;24149:96;24268:12;24301:7;24297:1804;;;20404:14;;20389:12;:29;24347:55;;;;-1:-1:-1;;;;;;24389:13:0;;;;;;:7;:13;;;;;;;;24347:55;:88;;;;-1:-1:-1;;;;;;24424:11:0;;;;;;:7;:11;;;;;;;;24423:12;24347:88;:125;;;;;24471:1;24456:12;;:16;24347:125;24325:1631;;;-1:-1:-1;;;;;24512:19:0;;;;;;:15;:19;;;;;;;;24507:186;;-1:-1:-1;;;;;24556:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;24556:26:0;24578:4;24556:26;;;;;;24605:10;:15;;24578:4;;24605:10;;:15;;24578:4;;24605:15;:::i;:::-;;;;-1:-1:-1;;24648:25:0;;-1:-1:-1;;;;;1402:32:1;;1384:51;;24648:25:0;;1372:2:1;1357:18;24648:25:0;;;;;;;24507:186;24736:3;24721:11;:6;24730:2;24721:11;:::i;:::-;24720:19;;;;:::i;:::-;24713:26;;24807:12;;24788:15;;24781:4;:22;;;;:::i;:::-;24780:39;;;;:::i;:::-;24758:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24887:12:0;;24868:15;;24861:22;;:4;:22;:::i;:::-;24860:39;;;;:::i;:::-;24838:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24955:12:0;;24942:9;;24935:16;;:4;:16;:::i;:::-;24934:33;;;;:::i;:::-;24918:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;25025:12:0;;25011:10;;25004:17;;:4;:17;:::i;:::-;25003:34;;;;:::i;:::-;24986:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;24325:1631:0;;-1:-1:-1;24325:1631:0;;-1:-1:-1;;;;;25097:11:0;;;;;;:7;:11;;;;;;;;:32;;;;;25128:1;25112:13;;:17;25097:32;25093:863;;;25184:3;25167:13;;25158:6;:22;;;;:::i;:::-;25157:30;;;;:::i;:::-;25150:37;;25256:13;;25236:16;;25229:4;:23;;;;:::i;:::-;25228:41;;;;:::i;:::-;25206:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25338:13:0;;25318:16;;25311:23;;:4;:23;:::i;:::-;25310:41;;;;:::i;:::-;25288:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25408:13:0;;25394:10;;25387:17;;:4;:17;:::i;:::-;25386:35;;;;:::i;:::-;25370:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;25480:13:0;;25465:11;;25458:18;;:4;:18;:::i;25093:863::-;-1:-1:-1;;;;;25552:13:0;;;;;;:7;:13;;;;;;;;:33;;;;;25584:1;25569:12;;:16;25552:33;25548:408;;;25639:3;25623:12;;25614:6;:21;;;;:::i;:::-;25613:29;;;;:::i;:::-;25606:36;;25710:12;;25691:15;;25684:4;:22;;;;:::i;:::-;25683:39;;;;:::i;:::-;25661:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25790:12:0;;25771:15;;25764:22;;:4;:22;:::i;:::-;25763:39;;;;:::i;:::-;25741:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25858:12:0;;25845:9;;25838:16;;:4;:16;:::i;:::-;25837:33;;;;:::i;:::-;25821:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;25928:12:0;;25914:10;;25907:17;;:4;:17;:::i;:::-;25906:34;;;;:::i;:::-;25889:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;25548:408:0;25974:8;;25970:91;;26003:42;26019:4;26033;26040;26003:15;:42::i;:::-;26075:14;26085:4;26075:14;;:::i;:::-;;;24297:1804;26113:33;26129:4;26135:2;26139:6;26113:15;:33::i;:::-;20547:5607;;;;20434:5720;;;:::o;17990:222::-;-1:-1:-1;;;;;18073:13:0;;;;;;:7;:13;;;;;:21;;-1:-1:-1;;18073:21:0;;;;;;;18107:39;18073:13;:21;18107:26;:39::i;13756:1753::-;13946:10;13890:4;13988:27;;;:19;:27;;;;;;13890:4;;;;13988:27;;;14028:1474;;14083:1;14067:13;;:17;:62;;;;;14116:13;;14088:24;14106:4;14088:9;:24::i;:::-;:41;;14067:62;14063:135;;;14150:32;14156:10;14168:13;;14150:5;:32::i;:::-;14230:1;14214:13;:17;;;14255:4;;-1:-1:-1;14294:24:0;14312:4;14294:9;:24::i;:::-;14276:42;;14335:23;14437:12;;14399:18;;14361;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;14335:114;;14480:18;;14501:2;14480:23;;;;:::i;:::-;14470:7;:33;14466:107;;;14534:18;;:23;;14555:2;14534:23;:::i;:::-;14524:33;;14466:107;14593:12;;;:36;;-1:-1:-1;14609:20:0;;14593:36;14589:89;;;14657:5;14650:12;;;;;;;;;14589:89;14701:6;14694:13;;;;;;;;;14028:1474;14771:1;14744:24;14762:4;14744:9;:24::i;:::-;:28;14740:303;;;14797:11;14812:1;14797:16;14793:235;;14838:7;:19;;;14889:5;;-1:-1:-1;14793:235:0;;;14943:28;14949:8;14959:11;14943:5;:28::i;:::-;15003:5;14994:14;;14793:235;15059:15;15077:24;15095:4;15077:9;:24::i;:::-;15059:42;;15118:23;15220:12;;15182:18;;15144;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;15118:114;-1:-1:-1;15253:12:0;;;:36;;-1:-1:-1;15269:20:0;;15253:36;15249:89;;;15317:5;15310:12;;;;;;;;;15249:89;15368:18;;:23;;15389:2;15368:23;:::i;:::-;15358:7;:33;15354:107;;;15422:18;;:23;;15443:2;15422:23;:::i;:::-;-1:-1:-1;15484:6:0;;-1:-1:-1;15477:13:0;;-1:-1:-1;;;;15477:13:0;26815:1567;26874:1;26858:13;;:17;:62;;;;;26907:13;;26879:24;26897:4;26879:9;:24::i;:::-;:41;;26858:62;26854:130;;;26937:35;26951:4;26958:13;;26937:5;:35::i;:::-;27010:1;26994:13;:17;;;27048:24;27066:4;27048:9;:24::i;:::-;27022:50;;27083:25;27179:12;;27145:18;;27111;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;27083:108;-1:-1:-1;27208:20:0;;;:46;;-1:-1:-1;27232:22:0;;27208:46;27204:85;;;27271:7;;26815:1567::o;27204:85::-;27323:18;;:22;;27344:1;27323:22;:::i;:::-;27305:15;:40;27301:113;;;27380:18;;:22;;27401:1;27380:22;:::i;:::-;27362:40;;27301:113;27426:23;27526:1;27506:17;27471:18;;27453:15;:36;;;;:::i;:::-;27452:71;;;;:::i;:::-;:75;;;;:::i;:::-;27426:101;-1:-1:-1;27540:51:0;27557:33;27426:101;27557:15;:33;:::i;:::-;27540:16;:51::i;:::-;27801:18;;27625:21;;;;27604:18;;27801:22;;27822:1;;27801:22;:::i;:::-;27780:44;;:17;:44;:::i;:::-;27744:18;;27731:31;;:10;:31;:::i;:::-;27730:95;;;;:::i;:::-;27704:121;;27836:17;27942:1;27921:18;;:22;;;;:::i;:::-;27900:44;;:17;:44;:::i;:::-;27870:12;;27857:25;;:10;:25;:::i;:::-;27856:89;;;;:::i;:::-;27836:109;-1:-1:-1;27975:27:0;27836:109;27975:15;:27;:::i;:::-;27956:46;;;;:::i;:::-;28034:1;28013:18;:22;;;28046:18;:22;;;28079:12;:16;;;28106:13;:17;27956:46;-1:-1:-1;28140:19:0;;;;;:42;;;28181:1;28163:15;:19;28140:42;28136:121;;;28199:46;28212:15;28229;28199:12;:46::i;:::-;28277:9;;28269:38;;-1:-1:-1;;;;;28277:9:0;;;;28269:38;;;;;28297:9;;28277;28269:38;28277:9;28269:38;28297:9;28277;28269:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28326:15:0;;28318:56;;-1:-1:-1;;;;;28326:15:0;;;;28352:21;28318:56;;;;;28326:15;28318:56;28326:15;28318:56;28352:21;28326:15;28318:56;;;;;;;;;;;;;;;;;;;;;26843:1539;;;;;;;26815:1567::o;5835:651::-;-1:-1:-1;;;;;5975:20:0;;5967:70;;;;-1:-1:-1;;;5967:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6056:23:0;;6048:71;;;;-1:-1:-1;;;6048:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6156:17:0;;6132:21;6156:17;;;;;;;;;;;6206:23;;;;6184:111;;;;-1:-1:-1;;;6184:111:0;;16937:2:1;6184:111:0;;;16919:21:1;16976:2;16956:18;;;16949:30;17015:34;16995:18;;;16988:62;-1:-1:-1;;;17066:18:1;;;17059:36;17112:19;;6184:111:0;16735:402:1;6184:111:0;-1:-1:-1;;;;;6331:17:0;;;:9;:17;;;;;;;;;;;6351:22;;;6331:42;;6395:20;;;;;;;;:30;;6367:6;;6331:9;6395:30;;6367:6;;6395:30;:::i;:::-;;;;;;;;6460:9;-1:-1:-1;;;;;6443:35:0;6452:6;-1:-1:-1;;;;;6443:35:0;;6471:6;6443:35;;;;1592:25:1;;1580:2;1565:18;;1446:177;6443:35:0;;;;;;;;5956:530;5835:651;;;:::o;17429:217::-;-1:-1:-1;;;;;17542:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;17542:37:0;;;;;;;;;;17595:43;;17310:51:1;;;17377:18;;;17370:50;17595:43:0;;17283:18:1;17595:43:0;;;;;;;17429:217;;:::o;6818:382::-;-1:-1:-1;;;;;6902:21:0;;6894:34;;;;-1:-1:-1;;;6894:34:0;;10886:2:1;6894:34:0;;;10868:21:1;-1:-1:-1;10905:18:1;;;10898:29;10944:18;;6894:34:0;10684:284:1;6894:34:0;-1:-1:-1;;;;;6957:18:0;;6939:15;6957:18;;;;;;;;;;;6994:17;;;;6986:30;;;;-1:-1:-1;;;6986:30:0;;10886:2:1;6986:30:0;;;10868:21:1;-1:-1:-1;10905:18:1;;;10898:29;10944:18;;6986:30:0;10684:284:1;6986:30:0;-1:-1:-1;;;;;7052:18:0;;:9;:18;;;;;;;;;;;7073:16;;;7052:37;;7104:12;:22;;;;;;;7155:37;1592:25:1;;;7052:9:0;;:18;7155:37;;1565:18:1;7155:37:0;1446:177:1;28390:472:0;28480:16;;;28494:1;28480:16;;;;;;;;28456:21;;28480:16;;;;;;;;;;-1:-1:-1;28480:16:0;28456:40;;28525:4;28507;28512:1;28507:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28507:23:0;;;:7;;;;;;;;;;:23;;;;28551:15;;:22;;;-1:-1:-1;;;28551:22:0;;;;:15;;;;;:20;;:22;;;;;28507:7;;28551:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28541:4;28546:1;28541:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28541:32:0;;;:7;;;;;;;;;:32;28616:15;;28584:62;;28601:4;;28616:15;28634:11;28584:8;:62::i;:::-;28657:15;;:197;;-1:-1:-1;;;28657:197:0;;-1:-1:-1;;;;;28657:15:0;;;;:66;;:197;;28738:11;;28657:15;;28781:4;;28808;;28828:15;;28657:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28445:417;28390:472;:::o;13380:368::-;13493:15;;13461:62;;13478:4;;-1:-1:-1;;;;;13493:15:0;13511:11;13461:8;:62::i;:::-;13534:15;;:206;;-1:-1:-1;;;13534:206:0;;13606:4;13534:206;;;19277:34:1;19327:18;;;19320:34;;;13534:15:0;19370:18:1;;;19363:34;;;19413:18;;;19406:34;13692:6:0;19456:19:1;;;19449:44;13714:15:0;19509:19:1;;;19502:35;-1:-1:-1;;;;;13534:15:0;;;;:31;;13573:9;;19211:19:1;;13534:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13380:368;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1628:456::-;1705:6;1713;1721;1774:2;1762:9;1753:7;1749:23;1745:32;1742:52;;;1790:1;1787;1780:12;1742:52;1829:9;1816:23;1848:31;1873:5;1848:31;:::i;:::-;1898:5;-1:-1:-1;1955:2:1;1940:18;;1927:32;1968:33;1927:32;1968:33;:::i;:::-;1628:456;;2020:7;;-1:-1:-1;;;2074:2:1;2059:18;;;;2046:32;;1628:456::o;2089:180::-;2148:6;2201:2;2189:9;2180:7;2176:23;2172:32;2169:52;;;2217:1;2214;2207:12;2169:52;-1:-1:-1;2240:23:1;;2089:180;-1:-1:-1;2089:180:1:o;2274:385::-;2360:6;2368;2376;2384;2437:3;2425:9;2416:7;2412:23;2408:33;2405:53;;;2454:1;2451;2444:12;2405:53;-1:-1:-1;;2477:23:1;;;2547:2;2532:18;;2519:32;;-1:-1:-1;2598:2:1;2583:18;;2570:32;;2649:2;2634:18;2621:32;;-1:-1:-1;2274:385:1;-1:-1:-1;2274:385:1:o;3061:247::-;3120:6;3173:2;3161:9;3152:7;3148:23;3144:32;3141:52;;;3189:1;3186;3179:12;3141:52;3228:9;3215:23;3247:31;3272:5;3247:31;:::i;3313:416::-;3378:6;3386;3439:2;3427:9;3418:7;3414:23;3410:32;3407:52;;;3455:1;3452;3445:12;3407:52;3494:9;3481:23;3513:31;3538:5;3513:31;:::i;:::-;3563:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;3662:15;;3655:23;3643:36;;3633:64;;3693:1;3690;3683:12;3633:64;3716:7;3706:17;;;3313:416;;;;;:::o;3734:383::-;3811:6;3819;3827;3880:2;3868:9;3859:7;3855:23;3851:32;3848:52;;;3896:1;3893;3886:12;3848:52;3935:9;3922:23;3954:31;3979:5;3954:31;:::i;:::-;4004:5;4056:2;4041:18;;4028:32;;-1:-1:-1;4107:2:1;4092:18;;;4079:32;;3734:383;-1:-1:-1;;;3734:383:1:o;4122:388::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:31;4350:5;4325:31;:::i;:::-;4375:5;-1:-1:-1;4432:2:1;4417:18;;4404:32;4445:33;4404:32;4445:33;:::i;4515:380::-;4594:1;4590:12;;;;4637;;;4658:61;;4712:4;4704:6;4700:17;4690:27;;4658:61;4765:2;4757:6;4754:14;4734:18;4731:38;4728:161;;4811:10;4806:3;4802:20;4799:1;4792:31;4846:4;4843:1;4836:15;4874:4;4871:1;4864:15;4728:161;;4515:380;;;:::o;5309:356::-;5511:2;5493:21;;;5530:18;;;5523:30;5589:34;5584:2;5569:18;;5562:62;5656:2;5641:18;;5309:356::o;5670:127::-;5731:10;5726:3;5722:20;5719:1;5712:31;5762:4;5759:1;5752:15;5786:4;5783:1;5776:15;5802:168;5875:9;;;5906;;5923:15;;;5917:22;;5903:37;5893:71;;5944:18;;:::i;5975:217::-;6015:1;6041;6031:132;;6085:10;6080:3;6076:20;6073:1;6066:31;6120:4;6117:1;6110:15;6148:4;6145:1;6138:15;6031:132;-1:-1:-1;6177:9:1;;5975:217::o;6607:125::-;6672:9;;;6693:10;;;6690:36;;;6706:18;;:::i;13148:401::-;13350:2;13332:21;;;13389:2;13369:18;;;13362:30;13428:34;13423:2;13408:18;;13401:62;-1:-1:-1;;;13494:2:1;13479:18;;13472:35;13539:3;13524:19;;13148:401::o;13554:399::-;13756:2;13738:21;;;13795:2;13775:18;;;13768:30;13834:34;13829:2;13814:18;;13807:62;-1:-1:-1;;;13900:2:1;13885:18;;13878:33;13943:3;13928:19;;13554:399::o;15071:128::-;15138:9;;;15159:11;;;15156:37;;;15173:18;;:::i;17563:127::-;17624:10;17619:3;17615:20;17612:1;17605:31;17655:4;17652:1;17645:15;17679:4;17676:1;17669:15;17695:251;17765:6;17818:2;17806:9;17797:7;17793:23;17789:32;17786:52;;;17834:1;17831;17824:12;17786:52;17866:9;17860:16;17885:31;17910:5;17885:31;:::i;17951:980::-;18213:4;18261:3;18250:9;18246:19;18292:6;18281:9;18274:25;18318:2;18356:6;18351:2;18340:9;18336:18;18329:34;18399:3;18394:2;18383:9;18379:18;18372:31;18423:6;18458;18452:13;18489:6;18481;18474:22;18527:3;18516:9;18512:19;18505:26;;18566:2;18558:6;18554:15;18540:29;;18587:1;18597:195;18611:6;18608:1;18605:13;18597:195;;;18676:13;;-1:-1:-1;;;;;18672:39:1;18660:52;;18767:15;;;;18732:12;;;;18708:1;18626:9;18597:195;;;-1:-1:-1;;;;;;;18848:32:1;;;;18843:2;18828:18;;18821:60;-1:-1:-1;;;18912:3:1;18897:19;18890:35;18809:3;17951:980;-1:-1:-1;;;17951:980:1:o;19548:306::-;19636:6;19644;19652;19705:2;19693:9;19684:7;19680:23;19676:32;19673:52;;;19721:1;19718;19711:12;19673:52;19750:9;19744:16;19734:26;;19800:2;19789:9;19785:18;19779:25;19769:35;;19844:2;19833:9;19829:18;19823:25;19813:35;;19548:306;;;;;:::o

Swarm Source

ipfs://6bd3ade8564a4393adb8391189def19779e4cb854b7fa7ef0fad3fd08fe0b745
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.