ETH Price: $2,363.08 (-3.77%)

Token

Ayper (AYPER)
 

Overview

Max Total Supply

1,000,000,000,000 AYPER

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
11,187,499.995525 AYPER

Value
$0.00
0x76af5ca14a383fadbdcc152e9692179729e232f6
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:
Ayper

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-20
*/

/*

Ayper is building a next-gen social and research platform to help you make sense of the alt coin market and enable you to consistently find the treasure buried in the sea of shit coins. 

The Ayper app is live! The first 200 users to sign up will get free access to premium features for life. Check out the roadmap for a glimpse into the future of shit-coining.

Website: https://ayper.io
App: https://ayper.io/dashboards/latest
TG: https://t.me/ayperportal

*/

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

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 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _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 ILpPair {
    function sync() external;
}

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 swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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

contract Ayper is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public futureOwnerAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public constant FEE_DIVISOR = 1000;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

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

    // 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 UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Ayper", "AYPER") payable {
        
        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        maxBuyAmount = totalSupply * 25 / 10000;
        maxSellAmount = totalSupply * 25 / 10000;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 85;
        buyLiquidityFee = 20;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        require(buyTotalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");

        sellOperationsFee = 85;
        sellLiquidityFee = 20;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        require(sellTotalFees <= 15  * FEE_DIVISOR / 100, "Must keep fees at 15% or less");

        operationsAddress = address(0x84951445c103a43126C85C6072C2Ec69a4E481E8);
        futureOwnerAddress = address(0x73775dc03eaDcf910265E57f376D5f8464a2B8E4);
        address gnosisSafe = 0x84951445c103a43126C85C6072C2Ec69a4E481E8;

        _excludeFromMaxTransaction(futureOwnerAddress, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(gnosisSafe), true);

        excludeFromFees(futureOwnerAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(gnosisSafe), true);

        _createInitialSupply(gnosisSafe, totalSupply * 75 / 100);

        _createInitialSupply(address(0x21B5D41505b4d8BA694d6Ba540a8d4e9A7277659), totalSupply * 2 / 1000);
        _createInitialSupply(address(0xCe097BceAa04E272A1e16aAD9F206b8f76C5e7B7), totalSupply * 2 / 1000);
        _createInitialSupply(address(0x57a73138dD60B153E1080e6a61B1d6CB228Ca0c4), totalSupply * 2 / 1000);
        _createInitialSupply(address(0xe1eB08B026c924D4490336E764E96D03B7173878), totalSupply * 2 / 1000);
        _createInitialSupply(address(0x903D52723560543f550828B508eC66fe03ed0ABC), totalSupply * 2 / 1000);
        
        _createInitialSupply(address(this), totalSupply * 240 / 1000);
    }

    receive() external payable {}
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWallet = totalSupply();
        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function removeBoughtEarly(address wallet) external onlyOwner {
        boughtEarly[wallet] = false;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set max buy amount lower than 0.5%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set max sell amount lower than 0.5%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _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 < 600, "Can only airdrop 600 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];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 15  * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

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

        // protects in future staking scenarios if another contract tries to transfer 0 tokens.
        if(amount == 0){
            super._transfer(from, to, 0);
            return;
        }
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && tradingActive){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){

                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet exceeded");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet exceeded");
                }
            }
        }

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

        if(canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[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;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if((earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 4 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    maxBuyAmount -= 1;
                }

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    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] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function getCurrentBlock() external view returns (uint256) {
        return block.number;
    }

    function getCurrentTimestamp() external view returns (uint256) {
        return block.timestamp;
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.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 + tokensForOperations;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        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 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(operationsAddress).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) || !tradingActive, "Can't withdraw native tokens while trading is active");
        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 setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    
    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function launchWithoutAirdrop(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            futureOwnerAddress,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","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":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureOwnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"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":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launchWithoutAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","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":"maxWallet","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":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","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":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","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"}]

