ETH Price: $3,391.19 (+1.18%)

Token

Red Rabbit (RR)
 

Overview

Max Total Supply

2,320,232,023 RR

Holders

483

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,024,168.005646712697698828 RR

Value
$0.00
0xe686c86a2cf340a96e087ed70e28a72025112bb4
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RR

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//https://twitter.com/RedRabbitERC

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

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

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

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

contract RR is ERC20, Ownable {

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

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public futureOwner;

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

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

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

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

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

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

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

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Red Rabbit", "RR") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 5){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Goerli ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain Testnet: PCS V2
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 2_320_232_023 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 25 / 10000;
        maxSellAmount = totalSupply * 50 / 10000;
        maxWallet = totalSupply * 50 / 10000;
        swapTokensAtAmount = totalSupply * 5 / 10000;

        buyOperationsFee = 50;
        buyLiquidityFee = 150;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 7000;
        sellLiquidityFee = 500;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        if(block.chainid == 1){
            operationsAddress = address(msg.sender); // update
            futureOwner = address(msg.sender); // update if necessary
        } else {
            operationsAddress = address(msg.sender);
            futureOwner = address(msg.sender);
        }

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(address(futureOwner), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(address(futureOwner), true);

        
        // _createInitialSupply(address(this), totalSupply * 66 / 100);  // update with % for LP and use this if using launch function
        _createInitialSupply(futureOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading(address _lpPair) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        
        // set pair
        require(_lpPair != address(0) && balanceOf(_lpPair)  > 0, "Lp pair not valid for launch");
        lpPair = _lpPair;
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {

        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWallet = totalSupply();

        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) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

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

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

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

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

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

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

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

    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(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && !automatedMarketMakerPairs[to]){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_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) <= maxWallet, "Max Wallet Exceeded");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

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

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

        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
            }

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

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

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));

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

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

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

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

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function launch() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

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

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

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

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

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

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(percent <= 5000, "May not burn more than 50% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpPair","type":"address"}],"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":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600e55600f805462ffffff191660019081179091556011805460ff1990811690921790556019601a55601b80549091169055610e10601c55610708601e55600a60809081526914995908149858989a5d60b21b60a052610100604052600260c090815261292960f11b60e05260036200007b8382620007fb565b5060046200008a8282620007fb565b50505060006200009f6200046560201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004d72833981519152908290a35033600046600103620001045750737a250d5630b4cf539739df2c5dacb4c659f2488d620001e6565b46600503620001295750737a250d5630b4cf539739df2c5dacb4c659f2488d620001e6565b466038036200014e57507310ed43c718714eb63d5aa57b78b54704e256024e620001e6565b4660610362000173575073d99d1c33f9fc3444f8101754abc46c52416550d1620001e6565b4661a4b103620001995750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001e6565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b03831617905560006200020c601290565b6200021990600a620009dc565b6200022990638a4bee57620009f4565b90506127106200023b826019620009f4565b62000247919062000a0e565b6006556127106200025a826032620009f4565b62000266919062000a0e565b60075561271062000279826032620009f4565b62000285919062000a0e565b60085561271062000298826005620009f4565b620002a4919062000a0e565b600b556032601381905560966014819055620002c09162000a31565b601255611b5860168190556101f46017819055620002de9162000a31565b601555466001036200031257600c8054336001600160a01b03199182168117909255600d8054909116909117905562000335565b600c8054336001600160a01b03199182168117909255600d805490911690911790555b6200034283600162000469565b6200034f30600162000469565b6200035e61dead600162000469565b600c5462000377906001600160a01b0316600162000469565b60095462000390906001600160a01b0316600162000469565b600d54620003a9906001600160a01b0316600162000469565b620003b6836001620004cc565b620003c3306001620004cc565b620003d261dead6001620004cc565b600c54620003eb906001600160a01b03166001620004cc565b60095462000404906001600160a01b03166001620004cc565b600d546200041d906001600160a01b03166001620004cc565b600d543060009081526020819052604090205462000451916001600160a01b0316906200044b908462000a47565b62000574565b6200045c8362000659565b50505062000a5d565b3390565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620005175760405162461bcd60e51b8152602060048201819052602482015260008051602062004d528339815191526044820152606401620001dd565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001dd565b8060026000828254620005e0919062000a31565b90915550506001600160a01b038216600090815260208190526040812080548392906200060f90849062000a31565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006a45760405162461bcd60e51b8152602060048201819052602482015260008051602062004d528339815191526044820152606401620001dd565b6001600160a01b0381166200070b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001dd565b6005546040516001600160a01b0380841692169060008051602062004d7283398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200078157607f821691505b602082108103620007a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007f657600081815260208120601f850160051c81016020861015620007d15750805b601f850160051c820191505b81811015620007f257828155600101620007dd565b5050505b505050565b81516001600160401b0381111562000817576200081762000756565b6200082f816200082884546200076c565b84620007a8565b602080601f8311600181146200086757600084156200084e5750858301515b600019600386901b1c1916600185901b178555620007f2565b600085815260208120601f198616915b82811015620008985788860151825594840194600190910190840162000877565b5085821015620008b75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200091e578160001904821115620009025762000902620008c7565b808516156200091057918102915b93841c9390800290620008e2565b509250929050565b6000826200093757506001620009d6565b816200094657506000620009d6565b81600181146200095f57600281146200096a576200098a565b6001915050620009d6565b60ff8411156200097e576200097e620008c7565b50506001821b620009d6565b5060208310610133831016604e8410600b8410161715620009af575081810a620009d6565b620009bb8383620008dd565b8060001904821115620009d257620009d2620008c7565b0290505b92915050565b6000620009ed60ff84168362000926565b9392505050565b8082028115828204841417620009d657620009d6620008c7565b60008262000a2c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009d657620009d6620008c7565b81810381811115620009d657620009d6620008c7565b6142e58062000a6d6000396000f3fe6080604052600436106103d25760003560e01c80637571336a116101fd578063c18bc19511610118578063ea4cfe12116100ab578063f5648a4f1161007a578063f5648a4f14610add578063f637434214610af2578063f8b45b0514610b08578063fb002c9714610b1e578063fe72b27a14610b3457600080fd5b8063ea4cfe1214610a71578063ee40166e14610a91578063f11a24d314610aa7578063f2fde38b14610abd57600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f146109e0578063dd62ed3e14610a00578063e2f4560514610a46578063e884f26014610a5c57600080fd5b8063c18bc19514610970578063c876d0b914610990578063d257b34f146109aa578063d85ba063146109ca57600080fd5b8063a457c2d711610190578063b9e9d1aa1161015f578063b9e9d1aa146108f1578063bbc0c74214610911578063bd5fb92014610930578063c02466681461095057600080fd5b8063a457c2d71461086b578063a4c82a001461088b578063a9059cbb146108a1578063b62496f5146108c157600080fd5b806395d89b41116101cc57806395d89b411461080a5780639a7a23d61461081f5780639e93ad8e1461083f5780639ec22c0e1461085557600080fd5b80637571336a146107965780638366e79a146107b657806388e765ff146107d65780638da5cb5b146107ec57600080fd5b8063313ce567116102ed57806366ca9b831161028057806370a082311161024f57806370a082311461072c578063715018a61461074c578063730c188814610761578063751039fc1461078157600080fd5b806366ca9b83146106c057806366d602ae146106e05780636a486a8e146106f65780636ddd17131461070c57600080fd5b80634a62bb65116102bc5780634a62bb65146106655780634f77f6c01461067f57806351f205e4146106955780635a139dd4146106aa57600080fd5b8063313ce567146105e95780633950935114610605578063452ed4f114610625578063499b83941461064557600080fd5b8063184c16c51161036557806323b872dd1161033457806323b872dd146105795780632be32b61146105995780632c3e486c146105b95780632e82f1a0146105cf57600080fd5b8063184c16c514610517578063199ffc721461052d5780631a8145bb146105435780632307b4411461055957600080fd5b806307980cb9116103a157806307980cb914610478578063095ea7b31461049857806310d5de53146104c857806318160ddd146104f857600080fd5b806301339c21146103de57806302dbd8f8146103f557806306fdde03146104155780630758d9241461044057600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b54565b005b34801561040157600080fd5b506103f3610410366004613a99565b610f5d565b34801561042157600080fd5b5061042a61100c565b6040516104379190613abb565b60405180910390f35b34801561044c57600080fd5b50600954610460906001600160a01b031681565b6040516001600160a01b039091168152602001610437565b34801561048457600080fd5b506103f3610493366004613b21565b61109e565b3480156104a457600080fd5b506104b86104b3366004613b45565b61120d565b6040519015158152602001610437565b3480156104d457600080fd5b506104b86104e3366004613b21565b60216020526000908152604090205460ff1681565b34801561050457600080fd5b506002545b604051908152602001610437565b34801561052357600080fd5b50610509601e5481565b34801561053957600080fd5b50610509601a5481565b34801561054f57600080fd5b5061050960195481565b34801561056557600080fd5b506103f3610574366004613c47565b611224565b34801561058557600080fd5b506104b8610594366004613d09565b61137d565b3480156105a557600080fd5b506103f36105b4366004613d4a565b611427565b3480156105c557600080fd5b50610509601c5481565b3480156105db57600080fd5b50601b546104b89060ff1681565b3480156105f557600080fd5b5060405160128152602001610437565b34801561061157600080fd5b506104b8610620366004613b45565b61153b565b34801561063157600080fd5b50600a54610460906001600160a01b031681565b34801561065157600080fd5b506103f3610660366004613b21565b611572565b34801561067157600080fd5b50600f546104b89060ff1681565b34801561068b57600080fd5b5061050960165481565b3480156106a157600080fd5b506103f361164b565b3480156106b657600080fd5b5061050960135481565b3480156106cc57600080fd5b506103f36106db366004613a99565b611754565b3480156106ec57600080fd5b5061050960075481565b34801561070257600080fd5b5061050960155481565b34801561071857600080fd5b50600f546104b89062010000900460ff1681565b34801561073857600080fd5b50610509610747366004613b21565b6117ff565b34801561075857600080fd5b506103f361181a565b34801561076d57600080fd5b506103f361077c366004613d71565b61188e565b34801561078d57600080fd5b506103f36119b7565b3480156107a257600080fd5b506103f36107b1366004613daa565b611a34565b3480156107c257600080fd5b506104b86107d1366004613de3565b611afc565b3480156107e257600080fd5b5061050960065481565b3480156107f857600080fd5b506005546001600160a01b0316610460565b34801561081657600080fd5b5061042a611d36565b34801561082b57600080fd5b506103f361083a366004613daa565b611d45565b34801561084b57600080fd5b5061050961271081565b34801561086157600080fd5b50610509601f5481565b34801561087757600080fd5b506104b8610886366004613b45565b611e39565b34801561089757600080fd5b50610509601d5481565b3480156108ad57600080fd5b506104b86108bc366004613b45565b611ed2565b3480156108cd57600080fd5b506104b86108dc366004613b21565b60226020526000908152604090205460ff1681565b3480156108fd57600080fd5b50600d54610460906001600160a01b031681565b34801561091d57600080fd5b50600f546104b890610100900460ff1681565b34801561093c57600080fd5b506103f361094b366004613e11565b611edf565b34801561095c57600080fd5b506103f361096b366004613daa565b611feb565b34801561097c57600080fd5b506103f361098b366004613d4a565b612072565b34801561099c57600080fd5b506011546104b89060ff1681565b3480156109b657600080fd5b506103f36109c5366004613d4a565b61217d565b3480156109d657600080fd5b5061050960125481565b3480156109ec57600080fd5b506103f36109fb366004613d4a565b6122c8565b348015610a0c57600080fd5b50610509610a1b366004613de3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a5257600080fd5b50610509600b5481565b348015610a6857600080fd5b506103f36123d6565b348015610a7d57600080fd5b50600c54610460906001600160a01b031681565b348015610a9d57600080fd5b50610509600e5481565b348015610ab357600080fd5b5061050960145481565b348015610ac957600080fd5b506103f3610ad8366004613b21565b61240c565b348015610ae957600080fd5b506103f36124f7565b348015610afe57600080fd5b5061050960175481565b348015610b1457600080fd5b5061050960085481565b348015610b2a57600080fd5b5061050960185481565b348015610b4057600080fd5b506103f3610b4f366004613d4a565b612563565b6005546001600160a01b03163314610b875760405162461bcd60e51b8152600401610b7e90613e8c565b60405180910390fd5b600f54610100900460ff1615610bf35760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b7e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a9190613ec1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf09190613ec1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d619190613ec1565b600a80546001600160a01b0319166001600160a01b03929092169182179055610d8b90600161285d565b600a54610da2906001600160a01b031660016128c0565b60004711610dfe5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b7e565b6000610e09306117ff565b11610e655760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b7e565b600954610e859030906001600160a01b0316610e80826117ff565b6128ee565b6009546001600160a01b031663f305d7194730610ea1816117ff565b600d546040516001600160e01b031960e087901b168152610ed793929160009182916001600160a01b0316904290600401613ede565b60606040518083038185885af1158015610ef5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f1a9190613f19565b5050600f805462ffff001916620101001790555043600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610f875760405162461bcd60e51b8152600401610b7e90613e8c565b60168290556017819055610f9b8183613f5d565b6015556064610fad6127106050613f70565b610fb79190613f87565b60155411156110085760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610b7e565b5050565b60606003805461101b90613fa9565b80601f016020809104026020016040519081016040528092919081815260200182805461104790613fa9565b80156110945780601f1061106957610100808354040283529160200191611094565b820191906000526020600020905b81548152906001019060200180831161107757829003601f168201915b5050505050905090565b6005546001600160a01b031633146110c85760405162461bcd60e51b8152600401610b7e90613e8c565b600f54610100900460ff16156111205760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b7e565b600f805462ffff0019166201010017905543600e556001600160a01b0381161580159061115557506000611153826117ff565b115b6111a15760405162461bcd60e51b815260206004820152601c60248201527f4c702070616972206e6f742076616c696420666f72206c61756e6368000000006044820152606401610b7e565b600a80546001600160a01b0319166001600160a01b0383169081179091556111ca90600161285d565b600a546111e1906001600160a01b031660016128c0565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600061121a3384846128ee565b5060015b92915050565b6005546001600160a01b0316331461124e5760405162461bcd60e51b8152600401610b7e90613e8c565b805182511461129f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b7e565b61012c8251106113105760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b7e565b60005b825181101561137857600083828151811061133057611330613fe3565b60200260200101519050600083838151811061134e5761134e613fe3565b60200260200101519050611363338383612a12565b5050808061137090613ff9565b915050611313565b505050565b600061138a848484612b67565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561140f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b7e565b61141c85338584036128ee565b506001949350505050565b6005546001600160a01b031633146114515760405162461bcd60e51b8152600401610b7e90613e8c565b61145d6012600a6140f6565b6103e861146960025490565b611474906001613f70565b61147e9190613f87565b6114889190613f87565b8110156114e95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b7e565b6114f56012600a6140f6565b6114ff9082613f70565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161121a918590610e80908690613f5d565b6005546001600160a01b0316331461159c5760405162461bcd60e51b8152600401610b7e90613e8c565b6001600160a01b0381166116015760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b7e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146116755760405162461bcd60e51b8152600401610b7e90613e8c565b600b54611681306117ff565b10156116f7576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b7e565b600a805460ff60a01b1916600160a01b1790556117126133da565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461177e5760405162461bcd60e51b8152600401610b7e90613e8c565b601382905560148190556117928183613f5d565b60125560646117a46127106005613f70565b6117ae9190613f87565b60125411156110085760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610b7e565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146118445760405162461bcd60e51b8152600401610b7e90613e8c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146118b85760405162461bcd60e51b8152600401610b7e90613e8c565b6102588310156119265760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b7e565b6103e88211158015611936575060015b61199b5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b7e565b601c92909255601a55601b805460ff1916911515919091179055565b6005546001600160a01b031633146119e15760405162461bcd60e51b8152600401610b7e90613e8c565b600f805460ff199081169091556011805490911690556002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a5e5760405162461bcd60e51b8152600401610b7e90613e8c565b80611ad157600a546001600160a01b0390811690831603611ad15760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b7e565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546000906001600160a01b03163314611b295760405162461bcd60e51b8152600401610b7e90613e8c565b6001600160a01b038316611b7f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b7e565b6001600160a01b03831630141580611b9f5750600f54610100900460ff16155b611c085760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b7e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c739190614105565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea919061411e565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b60606004805461101b90613fa9565b6005546001600160a01b03163314611d6f5760405162461bcd60e51b8152600401610b7e90613e8c565b600a546001600160a01b0390811690831603611df35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b7e565b611dfd82826128c0565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611ebb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b7e565b611ec833858584036128ee565b5060019392505050565b600061121a338484612b67565b6005546001600160a01b03163314611f095760405162461bcd60e51b8152600401610b7e90613e8c565b60005b82811015611fe5578160206000868685818110611f2b57611f2b613fe3565b9050602002016020810190611f409190613b21565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611f7a57611f7a613fe3565b9050602002016020810190611f8f9190613b21565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051611fcb911515815260200190565b60405180910390a280611fdd81613ff9565b915050611f0c565b50505050565b6005546001600160a01b031633146120155760405162461bcd60e51b8152600401610b7e90613e8c565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610b7e90613e8c565b6120a86012600a6140f6565b60646120b360025490565b6120be906001613f70565b6120c89190613f87565b6120d29190613f87565b8110156121325760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610b7e565b61213e6012600a6140f6565b6121489082613f70565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611530565b6005546001600160a01b031633146121a75760405162461bcd60e51b8152600401610b7e90613e8c565b620186a06121b460025490565b6121bf906001613f70565b6121c99190613f87565b8110156122365760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b7e565b6103e861224260025490565b61224d906001613f70565b6122579190613f87565b8111156122c35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b7e565b600b55565b6005546001600160a01b031633146122f25760405162461bcd60e51b8152600401610b7e90613e8c565b6122fe6012600a6140f6565b6103e861230a60025490565b612315906001613f70565b61231f9190613f87565b6123299190613f87565b81101561238b5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b7e565b6123976012600a6140f6565b6123a19082613f70565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611530565b6005546001600160a01b031633146124005760405162461bcd60e51b8152600401610b7e90613e8c565b6011805460ff19169055565b6005546001600160a01b031633146124365760405162461bcd60e51b8152600401610b7e90613e8c565b6001600160a01b03811661249b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146125215760405162461bcd60e51b8152600401610b7e90613e8c565b604051600090339047908381818185875af1925050503d8060008114611fe5576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b6005546001600160a01b0316331461258d5760405162461bcd60e51b8152600401610b7e90613e8c565b6113888111156125fd5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610b7e565b601e5461260a904261413b565b601f54111561264b5760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610b7e565b42601f55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bc9190614105565b905060006126c9306117ff565b905060006127106126da8585613f70565b6126e49190613f87565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561273e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612762919061411e565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061279d9030908690600190819084904290600401613ede565b60408051808303816000875af11580156127bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127df919061414e565b50506000836127ed306117ff565b6127f7919061413b565b9050801561280c5761280c3061dead83612a12565b6000612818834761413b565b90508015612829576128298161353c565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602260205260409020805460ff1916821515179055611dfd828261285d565b6001600160a01b0383166129505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b7e565b6001600160a01b0382166129b15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b7e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612a385760405162461bcd60e51b8152600401610b7e90614172565b6001600160a01b038216612a5e5760405162461bcd60e51b8152600401610b7e906141b7565b6001600160a01b03831660009081526020819052604090205481811015612ad65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b7e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612b0d908490613f5d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b5991815260200190565b60405180910390a350505050565b6001600160a01b038316612b8d5760405162461bcd60e51b8152600401610b7e90614172565b6001600160a01b038216612bb35760405162461bcd60e51b8152600401610b7e906141b7565b60008111612c035760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b7e565b600f54610100900460ff16612c94576001600160a01b038316600090815260208052604090205460ff1680612c4f57506001600160a01b038216600090815260208052604090205460ff165b612c945760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b7e565b600f5460ff161561308f576005546001600160a01b03848116911614801590612ccb57506005546001600160a01b03838116911614155b8015612cdf57506001600160a01b03821615155b8015612cf657506001600160a01b03821661dead14155b8015612d1a57506001600160a01b038316600090815260208052604090205460ff16155b8015612d3e57506001600160a01b038216600090815260208052604090205460ff16155b1561308f5760115460ff1615612e62576009546001600160a01b03838116911614801590612d8557506001600160a01b03821660009081526022602052604090205460ff16155b15612e6257612d9560024361413b565b32600090815260106020526040902054108015612dd35750612db860024361413b565b6001600160a01b038316600090815260106020526040902054105b612e3d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b7e565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526022602052604090205460ff168015612ea357506001600160a01b03821660009081526021602052604090205460ff16155b15612f6a57600654811115612f0b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b7e565b600854612f17836117ff565b612f219083613f5d565b1115612f655760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b7e565b61308f565b6001600160a01b03821660009081526022602052604090205460ff168015612fab57506001600160a01b03831660009081526021602052604090205460ff16155b1561301557600754811115612f655760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b7e565b6001600160a01b03821660009081526021602052604090205460ff1661308f57600854613041836117ff565b61304b9083613f5d565b111561308f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b7e565b600061309a306117ff565b600b54909150811080159081906130b95750600f5462010000900460ff165b80156130cf5750600a54600160a01b900460ff16155b80156130f457506001600160a01b03851660009081526022602052604090205460ff16155b801561311857506001600160a01b038516600090815260208052604090205460ff16155b801561313c57506001600160a01b038416600090815260208052604090205460ff16155b1561316a57600a805460ff60a01b1916600160a01b17905561315c6133da565b600a805460ff60a01b191690555b600a54600160a01b900460ff1615801561319c57506001600160a01b03841660009081526022602052604090205460ff165b80156131aa5750601b5460ff165b80156131c55750601c54601d546131c19190613f5d565b4210155b80156131e957506001600160a01b038516600090815260208052604090205460ff16155b156131f6576131f6613686565b6001600160a01b038516600090815260208052604090205460019060ff168061323657506001600160a01b038516600090815260208052604090205460ff165b1561323f575060005b600081156133c6576001600160a01b03861660009081526022602052604090205460ff16801561327157506000601554115b156132fa57612710601554866132879190613f70565b6132919190613f87565b9050601554601754826132a49190613f70565b6132ae9190613f87565b601960008282546132bf9190613f5d565b90915550506015546016546132d49083613f70565b6132de9190613f87565b601860008282546132ef9190613f5d565b909155506133a89050565b6001600160a01b03871660009081526022602052604090205460ff16801561332457506000601254115b156133a8576127106012548661333a9190613f70565b6133449190613f87565b9050601254601454826133579190613f70565b6133619190613f87565b601960008282546133729190613f5d565b90915550506012546013546133879083613f70565b6133919190613f87565b601860008282546133a29190613f5d565b90915550505b80156133b9576133b9873083612a12565b6133c3818661413b565b94505b6133d1878787612a12565b50505050505050565b60006133e5306117ff565b905060006018546019546133f99190613f5d565b9050811580613406575080155b1561340f575050565b600b5461341d906028613f70565b82111561343557600b54613432906028613f70565b91505b600080600283601954866134499190613f70565b6134539190613f87565b61345d9190613f87565b905061347161346c828661413b565b6138a0565b6019544790819060009061348790600290613f87565b613491908761413b565b60185461349e9085613f70565b6134a89190613f87565b90506134b4818361413b565b60006019819055601855915083158015906134cf5750600082115b156134de576134de84836139fa565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461352b576040519150601f19603f3d011682016040523d82523d6000602084013e613530565b606091505b50505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156135a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ca9190613ec1565b816000815181106135dd576135dd613fe3565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061361157613611613fe3565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061365990600090869061dead90429060040161423e565b6000604051808303818588803b15801561367257600080fd5b505af11580156133d1573d6000803e3d6000fd5b42601d819055601f55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156136d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fc9190614105565b90506000613709306117ff565b90506000612710601a548461371e9190613f70565b6137289190613f87565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a6919061411e565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906137e19030908690600190819084904290600401613ede565b60408051808303816000875af11580156137ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613823919061414e565b5050600083613831306117ff565b61383b919061413b565b90508015613850576138503061dead83612a12565b600061385c834761413b565b9050801561386d5761386d8161353c565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138d5576138d5613fe3565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139529190613ec1565b8160018151811061396557613965613fe3565b6001600160a01b03928316602091820292909201015260095461398b91309116846128ee565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139c4908590600090869030904290600401614273565b600060405180830381600087803b1580156139de57600080fd5b505af11580156139f2573d6000803e3d6000fd5b505050505050565b600954613a129030906001600160a01b0316846128ee565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613a4f9030908790600090819084904290600401613ede565b60606040518083038185885af1158015613a6d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a929190613f19565b5050505050565b60008060408385031215613aac57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613ae857858101830151858201604001528201613acc565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613b1e57600080fd5b50565b600060208284031215613b3357600080fd5b8135613b3e81613b09565b9392505050565b60008060408385031215613b5857600080fd5b8235613b6381613b09565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613bb057613bb0613b71565b604052919050565b600067ffffffffffffffff821115613bd257613bd2613b71565b5060051b60200190565b600082601f830112613bed57600080fd5b81356020613c02613bfd83613bb8565b613b87565b82815260059290921b84018101918181019086841115613c2157600080fd5b8286015b84811015613c3c5780358352918301918301613c25565b509695505050505050565b60008060408385031215613c5a57600080fd5b823567ffffffffffffffff80821115613c7257600080fd5b818501915085601f830112613c8657600080fd5b81356020613c96613bfd83613bb8565b82815260059290921b84018101918181019089841115613cb557600080fd5b948201945b83861015613cdc578535613ccd81613b09565b82529482019490820190613cba565b96505086013592505080821115613cf257600080fd5b50613cff85828601613bdc565b9150509250929050565b600080600060608486031215613d1e57600080fd5b8335613d2981613b09565b92506020840135613d3981613b09565b929592945050506040919091013590565b600060208284031215613d5c57600080fd5b5035919050565b8015158114613b1e57600080fd5b600080600060608486031215613d8657600080fd5b83359250602084013591506040840135613d9f81613d63565b809150509250925092565b60008060408385031215613dbd57600080fd5b8235613dc881613b09565b91506020830135613dd881613d63565b809150509250929050565b60008060408385031215613df657600080fd5b8235613e0181613b09565b91506020830135613dd881613b09565b600080600060408486031215613e2657600080fd5b833567ffffffffffffffff80821115613e3e57600080fd5b818601915086601f830112613e5257600080fd5b813581811115613e6157600080fd5b8760208260051b8501011115613e7657600080fd5b60209283019550935050840135613d9f81613d63565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613ed357600080fd5b8151613b3e81613b09565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613f2e57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b8082018082111561121e5761121e613f47565b808202811582820484141761121e5761121e613f47565b600082613fa457634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680613fbd57607f821691505b602082108103613fdd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161400b5761400b613f47565b5060010190565b600181815b8085111561404d57816000190482111561403357614033613f47565b8085161561404057918102915b93841c9390800290614017565b509250929050565b6000826140645750600161121e565b816140715750600061121e565b81600181146140875760028114614091576140ad565b600191505061121e565b60ff8411156140a2576140a2613f47565b50506001821b61121e565b5060208310610133831016604e8410600b84101617156140d0575081810a61121e565b6140da8383614012565b80600019048211156140ee576140ee613f47565b029392505050565b6000613b3e60ff841683614055565b60006020828403121561411757600080fd5b5051919050565b60006020828403121561413057600080fd5b8151613b3e81613d63565b8181038181111561121e5761121e613f47565b6000806040838503121561416157600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600081518084526020808501945080840160005b838110156142335781516001600160a01b03168752958201959082019060010161420e565b509495945050505050565b84815260806020820152600061425760808301866141fa565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061429260a08301866141fa565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220c0a36b2b2c1ff03b9b3fef82f7448d7672e3e167e131b8b3a7f3fb2c6090beba64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80637571336a116101fd578063c18bc19511610118578063ea4cfe12116100ab578063f5648a4f1161007a578063f5648a4f14610add578063f637434214610af2578063f8b45b0514610b08578063fb002c9714610b1e578063fe72b27a14610b3457600080fd5b8063ea4cfe1214610a71578063ee40166e14610a91578063f11a24d314610aa7578063f2fde38b14610abd57600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f146109e0578063dd62ed3e14610a00578063e2f4560514610a46578063e884f26014610a5c57600080fd5b8063c18bc19514610970578063c876d0b914610990578063d257b34f146109aa578063d85ba063146109ca57600080fd5b8063a457c2d711610190578063b9e9d1aa1161015f578063b9e9d1aa146108f1578063bbc0c74214610911578063bd5fb92014610930578063c02466681461095057600080fd5b8063a457c2d71461086b578063a4c82a001461088b578063a9059cbb146108a1578063b62496f5146108c157600080fd5b806395d89b41116101cc57806395d89b411461080a5780639a7a23d61461081f5780639e93ad8e1461083f5780639ec22c0e1461085557600080fd5b80637571336a146107965780638366e79a146107b657806388e765ff146107d65780638da5cb5b146107ec57600080fd5b8063313ce567116102ed57806366ca9b831161028057806370a082311161024f57806370a082311461072c578063715018a61461074c578063730c188814610761578063751039fc1461078157600080fd5b806366ca9b83146106c057806366d602ae146106e05780636a486a8e146106f65780636ddd17131461070c57600080fd5b80634a62bb65116102bc5780634a62bb65146106655780634f77f6c01461067f57806351f205e4146106955780635a139dd4146106aa57600080fd5b8063313ce567146105e95780633950935114610605578063452ed4f114610625578063499b83941461064557600080fd5b8063184c16c51161036557806323b872dd1161033457806323b872dd146105795780632be32b61146105995780632c3e486c146105b95780632e82f1a0146105cf57600080fd5b8063184c16c514610517578063199ffc721461052d5780631a8145bb146105435780632307b4411461055957600080fd5b806307980cb9116103a157806307980cb914610478578063095ea7b31461049857806310d5de53146104c857806318160ddd146104f857600080fd5b806301339c21146103de57806302dbd8f8146103f557806306fdde03146104155780630758d9241461044057600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b54565b005b34801561040157600080fd5b506103f3610410366004613a99565b610f5d565b34801561042157600080fd5b5061042a61100c565b6040516104379190613abb565b60405180910390f35b34801561044c57600080fd5b50600954610460906001600160a01b031681565b6040516001600160a01b039091168152602001610437565b34801561048457600080fd5b506103f3610493366004613b21565b61109e565b3480156104a457600080fd5b506104b86104b3366004613b45565b61120d565b6040519015158152602001610437565b3480156104d457600080fd5b506104b86104e3366004613b21565b60216020526000908152604090205460ff1681565b34801561050457600080fd5b506002545b604051908152602001610437565b34801561052357600080fd5b50610509601e5481565b34801561053957600080fd5b50610509601a5481565b34801561054f57600080fd5b5061050960195481565b34801561056557600080fd5b506103f3610574366004613c47565b611224565b34801561058557600080fd5b506104b8610594366004613d09565b61137d565b3480156105a557600080fd5b506103f36105b4366004613d4a565b611427565b3480156105c557600080fd5b50610509601c5481565b3480156105db57600080fd5b50601b546104b89060ff1681565b3480156105f557600080fd5b5060405160128152602001610437565b34801561061157600080fd5b506104b8610620366004613b45565b61153b565b34801561063157600080fd5b50600a54610460906001600160a01b031681565b34801561065157600080fd5b506103f3610660366004613b21565b611572565b34801561067157600080fd5b50600f546104b89060ff1681565b34801561068b57600080fd5b5061050960165481565b3480156106a157600080fd5b506103f361164b565b3480156106b657600080fd5b5061050960135481565b3480156106cc57600080fd5b506103f36106db366004613a99565b611754565b3480156106ec57600080fd5b5061050960075481565b34801561070257600080fd5b5061050960155481565b34801561071857600080fd5b50600f546104b89062010000900460ff1681565b34801561073857600080fd5b50610509610747366004613b21565b6117ff565b34801561075857600080fd5b506103f361181a565b34801561076d57600080fd5b506103f361077c366004613d71565b61188e565b34801561078d57600080fd5b506103f36119b7565b3480156107a257600080fd5b506103f36107b1366004613daa565b611a34565b3480156107c257600080fd5b506104b86107d1366004613de3565b611afc565b3480156107e257600080fd5b5061050960065481565b3480156107f857600080fd5b506005546001600160a01b0316610460565b34801561081657600080fd5b5061042a611d36565b34801561082b57600080fd5b506103f361083a366004613daa565b611d45565b34801561084b57600080fd5b5061050961271081565b34801561086157600080fd5b50610509601f5481565b34801561087757600080fd5b506104b8610886366004613b45565b611e39565b34801561089757600080fd5b50610509601d5481565b3480156108ad57600080fd5b506104b86108bc366004613b45565b611ed2565b3480156108cd57600080fd5b506104b86108dc366004613b21565b60226020526000908152604090205460ff1681565b3480156108fd57600080fd5b50600d54610460906001600160a01b031681565b34801561091d57600080fd5b50600f546104b890610100900460ff1681565b34801561093c57600080fd5b506103f361094b366004613e11565b611edf565b34801561095c57600080fd5b506103f361096b366004613daa565b611feb565b34801561097c57600080fd5b506103f361098b366004613d4a565b612072565b34801561099c57600080fd5b506011546104b89060ff1681565b3480156109b657600080fd5b506103f36109c5366004613d4a565b61217d565b3480156109d657600080fd5b5061050960125481565b3480156109ec57600080fd5b506103f36109fb366004613d4a565b6122c8565b348015610a0c57600080fd5b50610509610a1b366004613de3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a5257600080fd5b50610509600b5481565b348015610a6857600080fd5b506103f36123d6565b348015610a7d57600080fd5b50600c54610460906001600160a01b031681565b348015610a9d57600080fd5b50610509600e5481565b348015610ab357600080fd5b5061050960145481565b348015610ac957600080fd5b506103f3610ad8366004613b21565b61240c565b348015610ae957600080fd5b506103f36124f7565b348015610afe57600080fd5b5061050960175481565b348015610b1457600080fd5b5061050960085481565b348015610b2a57600080fd5b5061050960185481565b348015610b4057600080fd5b506103f3610b4f366004613d4a565b612563565b6005546001600160a01b03163314610b875760405162461bcd60e51b8152600401610b7e90613e8c565b60405180910390fd5b600f54610100900460ff1615610bf35760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b7e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a9190613ec1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf09190613ec1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d619190613ec1565b600a80546001600160a01b0319166001600160a01b03929092169182179055610d8b90600161285d565b600a54610da2906001600160a01b031660016128c0565b60004711610dfe5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b7e565b6000610e09306117ff565b11610e655760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b7e565b600954610e859030906001600160a01b0316610e80826117ff565b6128ee565b6009546001600160a01b031663f305d7194730610ea1816117ff565b600d546040516001600160e01b031960e087901b168152610ed793929160009182916001600160a01b0316904290600401613ede565b60606040518083038185885af1158015610ef5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f1a9190613f19565b5050600f805462ffff001916620101001790555043600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610f875760405162461bcd60e51b8152600401610b7e90613e8c565b60168290556017819055610f9b8183613f5d565b6015556064610fad6127106050613f70565b610fb79190613f87565b60155411156110085760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610b7e565b5050565b60606003805461101b90613fa9565b80601f016020809104026020016040519081016040528092919081815260200182805461104790613fa9565b80156110945780601f1061106957610100808354040283529160200191611094565b820191906000526020600020905b81548152906001019060200180831161107757829003601f168201915b5050505050905090565b6005546001600160a01b031633146110c85760405162461bcd60e51b8152600401610b7e90613e8c565b600f54610100900460ff16156111205760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b7e565b600f805462ffff0019166201010017905543600e556001600160a01b0381161580159061115557506000611153826117ff565b115b6111a15760405162461bcd60e51b815260206004820152601c60248201527f4c702070616972206e6f742076616c696420666f72206c61756e6368000000006044820152606401610b7e565b600a80546001600160a01b0319166001600160a01b0383169081179091556111ca90600161285d565b600a546111e1906001600160a01b031660016128c0565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b600061121a3384846128ee565b5060015b92915050565b6005546001600160a01b0316331461124e5760405162461bcd60e51b8152600401610b7e90613e8c565b805182511461129f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b7e565b61012c8251106113105760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610b7e565b60005b825181101561137857600083828151811061133057611330613fe3565b60200260200101519050600083838151811061134e5761134e613fe3565b60200260200101519050611363338383612a12565b5050808061137090613ff9565b915050611313565b505050565b600061138a848484612b67565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561140f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b7e565b61141c85338584036128ee565b506001949350505050565b6005546001600160a01b031633146114515760405162461bcd60e51b8152600401610b7e90613e8c565b61145d6012600a6140f6565b6103e861146960025490565b611474906001613f70565b61147e9190613f87565b6114889190613f87565b8110156114e95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b7e565b6114f56012600a6140f6565b6114ff9082613f70565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161121a918590610e80908690613f5d565b6005546001600160a01b0316331461159c5760405162461bcd60e51b8152600401610b7e90613e8c565b6001600160a01b0381166116015760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b7e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146116755760405162461bcd60e51b8152600401610b7e90613e8c565b600b54611681306117ff565b10156116f7576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b7e565b600a805460ff60a01b1916600160a01b1790556117126133da565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461177e5760405162461bcd60e51b8152600401610b7e90613e8c565b601382905560148190556117928183613f5d565b60125560646117a46127106005613f70565b6117ae9190613f87565b60125411156110085760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610b7e565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146118445760405162461bcd60e51b8152600401610b7e90613e8c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146118b85760405162461bcd60e51b8152600401610b7e90613e8c565b6102588310156119265760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b7e565b6103e88211158015611936575060015b61199b5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b7e565b601c92909255601a55601b805460ff1916911515919091179055565b6005546001600160a01b031633146119e15760405162461bcd60e51b8152600401610b7e90613e8c565b600f805460ff199081169091556011805490911690556002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a5e5760405162461bcd60e51b8152600401610b7e90613e8c565b80611ad157600a546001600160a01b0390811690831603611ad15760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b7e565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546000906001600160a01b03163314611b295760405162461bcd60e51b8152600401610b7e90613e8c565b6001600160a01b038316611b7f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b7e565b6001600160a01b03831630141580611b9f5750600f54610100900460ff16155b611c085760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610b7e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c739190614105565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea919061411e565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b60606004805461101b90613fa9565b6005546001600160a01b03163314611d6f5760405162461bcd60e51b8152600401610b7e90613e8c565b600a546001600160a01b0390811690831603611df35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b7e565b611dfd82826128c0565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611ebb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b7e565b611ec833858584036128ee565b5060019392505050565b600061121a338484612b67565b6005546001600160a01b03163314611f095760405162461bcd60e51b8152600401610b7e90613e8c565b60005b82811015611fe5578160206000868685818110611f2b57611f2b613fe3565b9050602002016020810190611f409190613b21565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110611f7a57611f7a613fe3565b9050602002016020810190611f8f9190613b21565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051611fcb911515815260200190565b60405180910390a280611fdd81613ff9565b915050611f0c565b50505050565b6005546001600160a01b031633146120155760405162461bcd60e51b8152600401610b7e90613e8c565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610b7e90613e8c565b6120a86012600a6140f6565b60646120b360025490565b6120be906001613f70565b6120c89190613f87565b6120d29190613f87565b8110156121325760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610b7e565b61213e6012600a6140f6565b6121489082613f70565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611530565b6005546001600160a01b031633146121a75760405162461bcd60e51b8152600401610b7e90613e8c565b620186a06121b460025490565b6121bf906001613f70565b6121c99190613f87565b8110156122365760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b7e565b6103e861224260025490565b61224d906001613f70565b6122579190613f87565b8111156122c35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b7e565b600b55565b6005546001600160a01b031633146122f25760405162461bcd60e51b8152600401610b7e90613e8c565b6122fe6012600a6140f6565b6103e861230a60025490565b612315906001613f70565b61231f9190613f87565b6123299190613f87565b81101561238b5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b7e565b6123976012600a6140f6565b6123a19082613f70565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611530565b6005546001600160a01b031633146124005760405162461bcd60e51b8152600401610b7e90613e8c565b6011805460ff19169055565b6005546001600160a01b031633146124365760405162461bcd60e51b8152600401610b7e90613e8c565b6001600160a01b03811661249b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146125215760405162461bcd60e51b8152600401610b7e90613e8c565b604051600090339047908381818185875af1925050503d8060008114611fe5576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b6005546001600160a01b0316331461258d5760405162461bcd60e51b8152600401610b7e90613e8c565b6113888111156125fd5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610b7e565b601e5461260a904261413b565b601f54111561264b5760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610b7e565b42601f55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bc9190614105565b905060006126c9306117ff565b905060006127106126da8585613f70565b6126e49190613f87565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561273e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612762919061411e565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061279d9030908690600190819084904290600401613ede565b60408051808303816000875af11580156127bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127df919061414e565b50506000836127ed306117ff565b6127f7919061413b565b9050801561280c5761280c3061dead83612a12565b6000612818834761413b565b90508015612829576128298161353c565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b038216600081815260216020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602260205260409020805460ff1916821515179055611dfd828261285d565b6001600160a01b0383166129505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b7e565b6001600160a01b0382166129b15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b7e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612a385760405162461bcd60e51b8152600401610b7e90614172565b6001600160a01b038216612a5e5760405162461bcd60e51b8152600401610b7e906141b7565b6001600160a01b03831660009081526020819052604090205481811015612ad65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b7e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612b0d908490613f5d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b5991815260200190565b60405180910390a350505050565b6001600160a01b038316612b8d5760405162461bcd60e51b8152600401610b7e90614172565b6001600160a01b038216612bb35760405162461bcd60e51b8152600401610b7e906141b7565b60008111612c035760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b7e565b600f54610100900460ff16612c94576001600160a01b038316600090815260208052604090205460ff1680612c4f57506001600160a01b038216600090815260208052604090205460ff165b612c945760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b7e565b600f5460ff161561308f576005546001600160a01b03848116911614801590612ccb57506005546001600160a01b03838116911614155b8015612cdf57506001600160a01b03821615155b8015612cf657506001600160a01b03821661dead14155b8015612d1a57506001600160a01b038316600090815260208052604090205460ff16155b8015612d3e57506001600160a01b038216600090815260208052604090205460ff16155b1561308f5760115460ff1615612e62576009546001600160a01b03838116911614801590612d8557506001600160a01b03821660009081526022602052604090205460ff16155b15612e6257612d9560024361413b565b32600090815260106020526040902054108015612dd35750612db860024361413b565b6001600160a01b038316600090815260106020526040902054105b612e3d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610b7e565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526022602052604090205460ff168015612ea357506001600160a01b03821660009081526021602052604090205460ff16155b15612f6a57600654811115612f0b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b7e565b600854612f17836117ff565b612f219083613f5d565b1115612f655760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b7e565b61308f565b6001600160a01b03821660009081526022602052604090205460ff168015612fab57506001600160a01b03831660009081526021602052604090205460ff16155b1561301557600754811115612f655760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b7e565b6001600160a01b03821660009081526021602052604090205460ff1661308f57600854613041836117ff565b61304b9083613f5d565b111561308f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610b7e565b600061309a306117ff565b600b54909150811080159081906130b95750600f5462010000900460ff165b80156130cf5750600a54600160a01b900460ff16155b80156130f457506001600160a01b03851660009081526022602052604090205460ff16155b801561311857506001600160a01b038516600090815260208052604090205460ff16155b801561313c57506001600160a01b038416600090815260208052604090205460ff16155b1561316a57600a805460ff60a01b1916600160a01b17905561315c6133da565b600a805460ff60a01b191690555b600a54600160a01b900460ff1615801561319c57506001600160a01b03841660009081526022602052604090205460ff165b80156131aa5750601b5460ff165b80156131c55750601c54601d546131c19190613f5d565b4210155b80156131e957506001600160a01b038516600090815260208052604090205460ff16155b156131f6576131f6613686565b6001600160a01b038516600090815260208052604090205460019060ff168061323657506001600160a01b038516600090815260208052604090205460ff165b1561323f575060005b600081156133c6576001600160a01b03861660009081526022602052604090205460ff16801561327157506000601554115b156132fa57612710601554866132879190613f70565b6132919190613f87565b9050601554601754826132a49190613f70565b6132ae9190613f87565b601960008282546132bf9190613f5d565b90915550506015546016546132d49083613f70565b6132de9190613f87565b601860008282546132ef9190613f5d565b909155506133a89050565b6001600160a01b03871660009081526022602052604090205460ff16801561332457506000601254115b156133a8576127106012548661333a9190613f70565b6133449190613f87565b9050601254601454826133579190613f70565b6133619190613f87565b601960008282546133729190613f5d565b90915550506012546013546133879083613f70565b6133919190613f87565b601860008282546133a29190613f5d565b90915550505b80156133b9576133b9873083612a12565b6133c3818661413b565b94505b6133d1878787612a12565b50505050505050565b60006133e5306117ff565b905060006018546019546133f99190613f5d565b9050811580613406575080155b1561340f575050565b600b5461341d906028613f70565b82111561343557600b54613432906028613f70565b91505b600080600283601954866134499190613f70565b6134539190613f87565b61345d9190613f87565b905061347161346c828661413b565b6138a0565b6019544790819060009061348790600290613f87565b613491908761413b565b60185461349e9085613f70565b6134a89190613f87565b90506134b4818361413b565b60006019819055601855915083158015906134cf5750600082115b156134de576134de84836139fa565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461352b576040519150601f19603f3d011682016040523d82523d6000602084013e613530565b606091505b50505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156135a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ca9190613ec1565b816000815181106135dd576135dd613fe3565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061361157613611613fe3565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061365990600090869061dead90429060040161423e565b6000604051808303818588803b15801561367257600080fd5b505af11580156133d1573d6000803e3d6000fd5b42601d819055601f55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156136d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fc9190614105565b90506000613709306117ff565b90506000612710601a548461371e9190613f70565b6137289190613f87565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a6919061411e565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906137e19030908690600190819084904290600401613ede565b60408051808303816000875af11580156137ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613823919061414e565b5050600083613831306117ff565b61383b919061413b565b90508015613850576138503061dead83612a12565b600061385c834761413b565b9050801561386d5761386d8161353c565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138d5576138d5613fe3565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561392e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139529190613ec1565b8160018151811061396557613965613fe3565b6001600160a01b03928316602091820292909201015260095461398b91309116846128ee565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139c4908590600090869030904290600401614273565b600060405180830381600087803b1580156139de57600080fd5b505af11580156139f2573d6000803e3d6000fd5b505050505050565b600954613a129030906001600160a01b0316846128ee565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613a4f9030908790600090819084904290600401613ede565b60606040518083038185885af1158015613a6d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a929190613f19565b5050505050565b60008060408385031215613aac57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613ae857858101830151858201604001528201613acc565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613b1e57600080fd5b50565b600060208284031215613b3357600080fd5b8135613b3e81613b09565b9392505050565b60008060408385031215613b5857600080fd5b8235613b6381613b09565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613bb057613bb0613b71565b604052919050565b600067ffffffffffffffff821115613bd257613bd2613b71565b5060051b60200190565b600082601f830112613bed57600080fd5b81356020613c02613bfd83613bb8565b613b87565b82815260059290921b84018101918181019086841115613c2157600080fd5b8286015b84811015613c3c5780358352918301918301613c25565b509695505050505050565b60008060408385031215613c5a57600080fd5b823567ffffffffffffffff80821115613c7257600080fd5b818501915085601f830112613c8657600080fd5b81356020613c96613bfd83613bb8565b82815260059290921b84018101918181019089841115613cb557600080fd5b948201945b83861015613cdc578535613ccd81613b09565b82529482019490820190613cba565b96505086013592505080821115613cf257600080fd5b50613cff85828601613bdc565b9150509250929050565b600080600060608486031215613d1e57600080fd5b8335613d2981613b09565b92506020840135613d3981613b09565b929592945050506040919091013590565b600060208284031215613d5c57600080fd5b5035919050565b8015158114613b1e57600080fd5b600080600060608486031215613d8657600080fd5b83359250602084013591506040840135613d9f81613d63565b809150509250925092565b60008060408385031215613dbd57600080fd5b8235613dc881613b09565b91506020830135613dd881613d63565b809150509250929050565b60008060408385031215613df657600080fd5b8235613e0181613b09565b91506020830135613dd881613b09565b600080600060408486031215613e2657600080fd5b833567ffffffffffffffff80821115613e3e57600080fd5b818601915086601f830112613e5257600080fd5b813581811115613e6157600080fd5b8760208260051b8501011115613e7657600080fd5b60209283019550935050840135613d9f81613d63565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613ed357600080fd5b8151613b3e81613b09565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613f2e57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b8082018082111561121e5761121e613f47565b808202811582820484141761121e5761121e613f47565b600082613fa457634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680613fbd57607f821691505b602082108103613fdd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161400b5761400b613f47565b5060010190565b600181815b8085111561404d57816000190482111561403357614033613f47565b8085161561404057918102915b93841c9390800290614017565b509250929050565b6000826140645750600161121e565b816140715750600061121e565b81600181146140875760028114614091576140ad565b600191505061121e565b60ff8411156140a2576140a2613f47565b50506001821b61121e565b5060208310610133831016604e8410600b84101617156140d0575081810a61121e565b6140da8383614012565b80600019048211156140ee576140ee613f47565b029392505050565b6000613b3e60ff841683614055565b60006020828403121561411757600080fd5b5051919050565b60006020828403121561413057600080fd5b8151613b3e81613d63565b8181038181111561121e5761121e613f47565b6000806040838503121561416157600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600081518084526020808501945080840160005b838110156142335781516001600160a01b03168752958201959082019060010161420e565b509495945050505050565b84815260806020820152600061425760808301866141fa565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061429260a08301866141fa565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220c0a36b2b2c1ff03b9b3fef82f7448d7672e3e167e131b8b3a7f3fb2c6090beba64736f6c63430008110033

