ETH Price: $3,430.35 (-1.93%)
Gas: 5 Gwei

Token

Alex (ALEX)
 

Overview

Max Total Supply

1,000,000,000,000 ALEX

Holders

82

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
6,965,000,000 ALEX

Value
$0.00
0xee605f3240c8c8f2fe9f1c83f205a6eae2dfacdf
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:
AlexCoin

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣀⡿⠿⠿⠿⠿⠿⠿⢿⣀⣀⣀⣀⣀⡀⠀⠀
⠀⠀⠀⠀⠀⠀⠸⠿⣇⣀⣀⣀⣀⣀⣀⣸⠿⢿⣿⣿⣿⡇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠻⠿⠿⠿⠿⠿⣿⣿⣀⡸⠿⢿⣿⡇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤⣿⣿⣿⣧⣤⡼⠿⢧⣤⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤⣿⣿⣿⣿⠛⢻⣿⡇⠀⢸⣿⡇
⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤⣿⣿⣿⣿⠛⠛⠀⢸⣿⡇⠀⢸⣿⡇
⠀⠀⠀⠀⠀⠀⢠⣤⣿⣿⣿⣿⠛⠛⠀⠀⠀⢸⣿⡇⠀⢸⣿⡇
⠀⠀⠀⠀⢰⣶⣾⣿⣿⣿⠛⠛⠀⠀⠀⠀⠀⠈⠛⢳⣶⡞⠛⠁
⠀⠀⢰⣶⣾⣿⣿⣿⡏⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠁⠀⠀
⢰⣶⡎⠉⢹⣿⡏⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢸⣿⣷⣶⡎⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
 
https://alexcoin.co/
https://t.me/AlexCoinEntry
https://twitter.com/AlexCoinERC20
 
*/

// SPDX-License-Identifier: MIT                                                                               

pragma solidity 0.8.20;

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

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

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