6000600e556013805462ffffff191660019081179091556015805460ff19169091179055600560808181526420bcb832b960d91b60a090815261010060405260c08381526420aca822a960d91b60e05291926200005f91600391620006b2565b50805162000075906004906020840190620006b2565b50505060006200008a620004ab60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556c0c9f2c9cd04674edea400000006127106200011f8260196200076e565b6200012b919062000790565b6006556127106200013e8260196200076e565b6200014a919062000790565b60075560646200015c8260016200076e565b62000168919062000790565b600855620186a06200017c8260196200076e565b62000188919062000790565b600b556055601781905560146018819055620001a491620007b3565b6016556064620001b86103e8600f6200076e565b620001c4919062000790565b60165411156200021b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c65737300000060448201526064015b60405180910390fd5b6055601a8190556014601b8190556200023491620007b3565b6019556064620002486103e8600f6200076e565b62000254919062000790565b6019541115620002a75760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c657373000000604482015260640162000212565b600c80547384951445c103a43126c85c6072c2ec69a4e481e86001600160a01b03199182168117909255600d80547373775dc03eadcf910265e57f376d5f8464a2b8e4921682179055620002fd906001620004af565b6200030a306001620004af565b6200031961dead6001620004af565b600c5462000332906001600160a01b03166001620004af565b6200033f816001620004af565b600d5462000358906001600160a01b0316600162000512565b6200036530600162000512565b6200037461dead600162000512565b600c546200038d906001600160a01b0316600162000512565b6200039a81600162000512565b620003c0816064620003ae85604b6200076e565b620003ba919062000790565b620005cd565b620003e97321b5d41505b4d8ba694d6ba540a8d4e9a72776596103e8620003ae8560026200076e565b6200041273ce097bceaa04e272a1e16aad9f206b8f76c5e7b76103e8620003ae8560026200076e565b6200043b7357a73138dd60b153e1080e6a61b1d6cb228ca0c46103e8620003ae8560026200076e565b6200046473e1eb08b026c924d4490336e764e96d03b71738786103e8620003ae8560026200076e565b6200048d73903d52723560543f550828b508ec66fe03ed0abc6103e8620003ae8560026200076e565b620004a2306103e8620003ae8560f06200076e565b5050506200080a565b3390565b6001600160a01b0382166000818152601f6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b031633146200056e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000212565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006255760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000212565b8060026000828254620006399190620007b3565b90915550506001600160a01b0382166000908152602081905260408120805483929062000668908490620007b3565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006c090620007ce565b90600052602060002090601f016020900481019282620006e457600085556200072f565b82601f10620006ff57805160ff19168380011785556200072f565b828001600101855582156200072f579182015b828111156200072f57825182559160200191906001019062000712565b506200073d92915062000741565b5090565b5b808211156200073d576000815560010162000742565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200078b576200078b62000758565b500290565b600082620007ae57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620007c957620007c962000758565b500190565b600181811c90821680620007e357607f821691505b6020821081036200080457634e487b7160e01b600052602260045260246000fd5b50919050565b6139e9806200081a6000396000f3fe6080604052600436106103c75760003560e01c806380d75bab116101f2578063c876d0b91161010d578063eb472fc4116100a0578063f5648a4f1161006f578063f5648a4f14610aef578063f637434214610b04578063f8b45b0514610b1a578063fb002c9714610b3057600080fd5b8063eb472fc414610a83578063ee40166e14610aa3578063f11a24d314610ab9578063f2fde38b14610acf57600080fd5b8063dd62ed3e116100dc578063dd62ed3e146109f2578063e2f4560514610a38578063e884f26014610a4e578063ea4cfe1214610a6357600080fd5b8063c876d0b914610982578063d257b34f1461099c578063d85ba063146109bc578063dc3f0d0f146109d257600080fd5b80639e46fddb11610185578063a9059cbb11610154578063a9059cbb146108f4578063b62496f514610914578063bbc0c74214610943578063c02466681461096257600080fd5b80639e46fddb146108885780639e93ad8e146108a8578063a457c2d7146108be578063a62068ce146108de57600080fd5b80638da5cb5b116101c15780638da5cb5b1461081357806395d89b41146108315780639a5bd2dd146108465780639a7a23d61461086857600080fd5b806380d75bab1461078d5780638366e79a146107ad57806385ecfd28146107cd57806388e765ff146107fd57600080fd5b80634f77f6c0116102e25780636a486a8e1161027557806370a082311161024457806370a0823114610723578063715018a614610743578063751039fc146107585780637571336a1461076d57600080fd5b80636a486a8e146106c45780636b0a894c146106da5780636c9230db146106f05780636ddd17131461070357600080fd5b80635bb988c9116102b15780635bb988c91461065b57806366ca9b831461067b57806366d602ae1461069b578063672d5d3b146106b157600080fd5b80634f77f6c01461060357806351f205e41461061957806358a6d5311461062e5780635a139dd41461064557600080fd5b80632307b4411161035a57806339509351116103295780633950935114610589578063452ed4f1146105a9578063499b8394146105c95780634a62bb65146105e957600080fd5b80632307b4411461050d57806323b872dd1461052d5780632be32b611461054d578063313ce5671461056d57600080fd5b806310d5de531161039657806310d5de531461048857806318160ddd146104b85780631a8145bb146104d75780631c499ab0146104ed57600080fd5b806302dbd8f8146103d357806306fdde03146103f55780630758d92414610420578063095ea7b31461045857600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee366004613372565b610b46565b005b34801561040157600080fd5b5061040a610bfe565b6040516104179190613394565b60405180910390f35b34801561042c57600080fd5b50600954610440906001600160a01b031681565b6040516001600160a01b039091168152602001610417565b34801561046457600080fd5b50610478610473366004613401565b610c90565b6040519015158152602001610417565b34801561049457600080fd5b506104786104a336600461342d565b601f6020526000908152604090205460ff1681565b3480156104c457600080fd5b506002545b604051908152602001610417565b3480156104e357600080fd5b506104c9601d5481565b3480156104f957600080fd5b506103f3610508366004613451565b610ca6565b34801561051957600080fd5b506103f3610528366004613540565b610da8565b34801561053957600080fd5b50610478610548366004613602565b610f01565b34801561055957600080fd5b506103f3610568366004613451565b610fab565b34801561057957600080fd5b5060405160128152602001610417565b34801561059557600080fd5b506104786105a4366004613401565b6110b1565b3480156105b557600080fd5b50600a54610440906001600160a01b031681565b3480156105d557600080fd5b506103f36105e436600461342d565b6110ed565b3480156105f557600080fd5b506013546104789060ff1681565b34801561060f57600080fd5b506104c9601a5481565b34801561062557600080fd5b506103f36111ad565b34801561063a57600080fd5b50600f544310610478565b34801561065157600080fd5b506104c960175481565b34801561066757600080fd5b506103f361067636600461342d565b6112b6565b34801561068757600080fd5b506103f3610696366004613372565b611301565b3480156106a757600080fd5b506104c960075481565b3480156106bd57600080fd5b50436104c9565b3480156106d057600080fd5b506104c960195481565b3480156106e657600080fd5b506104c960125481565b3480156106fc57600080fd5b50426104c9565b34801561070f57600080fd5b506013546104789062010000900460ff1681565b34801561072f57600080fd5b506104c961073e36600461342d565b6113ac565b34801561074f57600080fd5b506103f36113c7565b34801561076457600080fd5b506103f361143b565b34801561077957600080fd5b506103f3610788366004613651565b6114b8565b34801561079957600080fd5b506103f36107a8366004613451565b611580565b3480156107b957600080fd5b506104786107c836600461368a565b6119ec565b3480156107d957600080fd5b506104786107e836600461342d565b60106020526000908152604090205460ff1681565b34801561080957600080fd5b506104c960065481565b34801561081f57600080fd5b506005546001600160a01b0316610440565b34801561083d57600080fd5b5061040a611c26565b34801561085257600080fd5b5061085b611c35565b60405161041791906136fc565b34801561087457600080fd5b506103f3610883366004613651565b611c96565b34801561089457600080fd5b50600d54610440906001600160a01b031681565b3480156108b457600080fd5b506104c96103e881565b3480156108ca57600080fd5b506104786108d9366004613401565b611d8a565b3480156108ea57600080fd5b506104c9600f5481565b34801561090057600080fd5b5061047861090f366004613401565b611e23565b34801561092057600080fd5b5061047861092f36600461342d565b602080526000908152604090205460ff1681565b34801561094f57600080fd5b5060135461047890610100900460ff1681565b34801561096e57600080fd5b506103f361097d366004613651565b611e30565b34801561098e57600080fd5b506015546104789060ff1681565b3480156109a857600080fd5b506103f36109b7366004613451565b611eb9565b3480156109c857600080fd5b506104c960165481565b3480156109de57600080fd5b506103f36109ed366004613451565b612004565b3480156109fe57600080fd5b506104c9610a0d36600461368a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a4457600080fd5b506104c9600b5481565b348015610a5a57600080fd5b506103f361210b565b348015610a6f57600080fd5b50600c54610440906001600160a01b031681565b348015610a8f57600080fd5b50610440610a9e366004613451565b612141565b348015610aaf57600080fd5b506104c9600e5481565b348015610ac557600080fd5b506104c960185481565b348015610adb57600080fd5b506103f3610aea36600461342d565b61216b565b348015610afb57600080fd5b506103f3612256565b348015610b1057600080fd5b506104c9601b5481565b348015610b2657600080fd5b506104c960085481565b348015610b3c57600080fd5b506104c9601c5481565b6005546001600160a01b03163314610b795760405162461bcd60e51b8152600401610b709061370f565b60405180910390fd5b601a829055601b819055610b8d818361375a565b6019556064610b9f6103e8600f613772565b610ba99190613791565b6019541115610bfa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b70565b5050565b606060038054610c0d906137b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c39906137b3565b8015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b5050505050905090565b6000610c9d3384846122c2565b50600192915050565b6005546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610b709061370f565b670de0b6b3a76400006064610ce460025490565b610cee9190613791565b610cf89190613791565b811015610d5a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152696572207468616e20312560b01b6064820152608401610b70565b610d6c81670de0b6b3a7640000613772565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610b709061370f565b8051825114610e235760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b70565b610258825110610e945760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b70565b60005b8251811015610efc576000838281518110610eb457610eb46137ed565b602002602001015190506000838381518110610ed257610ed26137ed565b60200260200101519050610ee73383836123e6565b50508080610ef490613803565b915050610e97565b505050565b6000610f0e84848461253b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f935760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b70565b610fa085338584036122c2565b506001949350505050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610b709061370f565b670de0b6b3a76400006103e8610fea60025490565b610ff5906005613772565b610fff9190613791565b6110099190613791565b81101561106a5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610b70565b61107c81670de0b6b3a7640000613772565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610d9d565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c9d9185906110e890869061375a565b6122c2565b6005546001600160a01b031633146111175760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b0381166111635760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610b70565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146111d75760405162461bcd60e51b8152600401610b709061370f565b600b546111e3306113ac565b1015611259576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b70565b600a805460ff60a01b1916600160a01b179055611274612f85565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112e05760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b0316331461132b5760405162461bcd60e51b8152600401610b709061370f565b6017829055601881905561133f818361375a565b60165560646113516103e8600f613772565b61135b9190613791565b6016541115610bfa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b70565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113f15760405162461bcd60e51b8152600401610b709061370f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146114655760405162461bcd60e51b8152600401610b709061370f565b6013805460ff199081169091556015805490911690556002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114e25760405162461bcd60e51b8152600401610b709061370f565b8061155557600a546001600160a01b03908116908316036115555760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b70565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115aa5760405162461bcd60e51b8152600401610b709061370f565b601354610100900460ff16156116165760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b70565b600a81106116765760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610b70565b6013805462ffff0019166201010017905543600e81905561169890829061375a565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b919061381c565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561179d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c1919061381c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561180e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611832919061381c565b600a80546001600160a01b0319166001600160a01b0392909216918217905561185c9060016130e7565b600a54611873906001600160a01b0316600161314a565b600047116118cf5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b70565b60006118da306113ac565b116119365760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b70565b6009546119519030906001600160a01b03166110e8826113ac565b6009546001600160a01b031663f305d719473061196d816113ac565b600d546040516001600160e01b031960e087901b1681526119a393929160009182916001600160a01b0316904290600401613839565b60606040518083038185885af11580156119c1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119e69190613874565b50505050565b6005546000906001600160a01b03163314611a195760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b038316611a6f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b70565b6001600160a01b03831630141580611a8f5750601354610100900460ff16155b611af85760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b70565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6391906138a2565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bda91906138bb565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610c0d906137b3565b60606011805480602002602001604051908101604052809291908181526020018280548015610c8657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c6f575050505050905090565b6005546001600160a01b03163314611cc05760405162461bcd60e51b8152600401610b709061370f565b600a546001600160a01b0390811690831603611d445760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b70565b611d4e828261314a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611e0c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b70565b611e1933858584036122c2565b5060019392505050565b6000610c9d33848461253b565b6005546001600160a01b03163314611e5a5760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611ee35760405162461bcd60e51b8152600401610b709061370f565b620186a0611ef060025490565b611efb906001613772565b611f059190613791565b811015611f725760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b70565b6103e8611f7e60025490565b611f89906001613772565b611f939190613791565b811115611fff5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b70565b600b55565b6005546001600160a01b0316331461202e5760405162461bcd60e51b8152600401610b709061370f565b670de0b6b3a76400006103e861204360025490565b61204e906005613772565b6120589190613791565b6120629190613791565b8110156120c45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610b70565b6120d681670de0b6b3a7640000613772565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d9d565b6005546001600160a01b031633146121355760405162461bcd60e51b8152600401610b709061370f565b6015805460ff19169055565b6011818154811061215157600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146121955760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b0381166121fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b70565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122805760405162461bcd60e51b8152600401610b709061370f565b604051600090339047908381818185875af1925050503d80600081146119e6576040519150601f19603f3d011682016040523d82523d6000602084013e6119e6565b6001600160a01b0383166123245760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b70565b6001600160a01b0382166123855760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b70565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661240c5760405162461bcd60e51b8152600401610b70906138d8565b6001600160a01b0382166124325760405162461bcd60e51b8152600401610b709061391d565b6001600160a01b038316600090815260208190526040902054818110156124aa5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b70565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124e190849061375a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161252d91815260200190565b60405180910390a350505050565b6001600160a01b0383166125615760405162461bcd60e51b8152600401610b70906138d8565b6001600160a01b0382166125875760405162461bcd60e51b8152600401610b709061391d565b8060000361259b57610efc838360006123e6565b601354610100900460ff1661262e576001600160a01b0383166000908152601e602052604090205460ff16806125e957506001600160a01b0382166000908152601e602052604090205460ff165b61262e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b70565b600f5443101580156126475750601354610100900460ff165b15612717576001600160a01b03831660009081526010602052604090205460ff16158061268157506005546001600160a01b038381169116145b8061269657506001600160a01b03821661dead145b6127175760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b70565b60135460ff1615612af3576005546001600160a01b0384811691161480159061274e57506005546001600160a01b03838116911614155b801561276257506001600160a01b03821615155b801561277957506001600160a01b03821661dead14155b801561279e57506001600160a01b0383166000908152601e602052604090205460ff16155b80156127c357506001600160a01b0382166000908152601e602052604090205460ff16155b15612af35760155460ff16156128c8576009546001600160a01b038381169116148015906127ff5750600a546001600160a01b03838116911614155b156128c857326000908152601460205260409020544311801561283957506001600160a01b03821660009081526014602052604090205443115b6128a35760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b70565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b038316600090815260208052604090205460ff16801561290857506001600160a01b0382166000908152601f602052604090205460ff16155b156129cf576006548111156129705760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b70565b60085461297c836113ac565b612986908361375a565b11156129ca5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610b70565b612af3565b6001600160a01b038216600090815260208052604090205460ff168015612a0f57506001600160a01b0383166000908152601f602052604090205460ff16155b15612a79576007548111156129ca5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b70565b6001600160a01b0382166000908152601f602052604090205460ff16612af357600854612aa5836113ac565b612aaf908361375a565b1115612af35760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610b70565b6000612afe306113ac565b600b5490915081108015908190612b1d575060135462010000900460ff165b8015612b335750600a54600160a01b900460ff16155b8015612b5657506001600160a01b038416600090815260208052604090205460ff165b15612b8457600a805460ff60a01b1916600160a01b179055612b76612f85565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601e602052604090205460019060ff1680612bc657506001600160a01b0385166000908152601e602052604090205460ff165b15612bcf575060005b60008115612f7157600f54431080612c155750670c7d713b49da0000600654612bf89190613960565b8510158015612c15575043600f546004612c12919061375a565b10155b8015612c3857506001600160a01b038716600090815260208052604090205460ff165b8015612c5c57506001600160a01b038616600090815260208052604090205460ff16155b8015612c8157506001600160a01b0386166000908152601e602052604090205460ff16155b8015612c8f57506000601654115b15612e1a57600f544310612cb657600160066000828254612cb09190613960565b90915550505b6001600160a01b03861660009081526010602052604090205460ff16612d96576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556012805491929091612d0f90849061375a565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6103e860165486612da79190613772565b612db19190613791565b905060165460185482612dc49190613772565b612dce9190613791565b601d6000828254612ddf919061375a565b9091555050601654601754612df49083613772565b612dfe9190613791565b601c6000828254612e0f919061375a565b90915550612f539050565b6001600160a01b038616600090815260208052604090205460ff168015612e4357506000601954115b15612ea6576103e860195486612e599190613772565b612e639190613791565b9050601954601b5482612e769190613772565b612e809190613791565b601d6000828254612e91919061375a565b9091555050601954601a54612df49083613772565b6001600160a01b038716600090815260208052604090205460ff168015612ecf57506000601654115b15612f53576103e860165486612ee59190613772565b612eef9190613791565b905060165460185482612f029190613772565b612f0c9190613791565b601d6000828254612f1d919061375a565b9091555050601654601754612f329083613772565b612f3c9190613791565b601c6000828254612f4d919061375a565b90915550505b8015612f6457612f648730836123e6565b612f6e8186613960565b94505b612f7c8787876123e6565b50505050505050565b6000612f90306113ac565b90506000601c54601d54612fa4919061375a565b9050811580612fb1575080155b15612fba575050565b600b54612fc8906014613772565b821115612fe057600b54612fdd906014613772565b91505b600080600283601d5486612ff49190613772565b612ffe9190613791565b6130089190613791565b905061301c6130178286613960565b613177565b601d544790819060009061303290600290613791565b61303c9087613960565b601c546130499085613772565b6130539190613791565b905061305f8183613960565b6000601d819055601c559150831580159061307a5750600082115b156130895761308984836132d1565b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146130d6576040519150601f19603f3d011682016040523d82523d6000602084013e6130db565b606091505b50505050505050505050565b6001600160a01b0382166000818152601f6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b03821660009081526020805260409020805460ff1916821515179055611d4e82826130e7565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131ac576131ac6137ed565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613205573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613229919061381c565b8160018151811061323c5761323c6137ed565b6001600160a01b03928316602091820292909201015260095461326291309116846122c2565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061329b908590600090869030904290600401613977565b600060405180830381600087803b1580156132b557600080fd5b505af11580156132c9573d6000803e3d6000fd5b505050505050565b6009546132e99030906001600160a01b0316846122c2565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906133289030908790600090819061dead904290600401613839565b60606040518083038185885af1158015613346573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061336b9190613874565b5050505050565b6000806040838503121561338557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156133c1578581018301518582016040015282016133a5565b818111156133d3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146133fe57600080fd5b50565b6000806040838503121561341457600080fd5b823561341f816133e9565b946020939093013593505050565b60006020828403121561343f57600080fd5b813561344a816133e9565b9392505050565b60006020828403121561346357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156134a9576134a961346a565b604052919050565b600067ffffffffffffffff8211156134cb576134cb61346a565b5060051b60200190565b600082601f8301126134e657600080fd5b813560206134fb6134f6836134b1565b613480565b82815260059290921b8401810191818101908684111561351a57600080fd5b8286015b84811015613535578035835291830191830161351e565b509695505050505050565b6000806040838503121561355357600080fd5b823567ffffffffffffffff8082111561356b57600080fd5b818501915085601f83011261357f57600080fd5b8135602061358f6134f6836134b1565b82815260059290921b840181019181810190898411156135ae57600080fd5b948201945b838610156135d55785356135c6816133e9565b825294820194908201906135b3565b965050860135925050808211156135eb57600080fd5b506135f8858286016134d5565b9150509250929050565b60008060006060848603121561361757600080fd5b8335613622816133e9565b92506020840135613632816133e9565b929592945050506040919091013590565b80151581146133fe57600080fd5b6000806040838503121561366457600080fd5b823561366f816133e9565b9150602083013561367f81613643565b809150509250929050565b6000806040838503121561369d57600080fd5b82356136a8816133e9565b9150602083013561367f816133e9565b600081518084526020808501945080840160005b838110156136f15781516001600160a01b0316875295820195908201906001016136cc565b509495945050505050565b60208152600061344a60208301846136b8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561376d5761376d613744565b500190565b600081600019048311821515161561378c5761378c613744565b500290565b6000826137ae57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806137c757607f821691505b6020821081036137e757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161381557613815613744565b5060010190565b60006020828403121561382e57600080fd5b815161344a816133e9565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561388957600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156138b457600080fd5b5051919050565b6000602082840312156138cd57600080fd5b815161344a81613643565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561397257613972613744565b500390565b85815284602082015260a06040820152600061399660a08301866136b8565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212201502947da2262018d5e6bd2464d8e6b51eb5a993a057ec9bf47814fc6f18b1c364736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806380d75bab116101f2578063c876d0b91161010d578063eb472fc4116100a0578063f5648a4f1161006f578063f5648a4f14610aef578063f637434214610b04578063f8b45b0514610b1a578063fb002c9714610b3057600080fd5b8063eb472fc414610a83578063ee40166e14610aa3578063f11a24d314610ab9578063f2fde38b14610acf57600080fd5b8063dd62ed3e116100dc578063dd62ed3e146109f2578063e2f4560514610a38578063e884f26014610a4e578063ea4cfe1214610a6357600080fd5b8063c876d0b914610982578063d257b34f1461099c578063d85ba063146109bc578063dc3f0d0f146109d257600080fd5b80639e46fddb11610185578063a9059cbb11610154578063a9059cbb146108f4578063b62496f514610914578063bbc0c74214610943578063c02466681461096257600080fd5b80639e46fddb146108885780639e93ad8e146108a8578063a457c2d7146108be578063a62068ce146108de57600080fd5b80638da5cb5b116101c15780638da5cb5b1461081357806395d89b41146108315780639a5bd2dd146108465780639a7a23d61461086857600080fd5b806380d75bab1461078d5780638366e79a146107ad57806385ecfd28146107cd57806388e765ff146107fd57600080fd5b80634f77f6c0116102e25780636a486a8e1161027557806370a082311161024457806370a0823114610723578063715018a614610743578063751039fc146107585780637571336a1461076d57600080fd5b80636a486a8e146106c45780636b0a894c146106da5780636c9230db146106f05780636ddd17131461070357600080fd5b80635bb988c9116102b15780635bb988c91461065b57806366ca9b831461067b57806366d602ae1461069b578063672d5d3b146106b157600080fd5b80634f77f6c01461060357806351f205e41461061957806358a6d5311461062e5780635a139dd41461064557600080fd5b80632307b4411161035a57806339509351116103295780633950935114610589578063452ed4f1146105a9578063499b8394146105c95780634a62bb65146105e957600080fd5b80632307b4411461050d57806323b872dd1461052d5780632be32b611461054d578063313ce5671461056d57600080fd5b806310d5de531161039657806310d5de531461048857806318160ddd146104b85780631a8145bb146104d75780631c499ab0146104ed57600080fd5b806302dbd8f8146103d357806306fdde03146103f55780630758d92414610420578063095ea7b31461045857600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee366004613372565b610b46565b005b34801561040157600080fd5b5061040a610bfe565b6040516104179190613394565b60405180910390f35b34801561042c57600080fd5b50600954610440906001600160a01b031681565b6040516001600160a01b039091168152602001610417565b34801561046457600080fd5b50610478610473366004613401565b610c90565b6040519015158152602001610417565b34801561049457600080fd5b506104786104a336600461342d565b601f6020526000908152604090205460ff1681565b3480156104c457600080fd5b506002545b604051908152602001610417565b3480156104e357600080fd5b506104c9601d5481565b3480156104f957600080fd5b506103f3610508366004613451565b610ca6565b34801561051957600080fd5b506103f3610528366004613540565b610da8565b34801561053957600080fd5b50610478610548366004613602565b610f01565b34801561055957600080fd5b506103f3610568366004613451565b610fab565b34801561057957600080fd5b5060405160128152602001610417565b34801561059557600080fd5b506104786105a4366004613401565b6110b1565b3480156105b557600080fd5b50600a54610440906001600160a01b031681565b3480156105d557600080fd5b506103f36105e436600461342d565b6110ed565b3480156105f557600080fd5b506013546104789060ff1681565b34801561060f57600080fd5b506104c9601a5481565b34801561062557600080fd5b506103f36111ad565b34801561063a57600080fd5b50600f544310610478565b34801561065157600080fd5b506104c960175481565b34801561066757600080fd5b506103f361067636600461342d565b6112b6565b34801561068757600080fd5b506103f3610696366004613372565b611301565b3480156106a757600080fd5b506104c960075481565b3480156106bd57600080fd5b50436104c9565b3480156106d057600080fd5b506104c960195481565b3480156106e657600080fd5b506104c960125481565b3480156106fc57600080fd5b50426104c9565b34801561070f57600080fd5b506013546104789062010000900460ff1681565b34801561072f57600080fd5b506104c961073e36600461342d565b6113ac565b34801561074f57600080fd5b506103f36113c7565b34801561076457600080fd5b506103f361143b565b34801561077957600080fd5b506103f3610788366004613651565b6114b8565b34801561079957600080fd5b506103f36107a8366004613451565b611580565b3480156107b957600080fd5b506104786107c836600461368a565b6119ec565b3480156107d957600080fd5b506104786107e836600461342d565b60106020526000908152604090205460ff1681565b34801561080957600080fd5b506104c960065481565b34801561081f57600080fd5b506005546001600160a01b0316610440565b34801561083d57600080fd5b5061040a611c26565b34801561085257600080fd5b5061085b611c35565b60405161041791906136fc565b34801561087457600080fd5b506103f3610883366004613651565b611c96565b34801561089457600080fd5b50600d54610440906001600160a01b031681565b3480156108b457600080fd5b506104c96103e881565b3480156108ca57600080fd5b506104786108d9366004613401565b611d8a565b3480156108ea57600080fd5b506104c9600f5481565b34801561090057600080fd5b5061047861090f366004613401565b611e23565b34801561092057600080fd5b5061047861092f36600461342d565b602080526000908152604090205460ff1681565b34801561094f57600080fd5b5060135461047890610100900460ff1681565b34801561096e57600080fd5b506103f361097d366004613651565b611e30565b34801561098e57600080fd5b506015546104789060ff1681565b3480156109a857600080fd5b506103f36109b7366004613451565b611eb9565b3480156109c857600080fd5b506104c960165481565b3480156109de57600080fd5b506103f36109ed366004613451565b612004565b3480156109fe57600080fd5b506104c9610a0d36600461368a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a4457600080fd5b506104c9600b5481565b348015610a5a57600080fd5b506103f361210b565b348015610a6f57600080fd5b50600c54610440906001600160a01b031681565b348015610a8f57600080fd5b50610440610a9e366004613451565b612141565b348015610aaf57600080fd5b506104c9600e5481565b348015610ac557600080fd5b506104c960185481565b348015610adb57600080fd5b506103f3610aea36600461342d565b61216b565b348015610afb57600080fd5b506103f3612256565b348015610b1057600080fd5b506104c9601b5481565b348015610b2657600080fd5b506104c960085481565b348015610b3c57600080fd5b506104c9601c5481565b6005546001600160a01b03163314610b795760405162461bcd60e51b8152600401610b709061370f565b60405180910390fd5b601a829055601b819055610b8d818361375a565b6019556064610b9f6103e8600f613772565b610ba99190613791565b6019541115610bfa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b70565b5050565b606060038054610c0d906137b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c39906137b3565b8015610c865780601f10610c5b57610100808354040283529160200191610c86565b820191906000526020600020905b815481529060010190602001808311610c6957829003601f168201915b5050505050905090565b6000610c9d3384846122c2565b50600192915050565b6005546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610b709061370f565b670de0b6b3a76400006064610ce460025490565b610cee9190613791565b610cf89190613791565b811015610d5a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152696572207468616e20312560b01b6064820152608401610b70565b610d6c81670de0b6b3a7640000613772565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610b709061370f565b8051825114610e235760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b70565b610258825110610e945760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b70565b60005b8251811015610efc576000838281518110610eb457610eb46137ed565b602002602001015190506000838381518110610ed257610ed26137ed565b60200260200101519050610ee73383836123e6565b50508080610ef490613803565b915050610e97565b505050565b6000610f0e84848461253b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f935760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b70565b610fa085338584036122c2565b506001949350505050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610b709061370f565b670de0b6b3a76400006103e8610fea60025490565b610ff5906005613772565b610fff9190613791565b6110099190613791565b81101561106a5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610b70565b61107c81670de0b6b3a7640000613772565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610d9d565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c9d9185906110e890869061375a565b6122c2565b6005546001600160a01b031633146111175760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b0381166111635760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610b70565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146111d75760405162461bcd60e51b8152600401610b709061370f565b600b546111e3306113ac565b1015611259576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b70565b600a805460ff60a01b1916600160a01b179055611274612f85565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112e05760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b0316331461132b5760405162461bcd60e51b8152600401610b709061370f565b6017829055601881905561133f818361375a565b60165560646113516103e8600f613772565b61135b9190613791565b6016541115610bfa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b70565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113f15760405162461bcd60e51b8152600401610b709061370f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146114655760405162461bcd60e51b8152600401610b709061370f565b6013805460ff199081169091556015805490911690556002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114e25760405162461bcd60e51b8152600401610b709061370f565b8061155557600a546001600160a01b03908116908316036115555760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b70565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115aa5760405162461bcd60e51b8152600401610b709061370f565b601354610100900460ff16156116165760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b70565b600a81106116765760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610b70565b6013805462ffff0019166201010017905543600e81905561169890829061375a565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b919061381c565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561179d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c1919061381c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561180e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611832919061381c565b600a80546001600160a01b0319166001600160a01b0392909216918217905561185c9060016130e7565b600a54611873906001600160a01b0316600161314a565b600047116118cf5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b70565b60006118da306113ac565b116119365760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b70565b6009546119519030906001600160a01b03166110e8826113ac565b6009546001600160a01b031663f305d719473061196d816113ac565b600d546040516001600160e01b031960e087901b1681526119a393929160009182916001600160a01b0316904290600401613839565b60606040518083038185885af11580156119c1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119e69190613874565b50505050565b6005546000906001600160a01b03163314611a195760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b038316611a6f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b70565b6001600160a01b03831630141580611a8f5750601354610100900460ff16155b611af85760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b70565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6391906138a2565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bda91906138bb565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610c0d906137b3565b60606011805480602002602001604051908101604052809291908181526020018280548015610c8657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c6f575050505050905090565b6005546001600160a01b03163314611cc05760405162461bcd60e51b8152600401610b709061370f565b600a546001600160a01b0390811690831603611d445760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b70565b611d4e828261314a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611e0c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b70565b611e1933858584036122c2565b5060019392505050565b6000610c9d33848461253b565b6005546001600160a01b03163314611e5a5760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611ee35760405162461bcd60e51b8152600401610b709061370f565b620186a0611ef060025490565b611efb906001613772565b611f059190613791565b811015611f725760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b70565b6103e8611f7e60025490565b611f89906001613772565b611f939190613791565b811115611fff5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b70565b600b55565b6005546001600160a01b0316331461202e5760405162461bcd60e51b8152600401610b709061370f565b670de0b6b3a76400006103e861204360025490565b61204e906005613772565b6120589190613791565b6120629190613791565b8110156120c45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610b70565b6120d681670de0b6b3a7640000613772565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610d9d565b6005546001600160a01b031633146121355760405162461bcd60e51b8152600401610b709061370f565b6015805460ff19169055565b6011818154811061215157600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146121955760405162461bcd60e51b8152600401610b709061370f565b6001600160a01b0381166121fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b70565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122805760405162461bcd60e51b8152600401610b709061370f565b604051600090339047908381818185875af1925050503d80600081146119e6576040519150601f19603f3d011682016040523d82523d6000602084013e6119e6565b6001600160a01b0383166123245760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b70565b6001600160a01b0382166123855760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b70565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661240c5760405162461bcd60e51b8152600401610b70906138d8565b6001600160a01b0382166124325760405162461bcd60e51b8152600401610b709061391d565b6001600160a01b038316600090815260208190526040902054818110156124aa5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b70565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124e190849061375a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161252d91815260200190565b60405180910390a350505050565b6001600160a01b0383166125615760405162461bcd60e51b8152600401610b70906138d8565b6001600160a01b0382166125875760405162461bcd60e51b8152600401610b709061391d565b8060000361259b57610efc838360006123e6565b601354610100900460ff1661262e576001600160a01b0383166000908152601e602052604090205460ff16806125e957506001600160a01b0382166000908152601e602052604090205460ff165b61262e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b70565b600f5443101580156126475750601354610100900460ff165b15612717576001600160a01b03831660009081526010602052604090205460ff16158061268157506005546001600160a01b038381169116145b8061269657506001600160a01b03821661dead145b6127175760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b70565b60135460ff1615612af3576005546001600160a01b0384811691161480159061274e57506005546001600160a01b03838116911614155b801561276257506001600160a01b03821615155b801561277957506001600160a01b03821661dead14155b801561279e57506001600160a01b0383166000908152601e602052604090205460ff16155b80156127c357506001600160a01b0382166000908152601e602052604090205460ff16155b15612af35760155460ff16156128c8576009546001600160a01b038381169116148015906127ff5750600a546001600160a01b03838116911614155b156128c857326000908152601460205260409020544311801561283957506001600160a01b03821660009081526014602052604090205443115b6128a35760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b70565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b038316600090815260208052604090205460ff16801561290857506001600160a01b0382166000908152601f602052604090205460ff16155b156129cf576006548111156129705760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b70565b60085461297c836113ac565b612986908361375a565b11156129ca5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610b70565b612af3565b6001600160a01b038216600090815260208052604090205460ff168015612a0f57506001600160a01b0383166000908152601f602052604090205460ff16155b15612a79576007548111156129ca5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b70565b6001600160a01b0382166000908152601f602052604090205460ff16612af357600854612aa5836113ac565b612aaf908361375a565b1115612af35760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08195e18d959591959606a1b6044820152606401610b70565b6000612afe306113ac565b600b5490915081108015908190612b1d575060135462010000900460ff165b8015612b335750600a54600160a01b900460ff16155b8015612b5657506001600160a01b038416600090815260208052604090205460ff165b15612b8457600a805460ff60a01b1916600160a01b179055612b76612f85565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601e602052604090205460019060ff1680612bc657506001600160a01b0385166000908152601e602052604090205460ff165b15612bcf575060005b60008115612f7157600f54431080612c155750670c7d713b49da0000600654612bf89190613960565b8510158015612c15575043600f546004612c12919061375a565b10155b8015612c3857506001600160a01b038716600090815260208052604090205460ff165b8015612c5c57506001600160a01b038616600090815260208052604090205460ff16155b8015612c8157506001600160a01b0386166000908152601e602052604090205460ff16155b8015612c8f57506000601654115b15612e1a57600f544310612cb657600160066000828254612cb09190613960565b90915550505b6001600160a01b03861660009081526010602052604090205460ff16612d96576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556012805491929091612d0f90849061375a565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6103e860165486612da79190613772565b612db19190613791565b905060165460185482612dc49190613772565b612dce9190613791565b601d6000828254612ddf919061375a565b9091555050601654601754612df49083613772565b612dfe9190613791565b601c6000828254612e0f919061375a565b90915550612f539050565b6001600160a01b038616600090815260208052604090205460ff168015612e4357506000601954115b15612ea6576103e860195486612e599190613772565b612e639190613791565b9050601954601b5482612e769190613772565b612e809190613791565b601d6000828254612e91919061375a565b9091555050601954601a54612df49083613772565b6001600160a01b038716600090815260208052604090205460ff168015612ecf57506000601654115b15612f53576103e860165486612ee59190613772565b612eef9190613791565b905060165460185482612f029190613772565b612f0c9190613791565b601d6000828254612f1d919061375a565b9091555050601654601754612f329083613772565b612f3c9190613791565b601c6000828254612f4d919061375a565b90915550505b8015612f6457612f648730836123e6565b612f6e8186613960565b94505b612f7c8787876123e6565b50505050505050565b6000612f90306113ac565b90506000601c54601d54612fa4919061375a565b9050811580612fb1575080155b15612fba575050565b600b54612fc8906014613772565b821115612fe057600b54612fdd906014613772565b91505b600080600283601d5486612ff49190613772565b612ffe9190613791565b6130089190613791565b905061301c6130178286613960565b613177565b601d544790819060009061303290600290613791565b61303c9087613960565b601c546130499085613772565b6130539190613791565b905061305f8183613960565b6000601d819055601c559150831580159061307a5750600082115b156130895761308984836132d1565b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146130d6576040519150601f19603f3d011682016040523d82523d6000602084013e6130db565b606091505b50505050505050505050565b6001600160a01b0382166000818152601f6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b03821660009081526020805260409020805460ff1916821515179055611d4e82826130e7565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131ac576131ac6137ed565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613205573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613229919061381c565b8160018151811061323c5761323c6137ed565b6001600160a01b03928316602091820292909201015260095461326291309116846122c2565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061329b908590600090869030904290600401613977565b600060405180830381600087803b1580156132b557600080fd5b505af11580156132c9573d6000803e3d6000fd5b505050505050565b6009546132e99030906001600160a01b0316846122c2565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906133289030908790600090819061dead904290600401613839565b60606040518083038185885af1158015613346573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061336b9190613874565b5050505050565b6000806040838503121561338557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156133c1578581018301518582016040015282016133a5565b818111156133d3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146133fe57600080fd5b50565b6000806040838503121561341457600080fd5b823561341f816133e9565b946020939093013593505050565b60006020828403121561343f57600080fd5b813561344a816133e9565b9392505050565b60006020828403121561346357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156134a9576134a961346a565b604052919050565b600067ffffffffffffffff8211156134cb576134cb61346a565b5060051b60200190565b600082601f8301126134e657600080fd5b813560206134fb6134f6836134b1565b613480565b82815260059290921b8401810191818101908684111561351a57600080fd5b8286015b84811015613535578035835291830191830161351e565b509695505050505050565b6000806040838503121561355357600080fd5b823567ffffffffffffffff8082111561356b57600080fd5b818501915085601f83011261357f57600080fd5b8135602061358f6134f6836134b1565b82815260059290921b840181019181810190898411156135ae57600080fd5b948201945b838610156135d55785356135c6816133e9565b825294820194908201906135b3565b965050860135925050808211156135eb57600080fd5b506135f8858286016134d5565b9150509250929050565b60008060006060848603121561361757600080fd5b8335613622816133e9565b92506020840135613632816133e9565b929592945050506040919091013590565b80151581146133fe57600080fd5b6000806040838503121561366457600080fd5b823561366f816133e9565b9150602083013561367f81613643565b809150509250929050565b6000806040838503121561369d57600080fd5b82356136a8816133e9565b9150602083013561367f816133e9565b600081518084526020808501945080840160005b838110156136f15781516001600160a01b0316875295820195908201906001016136cc565b509495945050505050565b60208152600061344a60208301846136b8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561376d5761376d613744565b500190565b600081600019048311821515161561378c5761378c613744565b500290565b6000826137ae57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806137c757607f821691505b6020821081036137e757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161381557613815613744565b5060010190565b60006020828403121561382e57600080fd5b815161344a816133e9565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561388957600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156138b457600080fd5b5051919050565b6000602082840312156138cd57600080fd5b815161344a81613643565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561397257613972613744565b500390565b85815284602082015260a06040820152600061399660a08301866136b8565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212201502947da2262018d5e6bd2464d8e6b51eb5a993a057ec9bf47814fc6f18b1c364736f6c634300080d0033