Deployed Bytecode Sourcemap

9714:23186:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28248:1133;;;;;;;;;;;;;:::i;:::-;;19721:340;;;;;;;;;;-1:-1:-1;19721:340:0;;;;;:::i;:::-;;:::i;4115:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9855:27;;;;;;;;;;-1:-1:-1;9855:27:0;;;;-1:-1:-1;;;;;9855:27:0;;;;;;-1:-1:-1;;;;;1002:32:1;;;984:51;;972:2;957:18;9855:27:0;820:221:1;15341:546:0;;;;;;;;;;-1:-1:-1;15341:546:0;;;;;:::i;:::-;;:::i;5029:169::-;;;;;;;;;;-1:-1:-1;5029:169:0;;;;;:::i;:::-;;:::i;:::-;;;1919:14:1;;1912:22;1894:41;;1882:2;1867:18;5029:169:0;1754:187:1;11286:64:0;;;;;;;;;;-1:-1:-1;11286:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4436:108;;;;;;;;;;-1:-1:-1;4524:12:0;;4436:108;;;2092:25:1;;;2080:2;2065:18;4436:108:0;1946:177:1;11041:47:0;;;;;;;;;;;;;;;;10851:36;;;;;;;;;;;;;;;;10811:33;;;;;;;;;;;;;;;;17938:618;;;;;;;;;;-1:-1:-1;17938:618:0;;;;;:::i;:::-;;:::i;5206:492::-;;;;;;;;;;-1:-1:-1;5206:492:0;;;;;:::i;:::-;;:::i;16387:295::-;;;;;;;;;;-1:-1:-1;16387:295:0;;;;;:::i;:::-;;:::i;10947:45::-;;;;;;;;;;;;;;;;10907:33;;;;;;;;;;-1:-1:-1;10907:33:0;;;;;;;;4335:93;;;;;;;;;;-1:-1:-1;4335:93:0;;4418:2;5403:36:1;;5391:2;5376:18;4335:93:0;5261:184:1;5706:215:0;;;;;;;;;;-1:-1:-1;5706:215:0;;;;;:::i;:::-;;:::i;9889:21::-;;;;;;;;;;-1:-1:-1;9889:21:0;;;;-1:-1:-1;;;;;9889:21:0;;;27581:297;;;;;;;;;;-1:-1:-1;27581:297:0;;;;;:::i;:::-;;:::i;10142:33::-;;;;;;;;;;-1:-1:-1;10142:33:0;;;;;;;;10639:32;;;;;;;;;;;;;;;;27928:312;;;;;;;;;;;;;:::i;10527:31::-;;;;;;;;;;;;;;;;19381:332;;;;;;;;;;-1:-1:-1;19381:332:0;;;;;:::i;:::-;;:::i;9787:28::-;;;;;;;;;;;;;;;;10604;;;;;;;;;;;;;;;;10222:31;;;;;;;;;;-1:-1:-1;10222:31:0;;;;;;;;;;;4552:127;;;;;;;;;;-1:-1:-1;4552:127:0;;;;;:::i;:::-;;:::i;8196:150::-;;;;;;;;;;;;;:::i;29389:447::-;;;;;;;;;;-1:-1:-1;29389:447:0;;;;;:::i;:::-;;:::i;15943:273::-;;;;;;;;;;;;;:::i;18568:260::-;;;;;;;;;;-1:-1:-1;18568:260:0;;;;;:::i;:::-;;:::i;26845:498::-;;;;;;;;;;-1:-1:-1;26845:498:0;;;;;:::i;:::-;;:::i;9753:27::-;;;;;;;;;;;;;;;;7982:79;;;;;;;;;;-1:-1:-1;8047:6:0;;-1:-1:-1;;;;;8047:6:0;7982:79;;4223:104;;;;;;;;;;;;;:::i;18836:293::-;;;;;;;;;;-1:-1:-1;18836:293:0;;;;;:::i;:::-;;:::i;10718:43::-;;;;;;;;;;;;10756:5;10718:43;;11095:35;;;;;;;;;;;;;;;;5929:413;;;;;;;;;;-1:-1:-1;5929:413:0;;;;;:::i;:::-;;:::i;10999:29::-;;;;;;;;;;;;;;;;4687:175;;;;;;;;;;-1:-1:-1;4687:175:0;;;;;:::i;:::-;;:::i;11508:58::-;;;;;;;;;;-1:-1:-1;11508:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10028:26;;;;;;;;;;-1:-1:-1;10028:26:0;;;;-1:-1:-1;;;;;10028:26:0;;;10182:33;;;;;;;;;;-1:-1:-1;10182:33:0;;;;;;;;;;;20069:282;;;;;;;;;;-1:-1:-1;20069:282:0;;;;;:::i;:::-;;:::i;20359:182::-;;;;;;;;;;-1:-1:-1;20359:182:0;;;;;:::i;:::-;;:::i;17002:293::-;;;;;;;;;;-1:-1:-1;17002:293:0;;;;;:::i;:::-;;:::i;10445:39::-;;;;;;;;;;-1:-1:-1;10445:39:0;;;;;;;;17365:346;;;;;;;;;;-1:-1:-1;17365:346:0;;;;;:::i;:::-;;:::i;10493:27::-;;;;;;;;;;;;;;;;16694:300;;;;;;;;;;-1:-1:-1;16694:300:0;;;;;:::i;:::-;;:::i;4870:151::-;;;;;;;;;;-1:-1:-1;4870:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4986:18:0;;;4959:7;4986:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4870:151;9947:33;;;;;;;;;;;;;;;;16277:98;;;;;;;;;;;;;:::i;9989:32::-;;;;;;;;;;-1:-1:-1;9989:32:0;;;;-1:-1:-1;;;;;9989:32:0;;;10063:37;;;;;;;;;;;;;;;;10565:30;;;;;;;;;;;;;;;;8354:244;;;;;;;;;;-1:-1:-1;8354:244:0;;;;;:::i;:::-;;:::i;27413:160::-;;;;;;;;;;;;;:::i;10678:31::-;;;;;;;;;;;;;;;;9822:24;;;;;;;;;;;;;;;;10770:34;;;;;;;;;;;;;;;;31108:1399;;;;;;;;;;-1:-1:-1;31108:1399:0;;;;;:::i;:::-;;:::i;28248:1133::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;;;;;;;;;28305:13:::1;::::0;::::1;::::0;::::1;;;28304:14;28296:70;;;::::0;-1:-1:-1;;;28296:70:0;;8261:2:1;28296:70:0::1;::::0;::::1;8243:21:1::0;8300:2;8280:18;;;8273:30;8339:34;8319:18;;;8312:62;-1:-1:-1;;;8390:18:1;;;8383:41;8441:19;;28296:70:0::1;8059:407:1::0;28296:70:0::1;28424:9;;;;;;;;;-1:-1:-1::0;;;;;28424:9:0::1;-1:-1:-1::0;;;;;28424:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28412:43:0::1;;28464:4;28471:9;;;;;;;;;-1:-1:-1::0;;;;;28471:9:0::1;-1:-1:-1::0;;;;;28471:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28412:76;::::0;-1:-1:-1;;;;;;28412:76:0::1;::::0;;;;;;-1:-1:-1;;;;;8957:15:1;;;28412:76:0::1;::::0;::::1;8939:34:1::0;9009:15;;8989:18;;;8982:43;8874:18;;28412:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28403:6;:85:::0;;-1:-1:-1;;;;;;28403:85:0::1;-1:-1:-1::0;;;;;28403:85:0;;;::::1;::::0;;::::1;::::0;;28499:49:::1;::::0;-1:-1:-1;28499:26:0::1;:49::i;:::-;28596:6;::::0;28559:51:::1;::::0;-1:-1:-1;;;;;28596:6:0::1;::::0;28559:28:::1;:51::i;:::-;28690:1;28666:21;:25;28658:73;;;::::0;-1:-1:-1;;;28658:73:0;;9238:2:1;28658:73:0::1;::::0;::::1;9220:21:1::0;9277:2;9257:18;;;9250:30;9316:34;9296:18;;;9289:62;-1:-1:-1;;;9367:18:1;;;9360:33;9410:19;;28658:73:0::1;9036:399:1::0;28658:73:0::1;28779:1;28752:24;28770:4;28752:9;:24::i;:::-;:28;28744:79;;;::::0;-1:-1:-1;;;28744:79:0;;9642:2:1;28744:79:0::1;::::0;::::1;9624:21:1::0;9681:2;9661:18;;;9654:30;9720:34;9700:18;;;9693:62;-1:-1:-1;;;9771:18:1;;;9764:36;9817:19;;28744:79:0::1;9440:402:1::0;28744:79:0::1;28868:9;::::0;28836:69:::1;::::0;28853:4:::1;::::0;-1:-1:-1;;;;;28868:9:0::1;28880:24;28853:4:::0;28880:9:::1;:24::i;:::-;28836:8;:69::i;:::-;28916:9;::::0;-1:-1:-1;;;;;28916:9:0::1;:25;28949:21;28994:4;29014:24;28994:4:::0;29014:9:::1;:24::i;:::-;29147:11;::::0;28916:284:::1;::::0;-1:-1:-1;;;;;;28916:284:0::1;::::0;;;;;;::::1;::::0;;;29053:1:::1;::::0;;;-1:-1:-1;;;;;29147:11:0::1;::::0;29174:15:::1;::::0;28916:284:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29248:13:0::1;:20:::0;;-1:-1:-1;;29279:18:0;;;;;-1:-1:-1;29329:12:0::1;29308:18;:33:::0;29357:16:::1;::::0;::::1;::::0;-1:-1:-1;;29357:16:0::1;28248:1133::o:0;19721:340::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;19822:17:::1;:34:::0;;;19867:16:::1;:32:::0;;;19926:36:::1;19886:13:::0;19842:14;19926:36:::1;:::i;:::-;19910:13;:52:::0;20017:3:::1;19998:16;10756:5;19998:2;:16;:::i;:::-;:22;;;;:::i;:::-;19981:13;;:39;;19973:80;;;::::0;-1:-1:-1;;;19973:80:0;;11629:2:1;19973:80:0::1;::::0;::::1;11611:21:1::0;11668:2;11648:18;;;11641:30;11707;11687:18;;;11680:58;11755:18;;19973:80:0::1;11427:352:1::0;19973:80:0::1;19721:340:::0;;:::o;4115:100::-;4169:13;4202:5;4195:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4115:100;:::o;15341:546::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;15420:13:::1;::::0;::::1;::::0;::::1;;;15419:14;15411:50;;;::::0;-1:-1:-1;;;15411:50:0;;12371:2:1;15411:50:0::1;::::0;::::1;12353:21:1::0;12410:2;12390:18;;;12383:30;12449:25;12429:18;;;12422:53;12492:18;;15411:50:0::1;12169:347:1::0;15411:50:0::1;15472:13;:20:::0;;-1:-1:-1;;15503:18:0;;;;;15553:12:::1;15532:18;:33:::0;-1:-1:-1;;;;;15615:21:0;::::1;::::0;;::::1;::::0;:48:::1;;;15662:1;15640:18;15650:7;15640:9;:18::i;:::-;:23;15615:48;15607:89;;;::::0;-1:-1:-1;;;15607:89:0;;12723:2:1;15607:89:0::1;::::0;::::1;12705:21:1::0;12762:2;12742:18;;;12735:30;12801;12781:18;;;12774:58;12849:18;;15607:89:0::1;12521:352:1::0;15607:89:0::1;15707:6;:16:::0;;-1:-1:-1;;;;;;15707:16:0::1;-1:-1:-1::0;;;;;15707:16:0;::::1;::::0;;::::1;::::0;;;15734:49:::1;::::0;-1:-1:-1;15734:26:0::1;:49::i;:::-;15831:6;::::0;15794:51:::1;::::0;-1:-1:-1;;;;;15831:6:0::1;::::0;15794:28:::1;:51::i;:::-;15863:16;::::0;::::1;::::0;;;::::1;15341:546:::0;:::o;5029:169::-;5112:4;5129:39;344:10;5152:7;5161:6;5129:8;:39::i;:::-;-1:-1:-1;5186:4:0;5029:169;;;;;:::o;17938:618::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;18080:15:::1;:22;18062:7;:14;:40;18054:83;;;::::0;-1:-1:-1;;;18054:83:0;;13080:2:1;18054:83:0::1;::::0;::::1;13062:21:1::0;13119:2;13099:18;;;13092:30;13158:32;13138:18;;;13131:60;13208:18;;18054:83:0::1;12878:354:1::0;18054:83:0::1;18173:3;18156:7;:14;:20;18148:87;;;::::0;-1:-1:-1;;;18148:87:0;;13439:2:1;18148:87:0::1;::::0;::::1;13421:21:1::0;13478:2;13458:18;;;13451:30;13517:34;13497:18;;;13490:62;-1:-1:-1;;;13568:18:1;;;13561:52;13630:19;;18148:87:0::1;13237:418:1::0;18148:87:0::1;18348:9;18344:205;18367:7;:14;18363:1;:18;18344:205;;;18402:14;18419:7;18427:1;18419:10;;;;;;;;:::i;:::-;;;;;;;18402:27;;18444:14;18461:15;18477:1;18461:18;;;;;;;;:::i;:::-;;;;;;;18444:35;;18494:43;18510:10;18522:6;18530;18494:15;:43::i;:::-;18387:162;;18383:3;;;;;:::i;:::-;;;;18344:205;;;;17938:618:::0;;:::o;5206:492::-;5346:4;5363:36;5373:6;5381:9;5392:6;5363:9;:36::i;:::-;-1:-1:-1;;;;;5439:19:0;;5412:24;5439:19;;;:11;:19;;;;;;;;344:10;5439:33;;;;;;;;5491:26;;;;5483:79;;;;-1:-1:-1;;;5483:79:0;;14134:2:1;5483:79:0;;;14116:21:1;14173:2;14153:18;;;14146:30;14212:34;14192:18;;;14185:62;-1:-1:-1;;;14263:18:1;;;14256:38;14311:19;;5483:79:0;13932:404:1;5483:79:0;5598:57;5607:6;344:10;5648:6;5629:16;:25;5598:8;:57::i;:::-;-1:-1:-1;5686:4:0;;5206:492;-1:-1:-1;;;;5206:492:0:o;16387:295::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;16509:16:::1;4418:2:::0;16509::::1;:16;:::i;:::-;16500:4;16480:13;4524:12:::0;;;4436:108;16480:13:::1;:17;::::0;16496:1:::1;16480:17;:::i;:::-;:24;;;;:::i;:::-;16479:47;;;;:::i;:::-;16469:6;:57;;16461:111;;;::::0;-1:-1:-1;;;16461:111:0;;15926:2:1;16461:111:0::1;::::0;::::1;15908:21:1::0;15965:2;15945:18;;;15938:30;16004:34;15984:18;;;15977:62;-1:-1:-1;;;16055:18:1;;;16048:39;16104:19;;16461:111:0::1;15724:405:1::0;16461:111:0::1;16608:16;4418:2:::0;16608::::1;:16;:::i;:::-;16598:27;::::0;:6;:27:::1;:::i;:::-;16583:12;:42:::0;;;16641:33:::1;::::0;2092:25:1;;;16641:33:0::1;::::0;2080:2:1;2065:18;16641:33:0::1;;;;;;;;16387:295:::0;:::o;5706:215::-;344:10;5794:4;5843:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5843:34:0;;;;;;;;;;5794:4;;5811:80;;5834:7;;5843:47;;5880:10;;5843:47;:::i;27581:297::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27677:32:0;::::1;27669:83;;;::::0;-1:-1:-1;;;27669:83:0;;16336:2:1;27669:83:0::1;::::0;::::1;16318:21:1::0;16375:2;16355:18;;;16348:30;16414:34;16394:18;;;16387:62;-1:-1:-1;;;16465:18:1;;;16458:36;16511:19;;27669:83:0::1;16134:402:1::0;27669:83:0::1;27763:17;:47:::0;;-1:-1:-1;;;;;;27763:47:0::1;-1:-1:-1::0;;;;;27763:47:0;::::1;::::0;;::::1;::::0;;;27826:44:::1;::::0;::::1;::::0;-1:-1:-1;;27826:44:0::1;27581:297:::0;:::o;27928:312::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;28019:18:::1;;27991:24;28009:4;27991:9;:24::i;:::-;:46;;27983:123;;;::::0;;-1:-1:-1;;;27983:123:0;;16743:2:1;27983:123:0::1;::::0;::::1;16725:21:1::0;16762:18;;;16755:30;;;;16821:34;16801:18;;;16794:62;16892:34;16872:18;;;16865:62;16944:19;;27983:123:0::1;16541:428:1::0;27983:123:0::1;28117:8;:15:::0;;-1:-1:-1;;;;28117:15:0::1;-1:-1:-1::0;;;28117:15:0::1;::::0;;28143:10:::1;:8;:10::i;:::-;28164:8;:16:::0;;-1:-1:-1;;;;28164:16:0::1;::::0;;28196:36:::1;::::0;28216:15:::1;2092:25:1::0;;28196:36:0::1;::::0;2080:2:1;2065:18;28196:36:0::1;;;;;;;27928:312::o:0;19381:332::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;19481:16:::1;:33:::0;;;19525:15:::1;:31:::0;;;19582:34:::1;19543:13:::0;19500:14;19582:34:::1;:::i;:::-;19567:12;:49:::0;19669:3:::1;19651:15;10756:5;19651:1;:15;:::i;:::-;:21;;;;:::i;:::-;19635:12;;:37;;19627:78;;;::::0;-1:-1:-1;;;19627:78:0;;11629:2:1;19627:78:0::1;::::0;::::1;11611:21:1::0;11668:2;11648:18;;;11641:30;11707;11687:18;;;11680:58;11755:18;;19627:78:0::1;11427:352:1::0;4552:127:0;-1:-1:-1;;;;;4653:18:0;4626:7;4653:18;;;;;;;;;;;;4552:127::o;8196:150::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;8289:6:::1;::::0;8268:40:::1;::::0;8305:1:::1;::::0;-1:-1:-1;;;;;8289:6:0::1;::::0;8268:40:::1;::::0;8305:1;;8268:40:::1;8319:6;:19:::0;;-1:-1:-1;;;;;;8319:19:0::1;::::0;;8196:150::o;29389:447::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;29543:3:::1;29520:19;:26;;29512:90;;;::::0;-1:-1:-1;;;29512:90:0;;17176:2:1;29512:90:0::1;::::0;::::1;17158:21:1::0;17215:2;17195:18;;;17188:30;17254:34;17234:18;;;17227:62;-1:-1:-1;;;17305:18:1;;;17298:49;17364:19;;29512:90:0::1;16974:415:1::0;29512:90:0::1;29633:4;29621:8;:16;;:33;;;;-1:-1:-1::0;29641:13:0;29621:33:::1;29613:94;;;::::0;-1:-1:-1;;;29613:94:0;;17596:2:1;29613:94:0::1;::::0;::::1;17578:21:1::0;17635:2;17615:18;;;17608:30;17674:34;17654:18;;;17647:62;-1:-1:-1;;;17725:18:1;;;17718:46;17781:19;;29613:94:0::1;17394:412:1::0;29613:94:0::1;29718:15;:37:::0;;;;29766:16:::1;:27:::0;29804:13:::1;:24:::0;;-1:-1:-1;;29804:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29389:447::o;15943:273::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;15999:14:::1;:22:::0;;-1:-1:-1;;15999:22:0;;::::1;::::0;;;16032:20:::1;:28:::0;;;;::::1;::::0;;4524:12;;16071::::1;:28:::0;4524:12;;16110:13:::1;:29:::0;4524:12;;16150:9:::1;:25:::0;16193:15:::1;::::0;::::1;::::0;;;::::1;15943:273::o:0;18568:260::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;18664:4:::1;18660:104;;18702:6;::::0;-1:-1:-1;;;;;18702:6:0;;::::1;18692:16:::0;;::::1;::::0;18684:68:::1;;;::::0;-1:-1:-1;;;18684:68:0;;18013:2:1;18684:68:0::1;::::0;::::1;17995:21:1::0;18052:2;18032:18;;;18025:30;18091:34;18071:18;;;18064:62;-1:-1:-1;;;18142:18:1;;;18135:37;18189:19;;18684:68:0::1;17811:403:1::0;18684:68:0::1;-1:-1:-1::0;;;;;18774:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18774:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18568:260::o;26845:498::-;8109:6;;26932:10;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26963:20:0;::::1;26955:59;;;::::0;-1:-1:-1;;;26955:59:0;;18421:2:1;26955:59:0::1;::::0;::::1;18403:21:1::0;18460:2;18440:18;;;18433:30;18499:28;18479:18;;;18472:56;18545:18;;26955:59:0::1;18219:350:1::0;26955:59:0::1;-1:-1:-1::0;;;;;27033:23:0;::::1;27051:4;27033:23;;::::0;:41:::1;;-1:-1:-1::0;27061:13:0::1;::::0;::::1;::::0;::::1;;;27060:14;27033:41;27025:106;;;::::0;-1:-1:-1;;;27025:106:0;;18776:2:1;27025:106:0::1;::::0;::::1;18758:21:1::0;18815:2;18795:18;;;18788:30;18854:34;18834:18;;;18827:62;-1:-1:-1;;;18905:18:1;;;18898:50;18965:19;;27025:106:0::1;18574:416:1::0;27025:106:0::1;27169:39;::::0;-1:-1:-1;;;27169:39:0;;27202:4:::1;27169:39;::::0;::::1;984:51:1::0;27142:24:0::1;::::0;-1:-1:-1;;;;;27169:24:0;::::1;::::0;::::1;::::0;957:18:1;;27169:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27227:46;::::0;-1:-1:-1;;;27227:46:0;;-1:-1:-1;;;;;19376:32:1;;;27227:46:0::1;::::0;::::1;19358:51:1::0;19425:18;;;19418:34;;;27142:66:0;;-1:-1:-1;27227:23:0;;::::1;::::0;::::1;::::0;19331:18:1;;27227:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27289;::::0;;-1:-1:-1;;;;;19376:32:1;;19358:51;;19440:2;19425:18;;19418:34;;;27219:54:0;;-1:-1:-1;27289:46:0::1;::::0;19331:18:1;27289:46:0::1;;;;;;;26944:399;26845:498:::0;;;;:::o;4223:104::-;4279:13;4312:7;4305:14;;;;;:::i;18836:293::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;18945:6:::1;::::0;-1:-1:-1;;;;;18945:6:0;;::::1;18937:14:::0;;::::1;::::0;18929:84:::1;;;::::0;-1:-1:-1;;;18929:84:0;;19915:2:1;18929:84:0::1;::::0;::::1;19897:21:1::0;19954:2;19934:18;;;19927:30;19993:34;19973:18;;;19966:62;20064:27;20044:18;;;20037:55;20109:19;;18929:84:0::1;19713:421:1::0;18929:84:0::1;19024:41;19053:4;19059:5;19024:28;:41::i;:::-;19081:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19081:40:0;::::1;::::0;::::1;::::0;;;::::1;18836:293:::0;;:::o;5929:413::-;344:10;6022:4;6066:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6066:34:0;;;;;;;;;;6119:35;;;;6111:85;;;;-1:-1:-1;;;6111:85:0;;20341:2:1;6111:85:0;;;20323:21:1;20380:2;20360:18;;;20353:30;20419:34;20399:18;;;20392:62;-1:-1:-1;;;20470:18:1;;;20463:35;20515:19;;6111:85:0;20139:401:1;6111:85:0;6232:67;344:10;6255:7;6283:15;6264:16;:34;6232:8;:67::i;:::-;-1:-1:-1;6330:4:0;;5929:413;-1:-1:-1;;;5929:413:0:o;4687:175::-;4773:4;4790:42;344:10;4814:9;4825:6;4790:9;:42::i;20069:282::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;20176:9:::1;20172:172;20191:19:::0;;::::1;20172:172;;;20266:8;20231:19;:32;20251:8;;20260:1;20251:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20231:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20231:32:0;:43;;-1:-1:-1;;20231:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20310:8;;20319:1;20310:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20294:38:0::1;;20323:8;20294:38;;;;1919:14:1::0;1912:22;1894:41;;1882:2;1867:18;;1754:187;20294:38:0::1;;;;;;;;20212:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20172:172;;;;20069:282:::0;;;:::o;20359:182::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20444:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;20444:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20499:34;;1894:41:1;;;20499:34:0::1;::::0;1867:18:1;20499:34:0::1;;;;;;;20359:182:::0;;:::o;17002:293::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;17126:16:::1;4418:2:::0;17126::::1;:16;:::i;:::-;17118:3;17098:13;4524:12:::0;;;4436:108;17098:13:::1;:17;::::0;17114:1:::1;17098:17;:::i;:::-;:23;;;;:::i;:::-;17097:46;;;;:::i;:::-;17087:6;:56;;17079:109;;;::::0;-1:-1:-1;;;17079:109:0;;20747:2:1;17079:109:0::1;::::0;::::1;20729:21:1::0;20786:2;20766:18;;;20759:30;20825:34;20805:18;;;20798:62;-1:-1:-1;;;20876:18:1;;;20869:38;20924:19;;17079:109:0::1;20545:404:1::0;17079:109:0::1;17221:16;4418:2:::0;17221::::1;:16;:::i;:::-;17211:27;::::0;:6;:27:::1;:::i;:::-;17199:9;:39:::0;;;17254:33:::1;::::0;2092:25:1;;;17254:33:0::1;::::0;2080:2:1;2065:18;17254:33:0::1;1946:177:1::0;17365:346:0;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;17488:6:::1;17468:13;4524:12:::0;;;4436:108;17468:13:::1;:17;::::0;17484:1:::1;17468:17;:::i;:::-;:26;;;;:::i;:::-;17455:9;:39;;17447:105;;;::::0;-1:-1:-1;;;17447:105:0;;21156:2:1;17447:105:0::1;::::0;::::1;21138:21:1::0;21195:2;21175:18;;;21168:30;21234:34;21214:18;;;21207:62;-1:-1:-1;;;21285:18:1;;;21278:51;21346:19;;17447:105:0::1;20954:417:1::0;17447:105:0::1;17603:4;17583:13;4524:12:::0;;;4436:108;17583:13:::1;:17;::::0;17599:1:::1;17583:17;:::i;:::-;:24;;;;:::i;:::-;17570:9;:37;;17562:102;;;::::0;-1:-1:-1;;;17562:102:0;;21578:2:1;17562:102:0::1;::::0;::::1;21560:21:1::0;21617:2;21597:18;;;21590:30;21656:34;21636:18;;;21629:62;-1:-1:-1;;;21707:18:1;;;21700:50;21767:19;;17562:102:0::1;21376:416:1::0;17562:102:0::1;17674:18;:30:::0;17365:346::o;16694:300::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;16817:16:::1;4418:2:::0;16817::::1;:16;:::i;:::-;16808:4;16788:13;4524:12:::0;;;4436:108;16788:13:::1;:17;::::0;16804:1:::1;16788:17;:::i;:::-;:24;;;;:::i;:::-;16787:47;;;;:::i;:::-;16777:6;:57;;16769:112;;;::::0;-1:-1:-1;;;16769:112:0;;21999:2:1;16769:112:0::1;::::0;::::1;21981:21:1::0;22038:2;22018:18;;;22011:30;22077:34;22057:18;;;22050:62;-1:-1:-1;;;22128:18:1;;;22121:40;22178:19;;16769:112:0::1;21797:406:1::0;16769:112:0::1;16918:16;4418:2:::0;16918::::1;:16;:::i;:::-;16908:27;::::0;:6;:27:::1;:::i;:::-;16892:13;:43:::0;;;16951:35:::1;::::0;2092:25:1;;;16951:35:0::1;::::0;2080:2:1;2065:18;16951:35:0::1;1946:177:1::0;16277:98:0;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;16339:20:::1;:28:::0;;-1:-1:-1;;16339:28:0::1;::::0;;16277:98::o;8354:244::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8443:22:0;::::1;8435:73;;;::::0;-1:-1:-1;;;8435:73:0;;22410:2:1;8435:73:0::1;::::0;::::1;22392:21:1::0;22449:2;22429:18;;;22422:30;22488:34;22468:18;;;22461:62;-1:-1:-1;;;22539:18:1;;;22532:36;22585:19;;8435:73:0::1;22208:402:1::0;8435:73:0::1;8545:6;::::0;8524:38:::1;::::0;-1:-1:-1;;;;;8524:38:0;;::::1;::::0;8545:6:::1;::::0;8524:38:::1;::::0;8545:6:::1;::::0;8524:38:::1;8573:6;:17:::0;;-1:-1:-1;;;;;;8573:17:0::1;-1:-1:-1::0;;;;;8573:17:0;;;::::1;::::0;;;::::1;::::0;;8354:244::o;27413:160::-;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;27507:58:::1;::::0;27471:12:::1;::::0;27515:10:::1;::::0;27539:21:::1;::::0;27471:12;27507:58;27471:12;27507:58;27539:21;27515:10;27507:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31108:1399:::0;8109:6;;-1:-1:-1;;;;;8109:6:0;344:10;8109:22;8101:67;;;;-1:-1:-1;;;8101:67:0;;;;;;;:::i;:::-;31213:4:::1;31202:7;:15;;31194:81;;;::::0;-1:-1:-1;;;31194:81:0;;23027:2:1;31194:81:0::1;::::0;::::1;23009:21:1::0;23066:2;23046:18;;;23039:30;23105:34;23085:18;;;23078:62;-1:-1:-1;;;23156:18:1;;;23149:51;23217:19;;31194:81:0::1;22825:417:1::0;31194:81:0::1;31336:19;::::0;31318:37:::1;::::0;:15:::1;:37;:::i;:::-;31294:20;;:61;;31286:87;;;::::0;-1:-1:-1;;;31286:87:0;;23582:2:1;31286:87:0::1;::::0;::::1;23564:21:1::0;23621:2;23601:18;;;23594:30;-1:-1:-1;;;23640:18:1;;;23633:43;23693:18;;31286:87:0::1;23380:337:1::0;31286:87:0::1;31407:15;31384:20;:38:::0;31460:6:::1;::::0;31453:39:::1;::::0;-1:-1:-1;;;31453:39:0;;31486:4:::1;31453:39;::::0;::::1;984:51:1::0;31433:17:0::1;::::0;-1:-1:-1;;;;;31460:6:0::1;::::0;31453:24:::1;::::0;957:18:1;;31453:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31433:59;;31503:20;31526:24;31544:4;31526:9;:24::i;:::-;31503:47:::0;-1:-1:-1;31561:16:0::1;31602:5;31580:19;31592:7:::0;31580:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;31754:6;::::0;31778:9:::1;::::0;31747:52:::1;::::0;-1:-1:-1;;;31747:52:0;;-1:-1:-1;;;;;31778:9:0;;::::1;31747:52;::::0;::::1;19358:51:1::0;19425:18;;;19418:34;;;31561:46:0;;-1:-1:-1;31646:21:0::1;::::0;31754:6;::::1;::::0;31747:22:::1;::::0;19331:18:1;;31747:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31845:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;31845:234:0;;-1:-1:-1;;;;;31845:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;31896:4:::1;::::0;31916:8;;31845:9;;;;31896:4;;32053:15:::1;::::0;31845:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32092:25;32147:12;32120:24;32138:4;32120:9;:24::i;:::-;:39;;;;:::i;:::-;32092:67:::0;-1:-1:-1;32173:21:0;;32170:118:::1;;32210:66;32234:4;32249:6;32258:17;32210:15;:66::i;:::-;32300:23;32326:41;32350:17:::0;32326:21:::1;:41;:::i;:::-;32300:67:::0;-1:-1:-1;32383:19:0;;32380:80:::1;;32418:30;32432:15;32418:13;:30::i;:::-;32477:22;::::0;32490:8;;32477:22:::1;::::0;;;::::1;31183:1324;;;;;;31108:1399:::0;:::o;17723:207::-;-1:-1:-1;;;;;17811:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;17811:52:0;;;;;;;;;;17879:43;;24752:51:1;;;24819:18;;;24812:50;17879:43:0;;24725:18:1;17879:43:0;;;;;;;17723:207;;:::o;19137:236::-;-1:-1:-1;;;;;19220:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19220:39:0;;;;;;;19270;19220:31;:39;19270:26;:39::i;7271:380::-;-1:-1:-1;;;;;7407:19:0;;7399:68;;;;-1:-1:-1;;;7399:68:0;;25075:2:1;7399:68:0;;;25057:21:1;25114:2;25094:18;;;25087:30;25153:34;25133:18;;;25126:62;-1:-1:-1;;;25204:18:1;;;25197:34;25248:19;;7399:68:0;24873:400:1;7399:68:0;-1:-1:-1;;;;;7486:21:0;;7478:68;;;;-1:-1:-1;;;7478:68:0;;25480:2:1;7478:68:0;;;25462:21:1;25519:2;25499:18;;;25492:30;25558:34;25538:18;;;25531:62;-1:-1:-1;;;25609:18:1;;;25602:32;25651:19;;7478:68:0;25278:398:1;7478:68:0;-1:-1:-1;;;;;7559:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7611:32;;2092:25:1;;;7611:32:0;;2065:18:1;7611:32:0;;;;;;;7271:380;;;:::o;6350:614::-;-1:-1:-1;;;;;6490:20:0;;6482:70;;;;-1:-1:-1;;;6482:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6571:23:0;;6563:71;;;;-1:-1:-1;;;6563:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6671:17:0;;6647:21;6671:17;;;;;;;;;;;6707:23;;;;6699:74;;;;-1:-1:-1;;;6699:74:0;;26693:2:1;6699:74:0;;;26675:21:1;26732:2;26712:18;;;26705:30;26771:34;26751:18;;;26744:62;-1:-1:-1;;;26822:18:1;;;26815:36;26868:19;;6699:74:0;26491:402:1;6699:74:0;-1:-1:-1;;;;;6809:17:0;;;:9;:17;;;;;;;;;;;6829:22;;;6809:42;;6873:20;;;;;;;;:30;;6845:6;;6809:9;6873:30;;6845:6;;6873:30;:::i;:::-;;;;;;;;6938:9;-1:-1:-1;;;;;6921:35:0;6930:6;-1:-1:-1;;;;;6921:35:0;;6949:6;6921:35;;;;2092:25:1;;2080:2;2065:18;;1946:177;6921:35:0;;;;;;;;6471:493;6350:614;;;:::o;20549:3955::-;-1:-1:-1;;;;;20649:18:0;;20641:68;;;;-1:-1:-1;;;20641:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20728:16:0;;20720:64;;;;-1:-1:-1;;;20720:64:0;;;;;;;:::i;:::-;20812:1;20803:6;:10;20795:52;;;;-1:-1:-1;;;20795:52:0;;27100:2:1;20795:52:0;;;27082:21:1;27139:2;27119:18;;;27112:30;27178:31;27158:18;;;27151:59;27227:18;;20795:52:0;26898:353:1;20795:52:0;20872:13;;;;;;;20868:132;;-1:-1:-1;;;;;20909:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20938:23:0;;;;;;:19;:23;;;;;;;;20909:52;20901:87;;;;-1:-1:-1;;;20901:87:0;;27458:2:1;20901:87:0;;;27440:21:1;27497:2;27477:18;;;27470:30;-1:-1:-1;;;27516:18:1;;;27509:52;27578:18;;20901:87:0;27256:346:1;20901:87:0;21013:14;;;;21010:1643;;;8047:6;;-1:-1:-1;;;;;21047:15:0;;;8047:6;;21047:15;;;;:32;;-1:-1:-1;8047:6:0;;-1:-1:-1;;;;;21066:13:0;;;8047:6;;21066:13;;21047:32;:52;;;;-1:-1:-1;;;;;;21083:16:0;;;;21047:52;:77;;;;-1:-1:-1;;;;;;21103:21:0;;21117:6;21103:21;;21047:77;:107;;;;-1:-1:-1;;;;;;21129:25:0;;;;;;:19;:25;;;;;;;;21128:26;21047:107;:135;;;;-1:-1:-1;;;;;;21159:23:0;;;;;;:19;:23;;;;;;;;21158:24;21047:135;21043:1599;;;21358:20;;;;21354:515;;;21420:9;;-1:-1:-1;;;;;21406:24:0;;;21420:9;;21406:24;;;;:58;;-1:-1:-1;;;;;;21435:29:0;;;;;;:25;:29;;;;;;;;21434:30;21406:58;21402:448;;;21542:16;21557:1;21542:12;:16;:::i;:::-;21529:9;21500:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;21597:16:0;21612:1;21597:12;:16;:::i;:::-;-1:-1:-1;;;;;21562:32:0;;;;;;:28;:32;;;;;;:51;21500:113;21492:179;;;;-1:-1:-1;;;21492:179:0;;27809:2:1;21492:179:0;;;27791:21:1;27848:2;27828:18;;;27821:30;27887:34;27867:18;;;27860:62;-1:-1:-1;;;27938:18:1;;;27931:51;27999:19;;21492:179:0;27607:417:1;21492:179:0;21727:9;21698:39;;;;:28;:39;;;;;;21740:12;21698:54;;;;-1:-1:-1;;;;;21779:32:0;;;;;;:47;21402:448;-1:-1:-1;;;;;21938:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;21974:35:0;;;;;;:31;:35;;;;;;;;21973:36;21938:71;21934:693;;;22052:12;;22042:6;:22;;22034:75;;;;-1:-1:-1;;;22034:75:0;;28231:2:1;22034:75:0;;;28213:21:1;28270:2;28250:18;;;28243:30;28309:34;28289:18;;;28282:62;-1:-1:-1;;;28360:18:1;;;28353:38;28408:19;;22034:75:0;28029:404:1;22034:75:0;22166:9;;22149:13;22159:2;22149:9;:13::i;:::-;22140:22;;:6;:22;:::i;:::-;:35;;22132:67;;;;-1:-1:-1;;;22132:67:0;;28640:2:1;22132:67:0;;;28622:21:1;28679:2;28659:18;;;28652:30;-1:-1:-1;;;28698:18:1;;;28691:49;28757:18;;22132:67:0;28438:343:1;22132:67:0;21934:693;;;-1:-1:-1;;;;;22276:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;22310:37:0;;;;;;:31;:37;;;;;;;;22309:38;22276:71;22272:355;;;22390:13;;22380:6;:23;;22372:78;;;;-1:-1:-1;;;22372:78:0;;28988:2:1;22372:78:0;;;28970:21:1;29027:2;29007:18;;;29000:30;29066:34;29046:18;;;29039:62;-1:-1:-1;;;29117:18:1;;;29110:40;29167:19;;22372:78:0;28786:406:1;22272:355:0;-1:-1:-1;;;;;22481:35:0;;;;;;:31;:35;;;;;;;;22476:151;;22574:9;;22557:13;22567:2;22557:9;:13::i;:::-;22548:22;;:6;:22;:::i;:::-;:35;;22540:67;;;;-1:-1:-1;;;22540:67:0;;28640:2:1;22540:67:0;;;28622:21:1;28679:2;28659:18;;;28652:30;-1:-1:-1;;;28698:18:1;;;28691:49;28757:18;;22540:67:0;28438:343:1;22540:67:0;22665:28;22696:24;22714:4;22696:9;:24::i;:::-;22780:18;;22665:55;;-1:-1:-1;22756:42:0;;;;;;;22814:22;;-1:-1:-1;22825:11:0;;;;;;;22814:22;:35;;;;-1:-1:-1;22841:8:0;;-1:-1:-1;;;22841:8:0;;;;22840:9;22814:35;:71;;;;-1:-1:-1;;;;;;22854:31:0;;;;;;:25;:31;;;;;;;;22853:32;22814:71;:101;;;;-1:-1:-1;;;;;;22890:25:0;;;;;;:19;:25;;;;;;;;22889:26;22814:101;:129;;;;-1:-1:-1;;;;;;22920:23:0;;;;;;:19;:23;;;;;;;;22919:24;22814:129;22811:232;;;22960:8;:15;;-1:-1:-1;;;;22960:15:0;-1:-1:-1;;;22960:15:0;;;22990:10;:8;:10::i;:::-;23015:8;:16;;-1:-1:-1;;;;23015:16:0;;;22811:232;23059:8;;-1:-1:-1;;;23059:8:0;;;;23058:9;:42;;;;-1:-1:-1;;;;;;23071:29:0;;;;;;:25;:29;;;;;;;;23058:42;:59;;;;-1:-1:-1;23104:13:0;;;;23058:59;:114;;;;;23157:15;;23140:14;;:32;;;;:::i;:::-;23121:15;:51;;23058:114;:144;;;;-1:-1:-1;;;;;;23177:25:0;;;;;;:19;:25;;;;;;;;23176:26;23058:144;23055:204;;;23218:29;:27;:29::i;:::-;-1:-1:-1;;;;;23389:25:0;;23271:12;23389:25;;;:19;:25;;;;;;23286:4;;23389:25;;;:52;;-1:-1:-1;;;;;;23418:23:0;;;;;;:19;:23;;;;;;;;23389:52;23386:99;;;-1:-1:-1;23468:5:0;23386:99;23505:12;23611:7;23608:843;;;-1:-1:-1;;;;;23662:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23711:1;23695:13;;:17;23662:50;23658:624;;;10756:5;23748:13;;23739:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;23732:43;;23842:13;;23823:16;;23816:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23794:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23924:13:0;;23904:17;;23897:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;23874:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;23658:624:0;;-1:-1:-1;23658:624:0;;-1:-1:-1;;;;;24000:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24050:1;24035:12;;:16;24000:51;23997:285;;;10756:5;24085:12;;24076:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;24069:42;;24174:12;;24156:15;;24149:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24127:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24254:12:0;;24235:16;;24228:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;24205:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23997:285:0;24313:8;;24310:93;;24345:42;24361:4;24375;24382;24345:15;:42::i;:::-;24425:14;24435:4;24425:14;;:::i;:::-;;;23608:843;24463:33;24479:4;24485:2;24489:6;24463:15;:33::i;:::-;20628:3876;;;;20549:3955;;;:::o;25612:1225::-;25653:23;25679:24;25697:4;25679:9;:24::i;:::-;25653:50;;25714:25;25763:19;;25742:18;;:40;;;;:::i;:::-;25714:68;-1:-1:-1;25806:20:0;;;:46;;-1:-1:-1;25830:22:0;;25806:46;25803:60;;;25855:7;;25612:1225::o;25803:60::-;25896:18;;:23;;25917:2;25896:23;:::i;:::-;25878:15;:41;25875:113;;;25953:18;;:23;;25974:2;25953:23;:::i;:::-;25935:41;;25875:113;26000:12;26082:23;26167:1;26147:17;26126:18;;26108:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26082:86;-1:-1:-1;26189:51:0;26206:33;26082:86;26206:15;:33;:::i;:::-;26189:16;:51::i;:::-;26448:18;;26283:21;;;;26262:18;;26448:20;;26467:1;;26448:20;:::i;:::-;26427:42;;:17;:42;:::i;:::-;26404:19;;26391:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;26364:106;-1:-1:-1;26483:35:0;26364:106;26483:35;;:::i;:::-;26564:1;26543:18;:22;;;26576:19;:23;26483:35;-1:-1:-1;26623:19:0;;;;;:42;;;26664:1;26646:15;:19;26623:42;26620:119;;;26681:46;26694:15;26711;26681:12;:46::i;:::-;26772:17;;26764:65;;-1:-1:-1;;;;;26772:17:0;;;;26803:21;;26764:65;;;;26803:21;26772:17;26764:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;25612:1225:0:o;32515:382::-;32603:16;;;32617:1;32603:16;;;;;;;;32579:21;;32603:16;;;;;;;;-1:-1:-1;;32640:9:0;;:16;;;-1:-1:-1;;;32640:16:0;;;;32579:40;;-1:-1:-1;;;;;;32640:9:0;;;;:14;;-1:-1:-1;32640:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32630:4;32635:1;32630:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;32630:26:0;;;-1:-1:-1;;;;;32630:26:0;;;;;32685:4;32667;32672:1;32667:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32667:23:0;;;:7;;;;;;;;;:23;32703:9;;:186;;-1:-1:-1;;;32703:186:0;;:9;;;:60;;32771:11;;32703:186;;:9;;32814:4;;32841:6;;32863:15;;32703:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29848:1252;29934:15;29917:14;:32;;;29970:20;:38;30046:6;;30039:39;;-1:-1:-1;;;30039:39:0;;30072:4;30039:39;;;984:51:1;-1:-1:-1;;;;;;;30046:6:0;;30039:24;;957:18:1;;30039:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30019:59;;30089:20;30112:24;30130:4;30112:9;:24::i;:::-;30089:47;;30147:16;30197:5;30178:16;;30166:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;30349:6;;30373:9;;30342:52;;-1:-1:-1;;;30342:52:0;;-1:-1:-1;;;;;30373:9:0;;;30342:52;;;19358:51:1;19425:18;;;19418:34;;;30147:55:0;;-1:-1:-1;30241:21:0;;30349:6;;;30342:22;;19331:18:1;;30342:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30440:9:0;;:234;;-1:-1:-1;;;30440:234:0;;-1:-1:-1;;;;;30440:9:0;;;;:28;;:234;;30491:4;;30511:8;;30440:9;;;;30491:4;;30648:15;;30440:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30687:25;30742:12;30715:24;30733:4;30715:9;:24::i;:::-;:39;;;;:::i;:::-;30687:67;-1:-1:-1;30768:21:0;;30765:118;;30805:66;30829:4;30844:6;30853:17;30805:15;:66::i;:::-;30895:23;30921:41;30945:17;30921:21;:41;:::i;:::-;30895:67;-1:-1:-1;30978:19:0;;30975:80;;31013:30;31027:15;31013:13;:30::i;:::-;31072:20;;31083:8;;31072:20;;;;;29896:1204;;;;;;29848:1252::o;24512:573::-;24664:16;;;24678:1;24664:16;;;;;;;;24640:21;;24664:16;;;;;;;;;;-1:-1:-1;24664:16:0;24640:40;;24709:4;24691;24696:1;24691:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24691:23:0;;;:7;;;;;;;;;;:23;;;;24735:9;;:16;;;-1:-1:-1;;;24735:16:0;;;;:9;;;;;:14;;:16;;;;;24691:7;;24735:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24725:4;24730:1;24725:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24725:26:0;;;:7;;;;;;;;;:26;24796:9;;24764:56;;24781:4;;24796:9;24808:11;24764:8;:56::i;:::-;24859:9;;:218;;-1:-1:-1;;;24859:218:0;;-1:-1:-1;;;;;24859:9:0;;;;:60;;:218;;24934:11;;24859:9;;25004:4;;25031;;25051:15;;24859:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24567:518;24512:573;:::o;25097:507::-;25277:9;;25245:56;;25262:4;;-1:-1:-1;;;;;25277:9:0;25289:11;25245:8;:56::i;:::-;25344:9;;:252;;-1:-1:-1;;;25344:252:0;;-1:-1:-1;;;;;25344:9:0;;;;:25;;25377:9;;25344:252;;25410:4;;25430:11;;25344:9;;;;25410:4;;25570:15;;25344:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25097:507;;:::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:548::-;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;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;1046:131::-;-1:-1:-1;;;;;1121:31:1;;1111:42;;1101:70;;1167:1;1164;1157:12;1101:70;1046:131;:::o;1182:247::-;1241:6;1294:2;1282:9;1273:7;1269:23;1265:32;1262:52;;;1310:1;1307;1300:12;1262:52;1349:9;1336:23;1368:31;1393:5;1368:31;:::i;:::-;1418:5;1182:247;-1:-1:-1;;;1182:247:1:o;1434:315::-;1502:6;1510;1563:2;1551:9;1542:7;1538:23;1534:32;1531:52;;;1579:1;1576;1569:12;1531:52;1618:9;1605:23;1637:31;1662:5;1637:31;:::i;:::-;1687:5;1739:2;1724:18;;;;1711:32;;-1:-1:-1;;;1434:315:1:o;2128:127::-;2189:10;2184:3;2180:20;2177:1;2170:31;2220:4;2217:1;2210:15;2244:4;2241:1;2234:15;2260:275;2331:2;2325:9;2396:2;2377:13;;-1:-1:-1;;2373:27:1;2361:40;;2431:18;2416:34;;2452:22;;;2413:62;2410:88;;;2478:18;;:::i;:::-;2514:2;2507:22;2260:275;;-1:-1:-1;2260:275:1:o;2540:183::-;2600:4;2633:18;2625:6;2622:30;2619:56;;;2655:18;;:::i;:::-;-1:-1:-1;2700:1:1;2696:14;2712:4;2692:25;;2540:183::o;2728:662::-;2782:5;2835:3;2828:4;2820:6;2816:17;2812:27;2802:55;;2853:1;2850;2843:12;2802:55;2889:6;2876:20;2915:4;2939:60;2955:43;2995:2;2955:43;:::i;:::-;2939:60;:::i;:::-;3033:15;;;3119:1;3115:10;;;;3103:23;;3099:32;;;3064:12;;;;3143:15;;;3140:35;;;3171:1;3168;3161:12;3140:35;3207:2;3199:6;3195:15;3219:142;3235:6;3230:3;3227:15;3219:142;;;3301:17;;3289:30;;3339:12;;;;3252;;3219:142;;;-1:-1:-1;3379:5:1;2728:662;-1:-1:-1;;;;;;2728:662:1:o;3395:1215::-;3513:6;3521;3574:2;3562:9;3553:7;3549:23;3545:32;3542:52;;;3590:1;3587;3580:12;3542:52;3630:9;3617:23;3659:18;3700:2;3692:6;3689:14;3686:34;;;3716:1;3713;3706:12;3686:34;3754:6;3743:9;3739:22;3729:32;;3799:7;3792:4;3788:2;3784:13;3780:27;3770:55;;3821:1;3818;3811:12;3770:55;3857:2;3844:16;3879:4;3903:60;3919:43;3959:2;3919:43;:::i;3903:60::-;3997:15;;;4079:1;4075:10;;;;4067:19;;4063:28;;;4028:12;;;;4103:19;;;4100:39;;;4135:1;4132;4125:12;4100:39;4159:11;;;;4179:217;4195:6;4190:3;4187:15;4179:217;;;4275:3;4262:17;4292:31;4317:5;4292:31;:::i;:::-;4336:18;;4212:12;;;;4374;;;;4179:217;;;4415:5;-1:-1:-1;;4458:18:1;;4445:32;;-1:-1:-1;;4489:16:1;;;4486:36;;;4518:1;4515;4508:12;4486:36;;4541:63;4596:7;4585:8;4574:9;4570:24;4541:63;:::i;:::-;4531:73;;;3395:1215;;;;;:::o;4615:456::-;4692:6;4700;4708;4761:2;4749:9;4740:7;4736:23;4732:32;4729:52;;;4777:1;4774;4767:12;4729:52;4816:9;4803:23;4835:31;4860:5;4835:31;:::i;:::-;4885:5;-1:-1:-1;4942:2:1;4927:18;;4914:32;4955:33;4914:32;4955:33;:::i;:::-;4615:456;;5007:7;;-1:-1:-1;;;5061:2:1;5046:18;;;;5033:32;;4615:456::o;5076:180::-;5135:6;5188:2;5176:9;5167:7;5163:23;5159:32;5156:52;;;5204:1;5201;5194:12;5156:52;-1:-1:-1;5227:23:1;;5076:180;-1:-1:-1;5076:180:1:o;5658:118::-;5744:5;5737:13;5730:21;5723:5;5720:32;5710:60;;5766:1;5763;5756:12;5781:377;5855:6;5863;5871;5924:2;5912:9;5903:7;5899:23;5895:32;5892:52;;;5940:1;5937;5930:12;5892:52;5976:9;5963:23;5953:33;;6033:2;6022:9;6018:18;6005:32;5995:42;;6087:2;6076:9;6072:18;6059:32;6100:28;6122:5;6100:28;:::i;:::-;6147:5;6137:15;;;5781:377;;;;;:::o;6163:382::-;6228:6;6236;6289:2;6277:9;6268:7;6264:23;6260:32;6257:52;;;6305:1;6302;6295:12;6257:52;6344:9;6331:23;6363:31;6388:5;6363:31;:::i;:::-;6413:5;-1:-1:-1;6470:2:1;6455:18;;6442:32;6483:30;6442:32;6483:30;:::i;:::-;6532:7;6522:17;;;6163:382;;;;;:::o;6550:388::-;6618:6;6626;6679:2;6667:9;6658:7;6654:23;6650:32;6647:52;;;6695:1;6692;6685:12;6647:52;6734:9;6721:23;6753:31;6778:5;6753:31;:::i;:::-;6803:5;-1:-1:-1;6860:2:1;6845:18;;6832:32;6873:33;6832:32;6873:33;:::i;6943:750::-;7035:6;7043;7051;7104:2;7092:9;7083:7;7079:23;7075:32;7072:52;;;7120:1;7117;7110:12;7072:52;7160:9;7147:23;7189:18;7230:2;7222:6;7219:14;7216:34;;;7246:1;7243;7236:12;7216:34;7284:6;7273:9;7269:22;7259:32;;7329:7;7322:4;7318:2;7314:13;7310:27;7300:55;;7351:1;7348;7341:12;7300:55;7391:2;7378:16;7417:2;7409:6;7406:14;7403:34;;;7433:1;7430;7423:12;7403:34;7488:7;7481:4;7471:6;7468:1;7464:14;7460:2;7456:23;7452:34;7449:47;7446:67;;;7509:1;7506;7499:12;7446:67;7540:4;7532:13;;;;-1:-1:-1;7564:6:1;-1:-1:-1;;7605:20:1;;7592:34;7635:28;7592:34;7635:28;:::i;7698:356::-;7900:2;7882:21;;;7919:18;;;7912:30;7978:34;7973:2;7958:18;;7951:62;8045:2;8030:18;;7698:356::o;8471:251::-;8541:6;8594:2;8582:9;8573:7;8569:23;8565:32;8562:52;;;8610:1;8607;8600:12;8562:52;8642:9;8636:16;8661:31;8686:5;8661:31;:::i;9847:607::-;-1:-1:-1;;;;;10206:15:1;;;10188:34;;10253:2;10238:18;;10231:34;;;;10296:2;10281:18;;10274:34;;;;10339:2;10324:18;;10317:34;;;;10388:15;;;10382:3;10367:19;;10360:44;10168:3;10420:19;;10413:35;;;;10137:3;10122:19;;9847:607::o;10459:306::-;10547:6;10555;10563;10616:2;10604:9;10595:7;10591:23;10587:32;10584:52;;;10632:1;10629;10622:12;10584:52;10661:9;10655:16;10645:26;;10711:2;10700:9;10696:18;10690:25;10680:35;;10755:2;10744:9;10740:18;10734:25;10724:35;;10459:306;;;;;:::o;10770:127::-;10831:10;10826:3;10822:20;10819:1;10812:31;10862:4;10859:1;10852:15;10886:4;10883:1;10876:15;10902:125;10967:9;;;10988:10;;;10985:36;;;11001:18;;:::i;11032:168::-;11105:9;;;11136;;11153:15;;;11147:22;;11133:37;11123:71;;11174:18;;:::i;11205:217::-;11245:1;11271;11261:132;;11315:10;11310:3;11306:20;11303:1;11296:31;11350:4;11347:1;11340:15;11378:4;11375:1;11368:15;11261:132;-1:-1:-1;11407:9:1;;11205:217::o;11784:380::-;11863:1;11859:12;;;;11906;;;11927:61;;11981:4;11973:6;11969:17;11959:27;;11927:61;12034:2;12026:6;12023:14;12003:18;12000:38;11997:161;;12080:10;12075:3;12071:20;12068:1;12061:31;12115:4;12112:1;12105:15;12143:4;12140:1;12133:15;11997:161;;11784:380;;;:::o;13660:127::-;13721:10;13716:3;13712:20;13709:1;13702:31;13752:4;13749:1;13742:15;13776:4;13773:1;13766:15;13792:135;13831:3;13852:17;;;13849:43;;13872:18;;:::i;:::-;-1:-1:-1;13919:1:1;13908:13;;13792:135::o;14341:422::-;14430:1;14473:5;14430:1;14487:270;14508:7;14498:8;14495:21;14487:270;;;14567:4;14563:1;14559:6;14555:17;14549:4;14546:27;14543:53;;;14576:18;;:::i;:::-;14626:7;14616:8;14612:22;14609:55;;;14646:16;;;;14609:55;14725:22;;;;14685:15;;;;14487:270;;;14491:3;14341:422;;;;;:::o;14768:806::-;14817:5;14847:8;14837:80;;-1:-1:-1;14888:1:1;14902:5;;14837:80;14936:4;14926:76;;-1:-1:-1;14973:1:1;14987:5;;14926:76;15018:4;15036:1;15031:59;;;;15104:1;15099:130;;;;15011:218;;15031:59;15061:1;15052:10;;15075:5;;;15099:130;15136:3;15126:8;15123:17;15120:43;;;15143:18;;:::i;:::-;-1:-1:-1;;15199:1:1;15185:16;;15214:5;;15011:218;;15313:2;15303:8;15300:16;15294:3;15288:4;15285:13;15281:36;15275:2;15265:8;15262:16;15257:2;15251:4;15248:12;15244:35;15241:77;15238:159;;;-1:-1:-1;15350:19:1;;;15382:5;;15238:159;15429:34;15454:8;15448:4;15429:34;:::i;:::-;15499:6;15495:1;15491:6;15487:19;15478:7;15475:32;15472:58;;;15510:18;;:::i;:::-;15548:20;;14768:806;-1:-1:-1;;;14768:806:1:o;15579:140::-;15637:5;15666:47;15707:4;15697:8;15693:19;15687:4;15666:47;:::i;18995:184::-;19065:6;19118:2;19106:9;19097:7;19093:23;19089:32;19086:52;;;19134:1;19131;19124:12;19086:52;-1:-1:-1;19157:16:1;;18995:184;-1:-1:-1;18995:184:1:o;19463:245::-;19530:6;19583:2;19571:9;19562:7;19558:23;19554:32;19551:52;;;19599:1;19596;19589:12;19551:52;19631:9;19625:16;19650:28;19672:5;19650:28;:::i;23247:128::-;23314:9;;;23335:11;;;23332:37;;;23349:18;;:::i;24334:245::-;24413:6;24421;24474:2;24462:9;24453:7;24449:23;24445:32;24442:52;;;24490:1;24487;24480:12;24442:52;-1:-1:-1;;24513:16:1;;24569:2;24554:18;;;24548:25;24513:16;;24548:25;;-1:-1:-1;24334:245:1:o;25681:401::-;25883:2;25865:21;;;25922:2;25902:18;;;25895:30;25961:34;25956:2;25941:18;;25934:62;-1:-1:-1;;;26027:2:1;26012:18;;26005:35;26072:3;26057:19;;25681:401::o;26087:399::-;26289:2;26271:21;;;26328:2;26308:18;;;26301:30;26367:34;26362:2;26347:18;;26340:62;-1:-1:-1;;;26433:2:1;26418:18;;26411:33;26476:3;26461:19;;26087:399::o;29197:461::-;29250:3;29288:5;29282:12;29315:6;29310:3;29303:19;29341:4;29370:2;29365:3;29361:12;29354:19;;29407:2;29400:5;29396:14;29428:1;29438:195;29452:6;29449:1;29446:13;29438:195;;;29517:13;;-1:-1:-1;;;;;29513:39:1;29501:52;;29573:12;;;;29608:15;;;;29549:1;29467:9;29438:195;;;-1:-1:-1;29649:3:1;;29197:461;-1:-1:-1;;;;;29197:461:1:o;29663:510::-;29934:6;29923:9;29916:25;29977:3;29972:2;29961:9;29957:18;29950:31;29897:4;29998:57;30050:3;30039:9;30035:19;30027:6;29998:57;:::i;:::-;-1:-1:-1;;;;;30091:32:1;;;;30086:2;30071:18;;30064:60;-1:-1:-1;30155:2:1;30140:18;30133:34;29990:65;29663:510;-1:-1:-1;;29663:510:1:o;30178:582::-;30477:6;30466:9;30459:25;30520:6;30515:2;30504:9;30500:18;30493:34;30563:3;30558:2;30547:9;30543:18;30536:31;30440:4;30584:57;30636:3;30625:9;30621:19;30613:6;30584:57;:::i;:::-;-1:-1:-1;;;;;30677:32:1;;;;30672:2;30657:18;;30650:60;-1:-1:-1;30741:3:1;30726:19;30719:35;30576:65;30178:582;-1:-1:-1;;;30178:582:1:o

Swarm Source

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