ETH Price: $3,117.70 (+1.54%)

Token

SHIBACAPITAL (SHIBACAP)
 

Overview

Max Total Supply

10,000,000,000,000 SHIBACAP

Holders

134

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

ShibaCapital's mission is to create a Treasury. Token Holders benefit from a growing treasury in form of redistribution and buybacks/burns

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ShibaCapital

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-24
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

contract ShibaCapital is ERC20, Ownable {

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

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public treasuryAddress;
    address public cliffAddress;

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

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

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyCliffFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellCliffFee;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForCliff;
    
    /******************/

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

    //event UpdatedCliffAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("SHIBACAPITAL", "SHIBACAP") {
        
        address newOwner = 0xeD9d43Ac63026619eA40500899609b62240105F3; // can leave alone if owner is deployer.
        
        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 totalSupply =  100 * 1e11 * 1e18;
        
        maxBuyAmount = totalSupply * 1 / 1000;
        maxSellAmount = totalSupply * 1 / 1000;
        maxWalletAmount = totalSupply * 3 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap amount
        
        buyTreasuryFee = 5;
        buyLiquidityFee = 5;
        buyCliffFee = 2;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyCliffFee;

        sellTreasuryFee = 8;
        sellLiquidityFee = 6;
        sellCliffFee = 2;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellCliffFee;

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

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

        treasuryAddress = address(newOwner);
        cliffAddress = 0x81ed317154E4C6E829B0358F59C5578719E95ccB;
        
        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
   
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee /*uint256 _cliffFee*/) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        //buyCliffFee = _cliffFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee /*+ buyCliffFee*/;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee /*, uint256 _cliffFee*/) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        //sellCliffFee = _cliffFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee /*+ sellCliffFee*/;
        require(sellTotalFees <= 25, "Must keep fees at 25% 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");
        require(amount > 0, "amount must be greater than 0");
        
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
                }
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 4 && _holderLastTransferTimestamp[to] < block.number - 4, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } 
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

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

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

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 penaltyAmount = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to marketing wallet to allow potential refund.
            if(tradingActiveBlock >= block.number + 1 && automatedMarketMakerPairs[from]){
                penaltyAmount = amount * 99 / 100;
                super._transfer(from, treasuryAddress, penaltyAmount);
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
                tokensForCliff += fees * sellCliffFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensForCliff += fees * buyCliffFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees + penaltyAmount;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

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

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

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForCliff = ethBalance * tokensForCliff / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForTreasury + ethForCliff;
            
        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        tokensForCliff = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(cliffAddress).call{value: ethForCliff}("");

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

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

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

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(_treasuryAddress != address(0), "_treasuryAddress address cannot be 0");
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

    // function setCliffAddress(address _cliffAddress) external onlyOwner {
    //     require(_cliffAddress != address(0), "_cliffAddress address cannot be 0");
    //     cliffAddress = payable(_cliffAddress);
    //     emit UpdatedCliffAddress(_cliffAddress);
    // }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"UpdatedTreasuryAddress","type":"event"},{"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":"buyCliffFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cliffAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCliffFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","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":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","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":"tokensForCliff","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","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":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","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"}]

60c06040526000600d55600e805462ffffff1916620100011790556010805460ff191660011790553480156200003457600080fd5b50604080518082018252600c81526b14d212509050d0541255105360a21b602080830191825283518085019094526008845267053484942414341560c41b908401528151919291620000899160039162000799565b5080516200009f90600490602084019062000799565b5050506000620000b46200043660201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003ca8833981519152908290a35073ed9d43ac63026619ea40500899609b62240105f3737a250d5630b4cf539739df2c5dacb4c659f2488d620001288160016200043a565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019991906200083f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020d91906200083f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028191906200083f565b6001600160a01b031660a08190526200029c9060016200049d565b6c7e37be2022c0914b26800000006103e8620002ba82600162000887565b620002c69190620008a9565b6006556103e8620002d982600162000887565b620002e59190620008a9565b6007556103e8620002f882600362000887565b620003049190620008a9565b600855620186a06200031882601962000887565b620003249190620008a9565b600a556005601281905560138190556002601481905590620003479080620008cc565b620003539190620008cc565b60115560086016819055600660178190556002601881905591620003789190620008cc565b620003849190620008cc565b601555620003948360016200043a565b620003a13060016200043a565b620003b061dead60016200043a565b620003bd83600162000509565b620003ca30600162000509565b620003d961dead600162000509565b600b80546001600160a01b0385166001600160a01b031991821617909155600c80549091167381ed317154e4c6e829b0358f59c5578719e95ccb179055620004228382620005b7565b6200042d836200069c565b50505062000924565b3390565b6001600160a01b0382166000818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601e60205260409020805460ff1916821515179055620004cd82826200043a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005585760405162461bcd60e51b8152602060048201819052602482015260008051602062003c8883398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200060f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200054f565b8060026000828254620006239190620008cc565b90915550506001600160a01b0382166000908152602081905260408120805483929062000652908490620008cc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006e75760405162461bcd60e51b8152602060048201819052602482015260008051602062003c8883398151915260448201526064016200054f565b6001600160a01b0381166200074e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200054f565b6005546040516001600160a01b0380841692169060008051602062003ca883398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b828054620007a790620008e7565b90600052602060002090601f016020900481019282620007cb576000855562000816565b82601f10620007e657805160ff191683800117855562000816565b8280016001018555821562000816579182015b8281111562000816578251825591602001919060010190620007f9565b506200082492915062000828565b5090565b5b8082111562000824576000815560010162000829565b6000602082840312156200085257600080fd5b81516001600160a01b03811681146200086a57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008a457620008a462000871565b500290565b600082620008c757634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008e257620008e262000871565b500190565b600181811c90821680620008fc57607f821691505b602082108114156200091e57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516132ff62000989600039600081816105570152818161115d0152818161151f0152611ef501526000818161043a01528181611eb801528181612a9801528181612b5101528181612b8d01528181612c070152612c6401526132ff6000f3fe60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063cd0a1224116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b146109dd578063f5648a4f146109fd578063f637434214610a12578063f6d9bfaa14610a2857600080fd5b8063e884f2601461099c578063ee40166e146109b1578063f11a24d3146109c757600080fd5b8063d8aad096116100d1578063d8aad0961461090a578063dc3f0d0f14610920578063dd62ed3e14610940578063e2f456051461098657600080fd5b8063cd0a1224146108be578063d257b34f146108d4578063d85ba063146108f457600080fd5b8063bbc0c74211610164578063c208fe741161013e578063c208fe741461084e578063c5f956af1461086e578063c876d0b91461088e578063cc2ffe7c146108a857600080fd5b8063bbc0c742146107ef578063c02466681461080e578063c18bc1951461082e57600080fd5b8063a457c2d7116101a0578063a457c2d714610769578063a9059cbb14610789578063aa4bde28146107a9578063b62496f5146107bf57600080fd5b80638da5cb5b1461071657806395d89b41146107345780639a7a23d61461074957600080fd5b80635c068a8c116102a057806370a082311161023e5780637571336a116102185780637571336a146106ab5780638366e79a146106cb57806388e765ff146106eb5780638a8c523c1461070157600080fd5b806370a082311461064b578063715018a614610681578063751039fc1461069657600080fd5b806366d602ae1161027a57806366d602ae146105e95780636a486a8e146105ff5780636b2fb124146106155780636ddd17131461062b57600080fd5b80635c068a8c146105935780636605bfda146105a957806366ca9b83146105c957600080fd5b80632307b4411161030d578063313ce567116102e7578063313ce56714610509578063395093511461052557806349bd5a5e146105455780634a62bb651461057957600080fd5b80632307b441146104a957806323b872dd146104c95780632be32b61146104e957600080fd5b806310d5de531161034957806310d5de53146103f85780631694505e1461042857806318160ddd146104745780631a8145bb1461049357600080fd5b806302dbd8f81461037b57806306fdde031461039d578063095ea7b3146103c857600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004612ce2565b610a3e565b005b3480156103a957600080fd5b506103b2610ade565b6040516103bf9190612d04565b60405180910390f35b3480156103d457600080fd5b506103e86103e3366004612d71565b610b70565b60405190151581526020016103bf565b34801561040457600080fd5b506103e8610413366004612d9d565b601d6020526000908152604090205460ff1681565b34801561043457600080fd5b5061045c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103bf565b34801561048057600080fd5b506002545b6040519081526020016103bf565b34801561049f57600080fd5b50610485601a5481565b3480156104b557600080fd5b5061039b6104c4366004612e97565b610b86565b3480156104d557600080fd5b506103e86104e4366004612f59565b610cf1565b3480156104f557600080fd5b5061039b610504366004612f9a565b610d9b565b34801561051557600080fd5b50604051601281526020016103bf565b34801561053157600080fd5b506103e8610540366004612d71565b610ea8565b34801561055157600080fd5b5061045c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b50600e546103e89060ff1681565b34801561059f57600080fd5b5061048560125481565b3480156105b557600080fd5b5061039b6105c4366004612d9d565b610ee4565b3480156105d557600080fd5b5061039b6105e4366004612ce2565b610fba565b3480156105f557600080fd5b5061048560075481565b34801561060b57600080fd5b5061048560155481565b34801561062157600080fd5b5061048560165481565b34801561063757600080fd5b50600e546103e89062010000900460ff1681565b34801561065757600080fd5b50610485610666366004612d9d565b6001600160a01b031660009081526020819052604090205490565b34801561068d57600080fd5b5061039b61104d565b3480156106a257600080fd5b5061039b6110c1565b3480156106b757600080fd5b5061039b6106c6366004612fc1565b61112c565b3480156106d757600080fd5b506103e86106e6366004612ffa565b611218565b3480156106f757600080fd5b5061048560065481565b34801561070d57600080fd5b5061039b611422565b34801561072257600080fd5b506005546001600160a01b031661045c565b34801561074057600080fd5b506103b26114e4565b34801561075557600080fd5b5061039b610764366004612fc1565b6114f3565b34801561077557600080fd5b506103e8610784366004612d71565b6115cf565b34801561079557600080fd5b506103e86107a4366004612d71565b611668565b3480156107b557600080fd5b5061048560085481565b3480156107cb57600080fd5b506103e86107da366004612d9d565b601e6020526000908152604090205460ff1681565b3480156107fb57600080fd5b50600e546103e890610100900460ff1681565b34801561081a57600080fd5b5061039b610829366004612fc1565b611675565b34801561083a57600080fd5b5061039b610849366004612f9a565b6116fe565b34801561085a57600080fd5b50600c5461045c906001600160a01b031681565b34801561087a57600080fd5b50600b5461045c906001600160a01b031681565b34801561089a57600080fd5b506010546103e89060ff1681565b3480156108b457600080fd5b5061048560195481565b3480156108ca57600080fd5b5061048560185481565b3480156108e057600080fd5b5061039b6108ef366004612f9a565b611807565b34801561090057600080fd5b5061048560115481565b34801561091657600080fd5b50610485601b5481565b34801561092c57600080fd5b5061039b61093b366004612f9a565b611952565b34801561094c57600080fd5b5061048561095b366004612ffa565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099257600080fd5b50610485600a5481565b3480156109a857600080fd5b5061039b611a59565b3480156109bd57600080fd5b50610485600d5481565b3480156109d357600080fd5b5061048560135481565b3480156109e957600080fd5b5061039b6109f8366004612d9d565b611a8f565b348015610a0957600080fd5b5061039b611b7a565b348015610a1e57600080fd5b5061048560175481565b348015610a3457600080fd5b5061048560145481565b6005546001600160a01b03163314610a715760405162461bcd60e51b8152600401610a6890613028565b60405180910390fd5b60168290556017819055610a858183613073565b601581905560191015610ada5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610a68565b5050565b606060038054610aed9061308b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b199061308b565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b6000610b7d338484611bf1565b50600192915050565b6005546001600160a01b03163314610bb05760405162461bcd60e51b8152600401610a6890613028565b8051825114610c015760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a68565b60c8825110610c715760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a68565b60005b8251811015610cec576000838281518110610c9157610c916130c6565b602002602001015190506000838381518110610caf57610caf6130c6565b6020026020010151670de0b6b3a7640000610cca91906130dc565b9050610cd7338383611d15565b50508080610ce4906130fb565b915050610c74565b505050565b6000610cfe848484611d15565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d835760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a68565b610d908533858403611bf1565b506001949350505050565b6005546001600160a01b03163314610dc55760405162461bcd60e51b8152600401610a6890613028565b670de0b6b3a76400006103e8610dda60025490565b610de59060016130dc565b610def9190613116565b610df99190613116565b811015610e5a5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610a68565b610e6c81670de0b6b3a76400006130dc565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b7d918590610edf908690613073565b611bf1565b6005546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610a6890613028565b6001600160a01b038116610f705760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610a68565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b03163314610fe45760405162461bcd60e51b8152600401610a6890613028565b60128290556013819055610ff88183613073565b6011819055600f1015610ada5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610a68565b6005546001600160a01b031633146110775760405162461bcd60e51b8152600401610a6890613028565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110eb5760405162461bcd60e51b8152600401610a6890613028565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111565760405162461bcd60e51b8152600401610a6890613028565b806111ed577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156111ed5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a68565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146112455760405162461bcd60e51b8152600401610a6890613028565b6001600160a01b03831661129b5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a68565b6001600160a01b0383163014156112f45760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610a68565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613138565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d69190613151565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461144c5760405162461bcd60e51b8152600401610a6890613028565b600e54610100900460ff16156114a45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610a68565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610aed9061308b565b6005546001600160a01b0316331461151d5760405162461bcd60e51b8152600401610a6890613028565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156115c55760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a68565b610ada8282612614565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116515760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a68565b61165e3385858403611bf1565b5060019392505050565b6000610b7d338484611d15565b6005546001600160a01b0316331461169f5760405162461bcd60e51b8152600401610a6890613028565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146117285760405162461bcd60e51b8152600401610a6890613028565b670de0b6b3a76400006103e861173d60025490565b6117489060036130dc565b6117529190613116565b61175c9190613116565b8110156117c05760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610a68565b6117d281670de0b6b3a76400006130dc565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e9d565b6005546001600160a01b031633146118315760405162461bcd60e51b8152600401610a6890613028565b620186a061183e60025490565b6118499060016130dc565b6118539190613116565b8110156118c05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a68565b6103e86118cc60025490565b6118d79060016130dc565b6118e19190613116565b81111561194d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610a68565b600a55565b6005546001600160a01b0316331461197c5760405162461bcd60e51b8152600401610a6890613028565b670de0b6b3a76400006103e861199160025490565b61199c9060016130dc565b6119a69190613116565b6119b09190613116565b811015611a125760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610a68565b611a2481670de0b6b3a76400006130dc565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e9d565b6005546001600160a01b03163314611a835760405162461bcd60e51b8152600401610a6890613028565b6010805460ff19169055565b6005546001600160a01b03163314611ab95760405162461bcd60e51b8152600401610a6890613028565b6001600160a01b038116611b1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a68565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ba45760405162461bcd60e51b8152600401610a6890613028565b604051600090339047908381818185875af1925050503d8060008114611be6576040519150601f19603f3d011682016040523d82523d6000602084013e611beb565b606091505b50505050565b6001600160a01b038316611c535760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a68565b6001600160a01b038216611cb45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a68565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d3b5760405162461bcd60e51b8152600401610a689061316e565b6001600160a01b038216611d615760405162461bcd60e51b8152600401610a68906131b3565b60008111611db15760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a68565b600e5460ff1615612285576005546001600160a01b03848116911614801590611de857506005546001600160a01b03838116911614155b8015611dfc57506001600160a01b03821615155b8015611e1357506001600160a01b03821661dead14155b1561228557600e54610100900460ff16611eab576001600160a01b0383166000908152601d602052604090205460ff1680611e6657506001600160a01b0382166000908152601d602052604090205460ff165b611eab5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a68565b60105460ff1615612007577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015611f2a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561200757611f3a6004436131f6565b326000908152600f6020526040902054108015611f785750611f5d6004436131f6565b6001600160a01b0383166000908152600f6020526040902054105b611fe25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610a68565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601e602052604090205460ff16801561204857506001600160a01b0382166000908152601d602052604090205460ff16155b15612124576006548111156120b05760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610a68565b6008546001600160a01b0383166000908152602081905260409020546120d69083613073565b111561211f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610a68565b612285565b6001600160a01b0382166000908152601e602052604090205460ff16801561216557506001600160a01b0383166000908152601d602052604090205460ff16155b156121cf5760075481111561211f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610a68565b6001600160a01b0382166000908152601d602052604090205460ff1615801561221157506001600160a01b0383166000908152601d602052604090205460ff16155b15612285576008546001600160a01b03831660009081526020819052604090205461223c9083613073565b11156122855760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610a68565b30600090815260208190526040902054600a54811080159081906122b15750600e5462010000900460ff165b80156122c0575060095460ff16155b80156122e557506001600160a01b0385166000908152601e602052604090205460ff16155b801561230a57506001600160a01b0385166000908152601c602052604090205460ff16155b801561232f57506001600160a01b0384166000908152601c602052604090205460ff16155b15612354576009805460ff1916600117905561234961267e565b6009805460ff191690555b6001600160a01b0385166000908152601c602052604090205460019060ff168061239657506001600160a01b0385166000908152601c602052604090205460ff165b1561239f575060005b60008082156125ff576123b3436001613073565b600d54101580156123dc57506001600160a01b0388166000908152601e602052604090205460ff165b156124185760646123ee8760636130dc565b6123f89190613116565b600b549091506124139089906001600160a01b031683612889565b6125d7565b6001600160a01b0387166000908152601e602052604090205460ff16801561244257506000601554115b156124fa5760646015548761245791906130dc565b6124619190613116565b91506015546017548361247491906130dc565b61247e9190613116565b601a600082825461248f9190613073565b90915550506015546016546124a490846130dc565b6124ae9190613116565b601960008282546124bf9190613073565b90915550506015546018546124d490846130dc565b6124de9190613116565b601b60008282546124ef9190613073565b909155506125d79050565b6001600160a01b0388166000908152601e602052604090205460ff16801561252457506000601154115b156125d75760646011548761253991906130dc565b6125439190613116565b91506011546013548361255691906130dc565b6125609190613116565b601a60008282546125719190613073565b909155505060115460125461258690846130dc565b6125909190613116565b601960008282546125a19190613073565b90915550506011546014546125b690846130dc565b6125c09190613116565b601b60008282546125d19190613073565b90915550505b81156125e8576125e8883084612889565b6125f28183613073565b6125fc90876131f6565b95505b61260a888888612889565b5050505050505050565b6001600160a01b0382166000908152601e60205260409020805460ff191682151517905561264282826129de565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601b54601954601a546126a59190613073565b6126af9190613073565b90508115806126bc575080155b156126c5575050565b600a80546126d2916130dc565b8211156126e957600a80546126e6916130dc565b91505b600080600283601a54866126fd91906130dc565b6127079190613116565b6127119190613116565b905061272561272082866131f6565b612a41565b601a544790819060009061273b90600290613116565b61274590876131f6565b60195461275290856130dc565b61275c9190613116565b905060006002601a5461276f9190613116565b61277990886131f6565b601b5461278690866130dc565b6127909190613116565b905061279c8183613073565b6127a690846131f6565b6000601a8190556019819055601b55925084158015906127c65750600083115b156127d5576127d58584612c01565b600c546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612822576040519150601f19603f3d011682016040523d82523d6000602084013e612827565b606091505b5050600b546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612877576040519150601f19603f3d011682016040523d82523d6000602084013e61287c565b606091505b5050505050505050505050565b6001600160a01b0383166128af5760405162461bcd60e51b8152600401610a689061316e565b6001600160a01b0382166128d55760405162461bcd60e51b8152600401610a68906131b3565b6001600160a01b0383166000908152602081905260409020548181101561294d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a68565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612984908490613073565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129d091815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a7657612a766130c6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b18919061320d565b81600181518110612b2b57612b2b6130c6565b60200260200101906001600160a01b031690816001600160a01b031681525050612b76307f000000000000000000000000000000000000000000000000000000000000000084611bf1565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612bcb90859060009086903090429060040161322a565b600060405180830381600087803b158015612be557600080fd5b505af1158015612bf9573d6000803e3d6000fd5b505050505050565b612c2c307f000000000000000000000000000000000000000000000000000000000000000084611bf1565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612cb6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612cdb919061329b565b5050505050565b60008060408385031215612cf557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015612d3157858101830151858201604001528201612d15565b81811115612d43576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612d6e57600080fd5b50565b60008060408385031215612d8457600080fd5b8235612d8f81612d59565b946020939093013593505050565b600060208284031215612daf57600080fd5b8135612dba81612d59565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e0057612e00612dc1565b604052919050565b600067ffffffffffffffff821115612e2257612e22612dc1565b5060051b60200190565b600082601f830112612e3d57600080fd5b81356020612e52612e4d83612e08565b612dd7565b82815260059290921b84018101918181019086841115612e7157600080fd5b8286015b84811015612e8c5780358352918301918301612e75565b509695505050505050565b60008060408385031215612eaa57600080fd5b823567ffffffffffffffff80821115612ec257600080fd5b818501915085601f830112612ed657600080fd5b81356020612ee6612e4d83612e08565b82815260059290921b84018101918181019089841115612f0557600080fd5b948201945b83861015612f2c578535612f1d81612d59565b82529482019490820190612f0a565b96505086013592505080821115612f4257600080fd5b50612f4f85828601612e2c565b9150509250929050565b600080600060608486031215612f6e57600080fd5b8335612f7981612d59565b92506020840135612f8981612d59565b929592945050506040919091013590565b600060208284031215612fac57600080fd5b5035919050565b8015158114612d6e57600080fd5b60008060408385031215612fd457600080fd5b8235612fdf81612d59565b91506020830135612fef81612fb3565b809150509250929050565b6000806040838503121561300d57600080fd5b823561301881612d59565b91506020830135612fef81612d59565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156130865761308661305d565b500190565b600181811c9082168061309f57607f821691505b602082108114156130c057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60008160001904831182151516156130f6576130f661305d565b500290565b600060001982141561310f5761310f61305d565b5060010190565b60008261313357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561314a57600080fd5b5051919050565b60006020828403121561316357600080fd5b8151612dba81612fb3565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156132085761320861305d565b500390565b60006020828403121561321f57600080fd5b8151612dba81612d59565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561327a5784516001600160a01b031683529383019391830191600101613255565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132b057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ab3185908b4f2f6c96e18cfc4d3c1595f0f11830dfca50a79044e40a7a815b6864736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063cd0a1224116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b146109dd578063f5648a4f146109fd578063f637434214610a12578063f6d9bfaa14610a2857600080fd5b8063e884f2601461099c578063ee40166e146109b1578063f11a24d3146109c757600080fd5b8063d8aad096116100d1578063d8aad0961461090a578063dc3f0d0f14610920578063dd62ed3e14610940578063e2f456051461098657600080fd5b8063cd0a1224146108be578063d257b34f146108d4578063d85ba063146108f457600080fd5b8063bbc0c74211610164578063c208fe741161013e578063c208fe741461084e578063c5f956af1461086e578063c876d0b91461088e578063cc2ffe7c146108a857600080fd5b8063bbc0c742146107ef578063c02466681461080e578063c18bc1951461082e57600080fd5b8063a457c2d7116101a0578063a457c2d714610769578063a9059cbb14610789578063aa4bde28146107a9578063b62496f5146107bf57600080fd5b80638da5cb5b1461071657806395d89b41146107345780639a7a23d61461074957600080fd5b80635c068a8c116102a057806370a082311161023e5780637571336a116102185780637571336a146106ab5780638366e79a146106cb57806388e765ff146106eb5780638a8c523c1461070157600080fd5b806370a082311461064b578063715018a614610681578063751039fc1461069657600080fd5b806366d602ae1161027a57806366d602ae146105e95780636a486a8e146105ff5780636b2fb124146106155780636ddd17131461062b57600080fd5b80635c068a8c146105935780636605bfda146105a957806366ca9b83146105c957600080fd5b80632307b4411161030d578063313ce567116102e7578063313ce56714610509578063395093511461052557806349bd5a5e146105455780634a62bb651461057957600080fd5b80632307b441146104a957806323b872dd146104c95780632be32b61146104e957600080fd5b806310d5de531161034957806310d5de53146103f85780631694505e1461042857806318160ddd146104745780631a8145bb1461049357600080fd5b806302dbd8f81461037b57806306fdde031461039d578063095ea7b3146103c857600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004612ce2565b610a3e565b005b3480156103a957600080fd5b506103b2610ade565b6040516103bf9190612d04565b60405180910390f35b3480156103d457600080fd5b506103e86103e3366004612d71565b610b70565b60405190151581526020016103bf565b34801561040457600080fd5b506103e8610413366004612d9d565b601d6020526000908152604090205460ff1681565b34801561043457600080fd5b5061045c7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103bf565b34801561048057600080fd5b506002545b6040519081526020016103bf565b34801561049f57600080fd5b50610485601a5481565b3480156104b557600080fd5b5061039b6104c4366004612e97565b610b86565b3480156104d557600080fd5b506103e86104e4366004612f59565b610cf1565b3480156104f557600080fd5b5061039b610504366004612f9a565b610d9b565b34801561051557600080fd5b50604051601281526020016103bf565b34801561053157600080fd5b506103e8610540366004612d71565b610ea8565b34801561055157600080fd5b5061045c7f00000000000000000000000055f27db4d27b2b0c7f4ab7501e5ec1813f3286c381565b34801561058557600080fd5b50600e546103e89060ff1681565b34801561059f57600080fd5b5061048560125481565b3480156105b557600080fd5b5061039b6105c4366004612d9d565b610ee4565b3480156105d557600080fd5b5061039b6105e4366004612ce2565b610fba565b3480156105f557600080fd5b5061048560075481565b34801561060b57600080fd5b5061048560155481565b34801561062157600080fd5b5061048560165481565b34801561063757600080fd5b50600e546103e89062010000900460ff1681565b34801561065757600080fd5b50610485610666366004612d9d565b6001600160a01b031660009081526020819052604090205490565b34801561068d57600080fd5b5061039b61104d565b3480156106a257600080fd5b5061039b6110c1565b3480156106b757600080fd5b5061039b6106c6366004612fc1565b61112c565b3480156106d757600080fd5b506103e86106e6366004612ffa565b611218565b3480156106f757600080fd5b5061048560065481565b34801561070d57600080fd5b5061039b611422565b34801561072257600080fd5b506005546001600160a01b031661045c565b34801561074057600080fd5b506103b26114e4565b34801561075557600080fd5b5061039b610764366004612fc1565b6114f3565b34801561077557600080fd5b506103e8610784366004612d71565b6115cf565b34801561079557600080fd5b506103e86107a4366004612d71565b611668565b3480156107b557600080fd5b5061048560085481565b3480156107cb57600080fd5b506103e86107da366004612d9d565b601e6020526000908152604090205460ff1681565b3480156107fb57600080fd5b50600e546103e890610100900460ff1681565b34801561081a57600080fd5b5061039b610829366004612fc1565b611675565b34801561083a57600080fd5b5061039b610849366004612f9a565b6116fe565b34801561085a57600080fd5b50600c5461045c906001600160a01b031681565b34801561087a57600080fd5b50600b5461045c906001600160a01b031681565b34801561089a57600080fd5b506010546103e89060ff1681565b3480156108b457600080fd5b5061048560195481565b3480156108ca57600080fd5b5061048560185481565b3480156108e057600080fd5b5061039b6108ef366004612f9a565b611807565b34801561090057600080fd5b5061048560115481565b34801561091657600080fd5b50610485601b5481565b34801561092c57600080fd5b5061039b61093b366004612f9a565b611952565b34801561094c57600080fd5b5061048561095b366004612ffa565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099257600080fd5b50610485600a5481565b3480156109a857600080fd5b5061039b611a59565b3480156109bd57600080fd5b50610485600d5481565b3480156109d357600080fd5b5061048560135481565b3480156109e957600080fd5b5061039b6109f8366004612d9d565b611a8f565b348015610a0957600080fd5b5061039b611b7a565b348015610a1e57600080fd5b5061048560175481565b348015610a3457600080fd5b5061048560145481565b6005546001600160a01b03163314610a715760405162461bcd60e51b8152600401610a6890613028565b60405180910390fd5b60168290556017819055610a858183613073565b601581905560191015610ada5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610a68565b5050565b606060038054610aed9061308b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b199061308b565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b6000610b7d338484611bf1565b50600192915050565b6005546001600160a01b03163314610bb05760405162461bcd60e51b8152600401610a6890613028565b8051825114610c015760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a68565b60c8825110610c715760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a68565b60005b8251811015610cec576000838281518110610c9157610c916130c6565b602002602001015190506000838381518110610caf57610caf6130c6565b6020026020010151670de0b6b3a7640000610cca91906130dc565b9050610cd7338383611d15565b50508080610ce4906130fb565b915050610c74565b505050565b6000610cfe848484611d15565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d835760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a68565b610d908533858403611bf1565b506001949350505050565b6005546001600160a01b03163314610dc55760405162461bcd60e51b8152600401610a6890613028565b670de0b6b3a76400006103e8610dda60025490565b610de59060016130dc565b610def9190613116565b610df99190613116565b811015610e5a5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610a68565b610e6c81670de0b6b3a76400006130dc565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b7d918590610edf908690613073565b611bf1565b6005546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610a6890613028565b6001600160a01b038116610f705760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610a68565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b03163314610fe45760405162461bcd60e51b8152600401610a6890613028565b60128290556013819055610ff88183613073565b6011819055600f1015610ada5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610a68565b6005546001600160a01b031633146110775760405162461bcd60e51b8152600401610a6890613028565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110eb5760405162461bcd60e51b8152600401610a6890613028565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111565760405162461bcd60e51b8152600401610a6890613028565b806111ed577f00000000000000000000000055f27db4d27b2b0c7f4ab7501e5ec1813f3286c36001600160a01b0316826001600160a01b031614156111ed5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a68565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146112455760405162461bcd60e51b8152600401610a6890613028565b6001600160a01b03831661129b5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a68565b6001600160a01b0383163014156112f45760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610a68565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613138565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d69190613151565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461144c5760405162461bcd60e51b8152600401610a6890613028565b600e54610100900460ff16156114a45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610a68565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610aed9061308b565b6005546001600160a01b0316331461151d5760405162461bcd60e51b8152600401610a6890613028565b7f00000000000000000000000055f27db4d27b2b0c7f4ab7501e5ec1813f3286c36001600160a01b0316826001600160a01b031614156115c55760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a68565b610ada8282612614565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116515760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a68565b61165e3385858403611bf1565b5060019392505050565b6000610b7d338484611d15565b6005546001600160a01b0316331461169f5760405162461bcd60e51b8152600401610a6890613028565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146117285760405162461bcd60e51b8152600401610a6890613028565b670de0b6b3a76400006103e861173d60025490565b6117489060036130dc565b6117529190613116565b61175c9190613116565b8110156117c05760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610a68565b6117d281670de0b6b3a76400006130dc565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e9d565b6005546001600160a01b031633146118315760405162461bcd60e51b8152600401610a6890613028565b620186a061183e60025490565b6118499060016130dc565b6118539190613116565b8110156118c05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a68565b6103e86118cc60025490565b6118d79060016130dc565b6118e19190613116565b81111561194d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610a68565b600a55565b6005546001600160a01b0316331461197c5760405162461bcd60e51b8152600401610a6890613028565b670de0b6b3a76400006103e861199160025490565b61199c9060016130dc565b6119a69190613116565b6119b09190613116565b811015611a125760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610a68565b611a2481670de0b6b3a76400006130dc565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e9d565b6005546001600160a01b03163314611a835760405162461bcd60e51b8152600401610a6890613028565b6010805460ff19169055565b6005546001600160a01b03163314611ab95760405162461bcd60e51b8152600401610a6890613028565b6001600160a01b038116611b1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a68565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ba45760405162461bcd60e51b8152600401610a6890613028565b604051600090339047908381818185875af1925050503d8060008114611be6576040519150601f19603f3d011682016040523d82523d6000602084013e611beb565b606091505b50505050565b6001600160a01b038316611c535760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a68565b6001600160a01b038216611cb45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a68565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d3b5760405162461bcd60e51b8152600401610a689061316e565b6001600160a01b038216611d615760405162461bcd60e51b8152600401610a68906131b3565b60008111611db15760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a68565b600e5460ff1615612285576005546001600160a01b03848116911614801590611de857506005546001600160a01b03838116911614155b8015611dfc57506001600160a01b03821615155b8015611e1357506001600160a01b03821661dead14155b1561228557600e54610100900460ff16611eab576001600160a01b0383166000908152601d602052604090205460ff1680611e6657506001600160a01b0382166000908152601d602052604090205460ff165b611eab5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a68565b60105460ff1615612007577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614158015611f2a57507f00000000000000000000000055f27db4d27b2b0c7f4ab7501e5ec1813f3286c36001600160a01b0316826001600160a01b031614155b1561200757611f3a6004436131f6565b326000908152600f6020526040902054108015611f785750611f5d6004436131f6565b6001600160a01b0383166000908152600f6020526040902054105b611fe25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610a68565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601e602052604090205460ff16801561204857506001600160a01b0382166000908152601d602052604090205460ff16155b15612124576006548111156120b05760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610a68565b6008546001600160a01b0383166000908152602081905260409020546120d69083613073565b111561211f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610a68565b612285565b6001600160a01b0382166000908152601e602052604090205460ff16801561216557506001600160a01b0383166000908152601d602052604090205460ff16155b156121cf5760075481111561211f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610a68565b6001600160a01b0382166000908152601d602052604090205460ff1615801561221157506001600160a01b0383166000908152601d602052604090205460ff16155b15612285576008546001600160a01b03831660009081526020819052604090205461223c9083613073565b11156122855760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610a68565b30600090815260208190526040902054600a54811080159081906122b15750600e5462010000900460ff165b80156122c0575060095460ff16155b80156122e557506001600160a01b0385166000908152601e602052604090205460ff16155b801561230a57506001600160a01b0385166000908152601c602052604090205460ff16155b801561232f57506001600160a01b0384166000908152601c602052604090205460ff16155b15612354576009805460ff1916600117905561234961267e565b6009805460ff191690555b6001600160a01b0385166000908152601c602052604090205460019060ff168061239657506001600160a01b0385166000908152601c602052604090205460ff165b1561239f575060005b60008082156125ff576123b3436001613073565b600d54101580156123dc57506001600160a01b0388166000908152601e602052604090205460ff165b156124185760646123ee8760636130dc565b6123f89190613116565b600b549091506124139089906001600160a01b031683612889565b6125d7565b6001600160a01b0387166000908152601e602052604090205460ff16801561244257506000601554115b156124fa5760646015548761245791906130dc565b6124619190613116565b91506015546017548361247491906130dc565b61247e9190613116565b601a600082825461248f9190613073565b90915550506015546016546124a490846130dc565b6124ae9190613116565b601960008282546124bf9190613073565b90915550506015546018546124d490846130dc565b6124de9190613116565b601b60008282546124ef9190613073565b909155506125d79050565b6001600160a01b0388166000908152601e602052604090205460ff16801561252457506000601154115b156125d75760646011548761253991906130dc565b6125439190613116565b91506011546013548361255691906130dc565b6125609190613116565b601a60008282546125719190613073565b909155505060115460125461258690846130dc565b6125909190613116565b601960008282546125a19190613073565b90915550506011546014546125b690846130dc565b6125c09190613116565b601b60008282546125d19190613073565b90915550505b81156125e8576125e8883084612889565b6125f28183613073565b6125fc90876131f6565b95505b61260a888888612889565b5050505050505050565b6001600160a01b0382166000908152601e60205260409020805460ff191682151517905561264282826129de565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601b54601954601a546126a59190613073565b6126af9190613073565b90508115806126bc575080155b156126c5575050565b600a80546126d2916130dc565b8211156126e957600a80546126e6916130dc565b91505b600080600283601a54866126fd91906130dc565b6127079190613116565b6127119190613116565b905061272561272082866131f6565b612a41565b601a544790819060009061273b90600290613116565b61274590876131f6565b60195461275290856130dc565b61275c9190613116565b905060006002601a5461276f9190613116565b61277990886131f6565b601b5461278690866130dc565b6127909190613116565b905061279c8183613073565b6127a690846131f6565b6000601a8190556019819055601b55925084158015906127c65750600083115b156127d5576127d58584612c01565b600c546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612822576040519150601f19603f3d011682016040523d82523d6000602084013e612827565b606091505b5050600b546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612877576040519150601f19603f3d011682016040523d82523d6000602084013e61287c565b606091505b5050505050505050505050565b6001600160a01b0383166128af5760405162461bcd60e51b8152600401610a689061316e565b6001600160a01b0382166128d55760405162461bcd60e51b8152600401610a68906131b3565b6001600160a01b0383166000908152602081905260409020548181101561294d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a68565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612984908490613073565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129d091815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a7657612a766130c6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b18919061320d565b81600181518110612b2b57612b2b6130c6565b60200260200101906001600160a01b031690816001600160a01b031681525050612b76307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bf1565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612bcb90859060009086903090429060040161322a565b600060405180830381600087803b158015612be557600080fd5b505af1158015612bf9573d6000803e3d6000fd5b505050505050565b612c2c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bf1565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612cb6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612cdb919061329b565b5050505050565b60008060408385031215612cf557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015612d3157858101830151858201604001528201612d15565b81811115612d43576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612d6e57600080fd5b50565b60008060408385031215612d8457600080fd5b8235612d8f81612d59565b946020939093013593505050565b600060208284031215612daf57600080fd5b8135612dba81612d59565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e0057612e00612dc1565b604052919050565b600067ffffffffffffffff821115612e2257612e22612dc1565b5060051b60200190565b600082601f830112612e3d57600080fd5b81356020612e52612e4d83612e08565b612dd7565b82815260059290921b84018101918181019086841115612e7157600080fd5b8286015b84811015612e8c5780358352918301918301612e75565b509695505050505050565b60008060408385031215612eaa57600080fd5b823567ffffffffffffffff80821115612ec257600080fd5b818501915085601f830112612ed657600080fd5b81356020612ee6612e4d83612e08565b82815260059290921b84018101918181019089841115612f0557600080fd5b948201945b83861015612f2c578535612f1d81612d59565b82529482019490820190612f0a565b96505086013592505080821115612f4257600080fd5b50612f4f85828601612e2c565b9150509250929050565b600080600060608486031215612f6e57600080fd5b8335612f7981612d59565b92506020840135612f8981612d59565b929592945050506040919091013590565b600060208284031215612fac57600080fd5b5035919050565b8015158114612d6e57600080fd5b60008060408385031215612fd457600080fd5b8235612fdf81612d59565b91506020830135612fef81612fb3565b809150509250929050565b6000806040838503121561300d57600080fd5b823561301881612d59565b91506020830135612fef81612d59565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156130865761308661305d565b500190565b600181811c9082168061309f57607f821691505b602082108114156130c057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60008160001904831182151516156130f6576130f661305d565b500290565b600060001982141561310f5761310f61305d565b5060010190565b60008261313357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561314a57600080fd5b5051919050565b60006020828403121561316357600080fd5b8151612dba81612fb3565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156132085761320861305d565b500390565b60006020828403121561321f57600080fd5b8151612dba81612d59565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561327a5784516001600160a01b031683529383019391830191600101613255565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132b057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ab3185908b4f2f6c96e18cfc4d3c1595f0f11830dfca50a79044e40a7a815b6864736f6c634300080b0033

Deployed Bytecode Sourcemap

9439:17019:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17658:393;;;;;;;;;;-1:-1:-1;17658:393:0;;;;;:::i;:::-;;:::i;:::-;;4077:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4991:169;;;;;;;;;;-1:-1:-1;4991:169:0;;;;;:::i;:::-;;:::i;:::-;;;1490:14:1;;1483:22;1465:41;;1453:2;1438:18;4991:169:0;1325:187:1;10815:64:0;;;;;;;;;;-1:-1:-1;10815:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9596:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1951:32:1;;;1933:51;;1921:2;1906:18;9596:43:0;1769:221:1;4398:108:0;;;;;;;;;;-1:-1:-1;4486:12:0;;4398:108;;;2141:25:1;;;2129:2;2114:18;4398:108:0;1995:177:1;10592:33:0;;;;;;;;;;;;;;;;15854:617;;;;;;;;;;-1:-1:-1;15854:617:0;;;;;:::i;:::-;;:::i;5168:492::-;;;;;;;;;;-1:-1:-1;5168:492:0;;;;;:::i;:::-;;:::i;14364:269::-;;;;;;;;;;-1:-1:-1;14364:269:0;;;;;:::i;:::-;;:::i;4297:93::-;;;;;;;;;;-1:-1:-1;4297:93:0;;4380:2;5452:36:1;;5440:2;5425:18;4297:93:0;5310:184:1;5668:215:0;;;;;;;;;;-1:-1:-1;5668:215:0;;;;;:::i;:::-;;:::i;9646:38::-;;;;;;;;;;;;;;;9915:33;;;;;;;;;;-1:-1:-1;9915:33:0;;;;;;;;10299:29;;;;;;;;;;;;;;;;25894:281;;;;;;;;;;-1:-1:-1;25894:281:0;;;;;:::i;:::-;;:::i;17268:382::-;;;;;;;;;;-1:-1:-1;17268:382:0;;;;;:::i;:::-;;:::i;9522:28::-;;;;;;;;;;;;;;;;10407;;;;;;;;;;;;;;;;10442:30;;;;;;;;;;;;;;;;9995;;;;;;;;;;-1:-1:-1;9995:30:0;;;;;;;;;;;4514:127;;;;;;;;;;-1:-1:-1;4514:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4615:18:0;4588:7;4615:18;;;;;;;;;;;;4514:127;8158:150;;;;;;;;;;;;;:::i;14030:154::-;;;;;;;;;;;;;:::i;16483:267::-;;;;;;;;;;-1:-1:-1;16483:267:0;;;;;:::i;:::-;;:::i;25200:456::-;;;;;;;;;;-1:-1:-1;25200:456:0;;;;;:::i;:::-;;:::i;9488:27::-;;;;;;;;;;;;;;;;13725:249;;;;;;;;;;;;;:::i;7944:79::-;;;;;;;;;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;8009:6:0;7944:79;;4185:104;;;;;;;;;;;;;:::i;16758:246::-;;;;;;;;;;-1:-1:-1;16758:246:0;;;;;:::i;:::-;;:::i;5891:413::-;;;;;;;;;;-1:-1:-1;5891:413:0;;;;;:::i;:::-;;:::i;4649:175::-;;;;;;;;;;-1:-1:-1;4649:175:0;;;;;:::i;:::-;;:::i;9557:30::-;;;;;;;;;;;;;;;;11037:58;;;;;;;;;;-1:-1:-1;11037:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9955:33;;;;;;;;;;-1:-1:-1;9955:33:0;;;;;;;;;;;18059:182;;;;;;;;;;-1:-1:-1;18059:182:0;;;;;:::i;:::-;;:::i;14927:284::-;;;;;;;;;;-1:-1:-1;14927:284:0;;;;;:::i;:::-;;:::i;9800:27::-;;;;;;;;;;-1:-1:-1;9800:27:0;;;;-1:-1:-1;;;;;9800:27:0;;;9763:30;;;;;;;;;;-1:-1:-1;9763:30:0;;;;-1:-1:-1;;;;;9763:30:0;;;10217:39;;;;;;;;;;-1:-1:-1;10217:39:0;;;;;;;;10553:32;;;;;;;;;;;;;;;;10517:27;;;;;;;;;;;;;;;;15281:346;;;;;;;;;;-1:-1:-1;15281:346:0;;;;;:::i;:::-;;:::i;10265:27::-;;;;;;;;;;;;;;;;10632:29;;;;;;;;;;;;;;;;14645:274;;;;;;;;;;-1:-1:-1;14645:274:0;;;;;:::i;:::-;;:::i;4832:151::-;;;;;;;;;;-1:-1:-1;4832:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4948:18:0;;;4921:7;4948:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4832:151;9721:33;;;;;;;;;;;;;;;;14254:98;;;;;;;;;;;;;:::i;9836:37::-;;;;;;;;;;;;;;;;10335:30;;;;;;;;;;;;;;;;8316:244;;;;;;;;;;-1:-1:-1;8316:244:0;;;;;:::i;:::-;;:::i;25726:160::-;;;;;;;;;;;;;:::i;10479:31::-;;;;;;;;;;;;;;;;10372:26;;;;;;;;;;;;;;;;17658:393;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;;;;;;;;;17781:15:::1;:30:::0;;;17822:16:::1;:32:::0;;;17918:34:::1;17841:13:::0;17799:12;17918:34:::1;:::i;:::-;17902:13;:50:::0;;;18007:2:::1;-1:-1:-1::0;17990:19:0::1;17982:61;;;::::0;-1:-1:-1;;;17982:61:0;;7438:2:1;17982:61:0::1;::::0;::::1;7420:21:1::0;7477:2;7457:18;;;7450:30;7516:31;7496:18;;;7489:59;7565:18;;17982:61:0::1;7236:353:1::0;17982:61:0::1;17658:393:::0;;:::o;4077:100::-;4131:13;4164:5;4157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;:::o;4991:169::-;5074:4;5091:39;306:10;5114:7;5123:6;5091:8;:39::i;:::-;-1:-1:-1;5148:4:0;4991:169;;;;:::o;15854:617::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15996:15:::1;:22;15978:7;:14;:40;15970:83;;;::::0;-1:-1:-1;;;15970:83:0;;8181:2:1;15970:83:0::1;::::0;::::1;8163:21:1::0;8220:2;8200:18;;;8193:30;8259:32;8239:18;;;8232:60;8309:18;;15970:83:0::1;7979:354:1::0;15970:83:0::1;16089:3;16072:7;:14;:20;16064:87;;;::::0;-1:-1:-1;;;16064:87:0;;8540:2:1;16064:87:0::1;::::0;::::1;8522:21:1::0;8579:2;8559:18;;;8552:30;8618:34;8598:18;;;8591:62;-1:-1:-1;;;8669:18:1;;;8662:52;8731:19;;16064:87:0::1;8338:418:1::0;16064:87:0::1;16264:9;16260:204;16283:7;:14;16279:1;:18;16260:204;;;16318:14;16335:7;16343:1;16335:10;;;;;;;;:::i;:::-;;;;;;;16318:27;;16360:14;16377:15;16393:1;16377:18;;;;;;;;:::i;:::-;;;;;;;16396:4;16377:23;;;;:::i;:::-;16360:40;;16415:37;16425:10;16437:6;16445;16415:9;:37::i;:::-;16303:161;;16299:3;;;;;:::i;:::-;;;;16260:204;;;;15854:617:::0;;:::o;5168:492::-;5308:4;5325:36;5335:6;5343:9;5354:6;5325:9;:36::i;:::-;-1:-1:-1;;;;;5401:19:0;;5374:24;5401:19;;;:11;:19;;;;;;;;306:10;5401:33;;;;;;;;5453:26;;;;5445:79;;;;-1:-1:-1;;;5445:79:0;;9408:2:1;5445:79:0;;;9390:21:1;9447:2;9427:18;;;9420:30;9486:34;9466:18;;;9459:62;-1:-1:-1;;;9537:18:1;;;9530:38;9585:19;;5445:79:0;9206:404:1;5445:79:0;5560:57;5569:6;306:10;5610:6;5591:16;:25;5560:8;:57::i;:::-;-1:-1:-1;5648:4:0;;5168:492;-1:-1:-1;;;;5168:492:0:o;14364:269::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;14483:4:::1;14477;14457:13;4486:12:::0;;;4398:108;14457:13:::1;:17;::::0;14473:1:::1;14457:17;:::i;:::-;:24;;;;:::i;:::-;14456:31;;;;:::i;:::-;14446:6;:41;;14438:95;;;::::0;-1:-1:-1;;;14438:95:0;;10039:2:1;14438:95:0::1;::::0;::::1;10021:21:1::0;10078:2;10058:18;;;10051:30;10117:34;10097:18;;;10090:62;-1:-1:-1;;;10168:18:1;;;10161:39;10217:19;;14438:95:0::1;9837:405:1::0;14438:95:0::1;14559:17;:6:::0;14569::::1;14559:17;:::i;:::-;14544:12;:32:::0;;;14592:33:::1;::::0;2141:25:1;;;14592:33:0::1;::::0;2129:2:1;2114:18;14592:33:0::1;;;;;;;;14364:269:::0;:::o;5668:215::-;306:10;5756:4;5805:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5805:34:0;;;;;;;;;;5756:4;;5773:80;;5796:7;;5805:47;;5842:10;;5805:47;:::i;:::-;5773:8;:80::i;25894:281::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25986:30:0;::::1;25978:79;;;::::0;-1:-1:-1;;;25978:79:0;;10449:2:1;25978:79:0::1;::::0;::::1;10431:21:1::0;10488:2;10468:18;;;10461:30;10527:34;10507:18;;;10500:62;-1:-1:-1;;;10578:18:1;;;10571:34;10622:19;;25978:79:0::1;10247:400:1::0;25978:79:0::1;26068:15;:43:::0;;-1:-1:-1;;;;;;26068:43:0::1;-1:-1:-1::0;;;;;26068:43:0;::::1;::::0;;::::1;::::0;;;26127:40:::1;::::0;::::1;::::0;-1:-1:-1;;26127:40:0::1;25894:281:::0;:::o;17268:382::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;17388:14:::1;:29:::0;;;17428:15:::1;:31:::0;;;17521:32:::1;17446:13:::0;17405:12;17521:32:::1;:::i;:::-;17506:12;:47:::0;;;17606:2:::1;-1:-1:-1::0;17590:18:0::1;17582:60;;;::::0;-1:-1:-1;;;17582:60:0;;10854:2:1;17582:60:0::1;::::0;::::1;10836:21:1::0;10893:2;10873:18;;;10866:30;10932:31;10912:18;;;10905:59;10981:18;;17582:60:0::1;10652:353:1::0;8158:150:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;8251:6:::1;::::0;8230:40:::1;::::0;8267:1:::1;::::0;-1:-1:-1;;;;;8251:6:0::1;::::0;8230:40:::1;::::0;8267:1;;8230:40:::1;8281:6;:19:::0;;-1:-1:-1;;;;;;8281:19:0::1;::::0;;8158:150::o;14030:154::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;14084:14:::1;:22:::0;;-1:-1:-1;;14084:22:0;;::::1;::::0;;;14117:20:::1;:28:::0;;;;::::1;::::0;;14161:15:::1;::::0;::::1;::::0;14101:5:::1;::::0;14161:15:::1;14030:154::o:0;16483:267::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16579:4:::1;16575:111;;16617:13;-1:-1:-1::0;;;;;16607:23:0::1;:6;-1:-1:-1::0;;;;;16607:23:0::1;;;16599:75;;;::::0;-1:-1:-1;;;16599:75:0;;11212:2:1;16599:75:0::1;::::0;::::1;11194:21:1::0;11251:2;11231:18;;;11224:30;11290:34;11270:18;;;11263:62;-1:-1:-1;;;11341:18:1;;;11334:37;11388:19;;16599:75:0::1;11010:403:1::0;16599:75:0::1;-1:-1:-1::0;;;;;16696:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16696:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16483:267::o;25200:456::-;8071:6;;25287:10;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25318:20:0;::::1;25310:59;;;::::0;-1:-1:-1;;;25310:59:0;;11620:2:1;25310:59:0::1;::::0;::::1;11602:21:1::0;11659:2;11639:18;;;11632:30;11698:28;11678:18;;;11671:56;11744:18;;25310:59:0::1;11418:350:1::0;25310:59:0::1;-1:-1:-1::0;;;;;25388:23:0;::::1;25406:4;25388:23;;25380:64;;;::::0;-1:-1:-1;;;25380:64:0;;11975:2:1;25380:64:0::1;::::0;::::1;11957:21:1::0;12014:2;11994:18;;;11987:30;12053;12033:18;;;12026:58;12101:18;;25380:64:0::1;11773:352:1::0;25380:64:0::1;25482:39;::::0;-1:-1:-1;;;25482:39:0;;25515:4:::1;25482:39;::::0;::::1;1933:51:1::0;25455:24:0::1;::::0;-1:-1:-1;;;;;25482:24:0;::::1;::::0;::::1;::::0;1906:18:1;;25482:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25540:46;::::0;-1:-1:-1;;;25540:46:0;;-1:-1:-1;;;;;12511:32:1;;;25540:46:0::1;::::0;::::1;12493:51:1::0;12560:18;;;12553:34;;;25455:66:0;;-1:-1:-1;25540:23:0;;::::1;::::0;::::1;::::0;12466:18:1;;25540:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25602;::::0;;-1:-1:-1;;;;;12511:32:1;;12493:51;;12575:2;12560:18;;12553:34;;;25532:54:0;;-1:-1:-1;25602:46:0::1;::::0;12466:18:1;25602:46:0::1;;;;;;;25299:357;25200:456:::0;;;;:::o;13725:249::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;13789:13:::1;::::0;::::1;::::0;::::1;;;13788:14;13780:50;;;::::0;-1:-1:-1;;;13780:50:0;;13050:2:1;13780:50:0::1;::::0;::::1;13032:21:1::0;13089:2;13069:18;;;13062:30;13128:25;13108:18;;;13101:53;13171:18;;13780:50:0::1;12848:347:1::0;13780:50:0::1;13841:13;:20:::0;;-1:-1:-1;;13872:18:0;;;;;13922:12:::1;13901:18;:33:::0;13950:16:::1;::::0;::::1;::::0;-1:-1:-1;;13950:16:0::1;13725:249::o:0;4185:104::-;4241:13;4274:7;4267:14;;;;;:::i;16758:246::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;16867:13:::1;-1:-1:-1::0;;;;;16859:21:0::1;:4;-1:-1:-1::0;;;;;16859:21:0::1;;;16851:91;;;::::0;-1:-1:-1;;;16851:91:0;;13402:2:1;16851:91:0::1;::::0;::::1;13384:21:1::0;13441:2;13421:18;;;13414:30;13480:34;13460:18;;;13453:62;13551:27;13531:18;;;13524:55;13596:19;;16851:91:0::1;13200:421:1::0;16851:91:0::1;16955:41;16984:4;16990:5;16955:28;:41::i;5891:413::-:0;306:10;5984:4;6028:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6028:34:0;;;;;;;;;;6081:35;;;;6073:85;;;;-1:-1:-1;;;6073:85:0;;13828:2:1;6073:85:0;;;13810:21:1;13867:2;13847:18;;;13840:30;13906:34;13886:18;;;13879:62;-1:-1:-1;;;13957:18:1;;;13950:35;14002:19;;6073:85:0;13626:401:1;6073:85:0;6194:67;306:10;6217:7;6245:15;6226:16;:34;6194:8;:67::i;:::-;-1:-1:-1;6292:4:0;;5891:413;-1:-1:-1;;;5891:413:0:o;4649:175::-;4735:4;4752:42;306:10;4776:9;4787:6;4752:9;:42::i;18059:182::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18144:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18144:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18199:34;;1465:41:1;;;18199:34:0::1;::::0;1438:18:1;18199:34:0::1;;;;;;;18059:182:::0;;:::o;14927:284::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15049:4:::1;15043;15023:13;4486:12:::0;;;4398:108;15023:13:::1;:17;::::0;15039:1:::1;15023:17;:::i;:::-;:24;;;;:::i;:::-;15022:31;;;;:::i;:::-;15012:6;:41;;15004:98;;;::::0;-1:-1:-1;;;15004:98:0;;14234:2:1;15004:98:0::1;::::0;::::1;14216:21:1::0;14273:2;14253:18;;;14246:30;14312:34;14292:18;;;14285:62;-1:-1:-1;;;14363:18:1;;;14356:42;14415:19;;15004:98:0::1;14032:408:1::0;15004:98:0::1;15131:17;:6:::0;15141::::1;15131:17;:::i;:::-;15113:15;:35:::0;;;15164:39:::1;::::0;2141:25:1;;;15164:39:0::1;::::0;2129:2:1;2114:18;15164:39:0::1;1995:177:1::0;15281:346:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;15404:6:::1;15384:13;4486:12:::0;;;4398:108;15384:13:::1;:17;::::0;15400:1:::1;15384:17;:::i;:::-;:26;;;;:::i;:::-;15371:9;:39;;15363:105;;;::::0;-1:-1:-1;;;15363:105:0;;14647:2:1;15363:105:0::1;::::0;::::1;14629:21:1::0;14686:2;14666:18;;;14659:30;14725:34;14705:18;;;14698:62;-1:-1:-1;;;14776:18:1;;;14769:51;14837:19;;15363:105:0::1;14445:417:1::0;15363:105:0::1;15519:4;15499:13;4486:12:::0;;;4398:108;15499:13:::1;:17;::::0;15515:1:::1;15499:17;:::i;:::-;:24;;;;:::i;:::-;15486:9;:37;;15478:102;;;::::0;-1:-1:-1;;;15478:102:0;;15069:2:1;15478:102:0::1;::::0;::::1;15051:21:1::0;15108:2;15088:18;;;15081:30;15147:34;15127:18;;;15120:62;-1:-1:-1;;;15198:18:1;;;15191:50;15258:19;;15478:102:0::1;14867:416:1::0;15478:102:0::1;15590:18;:30:::0;15281:346::o;14645:274::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;14765:4:::1;14759;14739:13;4486:12:::0;;;4398:108;14739:13:::1;:17;::::0;14755:1:::1;14739:17;:::i;:::-;:24;;;;:::i;:::-;14738:31;;;;:::i;:::-;14728:6;:41;;14720:96;;;::::0;-1:-1:-1;;;14720:96:0;;15490:2:1;14720:96:0::1;::::0;::::1;15472:21:1::0;15529:2;15509:18;;;15502:30;15568:34;15548:18;;;15541:62;-1:-1:-1;;;15619:18:1;;;15612:40;15669:19;;14720:96:0::1;15288:406:1::0;14720:96:0::1;14843:17;:6:::0;14853::::1;14843:17;:::i;:::-;14827:13;:33:::0;;;14876:35:::1;::::0;2141:25:1;;;14876:35:0::1;::::0;2129:2:1;2114:18;14876:35:0::1;1995:177:1::0;14254:98:0;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;14316:20:::1;:28:::0;;-1:-1:-1;;14316:28:0::1;::::0;;14254:98::o;8316:244::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8405:22:0;::::1;8397:73;;;::::0;-1:-1:-1;;;8397:73:0;;15901:2:1;8397:73:0::1;::::0;::::1;15883:21:1::0;15940:2;15920:18;;;15913:30;15979:34;15959:18;;;15952:62;-1:-1:-1;;;16030:18:1;;;16023:36;16076:19;;8397:73:0::1;15699:402:1::0;8397:73:0::1;8507:6;::::0;8486:38:::1;::::0;-1:-1:-1;;;;;8486:38:0;;::::1;::::0;8507:6:::1;::::0;8486:38:::1;::::0;8507:6:::1;::::0;8486:38:::1;8535:6;:17:::0;;-1:-1:-1;;;;;;8535:17:0::1;-1:-1:-1::0;;;;;8535:17:0;;;::::1;::::0;;;::::1;::::0;;8316:244::o;25726:160::-;8071:6;;-1:-1:-1;;;;;8071:6:0;306:10;8071:22;8063:67;;;;-1:-1:-1;;;8063:67:0;;;;;;;:::i;:::-;25820:58:::1;::::0;25784:12:::1;::::0;25828:10:::1;::::0;25852:21:::1;::::0;25784:12;25820:58;25784:12;25820:58;25852:21;25828:10;25820:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;25726:160:0:o;7233:380::-;-1:-1:-1;;;;;7369:19:0;;7361:68;;;;-1:-1:-1;;;7361:68:0;;16518:2:1;7361:68:0;;;16500:21:1;16557:2;16537:18;;;16530:30;16596:34;16576:18;;;16569:62;-1:-1:-1;;;16647:18:1;;;16640:34;16691:19;;7361:68:0;16316:400:1;7361:68:0;-1:-1:-1;;;;;7448:21:0;;7440:68;;;;-1:-1:-1;;;7440:68:0;;16923:2:1;7440:68:0;;;16905:21:1;16962:2;16942:18;;;16935:30;17001:34;16981:18;;;16974:62;-1:-1:-1;;;17052:18:1;;;17045:32;17094:19;;7440:68:0;16721:398:1;7440:68:0;-1:-1:-1;;;;;7521:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7573:32;;2141:25:1;;;7573:32:0;;2114:18:1;7573:32:0;;;;;;;7233:380;;;:::o;18249:4349::-;-1:-1:-1;;;;;18349:18:0;;18341:68;;;;-1:-1:-1;;;18341:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18428:16:0;;18420:64;;;;-1:-1:-1;;;18420:64:0;;;;;;;:::i;:::-;18512:1;18503:6;:10;18495:52;;;;-1:-1:-1;;;18495:52:0;;18136:2:1;18495:52:0;;;18118:21:1;18175:2;18155:18;;;18148:30;18214:31;18194:18;;;18187:59;18263:18;;18495:52:0;17934:353:1;18495:52:0;18581:14;;;;18578:1873;;;8009:6;;-1:-1:-1;;;;;18615:15:0;;;8009:6;;18615:15;;;;:32;;-1:-1:-1;8009:6:0;;-1:-1:-1;;;;;18634:13:0;;;8009:6;;18634:13;;18615:32;:52;;;;-1:-1:-1;;;;;;18651:16:0;;;;18615:52;:77;;;;-1:-1:-1;;;;;;18671:21:0;;18685:6;18671:21;;18615:77;18611:1829;;;18716:13;;;;;;;18712:172;;-1:-1:-1;;;;;18761:37:0;;;;;;:31;:37;;;;;;;;;:76;;-1:-1:-1;;;;;;18802:35:0;;;;;;:31;:35;;;;;;;;18761:76;18753:111;;;;-1:-1:-1;;;18753:111:0;;18494:2:1;18753:111:0;;;18476:21:1;18533:2;18513:18;;;18506:30;-1:-1:-1;;;18552:18:1;;;18545:52;18614:18;;18753:111:0;18292:346:1;18753:111:0;19058:20;;;;19054:519;;;19120:15;-1:-1:-1;;;;;19106:30:0;:2;-1:-1:-1;;;;;19106:30:0;;;:62;;;;;19154:13;-1:-1:-1;;;;;19140:28:0;:2;-1:-1:-1;;;;;19140:28:0;;;19106:62;19102:452;;;19246:16;19261:1;19246:12;:16;:::i;:::-;19233:9;19204:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;19301:16:0;19316:1;19301:12;:16;:::i;:::-;-1:-1:-1;;;;;19266:32:0;;;;;;:28;:32;;;;;;:51;19204:113;19196:179;;;;-1:-1:-1;;;19196:179:0;;18975:2:1;19196:179:0;;;18957:21:1;19014:2;18994:18;;;18987:30;19053:34;19033:18;;;19026:62;-1:-1:-1;;;19104:18:1;;;19097:51;19165:19;;19196:179:0;18773:417:1;19196:179:0;19431:9;19402:39;;;;:28;:39;;;;;;19444:12;19402:54;;;;-1:-1:-1;;;;;19483:32:0;;;;;;:47;19102:452;-1:-1:-1;;;;;19642:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;19678:35:0;;;;;;:31;:35;;;;;;;;19677:36;19642:71;19638:787;;;19760:12;;19750:6;:22;;19742:75;;;;-1:-1:-1;;;19742:75:0;;19397:2:1;19742:75:0;;;19379:21:1;19436:2;19416:18;;;19409:30;19475:34;19455:18;;;19448:62;-1:-1:-1;;;19526:18:1;;;19519:38;19574:19;;19742:75:0;19195:404:1;19742:75:0;19878:15;;-1:-1:-1;;;;;4615:18:0;;4588:7;4615:18;;;;;;;;;;;19852:22;;:6;:22;:::i;:::-;:41;;19844:78;;;;-1:-1:-1;;;19844:78:0;;19806:2:1;19844:78:0;;;19788:21:1;19845:2;19825:18;;;19818:30;-1:-1:-1;;;19864:18:1;;;19857:54;19928:18;;19844:78:0;19604:348:1;19844:78:0;19638:787;;;-1:-1:-1;;;;;19999:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;20033:37:0;;;;;;:31;:37;;;;;;;;20032:38;19999:71;19995:430;;;20117:13;;20107:6;:23;;20099:78;;;;-1:-1:-1;;;20099:78:0;;20159:2:1;20099:78:0;;;20141:21:1;20198:2;20178:18;;;20171:30;20237:34;20217:18;;;20210:62;-1:-1:-1;;;20288:18:1;;;20281:40;20338:19;;20099:78:0;19957:406:1;19995:430:0;-1:-1:-1;;;;;20226:35:0;;;;;;:31;:35;;;;;;;;20225:36;:78;;;;-1:-1:-1;;;;;;20266:37:0;;;;;;:31;:37;;;;;;;;20265:38;20225:78;20221:204;;;20361:15;;-1:-1:-1;;;;;4615:18:0;;4588:7;4615:18;;;;;;;;;;;20335:22;;:6;:22;:::i;:::-;:41;;20327:78;;;;-1:-1:-1;;;20327:78:0;;19806:2:1;20327:78:0;;;19788:21:1;19845:2;19825:18;;;19818:30;-1:-1:-1;;;19864:18:1;;;19857:54;19928:18;;20327:78:0;19604:348:1;20327:78:0;20512:4;20463:28;4615:18;;;;;;;;;;;20578;;20554:42;;;;;;;20612:22;;-1:-1:-1;20623:11:0;;;;;;;20612:22;:35;;;;-1:-1:-1;20639:8:0;;;;20638:9;20612:35;:71;;;;-1:-1:-1;;;;;;20652:31:0;;;;;;:25;:31;;;;;;;;20651:32;20612:71;:101;;;;-1:-1:-1;;;;;;20688:25:0;;;;;;:19;:25;;;;;;;;20687:26;20612:101;:129;;;;-1:-1:-1;;;;;;20718:23:0;;;;;;:19;:23;;;;;;;;20717:24;20612:129;20609:236;;;20758:8;:15;;-1:-1:-1;;20758:15:0;20769:4;20758:15;;;20790:10;:8;:10::i;:::-;20817:8;:16;;-1:-1:-1;;20817:16:0;;;20609:236;-1:-1:-1;;;;;20975:25:0;;20857:12;20975:25;;;:19;:25;;;;;;20872:4;;20975:25;;;:52;;-1:-1:-1;;;;;;21004:23:0;;;;;;:19;:23;;;;;;;;20975:52;20972:99;;;-1:-1:-1;21054:5:0;20972:99;21091:12;21118:21;21231:7;21228:1317;;;21386:16;:12;21401:1;21386:16;:::i;:::-;21364:18;;:38;;:73;;;;-1:-1:-1;;;;;;21406:31:0;;;;;;:25;:31;;;;;;;;21364:73;21361:999;;;21487:3;21473:11;:6;21482:2;21473:11;:::i;:::-;:17;;;;:::i;:::-;21531:15;;21457:33;;-1:-1:-1;21509:53:0;;21525:4;;-1:-1:-1;;;;;21531:15:0;21457:33;21509:15;:53::i;:::-;21361:999;;;-1:-1:-1;;;;;21625:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;21674:1;21658:13;;:17;21625:50;21621:739;;;21726:3;21711:13;;21702:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;21695:34;;21796:13;;21777:16;;21770:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;21748:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21874:13:0;;21856:15;;21849:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;21828:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;21946:13:0;;21931:12;;21924:19;;:4;:19;:::i;:::-;:35;;;;:::i;:::-;21906:14;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;21621:739:0;;-1:-1:-1;21621:739:0;;-1:-1:-1;;;;;22020:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22070:1;22055:12;;:16;22020:51;22017:343;;;22120:3;22105:12;;22096:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;22089:34;;22186:12;;22168:15;;22161:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22139:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22262:12:0;;22245:14;;22238:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;22217:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;22332:12:0;;22318:11;;22311:18;;:4;:18;:::i;:::-;:33;;;;:::i;:::-;22293:14;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22017:343:0;22391:8;;22388:93;;22423:42;22439:4;22453;22460;22423:15;:42::i;:::-;22513:20;22520:13;22513:4;:20;:::i;:::-;22503:30;;;;:::i;:::-;;;21228:1317;22557:33;22573:4;22579:2;22583:6;22557:15;:33::i;:::-;18328:4270;;;;;18249:4349;;;:::o;17012:248::-;-1:-1:-1;;;;;17095:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;17095:39:0;;;;;;;17155;17095:31;:39;17155:26;:39::i;:::-;17212:40;;;;;;-1:-1:-1;;;;;17212:40:0;;;;;;;;17012:248;;:::o;23738:1454::-;23821:4;23777:23;4615:18;;;;;;;;;;;23777:50;;23838:25;23907:14;;23887:17;;23866:18;;:38;;;;:::i;:::-;:55;;;;:::i;:::-;23838:83;-1:-1:-1;23945:20:0;;;:46;;-1:-1:-1;23969:22:0;;23945:46;23942:60;;;23994:7;;23738:1454::o;23942:60::-;24035:18;;;:23;;;:::i;:::-;24017:15;:41;24014:113;;;24092:18;;;:23;;;:::i;:::-;24074:41;;24014:113;24139:12;24221:23;24306:1;24286:17;24265:18;;24247:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24221:86;-1:-1:-1;24328:51:0;24345:33;24221:86;24345:15;:33;:::i;:::-;24328:16;:51::i;:::-;24583:18;;24422:21;;;;24401:18;;24583:20;;24602:1;;24583:20;:::i;:::-;24562:42;;:17;:42;:::i;:::-;24541:17;;24528:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;24503:102;;24616:19;24709:1;24690:18;;:20;;;;:::i;:::-;24669:42;;:17;:42;:::i;:::-;24651:14;;24638:27;;:10;:27;:::i;:::-;:74;;;;:::i;:::-;24616:96;-1:-1:-1;24744:28:0;24616:96;24744:14;:28;:::i;:::-;24725:47;;;;:::i;:::-;24818:1;24797:18;:22;;;24830:17;:21;;;24862:14;:18;24725:47;-1:-1:-1;24904:19:0;;;;;:42;;;24945:1;24927:15;:19;24904:42;24901:119;;;24962:46;24975:15;24992;24962:12;:46::i;:::-;25053:12;;25045:50;;-1:-1:-1;;;;;25053:12:0;;;;25079:11;;25045:50;;;;25079:11;25053:12;25045:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25129:15:0;;25121:63;;25032;;-1:-1:-1;;;;;;25129:15:0;;25158:21;;25121:63;;;;25158:21;25129:15;25121:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23738:1454:0:o;6312:614::-;-1:-1:-1;;;;;6452:20:0;;6444:70;;;;-1:-1:-1;;;6444:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6533:23:0;;6525:71;;;;-1:-1:-1;;;6525:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6633:17:0;;6609:21;6633:17;;;;;;;;;;;6669:23;;;;6661:74;;;;-1:-1:-1;;;6661:74:0;;20570:2:1;6661:74:0;;;20552:21:1;20609:2;20589:18;;;20582:30;20648:34;20628:18;;;20621:62;-1:-1:-1;;;20699:18:1;;;20692:36;20745:19;;6661:74:0;20368:402:1;6661:74:0;-1:-1:-1;;;;;6771:17:0;;;:9;:17;;;;;;;;;;;6791:22;;;6771:42;;6835:20;;;;;;;;:30;;6807:6;;6771:9;6835:30;;6807:6;;6835:30;:::i;:::-;;;;;;;;6900:9;-1:-1:-1;;;;;6883:35:0;6892:6;-1:-1:-1;;;;;6883:35:0;;6911:6;6883:35;;;;2141:25:1;;2129:2;2114:18;;1995:177;6883:35:0;;;;;;;;6433:493;6312:614;;;:::o;15639:207::-;-1:-1:-1;;;;;15727:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;15727:52:0;;;;;;;;;;15795:43;;20943:51:1;;;21010:18;;;21003:50;15795:43:0;;20916:18:1;15795:43:0;;;;;;;15639:207;;:::o;22606:591::-;22758:16;;;22772:1;22758:16;;;;;;;;22734:21;;22758:16;;;;;;;;;;-1:-1:-1;22758:16:0;22734:40;;22803:4;22785;22790:1;22785:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22785:23:0;;;-1:-1:-1;;;;;22785:23:0;;;;;22829:15;-1:-1:-1;;;;;22829:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22819:4;22824:1;22819:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;22819:32:0;;;-1:-1:-1;;;;;22819:32:0;;;;;22864:62;22881:4;22896:15;22914:11;22864:8;:62::i;:::-;22965:224;;-1:-1:-1;;;22965:224:0;;-1:-1:-1;;;;;22965:15:0;:66;;;;:224;;23046:11;;23072:1;;23116:4;;23143;;23163:15;;22965:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22661:536;22606:591;:::o;23209:521::-;23357:62;23374:4;23389:15;23407:11;23357:8;:62::i;:::-;23462:260;;-1:-1:-1;;;23462:260:0;;23534:4;23462:260;;;22646:34:1;22696:18;;;22689:34;;;23580:1:0;22739:18:1;;;22732:34;;;22782:18;;;22775:34;23674:6:0;22825:19:1;;;22818:44;23696:15:0;22878:19:1;;;22871:35;23462:15:0;-1:-1:-1;;;;;23462:31:0;;;;23501:9;;22580:19:1;;23462:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23209:521;;:::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;869:131::-;-1:-1:-1;;;;;944:31:1;;934:42;;924:70;;990:1;987;980:12;924:70;869:131;:::o;1005:315::-;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:52;;;1150:1;1147;1140:12;1102:52;1189:9;1176:23;1208:31;1233:5;1208:31;:::i;:::-;1258:5;1310:2;1295:18;;;;1282:32;;-1:-1:-1;;;1005:315:1:o;1517:247::-;1576:6;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;1684:9;1671:23;1703:31;1728:5;1703:31;:::i;:::-;1753:5;1517:247;-1:-1:-1;;;1517:247:1:o;2177:127::-;2238:10;2233:3;2229:20;2226:1;2219:31;2269:4;2266:1;2259:15;2293:4;2290:1;2283:15;2309:275;2380:2;2374:9;2445:2;2426:13;;-1:-1:-1;;2422:27:1;2410:40;;2480:18;2465:34;;2501:22;;;2462:62;2459:88;;;2527:18;;:::i;:::-;2563:2;2556:22;2309:275;;-1:-1:-1;2309:275:1:o;2589:183::-;2649:4;2682:18;2674:6;2671:30;2668:56;;;2704:18;;:::i;:::-;-1:-1:-1;2749:1:1;2745:14;2761:4;2741:25;;2589:183::o;2777:662::-;2831:5;2884:3;2877:4;2869:6;2865:17;2861:27;2851:55;;2902:1;2899;2892:12;2851:55;2938:6;2925:20;2964:4;2988:60;3004:43;3044:2;3004:43;:::i;:::-;2988:60;:::i;:::-;3082:15;;;3168:1;3164:10;;;;3152:23;;3148:32;;;3113:12;;;;3192:15;;;3189:35;;;3220:1;3217;3210:12;3189:35;3256:2;3248:6;3244:15;3268:142;3284:6;3279:3;3276:15;3268:142;;;3350:17;;3338:30;;3388:12;;;;3301;;3268:142;;;-1:-1:-1;3428:5:1;2777:662;-1:-1:-1;;;;;;2777:662:1:o;3444:1215::-;3562:6;3570;3623:2;3611:9;3602:7;3598:23;3594:32;3591:52;;;3639:1;3636;3629:12;3591:52;3679:9;3666:23;3708:18;3749:2;3741:6;3738:14;3735:34;;;3765:1;3762;3755:12;3735:34;3803:6;3792:9;3788:22;3778:32;;3848:7;3841:4;3837:2;3833:13;3829:27;3819:55;;3870:1;3867;3860:12;3819:55;3906:2;3893:16;3928:4;3952:60;3968:43;4008:2;3968:43;:::i;3952:60::-;4046:15;;;4128:1;4124:10;;;;4116:19;;4112:28;;;4077:12;;;;4152:19;;;4149:39;;;4184:1;4181;4174:12;4149:39;4208:11;;;;4228:217;4244:6;4239:3;4236:15;4228:217;;;4324:3;4311:17;4341:31;4366:5;4341:31;:::i;:::-;4385:18;;4261:12;;;;4423;;;;4228:217;;;4464:5;-1:-1:-1;;4507:18:1;;4494:32;;-1:-1:-1;;4538:16:1;;;4535:36;;;4567:1;4564;4557:12;4535:36;;4590:63;4645:7;4634:8;4623:9;4619:24;4590:63;:::i;:::-;4580:73;;;3444:1215;;;;;:::o;4664:456::-;4741:6;4749;4757;4810:2;4798:9;4789:7;4785:23;4781:32;4778:52;;;4826:1;4823;4816:12;4778:52;4865:9;4852:23;4884:31;4909:5;4884:31;:::i;:::-;4934:5;-1:-1:-1;4991:2:1;4976:18;;4963:32;5004:33;4963:32;5004:33;:::i;:::-;4664:456;;5056:7;;-1:-1:-1;;;5110:2:1;5095:18;;;;5082:32;;4664:456::o;5125:180::-;5184:6;5237:2;5225:9;5216:7;5212:23;5208:32;5205:52;;;5253:1;5250;5243:12;5205:52;-1:-1:-1;5276:23:1;;5125:180;-1:-1:-1;5125:180:1: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:356::-;6812:2;6794:21;;;6831:18;;;6824:30;6890:34;6885:2;6870:18;;6863:62;6957:2;6942:18;;6610:356::o;6971:127::-;7032:10;7027:3;7023:20;7020:1;7013:31;7063:4;7060:1;7053:15;7087:4;7084:1;7077:15;7103:128;7143:3;7174:1;7170:6;7167:1;7164:13;7161:39;;;7180:18;;:::i;:::-;-1:-1:-1;7216:9:1;;7103:128::o;7594:380::-;7673:1;7669:12;;;;7716;;;7737:61;;7791:4;7783:6;7779:17;7769:27;;7737:61;7844:2;7836:6;7833:14;7813:18;7810:38;7807:161;;;7890:10;7885:3;7881:20;7878:1;7871:31;7925:4;7922:1;7915:15;7953:4;7950:1;7943:15;7807:161;;7594:380;;;:::o;8761:127::-;8822:10;8817:3;8813:20;8810:1;8803:31;8853:4;8850:1;8843:15;8877:4;8874:1;8867:15;8893:168;8933:7;8999:1;8995;8991:6;8987:14;8984:1;8981:21;8976:1;8969:9;8962:17;8958:45;8955:71;;;9006:18;;:::i;:::-;-1:-1:-1;9046:9:1;;8893:168::o;9066:135::-;9105:3;-1:-1:-1;;9126:17:1;;9123:43;;;9146:18;;:::i;:::-;-1:-1:-1;9193:1:1;9182:13;;9066:135::o;9615:217::-;9655:1;9681;9671:132;;9725:10;9720:3;9716:20;9713:1;9706:31;9760:4;9757:1;9750:15;9788:4;9785:1;9778:15;9671:132;-1:-1:-1;9817:9:1;;9615:217::o;12130:184::-;12200:6;12253:2;12241:9;12232:7;12228:23;12224:32;12221:52;;;12269:1;12266;12259:12;12221:52;-1:-1:-1;12292:16:1;;12130:184;-1:-1:-1;12130:184:1:o;12598:245::-;12665:6;12718:2;12706:9;12697:7;12693:23;12689:32;12686:52;;;12734:1;12731;12724:12;12686:52;12766:9;12760:16;12785:28;12807:5;12785:28;:::i;17124:401::-;17326:2;17308:21;;;17365:2;17345:18;;;17338:30;17404:34;17399:2;17384:18;;17377:62;-1:-1:-1;;;17470:2:1;17455:18;;17448:35;17515:3;17500:19;;17124:401::o;17530:399::-;17732:2;17714:21;;;17771:2;17751:18;;;17744:30;17810:34;17805:2;17790:18;;17783:62;-1:-1:-1;;;17876:2:1;17861:18;;17854:33;17919:3;17904:19;;17530:399::o;18643:125::-;18683:4;18711:1;18708;18705:8;18702:34;;;18716:18;;:::i;:::-;-1:-1:-1;18753:9:1;;18643:125::o;21064:251::-;21134:6;21187:2;21175:9;21166:7;21162:23;21158:32;21155:52;;;21203:1;21200;21193:12;21155:52;21235:9;21229:16;21254:31;21279:5;21254:31;:::i;21320:980::-;21582:4;21630:3;21619:9;21615:19;21661:6;21650:9;21643:25;21687:2;21725:6;21720:2;21709:9;21705:18;21698:34;21768:3;21763:2;21752:9;21748:18;21741:31;21792:6;21827;21821:13;21858:6;21850;21843:22;21896:3;21885:9;21881:19;21874:26;;21935:2;21927:6;21923:15;21909:29;;21956:1;21966:195;21980:6;21977:1;21974:13;21966:195;;;22045:13;;-1:-1:-1;;;;;22041:39:1;22029:52;;22136:15;;;;22101:12;;;;22077:1;21995:9;21966:195;;;-1:-1:-1;;;;;;;22217:32:1;;;;22212:2;22197:18;;22190:60;-1:-1:-1;;;22281:3:1;22266:19;22259:35;22178:3;21320:980;-1:-1:-1;;;21320:980:1:o;22917:306::-;23005:6;23013;23021;23074:2;23062:9;23053:7;23049:23;23045:32;23042:52;;;23090:1;23087;23080:12;23042:52;23119:9;23113:16;23103:26;;23169:2;23158:9;23154:18;23148:25;23138:35;;23213:2;23202:9;23198:18;23192:25;23182:35;;22917:306;;;;;:::o

Swarm Source

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