Deployed Bytecode Sourcemap

7985:19646:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16919:342;;;;;;;;;;-1:-1:-1;16919:342:0;;;;;:::i;:::-;;:::i;:::-;;2363:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8129:27;;;;;;;;;;-1:-1:-1;8129:27:0;;;;-1:-1:-1;;;;;8129:27:0;;;;;;-1:-1:-1;;;;;1051:32:1;;;1033:51;;1021:2;1006:18;8129:27:0;869:221:1;3277:169:0;;;;;;;;;;-1:-1:-1;3277:169:0;;;;;:::i;:::-;;:::i;:::-;;;1716:14:1;;1709:22;1691:41;;1679:2;1664:18;3277:169:0;1551:187:1;9396:64:0;;;;;;;;;;-1:-1:-1;9396:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2684:108;;;;;;;;;;-1:-1:-1;2772:12:0;;2684:108;;;2141:25:1;;;2129:2;2114:18;2684:108:0;1995:177:1;9241:33:0;;;;;;;;;;;;;;;;14233:258;;;;;;;;;;-1:-1:-1;14233:258:0;;;;;:::i;:::-;;:::i;15134:618::-;;;;;;;;;;-1:-1:-1;15134:618:0;;;;;:::i;:::-;;:::i;3454:458::-;;;;;;;;;;-1:-1:-1;3454:458:0;;;;;:::i;:::-;;:::i;13670:269::-;;;;;;;;;;-1:-1:-1;13670:269:0;;;;;:::i;:::-;;:::i;2583:93::-;;;;;;;;;;-1:-1:-1;2583:93:0;;2666:2;5452:36:1;;5440:2;5425:18;2583:93:0;5310:184:1;3920:215:0;;;;;;;;;;-1:-1:-1;3920:215:0;;;;;:::i;:::-;;:::i;8163:21::-;;;;;;;;;;-1:-1:-1;8163:21:0;;;;-1:-1:-1;;;;;8163:21:0;;;25650:278;;;;;;;;;;-1:-1:-1;25650:278:0;;;;;:::i;:::-;;:::i;8581:33::-;;;;;;;;;;-1:-1:-1;8581:33:0;;;;;;;;9121:32;;;;;;;;;;;;;;;;25984:312;;;;;;;;;;;;;:::i;22234:120::-;;;;;;;;;;-1:-1:-1;22328:18:0;;22313:12;:33;22234:120;;9009:31;;;;;;;;;;;;;;;;13387:108;;;;;;;;;;-1:-1:-1;13387:108:0;;;;;:::i;:::-;;:::i;16577:334::-;;;;;;;;;;-1:-1:-1;16577:334:0;;;;;:::i;:::-;;:::i;8061:28::-;;;;;;;;;;;;;;;;22943:97;;;;;;;;;;-1:-1:-1;23020:12:0;22943:97;;9086:28;;;;;;;;;;;;;;;;8547:25;;;;;;;;;;;;;;;;23048:104;;;;;;;;;;-1:-1:-1;23129:15:0;23048:104;;8661:31;;;;;;;;;;-1:-1:-1;8661:31:0;;;;;;;;;;;2800:127;;;;;;;;;;-1:-1:-1;2800:127:0;;;;;:::i;:::-;;:::i;6410:150::-;;;;;;;;;;;;;:::i;12999:269::-;;;;;;;;;;;;;:::i;15764:260::-;;;;;;;;;;-1:-1:-1;15764:260:0;;;;;:::i;:::-;;:::i;26304:1324::-;;;;;;;;;;-1:-1:-1;26304:1324:0;;;;;:::i;:::-;;:::i;24914:498::-;;;;;;;;;;-1:-1:-1;24914:498:0;;;;;:::i;:::-;;:::i;8461:44::-;;;;;;;;;;-1:-1:-1;8461:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8027:27;;;;;;;;;;;;;;;;6196:79;;;;;;;;;;-1:-1:-1;6261:6:0;;-1:-1:-1;;;;;6261:6:0;6196:79;;2471:104;;;;;;;;;;;;;:::i;13276:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16032:293::-;;;;;;;;;;-1:-1:-1;16032:293:0;;;;;:::i;:::-;;:::i;8302:33::-;;;;;;;;;;-1:-1:-1;8302:33:0;;;;-1:-1:-1;;;;;8302:33:0;;;8924:42;;;;;;;;;;;;8962:4;8924:42;;4143:413;;;;;;;;;;-1:-1:-1;4143:413:0;;;;;:::i;:::-;;:::i;8421:33::-;;;;;;;;;;;;;;;;2935:175;;;;;;;;;;-1:-1:-1;2935:175:0;;;;;:::i;:::-;;:::i;9618:58::-;;;;;;;;;;-1:-1:-1;9618:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8621:33;;;;;;;;;;-1:-1:-1;8621:33:0;;;;;;;;;;;17269:182;;;;;;;;;;-1:-1:-1;17269:182:0;;;;;:::i;:::-;;:::i;8876:39::-;;;;;;;;;;-1:-1:-1;8876:39:0;;;;;;;;14561:346;;;;;;;;;;-1:-1:-1;14561:346:0;;;;;:::i;:::-;;:::i;8975:27::-;;;;;;;;;;;;;;;;13951:274;;;;;;;;;;-1:-1:-1;13951:274:0;;;;;:::i;:::-;;:::i;3118:151::-;;;;;;;;;;-1:-1:-1;3118:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3234:18:0;;;3207:7;3234:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3118:151;8221:33;;;;;;;;;;;;;;;;13560:98;;;;;;;;;;;;;:::i;8263:32::-;;;;;;;;;;-1:-1:-1;8263:32:0;;;;-1:-1:-1;;;;;8263:32:0;;;8512:28;;;;;;;;;;-1:-1:-1;8512:28:0;;;;;:::i;:::-;;:::i;8344:37::-;;;;;;;;;;;;;;;;9047:30;;;;;;;;;;;;;;;;6568:244;;;;;;;;;;-1:-1:-1;6568:244:0;;;;;:::i;:::-;;:::i;25482:160::-;;;;;;;;;;;;;:::i;9160:31::-;;;;;;;;;;;;;;;;8096:24;;;;;;;;;;;;;;;;9200:34;;;;;;;;;;;;;;;;16919:342;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;;;;;;;;;17020:17:::1;:34:::0;;;17065:16:::1;:32:::0;;;17124:36:::1;17084:13:::0;17040:14;17124:36:::1;:::i;:::-;17108:13;:52:::0;17216:3:::1;17196:17;8962:4;17196:2;:17;:::i;:::-;:23;;;;:::i;:::-;17179:13;;:40;;17171:82;;;::::0;-1:-1:-1;;;17171:82:0;;8565:2:1;17171:82:0::1;::::0;::::1;8547:21:1::0;8604:2;8584:18;;;8577:30;8643:31;8623:18;;;8616:59;8692:18;;17171:82:0::1;8363:353:1::0;17171:82:0::1;16919:342:::0;;:::o;2363:100::-;2417:13;2450:5;2443:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2363:100;:::o;3277:169::-;3360:4;3377:39;785:10;3400:7;3409:6;3377:8;:39::i;:::-;-1:-1:-1;3434:4:0;3277:169;;;;:::o;14233:258::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;14343:4:::1;14338:3;14323:13;2772:12:::0;;;2684:108;14323:13:::1;:18;;;;:::i;:::-;14322:25;;;;:::i;:::-;14312:6;:35;;14304:90;;;::::0;-1:-1:-1;;;14304:90:0;;9308:2:1;14304:90:0::1;::::0;::::1;9290:21:1::0;9347:2;9327:18;;;9320:30;9386:34;9366:18;;;9359:62;-1:-1:-1;;;9437:18:1;;;9430:40;9487:19;;14304:90:0::1;9106:406:1::0;14304:90:0::1;14417:17;:6:::0;14427::::1;14417:17;:::i;:::-;14405:9;:29:::0;;;14450:33:::1;::::0;2141:25:1;;;14450:33:0::1;::::0;2129:2:1;2114:18;14450:33:0::1;;;;;;;;14233:258:::0;:::o;15134:618::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;15276:15:::1;:22;15258:7;:14;:40;15250:83;;;::::0;-1:-1:-1;;;15250:83:0;;9719:2:1;15250:83:0::1;::::0;::::1;9701:21:1::0;9758:2;9738:18;;;9731:30;9797:32;9777:18;;;9770:60;9847:18;;15250:83:0::1;9517:354:1::0;15250:83:0::1;15369:3;15352:7;:14;:20;15344:87;;;::::0;-1:-1:-1;;;15344:87:0;;10078:2:1;15344:87:0::1;::::0;::::1;10060:21:1::0;10117:2;10097:18;;;10090:30;10156:34;10136:18;;;10129:62;-1:-1:-1;;;10207:18:1;;;10200:52;10269:19;;15344:87:0::1;9876:418:1::0;15344:87:0::1;15544:9;15540:205;15563:7;:14;15559:1;:18;15540:205;;;15598:14;15615:7;15623:1;15615:10;;;;;;;;:::i;:::-;;;;;;;15598:27;;15640:14;15657:15;15673:1;15657:18;;;;;;;;:::i;:::-;;;;;;;15640:35;;15690:43;15706:10;15718:6;15726;15690:15;:43::i;:::-;15583:162;;15579:3;;;;;:::i;:::-;;;;15540:205;;;;15134:618:::0;;:::o;3454:458::-;3560:4;3577:36;3587:6;3595:9;3606:6;3577:9;:36::i;:::-;-1:-1:-1;;;;;3653:19:0;;3626:24;3653:19;;;:11;:19;;;;;;;;785:10;3653:33;;;;;;;;3705:26;;;;3697:79;;;;-1:-1:-1;;;3697:79:0;;10773:2:1;3697:79:0;;;10755:21:1;10812:2;10792:18;;;10785:30;10851:34;10831:18;;;10824:62;-1:-1:-1;;;10902:18:1;;;10895:38;10950:19;;3697:79:0;10571:404:1;3697:79:0;3812:57;3821:6;785:10;3862:6;3843:16;:25;3812:8;:57::i;:::-;-1:-1:-1;3900:4:0;;3454:458;-1:-1:-1;;;;3454:458:0:o;13670:269::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;13789:4:::1;13783;13763:13;2772:12:::0;;;2684:108;13763:13:::1;:17;::::0;13779:1:::1;13763:17;:::i;:::-;:24;;;;:::i;:::-;13762:31;;;;:::i;:::-;13752:6;:41;;13744:95;;;::::0;-1:-1:-1;;;13744:95:0;;11182:2:1;13744:95:0::1;::::0;::::1;11164:21:1::0;11221:2;11201:18;;;11194:30;11260:34;11240:18;;;11233:62;-1:-1:-1;;;11311:18:1;;;11304:39;11360:19;;13744:95:0::1;10980:405:1::0;13744:95:0::1;13865:17;:6:::0;13875::::1;13865:17;:::i;:::-;13850:12;:32:::0;;;13898:33:::1;::::0;2141:25:1;;;13898:33:0::1;::::0;2129:2:1;2114:18;13898:33:0::1;1995:177:1::0;3920:215:0;785:10;4008:4;4057:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4057:34:0;;;;;;;;;;4008:4;;4025:80;;4048:7;;4057:47;;4094:10;;4057:47;:::i;:::-;4025:8;:80::i;25650:278::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25746:32:0;::::1;25738:64;;;::::0;-1:-1:-1;;;25738:64:0;;11592:2:1;25738:64:0::1;::::0;::::1;11574:21:1::0;11631:2;11611:18;;;11604:30;-1:-1:-1;;;11650:18:1;;;11643:49;11709:18;;25738:64:0::1;11390:343:1::0;25738:64:0::1;25813:17;:47:::0;;-1:-1:-1;;;;;;25813:47:0::1;-1:-1:-1::0;;;;;25813:47:0;::::1;::::0;;::::1;::::0;;;25876:44:::1;::::0;::::1;::::0;-1:-1:-1;;25876:44:0::1;25650:278:::0;:::o;25984:312::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;26075:18:::1;;26047:24;26065:4;26047:9;:24::i;:::-;:46;;26039:123;;;::::0;;-1:-1:-1;;;26039:123:0;;11940:2:1;26039:123:0::1;::::0;::::1;11922:21:1::0;11959:18;;;11952:30;;;;12018:34;11998:18;;;11991:62;12089:34;12069:18;;;12062:62;12141:19;;26039:123:0::1;11738:428:1::0;26039:123:0::1;26173:8;:15:::0;;-1:-1:-1;;;;26173:15:0::1;-1:-1:-1::0;;;26173:15:0::1;::::0;;26199:10:::1;:8;:10::i;:::-;26220:8;:16:::0;;-1:-1:-1;;;;26220:16:0::1;::::0;;26252:36:::1;::::0;26272:15:::1;2141:25:1::0;;26252:36:0::1;::::0;2129:2:1;2114:18;26252:36:0::1;;;;;;;25984:312::o:0;13387:108::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13460:19:0::1;13482:5;13460:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;13460:27:0::1;::::0;;13387:108::o;16577:334::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;16677:16:::1;:33:::0;;;16721:15:::1;:31:::0;;;16778:34:::1;16739:13:::0;16696:14;16778:34:::1;:::i;:::-;16763:12;:49:::0;16866:3:::1;16847:16;8962:4;16847:2;:16;:::i;:::-;:22;;;;:::i;:::-;16831:12;;:38;;16823:80;;;::::0;-1:-1:-1;;;16823:80:0;;8565:2:1;16823:80:0::1;::::0;::::1;8547:21:1::0;8604:2;8584:18;;;8577:30;8643:31;8623:18;;;8616:59;8692:18;;16823:80:0::1;8363:353:1::0;2800:127:0;-1:-1:-1;;;;;2901:18:0;2874:7;2901:18;;;;;;;;;;;;2800:127::o;6410:150::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;6503:6:::1;::::0;6482:40:::1;::::0;6519:1:::1;::::0;-1:-1:-1;;;;;6503:6:0::1;::::0;6482:40:::1;::::0;6519:1;;6482:40:::1;6533:6;:19:::0;;-1:-1:-1;;;;;;6533:19:0::1;::::0;;6410:150::o;12999:269::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;13053:14:::1;:22:::0;;-1:-1:-1;;13053:22:0;;::::1;::::0;;;13086:20:::1;:28:::0;;;;::::1;::::0;;2772:12;;13125::::1;:28:::0;2772:12;;13164:13:::1;:29:::0;2772:12;;13204:9:::1;:25:::0;13245:15:::1;::::0;::::1;::::0;;;::::1;12999:269::o:0;15764:260::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;15860:4:::1;15856:104;;15898:6;::::0;-1:-1:-1;;;;;15898:6:0;;::::1;15888:16:::0;;::::1;::::0;15880:68:::1;;;::::0;-1:-1:-1;;;15880:68:0;;12373:2:1;15880:68:0::1;::::0;::::1;12355:21:1::0;12412:2;12392:18;;;12385:30;12451:34;12431:18;;;12424:62;-1:-1:-1;;;12502:18:1;;;12495:37;12549:19;;15880:68:0::1;12171:403:1::0;15880:68:0::1;-1:-1:-1::0;;;;;15970:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;15970:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15764:260::o;26304:1324::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;26399:13:::1;::::0;::::1;::::0;::::1;;;26398:14;26390:70;;;::::0;-1:-1:-1;;;26390:70:0;;12781:2:1;26390:70:0::1;::::0;::::1;12763:21:1::0;12820:2;12800:18;;;12793:30;12859:34;12839:18;;;12832:62;-1:-1:-1;;;12910:18:1;;;12903:41;12961:19;;26390:70:0::1;12579:407:1::0;26390:70:0::1;26498:2;26479:16;:21;26471:73;;;::::0;-1:-1:-1;;;26471:73:0;;13193:2:1;26471:73:0::1;::::0;::::1;13175:21:1::0;13232:2;13212:18;;;13205:30;13271:34;13251:18;;;13244:62;-1:-1:-1;;;13322:18:1;;;13315:37;13369:19;;26471:73:0::1;12991:403:1::0;26471:73:0::1;26592:13;:20:::0;;-1:-1:-1;;26623:18:0;;;;;26673:12:::1;26652:18;:33:::0;;;26717:37:::1;::::0;26738:16;;26717:37:::1;:::i;:::-;26696:18;:58:::0;26770:16:::1;::::0;::::1;::::0;;;::::1;26844:9;;;;;;;;;-1:-1:-1::0;;;;;26844:9:0::1;-1:-1:-1::0;;;;;26844:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26832:43:0::1;;26884:4;26891:9;;;;;;;;;-1:-1:-1::0;;;;;26891:9:0::1;-1:-1:-1::0;;;;;26891:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26832:76;::::0;-1:-1:-1;;;;;;26832:76:0::1;::::0;;;;;;-1:-1:-1;;;;;13885:15:1;;;26832:76:0::1;::::0;::::1;13867:34:1::0;13937:15;;13917:18;;;13910:43;13802:18;;26832:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26823:6;:85:::0;;-1:-1:-1;;;;;;26823:85:0::1;-1:-1:-1::0;;;;;26823:85:0;;;::::1;::::0;;::::1;::::0;;26919:49:::1;::::0;-1:-1:-1;26919:26:0::1;:49::i;:::-;27016:6;::::0;26979:51:::1;::::0;-1:-1:-1;;;;;27016:6:0::1;::::0;26979:28:::1;:51::i;:::-;27110:1;27086:21;:25;27078:73;;;::::0;-1:-1:-1;;;27078:73:0;;14166:2:1;27078:73:0::1;::::0;::::1;14148:21:1::0;14205:2;14185:18;;;14178:30;14244:34;14224:18;;;14217:62;-1:-1:-1;;;14295:18:1;;;14288:33;14338:19;;27078:73:0::1;13964:399:1::0;27078:73:0::1;27199:1;27172:24;27190:4;27172:9;:24::i;:::-;:28;27164:79;;;::::0;-1:-1:-1;;;27164:79:0;;14570:2:1;27164:79:0::1;::::0;::::1;14552:21:1::0;14609:2;14589:18;;;14582:30;14648:34;14628:18;;;14621:62;-1:-1:-1;;;14699:18:1;;;14692:36;14745:19;;27164:79:0::1;14368:402:1::0;27164:79:0::1;27288:9;::::0;27256:69:::1;::::0;27273:4:::1;::::0;-1:-1:-1;;;;;27288:9:0::1;27300:24;27273:4:::0;27300:9:::1;:24::i;27256:69::-;27338:9;::::0;-1:-1:-1;;;;;27338:9:0::1;:25;27371:21;27416:4;27436:24;27416:4:::0;27436:9:::1;:24::i;:::-;27561:18;::::0;27338:282:::1;::::0;-1:-1:-1;;;;;;27338:282:0::1;::::0;;;;;;::::1;::::0;;;27475:1:::1;::::0;;;-1:-1:-1;;;;;27561:18:0::1;::::0;27594:15:::1;::::0;27338:282:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26304:1324:::0;:::o;24914:498::-;6323:6;;25001:10;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25032:20:0;::::1;25024:59;;;::::0;-1:-1:-1;;;25024:59:0;;15900:2:1;25024:59:0::1;::::0;::::1;15882:21:1::0;15939:2;15919:18;;;15912:30;15978:28;15958:18;;;15951:56;16024:18;;25024:59:0::1;15698:350:1::0;25024:59:0::1;-1:-1:-1::0;;;;;25102:23:0;::::1;25120:4;25102:23;;::::0;:41:::1;;-1:-1:-1::0;25130:13:0::1;::::0;::::1;::::0;::::1;;;25129:14;25102:41;25094:106;;;::::0;-1:-1:-1;;;25094:106:0;;16255:2:1;25094:106:0::1;::::0;::::1;16237:21:1::0;16294:2;16274:18;;;16267:30;16333:34;16313:18;;;16306:62;-1:-1:-1;;;16384:18:1;;;16377:50;16444:19;;25094:106:0::1;16053:416:1::0;25094:106:0::1;25238:39;::::0;-1:-1:-1;;;25238:39:0;;25271:4:::1;25238:39;::::0;::::1;1033:51:1::0;25211:24:0::1;::::0;-1:-1:-1;;;;;25238:24:0;::::1;::::0;::::1;::::0;1006:18:1;;25238:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25296:46;::::0;-1:-1:-1;;;25296:46:0;;-1:-1:-1;;;;;16855:32:1;;;25296:46:0::1;::::0;::::1;16837:51:1::0;16904:18;;;16897:34;;;25211:66:0;;-1:-1:-1;25296:23:0;;::::1;::::0;::::1;::::0;16810:18:1;;25296:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25358;::::0;;-1:-1:-1;;;;;16855:32:1;;16837:51;;16919:2;16904:18;;16897:34;;;25288:54:0;;-1:-1:-1;25358:46:0::1;::::0;16810:18:1;25358:46:0::1;;;;;;;25013:399;24914:498:::0;;;;:::o;2471:104::-;2527:13;2560:7;2553:14;;;;;:::i;13276:103::-;13325:16;13360:11;13353:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13353:18:0;;;;;;;;;;;;;;;;;;;;;;13276:103;:::o;16032:293::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;16141:6:::1;::::0;-1:-1:-1;;;;;16141:6:0;;::::1;16133:14:::0;;::::1;::::0;16125:84:::1;;;::::0;-1:-1:-1;;;16125:84:0;;17394:2:1;16125:84:0::1;::::0;::::1;17376:21:1::0;17433:2;17413:18;;;17406:30;17472:34;17452:18;;;17445:62;17543:27;17523:18;;;17516:55;17588:19;;16125:84:0::1;17192:421:1::0;16125:84:0::1;16220:41;16249:4;16255:5;16220:28;:41::i;:::-;16277:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;16277:40:0;::::1;::::0;::::1;::::0;;;::::1;16032:293:::0;;:::o;4143:413::-;785:10;4236:4;4280:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4280:34:0;;;;;;;;;;4333:35;;;;4325:85;;;;-1:-1:-1;;;4325:85:0;;17820:2:1;4325:85:0;;;17802:21:1;17859:2;17839:18;;;17832:30;17898:34;17878:18;;;17871:62;-1:-1:-1;;;17949:18:1;;;17942:35;17994:19;;4325:85:0;17618:401:1;4325:85:0;4446:67;785:10;4469:7;4497:15;4478:16;:34;4446:8;:67::i;:::-;-1:-1:-1;4544:4:0;;4143:413;-1:-1:-1;;;4143:413:0:o;2935:175::-;3021:4;3038:42;785:10;3062:9;3073:6;3038:9;:42::i;17269:182::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17354:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17354:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17409:34;;1691:41:1;;;17409:34:0::1;::::0;1664:18:1;17409:34:0::1;;;;;;;17269:182:::0;;:::o;14561:346::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;14684:6:::1;14664:13;2772:12:::0;;;2684:108;14664:13:::1;:17;::::0;14680:1:::1;14664:17;:::i;:::-;:26;;;;:::i;:::-;14651:9;:39;;14643:105;;;::::0;-1:-1:-1;;;14643:105:0;;18226:2:1;14643:105:0::1;::::0;::::1;18208:21:1::0;18265:2;18245:18;;;18238:30;18304:34;18284:18;;;18277:62;-1:-1:-1;;;18355:18:1;;;18348:51;18416:19;;14643:105:0::1;18024:417:1::0;14643:105:0::1;14799:4;14779:13;2772:12:::0;;;2684:108;14779:13:::1;:17;::::0;14795:1:::1;14779:17;:::i;:::-;:24;;;;:::i;:::-;14766:9;:37;;14758:102;;;::::0;-1:-1:-1;;;14758:102:0;;18648:2:1;14758:102:0::1;::::0;::::1;18630:21:1::0;18687:2;18667:18;;;18660:30;18726:34;18706:18;;;18699:62;-1:-1:-1;;;18777:18:1;;;18770:50;18837:19;;14758:102:0::1;18446:416:1::0;14758:102:0::1;14870:18;:30:::0;14561:346::o;13951:274::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;14071:4:::1;14065;14045:13;2772:12:::0;;;2684:108;14045:13:::1;:17;::::0;14061:1:::1;14045:17;:::i;:::-;:24;;;;:::i;:::-;14044:31;;;;:::i;:::-;14034:6;:41;;14026:96;;;::::0;-1:-1:-1;;;14026:96:0;;19069:2:1;14026:96:0::1;::::0;::::1;19051:21:1::0;19108:2;19088:18;;;19081:30;19147:34;19127:18;;;19120:62;-1:-1:-1;;;19198:18:1;;;19191:40;19248:19;;14026:96:0::1;18867:406:1::0;14026:96:0::1;14149:17;:6:::0;14159::::1;14149:17;:::i;:::-;14133:13;:33:::0;;;14182:35:::1;::::0;2141:25:1;;;14182:35:0::1;::::0;2129:2:1;2114:18;14182:35:0::1;1995:177:1::0;13560:98:0;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;13622:20:::1;:28:::0;;-1:-1:-1;;13622:28:0::1;::::0;;13560:98::o;8512:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8512:28:0;;-1:-1:-1;8512:28:0;:::o;6568:244::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6657:22:0;::::1;6649:73;;;::::0;-1:-1:-1;;;6649:73:0;;19480:2:1;6649:73:0::1;::::0;::::1;19462:21:1::0;19519:2;19499:18;;;19492:30;19558:34;19538:18;;;19531:62;-1:-1:-1;;;19609:18:1;;;19602:36;19655:19;;6649:73:0::1;19278:402:1::0;6649:73:0::1;6759:6;::::0;6738:38:::1;::::0;-1:-1:-1;;;;;6738:38:0;;::::1;::::0;6759:6:::1;::::0;6738:38:::1;::::0;6759:6:::1;::::0;6738:38:::1;6787:6;:17:::0;;-1:-1:-1;;;;;;6787:17:0::1;-1:-1:-1::0;;;;;6787:17:0;;;::::1;::::0;;;::::1;::::0;;6568:244::o;25482:160::-;6323:6;;-1:-1:-1;;;;;6323:6:0;785:10;6323:22;6315:67;;;;-1:-1:-1;;;6315:67:0;;;;;;;:::i;:::-;25576:58:::1;::::0;25540:12:::1;::::0;25584:10:::1;::::0;25608:21:::1;::::0;25540:12;25576:58;25540:12;25576:58;25608:21;25584:10;25576:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5485:380:::0;-1:-1:-1;;;;;5621:19:0;;5613:68;;;;-1:-1:-1;;;5613:68:0;;20097:2:1;5613:68:0;;;20079:21:1;20136:2;20116:18;;;20109:30;20175:34;20155:18;;;20148:62;-1:-1:-1;;;20226:18:1;;;20219:34;20270:19;;5613:68:0;19895:400:1;5613:68:0;-1:-1:-1;;;;;5700:21:0;;5692:68;;;;-1:-1:-1;;;5692:68:0;;20502:2:1;5692:68:0;;;20484:21:1;20541:2;20521:18;;;20514:30;20580:34;20560:18;;;20553:62;-1:-1:-1;;;20631:18:1;;;20624:32;20673:19;;5692:68:0;20300:398:1;5692:68:0;-1:-1:-1;;;;;5773:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5825:32;;2141:25:1;;;5825:32:0;;2114:18:1;5825:32:0;;;;;;;5485:380;;;:::o;4564:614::-;-1:-1:-1;;;;;4704:20:0;;4696:70;;;;-1:-1:-1;;;4696:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4785:23:0;;4777:71;;;;-1:-1:-1;;;4777:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4885:17:0;;4861:21;4885:17;;;;;;;;;;;4921:23;;;;4913:74;;;;-1:-1:-1;;;4913:74:0;;21715:2:1;4913:74:0;;;21697:21:1;21754:2;21734:18;;;21727:30;21793:34;21773:18;;;21766:62;-1:-1:-1;;;21844:18:1;;;21837:36;21890:19;;4913:74:0;21513:402:1;4913:74:0;-1:-1:-1;;;;;5023:17:0;;;:9;:17;;;;;;;;;;;5043:22;;;5023:42;;5087:20;;;;;;;;:30;;5059:6;;5023:9;5087:30;;5059:6;;5087:30;:::i;:::-;;;;;;;;5152:9;-1:-1:-1;;;;;5135:35:0;5144:6;-1:-1:-1;;;;;5135:35:0;;5163:6;5135:35;;;;2141:25:1;;2129:2;2114:18;;1995:177;5135:35:0;;;;;;;;4685:493;4564:614;;;:::o;17459:4767::-;-1:-1:-1;;;;;17559:18:0;;17551:68;;;;-1:-1:-1;;;17551:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17638:16:0;;17630:64;;;;-1:-1:-1;;;17630:64:0;;;;;;;:::i;:::-;17807:6;17817:1;17807:11;17804:91;;17834:28;17850:4;17856:2;17860:1;17834:15;:28::i;17804:91::-;17919:13;;;;;;;17915:132;;-1:-1:-1;;;;;17956:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17985:23:0;;;;;;:19;:23;;;;;;;;17956:52;17948:87;;;;-1:-1:-1;;;17948:87:0;;22122:2:1;17948:87:0;;;22104:21:1;22161:2;22141:18;;;22134:30;-1:-1:-1;;;22180:18:1;;;22173:52;22242:18;;17948:87:0;21920:346:1;17948:87:0;22328:18;;22313:12;:33;18062:26;:43;;;;-1:-1:-1;18092:13:0;;;;;;;18062:43;18059:217;;;-1:-1:-1;;;;;18130:17:0;;;;;;:11;:17;;;;;;;;18129:18;;:35;;-1:-1:-1;6261:6:0;;-1:-1:-1;;;;;18151:13:0;;;6261:6;;18151:13;18129:35;:60;;;-1:-1:-1;;;;;;18168:21:0;;18182:6;18168:21;18129:60;18121:143;;;;-1:-1:-1;;;18121:143:0;;22473:2:1;18121:143:0;;;22455:21:1;22512:2;22492:18;;;22485:30;22551:34;22531:18;;;22524:62;22622:34;22602:18;;;22595:62;-1:-1:-1;;;22673:19:1;;;22666:37;22720:19;;18121:143:0;22271:474:1;18121:143:0;18299:14;;;;18296:1478;;;6261:6;;-1:-1:-1;;;;;18333:15:0;;;6261:6;;18333:15;;;;:32;;-1:-1:-1;6261:6:0;;-1:-1:-1;;;;;18352:13:0;;;6261:6;;18352:13;;18333:32;:52;;;;-1:-1:-1;;;;;;18369:16:0;;;;18333:52;:77;;;;-1:-1:-1;;;;;;18389:21:0;;18403:6;18389:21;;18333:77;:107;;;;-1:-1:-1;;;;;;18415:25:0;;;;;;:19;:25;;;;;;;;18414:26;18333:107;:135;;;;-1:-1:-1;;;;;;18445:23:0;;;;;;:19;:23;;;;;;;;18444:24;18333:135;18329:1434;;;18494:20;;;;18490:482;;;18556:9;;-1:-1:-1;;;;;18542:24:0;;;18556:9;;18542:24;;;;:49;;-1:-1:-1;18584:6:0;;-1:-1:-1;;;;;18570:21:0;;;18584:6;;18570:21;;18542:49;18538:415;;;18652:9;18627:35;;;;:24;:35;;;;;;18665:12;-1:-1:-1;18627:97:0;;;;-1:-1:-1;;;;;;18681:28:0;;;;;;:24;:28;;;;;;18712:12;-1:-1:-1;18627:97:0;18619:163;;;;-1:-1:-1;;;18619:163:0;;22952:2:1;18619:163:0;;;22934:21:1;22991:2;22971:18;;;22964:30;23030:34;23010:18;;;23003:62;-1:-1:-1;;;23081:18:1;;;23074:51;23142:19;;18619:163:0;22750:417:1;18619:163:0;18834:9;18809:35;;;;:24;:35;;;;;;18847:12;18809:50;;;;-1:-1:-1;;;;;18886:28:0;;;;;;:43;18538:415;-1:-1:-1;;;;;19041:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;19077:35:0;;;;;;:31;:35;;;;;;;;19076:36;19041:71;19037:711;;;19155:12;;19145:6;:22;;19137:75;;;;-1:-1:-1;;;19137:75:0;;23374:2:1;19137:75:0;;;23356:21:1;23413:2;23393:18;;;23386:30;23452:34;23432:18;;;23425:62;-1:-1:-1;;;23503:18:1;;;23496:38;23551:19;;19137:75:0;23172:404:1;19137:75:0;19269:9;;19252:13;19262:2;19252:9;:13::i;:::-;19243:22;;:6;:22;:::i;:::-;:35;;19235:67;;;;-1:-1:-1;;;19235:67:0;;23783:2:1;19235:67:0;;;23765:21:1;23822:2;23802:18;;;23795:30;-1:-1:-1;;;23841:18:1;;;23834:49;23900:18;;19235:67:0;23581:343:1;19235:67:0;19037:711;;;-1:-1:-1;;;;;19379:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;19413:37:0;;;;;;:31;:37;;;;;;;;19412:38;19379:71;19375:373;;;19493:13;;19483:6;:23;;19475:78;;;;-1:-1:-1;;;19475:78:0;;24131:2:1;19475:78:0;;;24113:21:1;24170:2;24150:18;;;24143:30;24209:34;24189:18;;;24182:62;-1:-1:-1;;;24260:18:1;;;24253:40;24310:19;;19475:78:0;23929:406:1;19375:373:0;-1:-1:-1;;;;;19601:35:0;;;;;;:31;:35;;;;;;;;19596:152;;19695:9;;19678:13;19688:2;19678:9;:13::i;:::-;19669:22;;:6;:22;:::i;:::-;:35;;19661:67;;;;-1:-1:-1;;;19661:67:0;;23783:2:1;19661:67:0;;;23765:21:1;23822:2;23802:18;;;23795:30;-1:-1:-1;;;23841:18:1;;;23834:49;23900:18;;19661:67:0;23581:343:1;19661:67:0;19786:28;19817:24;19835:4;19817:9;:24::i;:::-;19901:18;;19786:55;;-1:-1:-1;19877:42:0;;;;;;;19935:22;;-1:-1:-1;19946:11:0;;;;;;;19935:22;:35;;;;-1:-1:-1;19962:8:0;;-1:-1:-1;;;19962:8:0;;;;19961:9;19935:35;:68;;;;-1:-1:-1;;;;;;19974:29:0;;;;;;:25;:29;;;;;;;;19935:68;19932:171;;;20020:8;:15;;-1:-1:-1;;;;20020:15:0;-1:-1:-1;;;20020:15:0;;;20050:10;:8;:10::i;:::-;20075:8;:16;;-1:-1:-1;;;;20075:16:0;;;19932:171;-1:-1:-1;;;;;20233:25:0;;20115:12;20233:25;;;:19;:25;;;;;;20130:4;;20233:25;;;:52;;-1:-1:-1;;;;;;20262:23:0;;;;;;:19;:23;;;;;;;;20233:52;20230:99;;;-1:-1:-1;20312:5:0;20230:99;20349:12;20453:7;20450:1723;;;22328:18;;22313:12;:33;20516:106;;;;20571:8;20556:12;;:23;;;;:::i;:::-;20546:6;:33;;:75;;;;;20609:12;20583:18;;20604:1;20583:22;;;;:::i;:::-;:38;;20546:75;20515:143;;;;-1:-1:-1;;;;;;20627:31:0;;;;;;:25;:31;;;;;;;;20515:143;:177;;;;-1:-1:-1;;;;;;20663:29:0;;;;;;:25;:29;;;;;;;;20662:30;20515:177;:205;;;;-1:-1:-1;;;;;;20697:23:0;;;;;;:19;:23;;;;;;;;20696:24;20515:205;:225;;;;;20739:1;20724:12;;:16;20515:225;20512:1492;;;22328:18;;22313:12;:33;20778:90;;20847:1;20831:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;20778:90:0;-1:-1:-1;;;;;20892:15:0;;;;;;:11;:15;;;;;;;;20888:214;;-1:-1:-1;;;;;20931:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;20931:22:0;20949:4;20931:22;;;;;;20976:10;:15;;20949:4;;20976:10;;:15;;20949:4;;20976:15;:::i;:::-;;;;-1:-1:-1;;21014:11:0;:20;;;;;;;-1:-1:-1;21014:20:0;;;;;;;;-1:-1:-1;;;;;;21014:20:0;-1:-1:-1;;;;;21014:20:0;;;;;;;;21062;;1033:51:1;;;21062:20:0;;1021:2:1;1006:18;21062:20:0;;;;;;;20888:214;8962:4;21138:12;;21129:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;21122:42;;21227:12;;21209:15;;21202:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;21180:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;21307:12:0;;21288:16;;21281:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;21258:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;20512:1492:0;;-1:-1:-1;20512:1492:0;;-1:-1:-1;;;;;21384:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;21433:1;21417:13;;:17;21384:50;21380:624;;;8962:4;21470:13;;21461:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;21454:43;;21564:13;;21545:16;;21538:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;21516:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21646:13:0;;21626:17;;21619:24;;:4;:24;:::i;21380:624::-;-1:-1:-1;;;;;21722:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;21772:1;21757:12;;:16;21722:51;21719:285;;;8962:4;21807:12;;21798:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;21791:42;;21896:12;;21878:15;;21871:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;21849:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;21976:12:0;;21957:16;;21950:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;21927:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21719:285:0;22035:8;;22032:93;;22067:42;22083:4;22097;22104;22067:15;:42::i;:::-;22147:14;22157:4;22147:14;;:::i;:::-;;;20450:1723;22185:33;22201:4;22207:2;22211:6;22185:15;:33::i;:::-;17538:4688;;;;17459:4767;;;:::o;23681:1225::-;23722:23;23748:24;23766:4;23748:9;:24::i;:::-;23722:50;;23783:25;23832:19;;23811:18;;:40;;;;:::i;:::-;23783:68;-1:-1:-1;23875:20:0;;;:46;;-1:-1:-1;23899:22:0;;23875:46;23872:60;;;23924:7;;23681:1225::o;23872:60::-;23965:18;;:23;;23986:2;23965:23;:::i;:::-;23947:15;:41;23944:113;;;24022:18;;:23;;24043:2;24022:23;:::i;:::-;24004:41;;23944:113;24069:12;24151:23;24236:1;24216:17;24195:18;;24177:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24151:86;-1:-1:-1;24258:51:0;24275:33;24151:86;24275:15;:33;:::i;:::-;24258:16;:51::i;:::-;24517:18;;24352:21;;;;24331:18;;24517:20;;24536:1;;24517:20;:::i;:::-;24496:42;;:17;:42;:::i;:::-;24473:19;;24460:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;24433:106;-1:-1:-1;24552:35:0;24433:106;24552:35;;:::i;:::-;24633:1;24612:18;:22;;;24645:19;:23;24552:35;-1:-1:-1;24692:19:0;;;;;:42;;;24733:1;24715:15;:19;24692:42;24689:119;;;24750:46;24763:15;24780;24750:12;:46::i;:::-;24841:17;;24833:65;;-1:-1:-1;;;;;24841:17:0;;;;24872:21;;24833:65;;;;24872:21;24841:17;24833:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;23681:1225:0:o;14919:207::-;-1:-1:-1;;;;;15007:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;15007:52:0;;;;;;;;;;15075:43;;24638:51:1;;;24705:18;;;24698:50;15075:43:0;;24611:18:1;15075:43:0;;;;;;;14919:207;;:::o;16333:236::-;-1:-1:-1;;;;;16416:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;16416:39:0;;;;;;;16466;16416:31;:39;16466:26;:39::i;22362:573::-;22514:16;;;22528:1;22514:16;;;;;;;;22490:21;;22514:16;;;;;;;;;;-1:-1:-1;22514:16:0;22490:40;;22559:4;22541;22546:1;22541:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22541:23:0;;;:7;;;;;;;;;;:23;;;;22585:9;;:16;;;-1:-1:-1;;;22585:16:0;;;;:9;;;;;:14;;:16;;;;;22541:7;;22585:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22575:4;22580:1;22575:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22575:26:0;;;:7;;;;;;;;;:26;22646:9;;22614:56;;22631:4;;22646:9;22658:11;22614:8;:56::i;:::-;22709:9;;:218;;-1:-1:-1;;;22709:218:0;;-1:-1:-1;;;;;22709:9:0;;;;:60;;:218;;22784:11;;22709:9;;22854:4;;22881;;22901:15;;22709:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22417:518;22362:573;:::o;23164:509::-;23344:9;;23312:56;;23329:4;;-1:-1:-1;;;;;23344:9:0;23356:11;23312:8;:56::i;:::-;23411:9;;:254;;-1:-1:-1;;;23411:254:0;;-1:-1:-1;;;;;23411:9:0;;;;:25;;23444:9;;23411:254;;23477:4;;23497:11;;23411:9;;;;23617:6;;23639:15;;23411:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23164:509;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;1095:131::-;-1:-1:-1;;;;;1170:31:1;;1160:42;;1150:70;;1216:1;1213;1206:12;1150:70;1095:131;:::o;1231:315::-;1299:6;1307;1360:2;1348:9;1339:7;1335:23;1331:32;1328:52;;;1376:1;1373;1366:12;1328:52;1415:9;1402:23;1434:31;1459:5;1434:31;:::i;:::-;1484:5;1536:2;1521:18;;;;1508:32;;-1:-1:-1;;;1231:315:1:o;1743:247::-;1802:6;1855:2;1843:9;1834:7;1830:23;1826:32;1823:52;;;1871:1;1868;1861:12;1823:52;1910:9;1897:23;1929:31;1954:5;1929:31;:::i;:::-;1979:5;1743:247;-1:-1:-1;;;1743:247:1:o;2177:180::-;2236:6;2289:2;2277:9;2268:7;2264:23;2260:32;2257:52;;;2305:1;2302;2295:12;2257:52;-1:-1:-1;2328:23:1;;2177:180;-1:-1:-1;2177:180:1:o;2362:127::-;2423:10;2418:3;2414:20;2411:1;2404:31;2454:4;2451:1;2444:15;2478:4;2475:1;2468:15;2494:275;2565:2;2559:9;2630:2;2611:13;;-1:-1:-1;;2607:27:1;2595:40;;2665:18;2650:34;;2686:22;;;2647:62;2644:88;;;2712:18;;:::i;:::-;2748:2;2741:22;2494:275;;-1:-1:-1;2494:275:1:o;2774:183::-;2834:4;2867:18;2859:6;2856:30;2853:56;;;2889:18;;:::i;:::-;-1:-1:-1;2934:1:1;2930:14;2946:4;2926:25;;2774:183::o;2962:662::-;3016:5;3069:3;3062:4;3054:6;3050:17;3046:27;3036:55;;3087:1;3084;3077:12;3036:55;3123:6;3110:20;3149:4;3173:60;3189:43;3229:2;3189:43;:::i;:::-;3173:60;:::i;:::-;3267:15;;;3353:1;3349:10;;;;3337:23;;3333:32;;;3298:12;;;;3377:15;;;3374:35;;;3405:1;3402;3395:12;3374:35;3441:2;3433:6;3429:15;3453:142;3469:6;3464:3;3461:15;3453:142;;;3535:17;;3523:30;;3573:12;;;;3486;;3453:142;;;-1:-1:-1;3613:5:1;2962:662;-1:-1:-1;;;;;;2962:662:1:o;3629:1215::-;3747:6;3755;3808:2;3796:9;3787:7;3783:23;3779:32;3776:52;;;3824:1;3821;3814:12;3776:52;3864:9;3851:23;3893:18;3934:2;3926:6;3923:14;3920:34;;;3950:1;3947;3940:12;3920:34;3988:6;3977:9;3973:22;3963:32;;4033:7;4026:4;4022:2;4018:13;4014:27;4004:55;;4055:1;4052;4045:12;4004:55;4091:2;4078:16;4113:4;4137:60;4153:43;4193:2;4153:43;:::i;4137:60::-;4231:15;;;4313:1;4309:10;;;;4301:19;;4297:28;;;4262:12;;;;4337:19;;;4334:39;;;4369:1;4366;4359:12;4334:39;4393:11;;;;4413:217;4429:6;4424:3;4421:15;4413:217;;;4509:3;4496:17;4526:31;4551:5;4526:31;:::i;:::-;4570:18;;4446:12;;;;4608;;;;4413:217;;;4649:5;-1:-1:-1;;4692:18:1;;4679:32;;-1:-1:-1;;4723:16:1;;;4720:36;;;4752:1;4749;4742:12;4720:36;;4775:63;4830:7;4819:8;4808:9;4804:24;4775:63;:::i;:::-;4765:73;;;3629:1215;;;;;:::o;4849:456::-;4926:6;4934;4942;4995:2;4983:9;4974:7;4970:23;4966:32;4963:52;;;5011:1;5008;5001:12;4963:52;5050:9;5037:23;5069:31;5094:5;5069:31;:::i;:::-;5119:5;-1:-1:-1;5176:2:1;5161:18;;5148:32;5189:33;5148:32;5189:33;:::i;:::-;4849:456;;5241:7;;-1:-1:-1;;;5295:2:1;5280:18;;;;5267:32;;4849:456::o;5707:118::-;5793:5;5786:13;5779:21;5772:5;5769:32;5759:60;;5815:1;5812;5805:12;5830:382;5895:6;5903;5956:2;5944:9;5935:7;5931:23;5927:32;5924:52;;;5972:1;5969;5962:12;5924:52;6011:9;5998:23;6030:31;6055:5;6030:31;:::i;:::-;6080:5;-1:-1:-1;6137:2:1;6122:18;;6109:32;6150:30;6109:32;6150:30;:::i;:::-;6199:7;6189:17;;;5830:382;;;;;:::o;6217:388::-;6285:6;6293;6346:2;6334:9;6325:7;6321:23;6317:32;6314:52;;;6362:1;6359;6352:12;6314:52;6401:9;6388:23;6420:31;6445:5;6420:31;:::i;:::-;6470:5;-1:-1:-1;6527:2:1;6512:18;;6499:32;6540:33;6499:32;6540:33;:::i;6610:461::-;6663:3;6701:5;6695:12;6728:6;6723:3;6716:19;6754:4;6783:2;6778:3;6774:12;6767:19;;6820:2;6813:5;6809:14;6841:1;6851:195;6865:6;6862:1;6859:13;6851:195;;;6930:13;;-1:-1:-1;;;;;6926:39:1;6914:52;;6986:12;;;;7021:15;;;;6962:1;6880:9;6851:195;;;-1:-1:-1;7062:3:1;;6610:461;-1:-1:-1;;;;;6610:461:1:o;7076:261::-;7255:2;7244:9;7237:21;7218:4;7275:56;7327:2;7316:9;7312:18;7304:6;7275:56;:::i;7342:356::-;7544:2;7526:21;;;7563:18;;;7556:30;7622:34;7617:2;7602:18;;7595:62;7689:2;7674:18;;7342:356::o;7703:127::-;7764:10;7759:3;7755:20;7752:1;7745:31;7795:4;7792:1;7785:15;7819:4;7816:1;7809:15;7835:128;7875:3;7906:1;7902:6;7899:1;7896:13;7893:39;;;7912:18;;:::i;:::-;-1:-1:-1;7948:9:1;;7835:128::o;7968:168::-;8008:7;8074:1;8070;8066:6;8062:14;8059:1;8056:21;8051:1;8044:9;8037:17;8033:45;8030:71;;;8081:18;;:::i;:::-;-1:-1:-1;8121:9:1;;7968:168::o;8141:217::-;8181:1;8207;8197:132;;8251:10;8246:3;8242:20;8239:1;8232:31;8286:4;8283:1;8276:15;8314:4;8311:1;8304:15;8197:132;-1:-1:-1;8343:9:1;;8141:217::o;8721:380::-;8800:1;8796:12;;;;8843;;;8864:61;;8918:4;8910:6;8906:17;8896:27;;8864:61;8971:2;8963:6;8960:14;8940:18;8937:38;8934:161;;9017:10;9012:3;9008:20;9005:1;8998:31;9052:4;9049:1;9042:15;9080:4;9077:1;9070:15;8934:161;;8721:380;;;:::o;10299:127::-;10360:10;10355:3;10351:20;10348:1;10341:31;10391:4;10388:1;10381:15;10415:4;10412:1;10405:15;10431:135;10470:3;10491:17;;;10488:43;;10511:18;;:::i;:::-;-1:-1:-1;10558:1:1;10547:13;;10431:135::o;13399:251::-;13469:6;13522:2;13510:9;13501:7;13497:23;13493:32;13490:52;;;13538:1;13535;13528:12;13490:52;13570:9;13564:16;13589:31;13614:5;13589:31;:::i;14775:607::-;-1:-1:-1;;;;;15134:15:1;;;15116:34;;15181:2;15166:18;;15159:34;;;;15224:2;15209:18;;15202:34;;;;15267:2;15252:18;;15245:34;;;;15316:15;;;15310:3;15295:19;;15288:44;15096:3;15348:19;;15341:35;;;;15065:3;15050:19;;14775:607::o;15387:306::-;15475:6;15483;15491;15544:2;15532:9;15523:7;15519:23;15515:32;15512:52;;;15560:1;15557;15550:12;15512:52;15589:9;15583:16;15573:26;;15639:2;15628:9;15624:18;15618:25;15608:35;;15683:2;15672:9;15668:18;15662:25;15652:35;;15387:306;;;;;:::o;16474:184::-;16544:6;16597:2;16585:9;16576:7;16572:23;16568:32;16565:52;;;16613:1;16610;16603:12;16565:52;-1:-1:-1;16636:16:1;;16474:184;-1:-1:-1;16474:184:1:o;16942:245::-;17009:6;17062:2;17050:9;17041:7;17037:23;17033:32;17030:52;;;17078:1;17075;17068:12;17030:52;17110:9;17104:16;17129:28;17151:5;17129:28;:::i;20703:401::-;20905:2;20887:21;;;20944:2;20924:18;;;20917:30;20983:34;20978:2;20963:18;;20956:62;-1:-1:-1;;;21049:2:1;21034:18;;21027:35;21094:3;21079:19;;20703:401::o;21109:399::-;21311:2;21293:21;;;21350:2;21330:18;;;21323:30;21389:34;21384:2;21369:18;;21362:62;-1:-1:-1;;;21455:2:1;21440:18;;21433:33;21498:3;21483:19;;21109:399::o;24340:125::-;24380:4;24408:1;24405;24402:8;24399:34;;;24413:18;;:::i;:::-;-1:-1:-1;24450:9:1;;24340:125::o;24759:582::-;25058:6;25047:9;25040:25;25101:6;25096:2;25085:9;25081:18;25074:34;25144:3;25139:2;25128:9;25124:18;25117:31;25021:4;25165:57;25217:3;25206:9;25202:19;25194:6;25165:57;:::i;:::-;-1:-1:-1;;;;;25258:32:1;;;;25253:2;25238:18;;25231:60;-1:-1:-1;25322:3:1;25307:19;25300:35;25157:65;24759:582;-1:-1:-1;;;24759:582:1:o

Swarm Source

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