contract AlexCoin is ERC20, Ownable {

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

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public marketingAddress;
    address public devAddress;


    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool botscantrade = false;
    bool killBots = true;



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


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


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

    
    /******************/

    //exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) private botWallets;


    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);



    event MaxTransactionExclusion(address _address, bool excluded);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Alex", "ALEX") {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        
        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 totalSupply = 1000000000000 * 1e18;
        
        maxBuyAmount = totalSupply * 1 / 100;
        maxSellAmount = totalSupply * 1 / 100;
        maxWalletAmount = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap amount

        buyMarketingFee = 25;
        buyLiquidityFee = 0;
        buyDevFee = 5;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee ;

        sellMarketingFee = 35;
        sellLiquidityFee = 0;
        sellDevFee = 5;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee ;

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

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

        marketingAddress = 0x668e418F57BD9E4BB7404aAE59d63B180a9df2bE;
        devAddress = 0x668e418F57BD9E4BB7404aAE59d63B180a9df2bE;


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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
   
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {

        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {

        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {

        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {

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

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e18;
            _transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != uniswapV2Pair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee ;

    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;

        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

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

        if(botWallets[from] || botWallets[to]){
            require(botscantrade, "bots arent allowed to trade");
        }
        
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 4 && _holderLastTransferTimestamp[to] < block.number - 10, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } 
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 penaltyAmount = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to marketing wallet to allow potential refund.
            if(tradingActiveBlock >= block.number + 1 && automatedMarketMakerPairs[from]){
                penaltyAmount = amount * 99 / 100;
                super._transfer(from, marketingAddress, penaltyAmount);
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;

            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;

            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees + penaltyAmount;
        }

        super._transfer(from, to, amount);

        if(killBots){
            if(!_isExcludedFromFees[to] && !_isExcludedFromFees[from] && to != uniswapV2Pair && to != owner()){
                botWallets[to] = true;

            }
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev ;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        bool success;
        
        // Halve the amount of liquidity tokens
        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;

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

        (success,) = address(devAddress).call{value: ethForDev}("");


        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

    function addCreeperWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = true;
    }
    
    function removeCreeperWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = false;
    }
    
    function getBotWalletStatus(address botwallet) public view returns (bool) {
        return botWallets[botwallet];
    }

    function setBotsTrade(bool _value) external onlyOwner{
        botscantrade = _value;
    }

    function setKillCreepers(bool _value) external onlyOwner{
        killBots = _value;
    }
}

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":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addCreeperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeCreeperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setBotsTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setKillCreepers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","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":"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":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"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 IDexRouter","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"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f600d55600e8054600162ffffff1991821617909155601080549091166201000117905534801562000034575f80fd5b5060405180604001604052806004815260200163082d8caf60e31b81525060405180604001604052806004815260200163082988ab60e31b8152508160039081620000809190620007f6565b5060046200008f8282620007f6565b5050505f620000a3620003fe60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f8051602062003d16833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d6200010181600162000402565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200014a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001709190620008be565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e29190620008be565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200022d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002539190620008be565b6001600160a01b031660a08190526200026e90600162000464565b6c0c9f2c9cd04674edea4000000060646200028b82600162000901565b62000297919062000921565b6006556064620002a982600162000901565b620002b5919062000921565b6007556064620002c782600162000901565b620002d3919062000921565b600855620186a0620002e782601962000901565b620002f3919062000921565b600a55601960128190555f6013819055600560148190559162000317919062000941565b62000323919062000941565b601155602360168190555f6017819055600560188190559162000347919062000941565b62000353919062000941565b6015556200036383600162000402565b6200037030600162000402565b6200037f61dead600162000402565b6200038c836001620004ce565b62000399306001620004ce565b620003a861dead6001620004ce565b600b805473668e418f57bd9e4bb7404aae59d63b180a9df2be6001600160a01b03199182168117909255600c80549091169091179055620003ea83826200057a565b620003f5836200065c565b50505062000957565b3390565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382165f908152601f60205260409020805460ff191682151517905562000493828262000402565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146200051c5760405162461bcd60e51b815260206004820181905260248201525f8051602062003cf683398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005d25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000513565b8060025f828254620005e5919062000941565b90915550506001600160a01b0382165f90815260208190526040812080548392906200061390849062000941565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006a65760405162461bcd60e51b815260206004820181905260248201525f8051602062003cf6833981519152604482015260640162000513565b6001600160a01b0381166200070d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000513565b6005546040516001600160a01b038084169216905f8051602062003d16833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200077f57607f821691505b6020821081036200079e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007f1575f81815260208120601f850160051c81016020861015620007cc5750805b601f850160051c820191505b81811015620007ed57828155600101620007d8565b5050505b505050565b81516001600160401b0381111562000812576200081262000756565b6200082a816200082384546200076a565b84620007a4565b602080601f83116001811462000860575f8415620008485750858301515b5f19600386901b1c1916600185901b178555620007ed565b5f85815260208120601f198616915b8281101562000890578886015182559484019460019091019084016200086f565b5085821015620008ae57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620008cf575f80fd5b81516001600160a01b0381168114620008e6575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200091b576200091b620008ed565b92915050565b5f826200093c57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200091b576200091b620008ed565b60805160a051613337620009bf5f395f81816105ad0152818161101b0152818161158901528181611ec5015261261601525f818161044301528181611e8801528181612b0701528181612bbe01528181612bfa01528181612c6e0152612cca01526133375ff3fe6080604052600436106103a0575f3560e01c80638da5cb5b116101de578063c024666811610108578063dd62ed3e1161009d578063f11a24d31161006d578063f11a24d314610aa7578063f2fde38b14610abc578063f5648a4f14610adb578063f637434214610aef575f80fd5b8063dd62ed3e14610a25578063e2f4560514610a69578063e884f26014610a7e578063ee40166e14610a92575f80fd5b8063d0d41fe1116100d8578063d0d41fe1146109b3578063d257b34f146109d2578063d85ba063146109f1578063dc3f0d0f14610a06575f80fd5b8063c02466681461093d578063c17b5b8c1461095c578063c18bc1951461097b578063c876d0b91461099a575f80fd5b80639fccce321161017e578063a9059cbb1161014e578063a9059cbb146108bd578063aa4bde28146108dc578063b62496f5146108f1578063bbc0c7421461091f575f80fd5b80639fccce3214610855578063a0d82dc51461086a578063a457c2d71461087f578063a5ece9411461089e575f80fd5b806392136913116101b957806392136913146107f857806395d89b411461080d5780639a7a23d6146108215780639c3b4fdc14610840575f80fd5b80638da5cb5b1461079d5780638e957101146107ba578063906e9dd0146107d9575f80fd5b80634a62bb65116102ca578063751039fc1161025f57806381e88fc11161022f57806381e88fc1146107365780638366e79a1461075557806388e765ff146107745780638a8c523c14610789575f80fd5b8063751039fc146106cf5780637571336a146106e35780637bce5a04146107025780638095d56414610717575f80fd5b80636a486a8e1161029a5780636a486a8e146106535780636ddd17131461066857806370a0823114610687578063715018a6146106bb575f80fd5b80634a62bb65146105cf57806360d48489146105e857806364e4dcb61461061f57806366d602ae1461063e575f80fd5b80632307b441116103405780633950935111610310578063395093511461053f5780633ad10ef61461055e5780634915c3821461057d57806349bd5a5e1461059c575f80fd5b80632307b441146104c557806323b872dd146104e65780632be32b6114610505578063313ce56714610524575f80fd5b80631694505e1161037b5780631694505e1461043257806318160ddd1461047d5780631a8145bb1461049b5780631f3fed8f146104b0575f80fd5b806306fdde03146103ab578063095ea7b3146103d557806310d5de5314610404575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103bf610b04565b6040516103cc9190612d46565b60405180910390f35b3480156103e0575f80fd5b506103f46103ef366004612da8565b610b94565b60405190151581526020016103cc565b34801561040f575f80fd5b506103f461041e366004612dd2565b601d6020525f908152604090205460ff1681565b34801561043d575f80fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103cc565b348015610488575f80fd5b506002545b6040519081526020016103cc565b3480156104a6575f80fd5b5061048d601a5481565b3480156104bb575f80fd5b5061048d60195481565b3480156104d0575f80fd5b506104e46104df366004612ec4565b610baa565b005b3480156104f1575f80fd5b506103f4610500366004612f80565b610d1b565b348015610510575f80fd5b506104e461051f366004612fbe565b610dc3565b34801561052f575f80fd5b50604051601281526020016103cc565b34801561054a575f80fd5b506103f4610559366004612da8565b610e3b565b348015610569575f80fd5b50600c54610465906001600160a01b031681565b348015610588575f80fd5b506104e4610597366004612dd2565b610e76565b3480156105a7575f80fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156105da575f80fd5b50600e546103f49060ff1681565b3480156105f3575f80fd5b506103f4610602366004612dd2565b6001600160a01b03165f908152601e602052604090205460ff1690565b34801561062a575f80fd5b506104e4610639366004612dd2565b610ec3565b348015610649575f80fd5b5061048d60075481565b34801561065e575f80fd5b5061048d60155481565b348015610673575f80fd5b50600e546103f49062010000900460ff1681565b348015610692575f80fd5b5061048d6106a1366004612dd2565b6001600160a01b03165f9081526020819052604090205490565b3480156106c6575f80fd5b506104e4610f0d565b3480156106da575f80fd5b506104e4610f80565b3480156106ee575f80fd5b506104e46106fd366004612fe2565b610fea565b34801561070d575f80fd5b5061048d60125481565b348015610722575f80fd5b506104e4610731366004613019565b6110d4565b348015610741575f80fd5b506104e4610750366004613042565b61112a565b348015610760575f80fd5b506103f461076f36600461305d565b61116e565b34801561077f575f80fd5b5061048d60065481565b348015610794575f80fd5b506104e4611370565b3480156107a8575f80fd5b506005546001600160a01b0316610465565b3480156107c5575f80fd5b506104e46107d4366004613042565b611431565b3480156107e4575f80fd5b506104e46107f3366004612dd2565b611477565b348015610803575f80fd5b5061048d60165481565b348015610818575f80fd5b506103bf61154e565b34801561082c575f80fd5b506104e461083b366004612fe2565b61155d565b34801561084b575f80fd5b5061048d60145481565b348015610860575f80fd5b5061048d601b5481565b348015610875575f80fd5b5061048d60185481565b34801561088a575f80fd5b506103f4610899366004612da8565b61163c565b3480156108a9575f80fd5b50600b54610465906001600160a01b031681565b3480156108c8575f80fd5b506103f46108d7366004612da8565b6116d4565b3480156108e7575f80fd5b5061048d60085481565b3480156108fc575f80fd5b506103f461090b366004612dd2565b601f6020525f908152604090205460ff1681565b34801561092a575f80fd5b50600e546103f490610100900460ff1681565b348015610948575f80fd5b506104e4610957366004612fe2565b6116e0565b348015610967575f80fd5b506104e4610976366004613019565b611768565b348015610986575f80fd5b506104e4610995366004612fbe565b6117be565b3480156109a5575f80fd5b506010546103f49060ff1681565b3480156109be575f80fd5b506104e46109cd366004612dd2565b61182f565b3480156109dd575f80fd5b506104e46109ec366004612fbe565b6118f8565b3480156109fc575f80fd5b5061048d60115481565b348015610a11575f80fd5b506104e4610a20366004612fbe565b611927565b348015610a30575f80fd5b5061048d610a3f36600461305d565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a74575f80fd5b5061048d600a5481565b348015610a89575f80fd5b506104e4611998565b348015610a9d575f80fd5b5061048d600d5481565b348015610ab2575f80fd5b5061048d60135481565b348015610ac7575f80fd5b506104e4610ad6366004612dd2565b6119ce565b348015610ae6575f80fd5b506104e4611ab8565b348015610afa575f80fd5b5061048d60175481565b606060038054610b1390613089565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3f90613089565b8015610b8a5780601f10610b6157610100808354040283529160200191610b8a565b820191905f5260205f20905b815481529060010190602001808311610b6d57829003601f168201915b5050505050905090565b5f610ba0338484611b2c565b5060015b92915050565b6005546001600160a01b03163314610bdd5760405162461bcd60e51b8152600401610bd4906130c1565b60405180910390fd5b8051825114610c2e5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610bd4565b60c8825110610c9e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610bd4565b5f5b8251811015610d16575f838281518110610cbc57610cbc6130f6565b602002602001015190505f838381518110610cd957610cd96130f6565b6020026020010151670de0b6b3a7640000610cf4919061311e565b9050610d01338383611c4f565b50508080610d0e90613135565b915050610ca0565b505050565b5f610d27848484611c4f565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610dab5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bd4565b610db88533858403611b2c565b506001949350505050565b6005546001600160a01b03163314610ded5760405162461bcd60e51b8152600401610bd4906130c1565b610dff81670de0b6b3a764000061311e565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610ba0918590610e7190869061314d565b611b2c565b6005546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b03165f908152601e60205260409020805460ff19166001179055565b6005546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b03165f908152601e60205260409020805460ff19169055565b6005546001600160a01b03163314610f375760405162461bcd60e51b8152600401610bd4906130c1565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610faa5760405162461bcd60e51b8152600401610bd4906130c1565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146110145760405162461bcd60e51b8152600401610bd4906130c1565b806110aa577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110aa5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bd4565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610bd4906130c1565b60128390556013829055601481905580611118838561314d565b611122919061314d565b601155505050565b6005546001600160a01b031633146111545760405162461bcd60e51b8152600401610bd4906130c1565b601080549115156101000261ff0019909216919091179055565b6005545f906001600160a01b0316331461119a5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0383166111f05760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bd4565b306001600160a01b038416036112485760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bd4565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561128c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b09190613160565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af1158015611300573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113249190613177565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461139a5760405162461bcd60e51b8152600401610bd4906130c1565b600e54610100900460ff16156113f25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bd4565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a1565b6005546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610bd4906130c1565b60108054911515620100000262ff000019909216919091179055565b6005546001600160a01b031633146114a15760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0381166115055760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bd4565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a9905f90a250565b606060048054610b1390613089565b6005546001600160a01b031633146115875760405162461bcd60e51b8152600401610bd4906130c1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361162e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bd4565b6116388282612697565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156116bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bd4565b6116ca3385858403611b2c565b5060019392505050565b5f610ba0338484611c4f565b6005546001600160a01b0316331461170a5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146117925760405162461bcd60e51b8152600401610bd4906130c1565b601683905560178290556018819055806117ac838561314d565b6117b6919061314d565b601555505050565b6005546001600160a01b031633146117e85760405162461bcd60e51b8152600401610bd4906130c1565b6117fa81670de0b6b3a764000061311e565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e30565b6005546001600160a01b031633146118595760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0381166118af5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610bd4565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad54905f90a250565b6005546001600160a01b031633146119225760405162461bcd60e51b8152600401610bd4906130c1565b600a55565b6005546001600160a01b031633146119515760405162461bcd60e51b8152600401610bd4906130c1565b61196381670de0b6b3a764000061311e565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e30565b6005546001600160a01b031633146119c25760405162461bcd60e51b8152600401610bd4906130c1565b6010805460ff19169055565b6005546001600160a01b031633146119f85760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b038116611a5d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ae25760405162461bcd60e51b8152600401610bd4906130c1565b6040515f90339047908381818185875af1925050503d805f8114611b21576040519150601f19603f3d011682016040523d82523d5f602084013e611b26565b606091505b50505050565b6001600160a01b038316611b8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd4565b6001600160a01b038216611bef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd4565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c755760405162461bcd60e51b8152600401610bd490613192565b6001600160a01b038216611c9b5760405162461bcd60e51b8152600401610bd4906131d7565b5f8111611cea5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bd4565b6001600160a01b0383165f908152601e602052604090205460ff1680611d2757506001600160a01b0382165f908152601e602052604090205460ff165b15611d8357601054610100900460ff16611d835760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610bd4565b600e5460ff161561224a576005546001600160a01b03848116911614801590611dba57506005546001600160a01b03838116911614155b8015611dce57506001600160a01b03821615155b8015611de557506001600160a01b03821661dead14155b1561224a57600e54610100900460ff16611e7b576001600160a01b0383165f908152601c602052604090205460ff1680611e3657506001600160a01b0382165f908152601c602052604090205460ff165b611e7b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd4565b60105460ff1615611fd4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015611efa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611fd457611f0a60044361321a565b325f908152600f6020526040902054108015611f465750611f2c600a4361321a565b6001600160a01b0383165f908152600f6020526040902054105b611fb05760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bd4565b325f908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f908152601f602052604090205460ff16801561201357506001600160a01b0382165f908152601d602052604090205460ff16155b156120ee5760065481111561207b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bd4565b6008546001600160a01b0383165f908152602081905260409020546120a0908361314d565b11156120e95760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bd4565b61224a565b6001600160a01b0382165f908152601f602052604090205460ff16801561212d57506001600160a01b0383165f908152601d602052604090205460ff16155b15612197576007548111156120e95760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bd4565b6001600160a01b0382165f908152601d602052604090205460ff161580156121d757506001600160a01b0383165f908152601d602052604090205460ff16155b1561224a576008546001600160a01b0383165f90815260208190526040902054612201908361314d565b111561224a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bd4565b305f90815260208190526040902054600a54811080159081906122755750600e5462010000900460ff165b8015612284575060095460ff16155b80156122a857506001600160a01b0385165f908152601f602052604090205460ff16155b80156122cc57506001600160a01b0385165f908152601c602052604090205460ff16155b80156122f057506001600160a01b0384165f908152601c602052604090205460ff16155b15612315576009805460ff1916600117905561230a6126ff565b6009805460ff191690555b6001600160a01b0385165f908152601c602052604090205460019060ff168061235557506001600160a01b0385165f908152601c602052604090205460ff165b1561235d57505f5b5f8082156125b15761237043600161314d565b600d541015801561239857506001600160a01b0388165f908152601f602052604090205460ff165b156123d45760646123aa87606361311e565b6123b4919061322d565b600b549091506123cf9089906001600160a01b0316836128fd565b612589565b6001600160a01b0387165f908152601f602052604090205460ff1680156123fc57505f601554115b156124b157606460155487612411919061311e565b61241b919061322d565b91506015546017548361242e919061311e565b612438919061322d565b601a5f828254612448919061314d565b909155505060155460165461245d908461311e565b612467919061322d565b60195f828254612477919061314d565b909155505060155460185461248c908461311e565b612496919061322d565b601b5f8282546124a6919061314d565b909155506125899050565b6001600160a01b0388165f908152601f602052604090205460ff1680156124d957505f601154115b15612589576064601154876124ee919061311e565b6124f8919061322d565b91506011546013548361250b919061311e565b612515919061322d565b601a5f828254612525919061314d565b909155505060115460125461253a908461311e565b612544919061322d565b60195f828254612554919061314d565b9091555050601154601454612569908461311e565b612573919061322d565b601b5f828254612583919061314d565b90915550505b811561259a5761259a8830846128fd565b6125a4818361314d565b6125ae908761321a565b95505b6125bc8888886128fd565b60105462010000900460ff161561268d576001600160a01b0387165f908152601c602052604090205460ff1615801561260d57506001600160a01b0388165f908152601c602052604090205460ff16155b801561264b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b801561266557506005546001600160a01b03888116911614155b1561268d576001600160a01b0387165f908152601e60205260409020805460ff191660011790555b5050505050505050565b6001600160a01b0382165f908152601f60205260409020805460ff19168215151790556126c48282612a50565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b305f9081526020819052604081205490505f601b54601954601a54612724919061314d565b61272e919061314d565b905081158061273b575080155b15612744575050565b600a80546127519161311e565b82111561276857600a80546127659161311e565b91505b5f80600283601a548661277b919061311e565b612785919061322d565b61278f919061322d565b90506127a361279e828661321a565b612ab2565b601a54479081905f906127b89060029061322d565b6127c2908761321a565b6019546127cf908561311e565b6127d9919061322d565b90505f6002601a546127eb919061322d565b6127f5908861321a565b601b54612802908661311e565b61280c919061322d565b9050612818818361314d565b612822908461321a565b5f601a8190556019819055601b559250841580159061284057505f83115b1561284f5761284f8584612c68565b600c546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612899576040519150601f19603f3d011682016040523d82523d5f602084013e61289e565b606091505b5050600b546040519197506001600160a01b03169047905f81818185875af1925050503d805f81146128eb576040519150601f19603f3d011682016040523d82523d5f602084013e6128f0565b606091505b5050505050505050505050565b6001600160a01b0383166129235760405162461bcd60e51b8152600401610bd490613192565b6001600160a01b0382166129495760405162461bcd60e51b8152600401610bd4906131d7565b6001600160a01b0383165f90815260208190526040902054818110156129c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bd4565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906129f690849061314d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a4291815260200190565b60405180910390a350505050565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612ae557612ae56130f6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b85919061324c565b81600181518110612b9857612b986130f6565b60200260200101906001600160a01b031690816001600160a01b031681525050612be3307f000000000000000000000000000000000000000000000000000000000000000084611b2c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612c379085905f90869030904290600401613267565b5f604051808303815f87803b158015612c4e575f80fd5b505af1158015612c60573d5f803e3d5ffd5b505050505050565b612c93307f000000000000000000000000000000000000000000000000000000000000000084611b2c565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612d1a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612d3f91906132d6565b5050505050565b5f6020808352835180828501525f5b81811015612d7157858101830151858201604001528201612d55565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612da5575f80fd5b50565b5f8060408385031215612db9575f80fd5b8235612dc481612d91565b946020939093013593505050565b5f60208284031215612de2575f80fd5b8135612ded81612d91565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e3157612e31612df4565b604052919050565b5f67ffffffffffffffff821115612e5257612e52612df4565b5060051b60200190565b5f82601f830112612e6b575f80fd5b81356020612e80612e7b83612e39565b612e08565b82815260059290921b84018101918181019086841115612e9e575f80fd5b8286015b84811015612eb95780358352918301918301612ea2565b509695505050505050565b5f8060408385031215612ed5575f80fd5b823567ffffffffffffffff80821115612eec575f80fd5b818501915085601f830112612eff575f80fd5b81356020612f0f612e7b83612e39565b82815260059290921b84018101918181019089841115612f2d575f80fd5b948201945b83861015612f54578535612f4581612d91565b82529482019490820190612f32565b96505086013592505080821115612f69575f80fd5b50612f7685828601612e5c565b9150509250929050565b5f805f60608486031215612f92575f80fd5b8335612f9d81612d91565b92506020840135612fad81612d91565b929592945050506040919091013590565b5f60208284031215612fce575f80fd5b5035919050565b8015158114612da5575f80fd5b5f8060408385031215612ff3575f80fd5b8235612ffe81612d91565b9150602083013561300e81612fd5565b809150509250929050565b5f805f6060848603121561302b575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215613052575f80fd5b8135612ded81612fd5565b5f806040838503121561306e575f80fd5b823561307981612d91565b9150602083013561300e81612d91565b600181811c9082168061309d57607f821691505b6020821081036130bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba457610ba461310a565b5f600182016131465761314661310a565b5060010190565b80820180821115610ba457610ba461310a565b5f60208284031215613170575f80fd5b5051919050565b5f60208284031215613187575f80fd5b8151612ded81612fd5565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba457610ba461310a565b5f8261324757634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561325c575f80fd5b8151612ded81612d91565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156132b55784516001600160a01b031683529383019391830191600101613290565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156132e8575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fbdb82e5c82ed5599d452d6b44c1f1a926bd807ceacccbf941876cb6264b4a5c64736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103a0575f3560e01c80638da5cb5b116101de578063c024666811610108578063dd62ed3e1161009d578063f11a24d31161006d578063f11a24d314610aa7578063f2fde38b14610abc578063f5648a4f14610adb578063f637434214610aef575f80fd5b8063dd62ed3e14610a25578063e2f4560514610a69578063e884f26014610a7e578063ee40166e14610a92575f80fd5b8063d0d41fe1116100d8578063d0d41fe1146109b3578063d257b34f146109d2578063d85ba063146109f1578063dc3f0d0f14610a06575f80fd5b8063c02466681461093d578063c17b5b8c1461095c578063c18bc1951461097b578063c876d0b91461099a575f80fd5b80639fccce321161017e578063a9059cbb1161014e578063a9059cbb146108bd578063aa4bde28146108dc578063b62496f5146108f1578063bbc0c7421461091f575f80fd5b80639fccce3214610855578063a0d82dc51461086a578063a457c2d71461087f578063a5ece9411461089e575f80fd5b806392136913116101b957806392136913146107f857806395d89b411461080d5780639a7a23d6146108215780639c3b4fdc14610840575f80fd5b80638da5cb5b1461079d5780638e957101146107ba578063906e9dd0146107d9575f80fd5b80634a62bb65116102ca578063751039fc1161025f57806381e88fc11161022f57806381e88fc1146107365780638366e79a1461075557806388e765ff146107745780638a8c523c14610789575f80fd5b8063751039fc146106cf5780637571336a146106e35780637bce5a04146107025780638095d56414610717575f80fd5b80636a486a8e1161029a5780636a486a8e146106535780636ddd17131461066857806370a0823114610687578063715018a6146106bb575f80fd5b80634a62bb65146105cf57806360d48489146105e857806364e4dcb61461061f57806366d602ae1461063e575f80fd5b80632307b441116103405780633950935111610310578063395093511461053f5780633ad10ef61461055e5780634915c3821461057d57806349bd5a5e1461059c575f80fd5b80632307b441146104c557806323b872dd146104e65780632be32b6114610505578063313ce56714610524575f80fd5b80631694505e1161037b5780631694505e1461043257806318160ddd1461047d5780631a8145bb1461049b5780631f3fed8f146104b0575f80fd5b806306fdde03146103ab578063095ea7b3146103d557806310d5de5314610404575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103bf610b04565b6040516103cc9190612d46565b60405180910390f35b3480156103e0575f80fd5b506103f46103ef366004612da8565b610b94565b60405190151581526020016103cc565b34801561040f575f80fd5b506103f461041e366004612dd2565b601d6020525f908152604090205460ff1681565b34801561043d575f80fd5b506104657f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103cc565b348015610488575f80fd5b506002545b6040519081526020016103cc565b3480156104a6575f80fd5b5061048d601a5481565b3480156104bb575f80fd5b5061048d60195481565b3480156104d0575f80fd5b506104e46104df366004612ec4565b610baa565b005b3480156104f1575f80fd5b506103f4610500366004612f80565b610d1b565b348015610510575f80fd5b506104e461051f366004612fbe565b610dc3565b34801561052f575f80fd5b50604051601281526020016103cc565b34801561054a575f80fd5b506103f4610559366004612da8565b610e3b565b348015610569575f80fd5b50600c54610465906001600160a01b031681565b348015610588575f80fd5b506104e4610597366004612dd2565b610e76565b3480156105a7575f80fd5b506104657f0000000000000000000000009af8ffb1d7a25b2e0bb0f772d20cc9dbc3ab440181565b3480156105da575f80fd5b50600e546103f49060ff1681565b3480156105f3575f80fd5b506103f4610602366004612dd2565b6001600160a01b03165f908152601e602052604090205460ff1690565b34801561062a575f80fd5b506104e4610639366004612dd2565b610ec3565b348015610649575f80fd5b5061048d60075481565b34801561065e575f80fd5b5061048d60155481565b348015610673575f80fd5b50600e546103f49062010000900460ff1681565b348015610692575f80fd5b5061048d6106a1366004612dd2565b6001600160a01b03165f9081526020819052604090205490565b3480156106c6575f80fd5b506104e4610f0d565b3480156106da575f80fd5b506104e4610f80565b3480156106ee575f80fd5b506104e46106fd366004612fe2565b610fea565b34801561070d575f80fd5b5061048d60125481565b348015610722575f80fd5b506104e4610731366004613019565b6110d4565b348015610741575f80fd5b506104e4610750366004613042565b61112a565b348015610760575f80fd5b506103f461076f36600461305d565b61116e565b34801561077f575f80fd5b5061048d60065481565b348015610794575f80fd5b506104e4611370565b3480156107a8575f80fd5b506005546001600160a01b0316610465565b3480156107c5575f80fd5b506104e46107d4366004613042565b611431565b3480156107e4575f80fd5b506104e46107f3366004612dd2565b611477565b348015610803575f80fd5b5061048d60165481565b348015610818575f80fd5b506103bf61154e565b34801561082c575f80fd5b506104e461083b366004612fe2565b61155d565b34801561084b575f80fd5b5061048d60145481565b348015610860575f80fd5b5061048d601b5481565b348015610875575f80fd5b5061048d60185481565b34801561088a575f80fd5b506103f4610899366004612da8565b61163c565b3480156108a9575f80fd5b50600b54610465906001600160a01b031681565b3480156108c8575f80fd5b506103f46108d7366004612da8565b6116d4565b3480156108e7575f80fd5b5061048d60085481565b3480156108fc575f80fd5b506103f461090b366004612dd2565b601f6020525f908152604090205460ff1681565b34801561092a575f80fd5b50600e546103f490610100900460ff1681565b348015610948575f80fd5b506104e4610957366004612fe2565b6116e0565b348015610967575f80fd5b506104e4610976366004613019565b611768565b348015610986575f80fd5b506104e4610995366004612fbe565b6117be565b3480156109a5575f80fd5b506010546103f49060ff1681565b3480156109be575f80fd5b506104e46109cd366004612dd2565b61182f565b3480156109dd575f80fd5b506104e46109ec366004612fbe565b6118f8565b3480156109fc575f80fd5b5061048d60115481565b348015610a11575f80fd5b506104e4610a20366004612fbe565b611927565b348015610a30575f80fd5b5061048d610a3f36600461305d565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a74575f80fd5b5061048d600a5481565b348015610a89575f80fd5b506104e4611998565b348015610a9d575f80fd5b5061048d600d5481565b348015610ab2575f80fd5b5061048d60135481565b348015610ac7575f80fd5b506104e4610ad6366004612dd2565b6119ce565b348015610ae6575f80fd5b506104e4611ab8565b348015610afa575f80fd5b5061048d60175481565b606060038054610b1390613089565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3f90613089565b8015610b8a5780601f10610b6157610100808354040283529160200191610b8a565b820191905f5260205f20905b815481529060010190602001808311610b6d57829003601f168201915b5050505050905090565b5f610ba0338484611b2c565b5060015b92915050565b6005546001600160a01b03163314610bdd5760405162461bcd60e51b8152600401610bd4906130c1565b60405180910390fd5b8051825114610c2e5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610bd4565b60c8825110610c9e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610bd4565b5f5b8251811015610d16575f838281518110610cbc57610cbc6130f6565b602002602001015190505f838381518110610cd957610cd96130f6565b6020026020010151670de0b6b3a7640000610cf4919061311e565b9050610d01338383611c4f565b50508080610d0e90613135565b915050610ca0565b505050565b5f610d27848484611c4f565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610dab5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bd4565b610db88533858403611b2c565b506001949350505050565b6005546001600160a01b03163314610ded5760405162461bcd60e51b8152600401610bd4906130c1565b610dff81670de0b6b3a764000061311e565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610ba0918590610e7190869061314d565b611b2c565b6005546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b03165f908152601e60205260409020805460ff19166001179055565b6005546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b03165f908152601e60205260409020805460ff19169055565b6005546001600160a01b03163314610f375760405162461bcd60e51b8152600401610bd4906130c1565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610faa5760405162461bcd60e51b8152600401610bd4906130c1565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146110145760405162461bcd60e51b8152600401610bd4906130c1565b806110aa577f0000000000000000000000009af8ffb1d7a25b2e0bb0f772d20cc9dbc3ab44016001600160a01b0316826001600160a01b0316036110aa5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bd4565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610bd4906130c1565b60128390556013829055601481905580611118838561314d565b611122919061314d565b601155505050565b6005546001600160a01b031633146111545760405162461bcd60e51b8152600401610bd4906130c1565b601080549115156101000261ff0019909216919091179055565b6005545f906001600160a01b0316331461119a5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0383166111f05760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bd4565b306001600160a01b038416036112485760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bd4565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561128c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b09190613160565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af1158015611300573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113249190613177565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461139a5760405162461bcd60e51b8152600401610bd4906130c1565b600e54610100900460ff16156113f25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bd4565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a1565b6005546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610bd4906130c1565b60108054911515620100000262ff000019909216919091179055565b6005546001600160a01b031633146114a15760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0381166115055760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bd4565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a9905f90a250565b606060048054610b1390613089565b6005546001600160a01b031633146115875760405162461bcd60e51b8152600401610bd4906130c1565b7f0000000000000000000000009af8ffb1d7a25b2e0bb0f772d20cc9dbc3ab44016001600160a01b0316826001600160a01b03160361162e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bd4565b6116388282612697565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156116bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bd4565b6116ca3385858403611b2c565b5060019392505050565b5f610ba0338484611c4f565b6005546001600160a01b0316331461170a5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146117925760405162461bcd60e51b8152600401610bd4906130c1565b601683905560178290556018819055806117ac838561314d565b6117b6919061314d565b601555505050565b6005546001600160a01b031633146117e85760405162461bcd60e51b8152600401610bd4906130c1565b6117fa81670de0b6b3a764000061311e565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e30565b6005546001600160a01b031633146118595760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0381166118af5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610bd4565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad54905f90a250565b6005546001600160a01b031633146119225760405162461bcd60e51b8152600401610bd4906130c1565b600a55565b6005546001600160a01b031633146119515760405162461bcd60e51b8152600401610bd4906130c1565b61196381670de0b6b3a764000061311e565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e30565b6005546001600160a01b031633146119c25760405162461bcd60e51b8152600401610bd4906130c1565b6010805460ff19169055565b6005546001600160a01b031633146119f85760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b038116611a5d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ae25760405162461bcd60e51b8152600401610bd4906130c1565b6040515f90339047908381818185875af1925050503d805f8114611b21576040519150601f19603f3d011682016040523d82523d5f602084013e611b26565b606091505b50505050565b6001600160a01b038316611b8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd4565b6001600160a01b038216611bef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd4565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c755760405162461bcd60e51b8152600401610bd490613192565b6001600160a01b038216611c9b5760405162461bcd60e51b8152600401610bd4906131d7565b5f8111611cea5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bd4565b6001600160a01b0383165f908152601e602052604090205460ff1680611d2757506001600160a01b0382165f908152601e602052604090205460ff165b15611d8357601054610100900460ff16611d835760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610bd4565b600e5460ff161561224a576005546001600160a01b03848116911614801590611dba57506005546001600160a01b03838116911614155b8015611dce57506001600160a01b03821615155b8015611de557506001600160a01b03821661dead14155b1561224a57600e54610100900460ff16611e7b576001600160a01b0383165f908152601c602052604090205460ff1680611e3657506001600160a01b0382165f908152601c602052604090205460ff165b611e7b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd4565b60105460ff1615611fd4577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614158015611efa57507f0000000000000000000000009af8ffb1d7a25b2e0bb0f772d20cc9dbc3ab44016001600160a01b0316826001600160a01b031614155b15611fd457611f0a60044361321a565b325f908152600f6020526040902054108015611f465750611f2c600a4361321a565b6001600160a01b0383165f908152600f6020526040902054105b611fb05760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bd4565b325f908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f908152601f602052604090205460ff16801561201357506001600160a01b0382165f908152601d602052604090205460ff16155b156120ee5760065481111561207b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bd4565b6008546001600160a01b0383165f908152602081905260409020546120a0908361314d565b11156120e95760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bd4565b61224a565b6001600160a01b0382165f908152601f602052604090205460ff16801561212d57506001600160a01b0383165f908152601d602052604090205460ff16155b15612197576007548111156120e95760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bd4565b6001600160a01b0382165f908152601d602052604090205460ff161580156121d757506001600160a01b0383165f908152601d602052604090205460ff16155b1561224a576008546001600160a01b0383165f90815260208190526040902054612201908361314d565b111561224a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bd4565b305f90815260208190526040902054600a54811080159081906122755750600e5462010000900460ff165b8015612284575060095460ff16155b80156122a857506001600160a01b0385165f908152601f602052604090205460ff16155b80156122cc57506001600160a01b0385165f908152601c602052604090205460ff16155b80156122f057506001600160a01b0384165f908152601c602052604090205460ff16155b15612315576009805460ff1916600117905561230a6126ff565b6009805460ff191690555b6001600160a01b0385165f908152601c602052604090205460019060ff168061235557506001600160a01b0385165f908152601c602052604090205460ff165b1561235d57505f5b5f8082156125b15761237043600161314d565b600d541015801561239857506001600160a01b0388165f908152601f602052604090205460ff165b156123d45760646123aa87606361311e565b6123b4919061322d565b600b549091506123cf9089906001600160a01b0316836128fd565b612589565b6001600160a01b0387165f908152601f602052604090205460ff1680156123fc57505f601554115b156124b157606460155487612411919061311e565b61241b919061322d565b91506015546017548361242e919061311e565b612438919061322d565b601a5f828254612448919061314d565b909155505060155460165461245d908461311e565b612467919061322d565b60195f828254612477919061314d565b909155505060155460185461248c908461311e565b612496919061322d565b601b5f8282546124a6919061314d565b909155506125899050565b6001600160a01b0388165f908152601f602052604090205460ff1680156124d957505f601154115b15612589576064601154876124ee919061311e565b6124f8919061322d565b91506011546013548361250b919061311e565b612515919061322d565b601a5f828254612525919061314d565b909155505060115460125461253a908461311e565b612544919061322d565b60195f828254612554919061314d565b9091555050601154601454612569908461311e565b612573919061322d565b601b5f828254612583919061314d565b90915550505b811561259a5761259a8830846128fd565b6125a4818361314d565b6125ae908761321a565b95505b6125bc8888886128fd565b60105462010000900460ff161561268d576001600160a01b0387165f908152601c602052604090205460ff1615801561260d57506001600160a01b0388165f908152601c602052604090205460ff16155b801561264b57507f0000000000000000000000009af8ffb1d7a25b2e0bb0f772d20cc9dbc3ab44016001600160a01b0316876001600160a01b031614155b801561266557506005546001600160a01b03888116911614155b1561268d576001600160a01b0387165f908152601e60205260409020805460ff191660011790555b5050505050505050565b6001600160a01b0382165f908152601f60205260409020805460ff19168215151790556126c48282612a50565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b305f9081526020819052604081205490505f601b54601954601a54612724919061314d565b61272e919061314d565b905081158061273b575080155b15612744575050565b600a80546127519161311e565b82111561276857600a80546127659161311e565b91505b5f80600283601a548661277b919061311e565b612785919061322d565b61278f919061322d565b90506127a361279e828661321a565b612ab2565b601a54479081905f906127b89060029061322d565b6127c2908761321a565b6019546127cf908561311e565b6127d9919061322d565b90505f6002601a546127eb919061322d565b6127f5908861321a565b601b54612802908661311e565b61280c919061322d565b9050612818818361314d565b612822908461321a565b5f601a8190556019819055601b559250841580159061284057505f83115b1561284f5761284f8584612c68565b600c546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612899576040519150601f19603f3d011682016040523d82523d5f602084013e61289e565b606091505b5050600b546040519197506001600160a01b03169047905f81818185875af1925050503d805f81146128eb576040519150601f19603f3d011682016040523d82523d5f602084013e6128f0565b606091505b5050505050505050505050565b6001600160a01b0383166129235760405162461bcd60e51b8152600401610bd490613192565b6001600160a01b0382166129495760405162461bcd60e51b8152600401610bd4906131d7565b6001600160a01b0383165f90815260208190526040902054818110156129c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bd4565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906129f690849061314d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a4291815260200190565b60405180910390a350505050565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612ae557612ae56130f6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b85919061324c565b81600181518110612b9857612b986130f6565b60200260200101906001600160a01b031690816001600160a01b031681525050612be3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b2c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612c379085905f90869030904290600401613267565b5f604051808303815f87803b158015612c4e575f80fd5b505af1158015612c60573d5f803e3d5ffd5b505050505050565b612c93307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b2c565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612d1a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612d3f91906132d6565b5050505050565b5f6020808352835180828501525f5b81811015612d7157858101830151858201604001528201612d55565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612da5575f80fd5b50565b5f8060408385031215612db9575f80fd5b8235612dc481612d91565b946020939093013593505050565b5f60208284031215612de2575f80fd5b8135612ded81612d91565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e3157612e31612df4565b604052919050565b5f67ffffffffffffffff821115612e5257612e52612df4565b5060051b60200190565b5f82601f830112612e6b575f80fd5b81356020612e80612e7b83612e39565b612e08565b82815260059290921b84018101918181019086841115612e9e575f80fd5b8286015b84811015612eb95780358352918301918301612ea2565b509695505050505050565b5f8060408385031215612ed5575f80fd5b823567ffffffffffffffff80821115612eec575f80fd5b818501915085601f830112612eff575f80fd5b81356020612f0f612e7b83612e39565b82815260059290921b84018101918181019089841115612f2d575f80fd5b948201945b83861015612f54578535612f4581612d91565b82529482019490820190612f32565b96505086013592505080821115612f69575f80fd5b50612f7685828601612e5c565b9150509250929050565b5f805f60608486031215612f92575f80fd5b8335612f9d81612d91565b92506020840135612fad81612d91565b929592945050506040919091013590565b5f60208284031215612fce575f80fd5b5035919050565b8015158114612da5575f80fd5b5f8060408385031215612ff3575f80fd5b8235612ffe81612d91565b9150602083013561300e81612fd5565b809150509250929050565b5f805f6060848603121561302b575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215613052575f80fd5b8135612ded81612fd5565b5f806040838503121561306e575f80fd5b823561307981612d91565b9150602083013561300e81612d91565b600181811c9082168061309d57607f821691505b6020821081036130bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba457610ba461310a565b5f600182016131465761314661310a565b5060010190565b80820180821115610ba457610ba461310a565b5f60208284031215613170575f80fd5b5051919050565b5f60208284031215613187575f80fd5b8151612ded81612fd5565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba457610ba461310a565b5f8261324757634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561325c575f80fd5b8151612ded81612d91565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156132b55784516001600160a01b031683529383019391830191600101613290565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156132e8575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fbdb82e5c82ed5599d452d6b44c1f1a926bd807ceacccbf941876cb6264b4a5c64736f6c63430008140033

Deployed Bytecode Sourcemap

10452:17270:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5090:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6004:169;;;;;;;;;;-1:-1:-1;6004:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6004:169:0;1023:187:1;11891:64:0;;;;;;;;;;-1:-1:-1;11891:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10605:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1649:32:1;;;1631:51;;1619:2;1604:18;10605:43:0;1467:221:1;5411:108:0;;;;;;;;;;-1:-1:-1;5499:12:0;;5411:108;;;1839:25:1;;;1827:2;1812:18;5411:108:0;1693:177:1;11669:33:0;;;;;;;;;;;;;;;;11629;;;;;;;;;;;;;;;;16408:617;;;;;;;;;;-1:-1:-1;16408:617:0;;;;;:::i;:::-;;:::i;:::-;;6181:492;;;;;;;;;;-1:-1:-1;6181:492:0;;;;;:::i;:::-;;:::i;15459:165::-;;;;;;;;;;-1:-1:-1;15459:165:0;;;;;:::i;:::-;;:::i;5310:93::-;;;;;;;;;;-1:-1:-1;5310:93:0;;5393:2;5150:36:1;;5138:2;5123:18;5310:93:0;5008:184:1;6681:215:0;;;;;;;;;;-1:-1:-1;6681:215:0;;;;;:::i;:::-;;:::i;10810:25::-;;;;;;;;;;-1:-1:-1;10810:25:0;;;;-1:-1:-1;;;;;10810:25:0;;;27143:113;;;;;;;;;;-1:-1:-1;27143:113:0;;;;;:::i;:::-;;:::i;10655:38::-;;;;;;;;;;;;;;;10925:33;;;;;;;;;;-1:-1:-1;10925:33:0;;;;;;;;27397:121;;;;;;;;;;-1:-1:-1;27397:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;27489:21:0;27465:4;27489:21;;;:10;:21;;;;;;;;;27397:121;27268:117;;;;;;;;;;-1:-1:-1;27268:117:0;;;;;:::i;:::-;;:::i;10531:28::-;;;;;;;;;;;;;;;;11482;;;;;;;;;;;;;;;;11005:31;;;;;;;;;;-1:-1:-1;11005:31:0;;;;;;;;;;;5527:127;;;;;;;;;;-1:-1:-1;5527:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5628:18:0;5601:7;5628:18;;;;;;;;;;;;5527:127;9171:150;;;;;;;;;;;;;:::i;15125:154::-;;;;;;;;;;;;;:::i;17037:267::-;;;;;;;;;;-1:-1:-1;17037:267:0;;;;;:::i;:::-;;:::i;11373:30::-;;;;;;;;;;;;;;;;17822:301;;;;;;;;;;-1:-1:-1;17822:301:0;;;;;:::i;:::-;;:::i;27526:93::-;;;;;;;;;;-1:-1:-1;27526:93:0;;;;;:::i;:::-;;:::i;25903:456::-;;;;;;;;;;-1:-1:-1;25903:456:0;;;;;:::i;:::-;;:::i;10497:27::-;;;;;;;;;;;;;;;;14820:249;;;;;;;;;;;;;:::i;8957:79::-;;;;;;;;;;-1:-1:-1;9022:6:0;;-1:-1:-1;;;;;9022:6:0;8957:79;;27627:92;;;;;;;;;;-1:-1:-1;27627:92:0;;;;;:::i;:::-;;:::i;26597:289::-;;;;;;;;;;-1:-1:-1;26597:289:0;;;;;:::i;:::-;;:::i;11517:31::-;;;;;;;;;;;;;;;;5198:104;;;;;;;;;;;;;:::i;17312:246::-;;;;;;;;;;-1:-1:-1;17312:246:0;;;;;:::i;:::-;;:::i;11447:24::-;;;;;;;;;;;;;;;;11709:27;;;;;;;;;;;;;;;;11593:25;;;;;;;;;;;;;;;;6904:413;;;;;;;;;;-1:-1:-1;6904:413:0;;;;;:::i;:::-;;:::i;10772:31::-;;;;;;;;;;-1:-1:-1;10772:31:0;;;;-1:-1:-1;;;;;10772:31:0;;;5662:175;;;;;;;;;;-1:-1:-1;5662:175:0;;;;;:::i;:::-;;:::i;10566:30::-;;;;;;;;;;;;;;;;12166:58;;;;;;;;;;-1:-1:-1;12166:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10965:33;;;;;;;;;;-1:-1:-1;10965:33:0;;;;;;;;;;;18449:182;;;;;;;;;;-1:-1:-1;18449:182:0;;;;;:::i;:::-;;:::i;18131:310::-;;;;;;;;;;-1:-1:-1;18131:310:0;;;;;:::i;:::-;;:::i;15813:177::-;;;;;;;;;;-1:-1:-1;15813:177:0;;;;;:::i;:::-;;:::i;11228:39::-;;;;;;;;;;-1:-1:-1;11228:39:0;;;;;;;;26894:241;;;;;;;;;;-1:-1:-1;26894:241:0;;;;;:::i;:::-;;:::i;16060:121::-;;;;;;;;;;-1:-1:-1;16060:121:0;;;;;:::i;:::-;;:::i;11339:27::-;;;;;;;;;;;;;;;;15636:169;;;;;;;;;;-1:-1:-1;15636:169:0;;;;;:::i;:::-;;:::i;5845:151::-;;;;;;;;;;-1:-1:-1;5845:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5961:18:0;;;5934:7;5961:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5845:151;10730:33;;;;;;;;;;;;;;;;15349:98;;;;;;;;;;;;;:::i;10846:37::-;;;;;;;;;;;;;;;;11410:30;;;;;;;;;;;;;;;;9329:244;;;;;;;;;;-1:-1:-1;9329:244:0;;;;;:::i;:::-;;:::i;26429:160::-;;;;;;;;;;;;;:::i;11555:31::-;;;;;;;;;;;;;;;;5090:100;5144:13;5177:5;5170:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5090:100;:::o;6004:169::-;6087:4;6104:39;1319:10;6127:7;6136:6;6104:8;:39::i;:::-;-1:-1:-1;6161:4:0;6004:169;;;;;:::o;16408:617::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;;;;;;;;;16550:15:::1;:22;16532:7;:14;:40;16524:83;;;::::0;-1:-1:-1;;;16524:83:0;;7823:2:1;16524:83:0::1;::::0;::::1;7805:21:1::0;7862:2;7842:18;;;7835:30;7901:32;7881:18;;;7874:60;7951:18;;16524:83:0::1;7621:354:1::0;16524:83:0::1;16643:3;16626:7;:14;:20;16618:87;;;::::0;-1:-1:-1;;;16618:87:0;;8182:2:1;16618:87:0::1;::::0;::::1;8164:21:1::0;8221:2;8201:18;;;8194:30;8260:34;8240:18;;;8233:62;-1:-1:-1;;;8311:18:1;;;8304:52;8373:19;;16618:87:0::1;7980:418:1::0;16618:87:0::1;16818:9;16814:204;16837:7;:14;16833:1;:18;16814:204;;;16872:14;16889:7;16897:1;16889:10;;;;;;;;:::i;:::-;;;;;;;16872:27;;16914:14;16931:15;16947:1;16931:18;;;;;;;;:::i;:::-;;;;;;;16950:4;16931:23;;;;:::i;:::-;16914:40;;16969:37;16979:10;16991:6;16999;16969:9;:37::i;:::-;16857:161;;16853:3;;;;;:::i;:::-;;;;16814:204;;;;16408:617:::0;;:::o;6181:492::-;6321:4;6338:36;6348:6;6356:9;6367:6;6338:9;:36::i;:::-;-1:-1:-1;;;;;6414:19:0;;6387:24;6414:19;;;:11;:19;;;;;;;;1319:10;6414:33;;;;;;;;6466:26;;;;6458:79;;;;-1:-1:-1;;;6458:79:0;;9182:2:1;6458:79:0;;;9164:21:1;9221:2;9201:18;;;9194:30;9260:34;9240:18;;;9233:62;-1:-1:-1;;;9311:18:1;;;9304:38;9359:19;;6458:79:0;8980:404:1;6458:79:0;6573:57;6582:6;1319:10;6623:6;6604:16;:25;6573:8;:57::i;:::-;-1:-1:-1;6661:4:0;;6181:492;-1:-1:-1;;;;6181:492:0:o;15459:165::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;15550:17:::1;:6:::0;15560::::1;15550:17;:::i;:::-;15535:12;:32:::0;;;15583:33:::1;::::0;1839:25:1;;;15583:33:0::1;::::0;1827:2:1;1812:18;15583:33:0::1;;;;;;;;15459:165:::0;:::o;6681:215::-;1319:10;6769:4;6818:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6818:34:0;;;;;;;;;;6769:4;;6786:80;;6809:7;;6818:47;;6855:10;;6818:47;:::i;:::-;6786:8;:80::i;27143:113::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27220:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;27220:28:0::1;27244:4;27220:28;::::0;;27143:113::o;27268:117::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27348:21:0::1;27372:5;27348:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;27348:29:0::1;::::0;;27268:117::o;9171:150::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;9264:6:::1;::::0;9243:40:::1;::::0;9280:1:::1;::::0;-1:-1:-1;;;;;9264:6:0::1;::::0;9243:40:::1;::::0;9280:1;;9243:40:::1;9294:6;:19:::0;;-1:-1:-1;;;;;;9294:19:0::1;::::0;;9171:150::o;15125:154::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;15179:14:::1;:22:::0;;-1:-1:-1;;15179:22:0;;::::1;::::0;;;15212:20:::1;:28:::0;;;;::::1;::::0;;15256:15:::1;::::0;::::1;::::0;15196:5:::1;::::0;15256:15:::1;15125:154::o:0;17037:267::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;17133:4:::1;17129:111;;17171:13;-1:-1:-1::0;;;;;17161:23:0::1;:6;-1:-1:-1::0;;;;;17161:23:0::1;::::0;17153:75:::1;;;::::0;-1:-1:-1;;;17153:75:0;;9721:2:1;17153:75:0::1;::::0;::::1;9703:21:1::0;9760:2;9740:18;;;9733:30;9799:34;9779:18;;;9772:62;-1:-1:-1;;;9850:18:1;;;9843:37;9897:19;;17153:75:0::1;9519:403:1::0;17153:75:0::1;-1:-1:-1::0;;;;;17250:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17250:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17037:267::o;17822:301::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;17938:15:::1;:31:::0;;;17980:15:::1;:31:::0;;;18022:9:::1;:19:::0;;;18034:7;18067:33:::1;17998:13:::0;17956;18067:33:::1;:::i;:::-;:45;;;;:::i;:::-;18052:12;:60:::0;-1:-1:-1;;;17822:301:0:o;27526:93::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;27590:12:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;27590:21:0;;::::1;::::0;;;::::1;::::0;;27526:93::o;25903:456::-;9084:6;;25990:10;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26021:20:0;::::1;26013:59;;;::::0;-1:-1:-1;;;26013:59:0;;10129:2:1;26013:59:0::1;::::0;::::1;10111:21:1::0;10168:2;10148:18;;;10141:30;10207:28;10187:18;;;10180:56;10253:18;;26013:59:0::1;9927:350:1::0;26013:59:0::1;26109:4;-1:-1:-1::0;;;;;26091:23:0;::::1;::::0;26083:64:::1;;;::::0;-1:-1:-1;;;26083:64:0;;10484:2:1;26083:64:0::1;::::0;::::1;10466:21:1::0;10523:2;10503:18;;;10496:30;10562;10542:18;;;10535:58;10610:18;;26083:64:0::1;10282:352:1::0;26083:64:0::1;26185:39;::::0;-1:-1:-1;;;26185:39:0;;26218:4:::1;26185:39;::::0;::::1;1631:51:1::0;26158:24:0::1;::::0;-1:-1:-1;;;;;26185:24:0;::::1;::::0;::::1;::::0;1604:18:1;;26185:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26243:46;::::0;-1:-1:-1;;;26243:46:0;;-1:-1:-1;;;;;11020:32:1;;;26243:46:0::1;::::0;::::1;11002:51:1::0;11069:18;;;11062:34;;;26158:66:0;;-1:-1:-1;26243:23:0;;::::1;::::0;::::1;::::0;10975:18:1;;26243:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26305;::::0;;-1:-1:-1;;;;;11020:32:1;;11002:51;;11084:2;11069:18;;11062:34;;;26235:54:0;;-1:-1:-1;26305:46:0::1;::::0;10975:18:1;26305:46:0::1;;;;;;;26002:357;25903:456:::0;;;;:::o;14820:249::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;14884:13:::1;::::0;::::1;::::0;::::1;;;14883:14;14875:50;;;::::0;-1:-1:-1;;;14875:50:0;;11559:2:1;14875:50:0::1;::::0;::::1;11541:21:1::0;11598:2;11578:18;;;11571:30;11637:25;11617:18;;;11610:53;11680:18;;14875:50:0::1;11357:347:1::0;14875:50:0::1;14936:13;:20:::0;;-1:-1:-1;;14967:18:0;;;;;15017:12:::1;14996:18;:33:::0;15045:16:::1;::::0;::::1;::::0;-1:-1:-1;;15045:16:0::1;14820:249::o:0;27627:92::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;27694:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27694:17:0;;::::1;::::0;;;::::1;::::0;;27627:92::o;26597:289::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26691:31:0;::::1;26683:81;;;::::0;-1:-1:-1;;;26683:81:0;;11911:2:1;26683:81:0::1;::::0;::::1;11893:21:1::0;11950:2;11930:18;;;11923:30;11989:34;11969:18;;;11962:62;-1:-1:-1;;;12040:18:1;;;12033:35;12085:19;;26683:81:0::1;11709:401:1::0;26683:81:0::1;26775:16;:45:::0;;-1:-1:-1;;;;;;26775:45:0::1;-1:-1:-1::0;;;;;26775:45:0;::::1;::::0;;::::1;::::0;;;26836:42:::1;::::0;::::1;::::0;-1:-1:-1;;26836:42:0::1;26597:289:::0;:::o;5198:104::-;5254:13;5287:7;5280:14;;;;;:::i;17312:246::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;17421:13:::1;-1:-1:-1::0;;;;;17413:21:0::1;:4;-1:-1:-1::0;;;;;17413:21:0::1;::::0;17405:91:::1;;;::::0;-1:-1:-1;;;17405:91:0;;12317:2:1;17405:91:0::1;::::0;::::1;12299:21:1::0;12356:2;12336:18;;;12329:30;12395:34;12375:18;;;12368:62;12466:27;12446:18;;;12439:55;12511:19;;17405:91:0::1;12115:421:1::0;17405:91:0::1;17509:41;17538:4;17544:5;17509:28;:41::i;:::-;17312:246:::0;;:::o;6904:413::-;1319:10;6997:4;7041:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7041:34:0;;;;;;;;;;7094:35;;;;7086:85;;;;-1:-1:-1;;;7086:85:0;;12743:2:1;7086:85:0;;;12725:21:1;12782:2;12762:18;;;12755:30;12821:34;12801:18;;;12794:62;-1:-1:-1;;;12872:18:1;;;12865:35;12917:19;;7086:85:0;12541:401:1;7086:85:0;7207:67;1319:10;7230:7;7258:15;7239:16;:34;7207:8;:67::i;:::-;-1:-1:-1;7305:4:0;;6904:413;-1:-1:-1;;;6904:413:0:o;5662:175::-;5748:4;5765:42;1319:10;5789:9;5800:6;5765:9;:42::i;18449:182::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18534:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18534:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18589:34;;1163:41:1;;;18589:34:0::1;::::0;1136:18:1;18589:34:0::1;;;;;;;18449:182:::0;;:::o;18131:310::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;18248:16:::1;:32:::0;;;18291:16:::1;:32:::0;;;18334:10:::1;:20:::0;;;18347:7;18383:35:::1;18310:13:::0;18267;18383:35:::1;:::i;:::-;:48;;;;:::i;:::-;18367:13;:64:::0;-1:-1:-1;;;18131:310:0:o;15813:177::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;15910:17:::1;:6:::0;15920::::1;15910:17;:::i;:::-;15892:15;:35:::0;;;15943:39:::1;::::0;1839:25:1;;;15943:39:0::1;::::0;1827:2:1;1812:18;15943:39:0::1;1693:177:1::0;26894:241:0;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26976:25:0;::::1;26968:69;;;::::0;-1:-1:-1;;;26968:69:0;;13149:2:1;26968:69:0::1;::::0;::::1;13131:21:1::0;13188:2;13168:18;;;13161:30;13227:33;13207:18;;;13200:61;13278:18;;26968:69:0::1;12947:355:1::0;26968:69:0::1;27048:10;:33:::0;;-1:-1:-1;;;;;;27048:33:0::1;-1:-1:-1::0;;;;;27048:33:0;::::1;::::0;;::::1;::::0;;;27097:30:::1;::::0;::::1;::::0;-1:-1:-1;;27097:30:0::1;26894:241:::0;:::o;16060:121::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;16144:18:::1;:30:::0;16060:121::o;15636:169::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;15729:17:::1;:6:::0;15739::::1;15729:17;:::i;:::-;15713:13;:33:::0;;;15762:35:::1;::::0;1839:25:1;;;15762:35:0::1;::::0;1827:2:1;1812:18;15762:35:0::1;1693:177:1::0;15349:98:0;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;15411:20:::1;:28:::0;;-1:-1:-1;;15411:28:0::1;::::0;;15349:98::o;9329:244::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9418:22:0;::::1;9410:73;;;::::0;-1:-1:-1;;;9410:73:0;;13509:2:1;9410:73:0::1;::::0;::::1;13491:21:1::0;13548:2;13528:18;;;13521:30;13587:34;13567:18;;;13560:62;-1:-1:-1;;;13638:18:1;;;13631:36;13684:19;;9410:73:0::1;13307:402:1::0;9410:73:0::1;9520:6;::::0;9499:38:::1;::::0;-1:-1:-1;;;;;9499:38:0;;::::1;::::0;9520:6:::1;::::0;9499:38:::1;::::0;9520:6:::1;::::0;9499:38:::1;9548:6;:17:::0;;-1:-1:-1;;;;;;9548:17:0::1;-1:-1:-1::0;;;;;9548:17:0;;;::::1;::::0;;;::::1;::::0;;9329:244::o;26429:160::-;9084:6;;-1:-1:-1;;;;;9084:6:0;1319:10;9084:22;9076:67;;;;-1:-1:-1;;;9076:67:0;;;;;;;:::i;:::-;26523:58:::1;::::0;26487:12:::1;::::0;26531:10:::1;::::0;26555:21:::1;::::0;26487:12;26523:58;26487:12;26523:58;26555:21;26531:10;26523:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26429:160:0:o;8246:380::-;-1:-1:-1;;;;;8382:19:0;;8374:68;;;;-1:-1:-1;;;8374:68:0;;14126:2:1;8374:68:0;;;14108:21:1;14165:2;14145:18;;;14138:30;14204:34;14184:18;;;14177:62;-1:-1:-1;;;14255:18:1;;;14248:34;14299:19;;8374:68:0;13924:400:1;8374:68:0;-1:-1:-1;;;;;8461:21:0;;8453:68;;;;-1:-1:-1;;;8453:68:0;;14531:2:1;8453:68:0;;;14513:21:1;14570:2;14550:18;;;14543:30;14609:34;14589:18;;;14582:62;-1:-1:-1;;;14660:18:1;;;14653:32;14702:19;;8453:68:0;14329:398:1;8453:68:0;-1:-1:-1;;;;;8534:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8586:32;;1839:25:1;;;8586:32:0;;1812:18:1;8586:32:0;;;;;;;8246:380;;;:::o;18639:4662::-;-1:-1:-1;;;;;18739:18:0;;18731:68;;;;-1:-1:-1;;;18731:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18818:16:0;;18810:64;;;;-1:-1:-1;;;18810:64:0;;;;;;;:::i;:::-;18902:1;18893:6;:10;18885:52;;;;-1:-1:-1;;;18885:52:0;;15744:2:1;18885:52:0;;;15726:21:1;15783:2;15763:18;;;15756:30;15822:31;15802:18;;;15795:59;15871:18;;18885:52:0;15542:353:1;18885:52:0;-1:-1:-1;;;;;18953:16:0;;;;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;18973:14:0;;;;;;:10;:14;;;;;;;;18953:34;18950:117;;;19011:12;;;;;;;19003:52;;;;-1:-1:-1;;;19003:52:0;;16102:2:1;19003:52:0;;;16084:21:1;16141:2;16121:18;;;16114:30;16180:29;16160:18;;;16153:57;16227:18;;19003:52:0;15900:351:1;19003:52:0;19100:14;;;;19097:1850;;;9022:6;;-1:-1:-1;;;;;19134:15:0;;;9022:6;;19134:15;;;;:32;;-1:-1:-1;9022:6:0;;-1:-1:-1;;;;;19153:13:0;;;9022:6;;19153:13;;19134:32;:52;;;;-1:-1:-1;;;;;;19170:16:0;;;;19134:52;:77;;;;-1:-1:-1;;;;;;19190:21:0;;19204:6;19190:21;;19134:77;19130:1806;;;19235:13;;;;;;;19231:148;;-1:-1:-1;;;;;19280:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19309:23:0;;;;;;:19;:23;;;;;;;;19280:52;19272:87;;;;-1:-1:-1;;;19272:87:0;;16458:2:1;19272:87:0;;;16440:21:1;16497:2;16477:18;;;16470:30;-1:-1:-1;;;16516:18:1;;;16509:52;16578:18;;19272:87:0;16256:346:1;19272:87:0;19553:20;;;;19549:520;;;19615:15;-1:-1:-1;;;;;19601:30:0;:2;-1:-1:-1;;;;;19601:30:0;;;:62;;;;;19649:13;-1:-1:-1;;;;;19635:28:0;:2;-1:-1:-1;;;;;19635:28:0;;;19601:62;19597:453;;;19741:16;19756:1;19741:12;:16;:::i;:::-;19728:9;19699:39;;;;:28;:39;;;;;;:58;:114;;;;-1:-1:-1;19796:17:0;19811:2;19796:12;:17;:::i;:::-;-1:-1:-1;;;;;19761:32:0;;;;;;:28;:32;;;;;;:52;19699:114;19691:180;;;;-1:-1:-1;;;19691:180:0;;16942:2:1;19691:180:0;;;16924:21:1;16981:2;16961:18;;;16954:30;17020:34;17000:18;;;16993:62;-1:-1:-1;;;17071:18:1;;;17064:51;17132:19;;19691:180:0;16740:417:1;19691:180:0;19927:9;19898:39;;;;:28;:39;;;;;;19940:12;19898:54;;;;-1:-1:-1;;;;;19979:32:0;;;;;;:47;19597:453;-1:-1:-1;;;;;20138:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;20174:35:0;;;;;;:31;:35;;;;;;;;20173:36;20138:71;20134:787;;;20256:12;;20246:6;:22;;20238:75;;;;-1:-1:-1;;;20238:75:0;;17364:2:1;20238:75:0;;;17346:21:1;17403:2;17383:18;;;17376:30;17442:34;17422:18;;;17415:62;-1:-1:-1;;;17493:18:1;;;17486:38;17541:19;;20238:75:0;17162:404:1;20238:75:0;20374:15;;-1:-1:-1;;;;;5628:18:0;;5601:7;5628:18;;;;;;;;;;;20348:22;;:6;:22;:::i;:::-;:41;;20340:78;;;;-1:-1:-1;;;20340:78:0;;17773:2:1;20340:78:0;;;17755:21:1;17812:2;17792:18;;;17785:30;-1:-1:-1;;;17831:18:1;;;17824:54;17895:18;;20340:78:0;17571:348:1;20340:78:0;20134:787;;;-1:-1:-1;;;;;20495:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;20529:37:0;;;;;;:31;:37;;;;;;;;20528:38;20495:71;20491:430;;;20613:13;;20603:6;:23;;20595:78;;;;-1:-1:-1;;;20595:78:0;;18126:2:1;20595:78:0;;;18108:21:1;18165:2;18145:18;;;18138:30;18204:34;18184:18;;;18177:62;-1:-1:-1;;;18255:18:1;;;18248:40;18305:19;;20595:78:0;17924:406:1;20491:430:0;-1:-1:-1;;;;;20722:35:0;;;;;;:31;:35;;;;;;;;20721:36;:78;;;;-1:-1:-1;;;;;;20762:37:0;;;;;;:31;:37;;;;;;;;20761:38;20721:78;20717:204;;;20857:15;;-1:-1:-1;;;;;5628:18:0;;5601:7;5628:18;;;;;;;;;;;20831:22;;:6;:22;:::i;:::-;:41;;20823:78;;;;-1:-1:-1;;;20823:78:0;;17773:2:1;20823:78:0;;;17755:21:1;17812:2;17792:18;;;17785:30;-1:-1:-1;;;17831:18:1;;;17824:54;17895:18;;20823:78:0;17571:348:1;20823:78:0;21008:4;20959:28;5628:18;;;;;;;;;;;21074;;21050:42;;;;;;;21108:22;;-1:-1:-1;21119:11:0;;;;;;;21108:22;:35;;;;-1:-1:-1;21135:8:0;;;;21134:9;21108:35;:71;;;;-1:-1:-1;;;;;;21148:31:0;;;;;;:25;:31;;;;;;;;21147:32;21108:71;:101;;;;-1:-1:-1;;;;;;21184:25:0;;;;;;:19;:25;;;;;;;;21183:26;21108:101;:129;;;;-1:-1:-1;;;;;;21214:23:0;;;;;;:19;:23;;;;;;;;21213:24;21108:129;21105:236;;;21254:8;:15;;-1:-1:-1;;21254:15:0;21265:4;21254:15;;;21286:10;:8;:10::i;:::-;21313:8;:16;;-1:-1:-1;;21313:16:0;;;21105:236;-1:-1:-1;;;;;21471:25:0;;21353:12;21471:25;;;:19;:25;;;;;;21368:4;;21471:25;;;:52;;-1:-1:-1;;;;;;21500:23:0;;;;;;:19;:23;;;;;;;;21471:52;21468:99;;;-1:-1:-1;21550:5:0;21468:99;21587:12;21614:21;21727:7;21724:1318;;;21882:16;:12;21897:1;21882:16;:::i;:::-;21860:18;;:38;;:73;;;;-1:-1:-1;;;;;;21902:31:0;;;;;;:25;:31;;;;;;;;21860:73;21857:1000;;;21983:3;21969:11;:6;21978:2;21969:11;:::i;:::-;:17;;;;:::i;:::-;22027:16;;21953:33;;-1:-1:-1;22005:54:0;;22021:4;;-1:-1:-1;;;;;22027:16:0;21953:33;22005:15;:54::i;:::-;21857:1000;;;-1:-1:-1;;;;;22122:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22171:1;22155:13;;:17;22122:50;22118:739;;;22223:3;22208:13;;22199:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;22192:34;;22293:13;;22274:16;;22267:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22245:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22373:13:0;;22354:16;;22347:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;22325:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22441:13:0;;22428:10;;22421:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;22405:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;22118:739:0;;-1:-1:-1;22118:739:0;;-1:-1:-1;;;;;22517:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22567:1;22552:12;;:16;22517:51;22514:343;;;22617:3;22602:12;;22593:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;22586:34;;22683:12;;22665:15;;22658:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22636:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22761:12:0;;22743:15;;22736:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;22714:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22827:12:0;;22815:9;;22808:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;22792:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;22514:343:0;22888:8;;22885:93;;22920:42;22936:4;22950;22957;22920:15;:42::i;:::-;23010:20;23017:13;23010:4;:20;:::i;:::-;23000:30;;;;:::i;:::-;;;21724:1318;23054:33;23070:4;23076:2;23080:6;23054:15;:33::i;:::-;23103:8;;;;;;;23100:194;;;-1:-1:-1;;;;;23131:23:0;;;;;;:19;:23;;;;;;;;23130:24;:54;;;;-1:-1:-1;;;;;;23159:25:0;;;;;;:19;:25;;;;;;;;23158:26;23130:54;:77;;;;;23194:13;-1:-1:-1;;;;;23188:19:0;:2;-1:-1:-1;;;;;23188:19:0;;;23130:77;:94;;;;-1:-1:-1;9022:6:0;;-1:-1:-1;;;;;23211:13:0;;;9022:6;;23211:13;;23130:94;23127:156;;;-1:-1:-1;;;;;23244:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;23244:21:0;23261:4;23244:21;;;23127:156;18718:4583;;;;;18639:4662;;;:::o;17566:248::-;-1:-1:-1;;;;;17649:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;17649:39:0;;;;;;;17709;17649:31;:39;17709:26;:39::i;:::-;17766:40;;;;;;-1:-1:-1;;;;;17766:40:0;;;;;;;;17566:248;;:::o;24441:1454::-;24524:4;24480:23;5628:18;;;;;;;;;;;24480:50;;24541:25;24611:12;;24590:18;;24569;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;24541:82;-1:-1:-1;24648:20:0;;;:46;;-1:-1:-1;24672:22:0;;24648:46;24645:60;;;24697:7;;24441:1454::o;24645:60::-;24738:18;;;:23;;;:::i;:::-;24720:15;:41;24717:113;;;24795:18;;;:23;;;:::i;:::-;24777:41;;24717:113;24842:12;24924:23;25009:1;24989:17;24968:18;;24950:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24924:86;-1:-1:-1;25031:51:0;25048:33;24924:86;25048:15;:33;:::i;:::-;25031:16;:51::i;:::-;25288:18;;25125:21;;;;25104:18;;25288:20;;25307:1;;25288:20;:::i;:::-;25267:42;;:17;:42;:::i;:::-;25245:18;;25232:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;25206:104;;25321:17;25410:1;25391:18;;:20;;;;:::i;:::-;25370:42;;:17;:42;:::i;:::-;25354:12;;25341:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;25321:92;-1:-1:-1;25447:27:0;25321:92;25447:15;:27;:::i;:::-;25428:46;;;;:::i;:::-;25521:1;25500:18;:22;;;25533:18;:22;;;25566:12;:16;25428:46;-1:-1:-1;25608:19:0;;;;;:42;;;25649:1;25631:15;:19;25608:42;25605:119;;;25666:46;25679:15;25696;25666:12;:46::i;:::-;25757:10;;25749:46;;-1:-1:-1;;;;;25757:10:0;;;;25781:9;;25749:46;;;;25781:9;25757:10;25749:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25831:16:0;;25823:64;;25736:59;;-1:-1:-1;;;;;;25831:16:0;;25861:21;;25823:64;;;;25861:21;25831:16;25823:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24441:1454:0:o;7325:614::-;-1:-1:-1;;;;;7465:20:0;;7457:70;;;;-1:-1:-1;;;7457:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7546:23:0;;7538:71;;;;-1:-1:-1;;;7538:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7646:17:0;;7622:21;7646:17;;;;;;;;;;;7682:23;;;;7674:74;;;;-1:-1:-1;;;7674:74:0;;18759:2:1;7674:74:0;;;18741:21:1;18798:2;18778:18;;;18771:30;18837:34;18817:18;;;18810:62;-1:-1:-1;;;18888:18:1;;;18881:36;18934:19;;7674:74:0;18557:402:1;7674:74:0;-1:-1:-1;;;;;7784:17:0;;;:9;:17;;;;;;;;;;;7804:22;;;7784:42;;7848:20;;;;;;;;:30;;7820:6;;7784:9;7848:30;;7820:6;;7848:30;:::i;:::-;;;;;;;;7913:9;-1:-1:-1;;;;;7896:35:0;7905:6;-1:-1:-1;;;;;7896:35:0;;7924:6;7896:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;7896:35:0;;;;;;;;7446:493;7325:614;;;:::o;16193:207::-;-1:-1:-1;;;;;16281:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16281:52:0;;;;;;;;;;16349:43;;19132:51:1;;;19199:18;;;19192:50;16349:43:0;;19105:18:1;16349:43:0;;;;;;;16193:207;;:::o;23309:591::-;23461:16;;;23475:1;23461:16;;;;;;;;23437:21;;23461:16;;;;;;;;;;-1:-1:-1;23461:16:0;23437:40;;23506:4;23488;23493:1;23488:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;23488:23:0;;;-1:-1:-1;;;;;23488:23:0;;;;;23532:15;-1:-1:-1;;;;;23532:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23522:4;23527:1;23522:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;23522:32:0;;;-1:-1:-1;;;;;23522:32:0;;;;;23567:62;23584:4;23599:15;23617:11;23567:8;:62::i;:::-;23668:224;;-1:-1:-1;;;23668:224:0;;-1:-1:-1;;;;;23668:15:0;:66;;;;:224;;23749:11;;23775:1;;23819:4;;23846;;23866:15;;23668:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23364:536;23309:591;:::o;23912:521::-;24060:62;24077:4;24092:15;24110:11;24060:8;:62::i;:::-;24165:260;;-1:-1:-1;;;24165:260:0;;24237:4;24165:260;;;20835:34:1;20885:18;;;20878:34;;;24283:1:0;20928:18:1;;;20921:34;;;20971:18;;;20964:34;24377:6:0;21014:19:1;;;21007:44;24399:15:0;21067:19:1;;;21060:35;24165:15:0;-1:-1:-1;;;;;24165:31:0;;;;24204:9;;20769:19:1;;24165:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23912:521;;:::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;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;:::-;1451:5;1215:247;-1:-1:-1;;;1215:247:1:o;1875:127::-;1936:10;1931:3;1927:20;1924:1;1917:31;1967:4;1964:1;1957:15;1991:4;1988:1;1981:15;2007:275;2078:2;2072:9;2143:2;2124:13;;-1:-1:-1;;2120:27:1;2108:40;;2178:18;2163:34;;2199:22;;;2160:62;2157:88;;;2225:18;;:::i;:::-;2261:2;2254:22;2007:275;;-1:-1:-1;2007:275:1:o;2287:183::-;2347:4;2380:18;2372:6;2369:30;2366:56;;;2402:18;;:::i;:::-;-1:-1:-1;2447:1:1;2443:14;2459:4;2439:25;;2287:183::o;2475:662::-;2529:5;2582:3;2575:4;2567:6;2563:17;2559:27;2549:55;;2600:1;2597;2590:12;2549:55;2636:6;2623:20;2662:4;2686:60;2702:43;2742:2;2702:43;:::i;:::-;2686:60;:::i;:::-;2780:15;;;2866:1;2862:10;;;;2850:23;;2846:32;;;2811:12;;;;2890:15;;;2887:35;;;2918:1;2915;2908:12;2887:35;2954:2;2946:6;2942:15;2966:142;2982:6;2977:3;2974:15;2966:142;;;3048:17;;3036:30;;3086:12;;;;2999;;2966:142;;;-1:-1:-1;3126:5:1;2475:662;-1:-1:-1;;;;;;2475:662:1:o;3142:1215::-;3260:6;3268;3321:2;3309:9;3300:7;3296:23;3292:32;3289:52;;;3337:1;3334;3327:12;3289:52;3377:9;3364:23;3406:18;3447:2;3439:6;3436:14;3433:34;;;3463:1;3460;3453:12;3433:34;3501:6;3490:9;3486:22;3476:32;;3546:7;3539:4;3535:2;3531:13;3527:27;3517:55;;3568:1;3565;3558:12;3517:55;3604:2;3591:16;3626:4;3650:60;3666:43;3706:2;3666:43;:::i;3650:60::-;3744:15;;;3826:1;3822:10;;;;3814:19;;3810:28;;;3775:12;;;;3850:19;;;3847:39;;;3882:1;3879;3872:12;3847:39;3906:11;;;;3926:217;3942:6;3937:3;3934:15;3926:217;;;4022:3;4009:17;4039:31;4064:5;4039:31;:::i;:::-;4083:18;;3959:12;;;;4121;;;;3926:217;;;4162:5;-1:-1:-1;;4205:18:1;;4192:32;;-1:-1:-1;;4236:16:1;;;4233:36;;;4265:1;4262;4255:12;4233:36;;4288:63;4343:7;4332:8;4321:9;4317:24;4288:63;:::i;:::-;4278:73;;;3142:1215;;;;;:::o;4362:456::-;4439:6;4447;4455;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4563:9;4550:23;4582:31;4607:5;4582:31;:::i;:::-;4632:5;-1:-1:-1;4689:2:1;4674:18;;4661:32;4702:33;4661:32;4702:33;:::i;:::-;4362:456;;4754:7;;-1:-1:-1;;;4808:2:1;4793:18;;;;4780:32;;4362:456::o;4823:180::-;4882:6;4935:2;4923:9;4914:7;4910:23;4906:32;4903:52;;;4951:1;4948;4941:12;4903:52;-1:-1:-1;4974:23:1;;4823:180;-1:-1:-1;4823:180:1:o;5405:118::-;5491:5;5484:13;5477:21;5470:5;5467:32;5457:60;;5513:1;5510;5503:12;5528:382;5593:6;5601;5654:2;5642:9;5633:7;5629:23;5625:32;5622:52;;;5670:1;5667;5660:12;5622:52;5709:9;5696:23;5728:31;5753:5;5728:31;:::i;:::-;5778:5;-1:-1:-1;5835:2:1;5820:18;;5807:32;5848:30;5807:32;5848:30;:::i;:::-;5897:7;5887:17;;;5528:382;;;;;:::o;5915:316::-;5992:6;6000;6008;6061:2;6049:9;6040:7;6036:23;6032:32;6029:52;;;6077:1;6074;6067:12;6029:52;-1:-1:-1;;6100:23:1;;;6170:2;6155:18;;6142:32;;-1:-1:-1;6221:2:1;6206:18;;;6193:32;;5915:316;-1:-1:-1;5915:316:1:o;6236:241::-;6292:6;6345:2;6333:9;6324:7;6320:23;6316:32;6313:52;;;6361:1;6358;6351:12;6313:52;6400:9;6387:23;6419:28;6441:5;6419:28;:::i;6482:388::-;6550:6;6558;6611:2;6599:9;6590:7;6586:23;6582:32;6579:52;;;6627:1;6624;6617:12;6579:52;6666:9;6653:23;6685:31;6710:5;6685:31;:::i;:::-;6735:5;-1:-1:-1;6792:2:1;6777:18;;6764:32;6805:33;6764:32;6805:33;:::i;6875:380::-;6954:1;6950:12;;;;6997;;;7018:61;;7072:4;7064:6;7060:17;7050:27;;7018:61;7125:2;7117:6;7114:14;7094:18;7091:38;7088:161;;7171:10;7166:3;7162:20;7159:1;7152:31;7206:4;7203:1;7196:15;7234:4;7231:1;7224:15;7088:161;;6875:380;;;:::o;7260:356::-;7462:2;7444:21;;;7481:18;;;7474:30;7540:34;7535:2;7520:18;;7513:62;7607:2;7592:18;;7260:356::o;8403:127::-;8464:10;8459:3;8455:20;8452:1;8445:31;8495:4;8492:1;8485:15;8519:4;8516:1;8509:15;8535:127;8596:10;8591:3;8587:20;8584:1;8577:31;8627:4;8624:1;8617:15;8651:4;8648:1;8641:15;8667:168;8740:9;;;8771;;8788:15;;;8782:22;;8768:37;8758:71;;8809:18;;:::i;8840:135::-;8879:3;8900:17;;;8897:43;;8920:18;;:::i;:::-;-1:-1:-1;8967:1:1;8956:13;;8840:135::o;9389:125::-;9454:9;;;9475:10;;;9472:36;;;9488:18;;:::i;10639:184::-;10709:6;10762:2;10750:9;10741:7;10737:23;10733:32;10730:52;;;10778:1;10775;10768:12;10730:52;-1:-1:-1;10801:16:1;;10639:184;-1:-1:-1;10639:184:1:o;11107:245::-;11174:6;11227:2;11215:9;11206:7;11202:23;11198:32;11195:52;;;11243:1;11240;11233:12;11195:52;11275:9;11269:16;11294:28;11316:5;11294:28;:::i;14732:401::-;14934:2;14916:21;;;14973:2;14953:18;;;14946:30;15012:34;15007:2;14992:18;;14985:62;-1:-1:-1;;;15078:2:1;15063:18;;15056:35;15123:3;15108:19;;14732:401::o;15138:399::-;15340:2;15322:21;;;15379:2;15359:18;;;15352:30;15418:34;15413:2;15398:18;;15391:62;-1:-1:-1;;;15484:2:1;15469:18;;15462:33;15527:3;15512:19;;15138:399::o;16607:128::-;16674:9;;;16695:11;;;16692:37;;;16709:18;;:::i;18335:217::-;18375:1;18401;18391:132;;18445:10;18440:3;18436:20;18433:1;18426:31;18480:4;18477:1;18470:15;18508:4;18505:1;18498:15;18391:132;-1:-1:-1;18537:9:1;;18335:217::o;19253:251::-;19323:6;19376:2;19364:9;19355:7;19351:23;19347:32;19344:52;;;19392:1;19389;19382:12;19344:52;19424:9;19418:16;19443:31;19468:5;19443:31;:::i;19509:980::-;19771:4;19819:3;19808:9;19804:19;19850:6;19839:9;19832:25;19876:2;19914:6;19909:2;19898:9;19894:18;19887:34;19957:3;19952:2;19941:9;19937:18;19930:31;19981:6;20016;20010:13;20047:6;20039;20032:22;20085:3;20074:9;20070:19;20063:26;;20124:2;20116:6;20112:15;20098:29;;20145:1;20155:195;20169:6;20166:1;20163:13;20155:195;;;20234:13;;-1:-1:-1;;;;;20230:39:1;20218:52;;20325:15;;;;20290:12;;;;20266:1;20184:9;20155:195;;;-1:-1:-1;;;;;;;20406:32:1;;;;20401:2;20386:18;;20379:60;-1:-1:-1;;;20470:3:1;20455:19;20448:35;20367:3;19509:980;-1:-1:-1;;;19509:980:1:o;21106:306::-;21194:6;21202;21210;21263:2;21251:9;21242:7;21238:23;21234:32;21231:52;;;21279:1;21276;21269:12;21231:52;21308:9;21302:16;21292:26;;21358:2;21347:9;21343:18;21337:25;21327:35;;21402:2;21391:9;21387:18;21381:25;21371:35;;21106:306;;;;;:::o

Swarm Source

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