ETH Price: $3,346.07 (-0.06%)
Gas: 8 Gwei

Token

Tokage (TOKAGE)
 

Overview

Max Total Supply

100,000,000 TOKAGE

Holders

79

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
8,559.387863754 TOKAGE

Value
$0.00
0x3b50fc5e2150d4dad869b35491fd45459169a830
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:
Tokage

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


// Tokage, "LIZARD" とかげ in Japanese, is an ERC-20 Token on the Ethereum Blockchain
/// We will be renouncing and locking for 12 days at launch, no bullshit involved. Taxes will be 5% with 2% to the liquidity pool
//// and 3% to the marketing/buybackwallet. See you at milly market cap!

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    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() public 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;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is still locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}



contract Tokage is Context, IBEP20, Ownable {
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromAutoLiquidity;
    mapping (address => bool) public _isExcludedFromAntiWhale;
    mapping (address => bool) public _isExcludedFromBuy;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => bool) public _isExcludedFromMaxTx;

    address[] private _excluded;
    address private _teamWallet;
    address private _marketingWallet;

    address public constant _burnAddress = 0x000000000000000000000000000000000000dEaD;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name     = "Tokage";
    string private constant _symbol   = "TOKAGE";
    uint8  private constant _decimals = 9;
    
    uint256 private  _percentageOfLiquidityForTeam       = 4000; //LP tax is whatever is left remaining of 10,000, if marketing is 4000 and team is 4000, auto LP would be 2000
    uint256 private  _percentageOfLiquidityForMarketing = 4000;

    // transfer fee
    uint256 public  _taxFee       = 0; // tax fee is reflections
    uint256 public  _liquidityFee = 0; // ZERO tax for transfering tokens

    // buy fee
    uint256 public  _taxFeeBuy       = 2;
    uint256 public  _liquidityFeeBuy = 3; //

    // sell fee
    uint256 public  _taxFeeSell       = 2;
    uint256 public  _liquidityFeeSell = 3;
    
    uint256 public  _maxTxAmount     = _tTotal * 100 / 10000;
    uint256 public  _minTokenBalance = _tTotal / 100;
    
    // auto liquidity
    IUniswapV2Router02 public uniswapV2Router;
    address            public uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 bnbReceived,
        uint256 tokensIntoLiquidity
    );

    // no big willies
    bool    public _isAntiWhaleEnabled = true;
    uint256 public _antiWhaleThreshold = _tTotal * 200 / 10000; // 2% of total supply

    event TeamSent(address to, uint256 bnbSent);
    event MarketingSent(address to, uint256 bnbSent);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        // 
        _teamWallet       = 0x93eB80503E76Ef75a714c4Fc386eE0aB847454C2;
        _marketingWallet = 0x5659ad22A1d3754E8E348c66BAE94d5c40d30eE0;
        
        // uniswap
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        
        // exclude system contracts
        _isExcludedFromFee[owner()]       = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromAutoLiquidity[uniswapV2Pair]            = true;
        _isExcludedFromAutoLiquidity[address(uniswapV2Router)] = true;

        _isExcludedFromAntiWhale[owner()]                  = true;
        _isExcludedFromAntiWhale[address(this)]            = true;
        _isExcludedFromAntiWhale[uniswapV2Pair]            = true;
        _isExcludedFromAntiWhale[address(uniswapV2Router)] = true;
        _isExcludedFromAntiWhale[_burnAddress]             = true;
        _isExcludedFromMaxTx[owner()] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        // to reflect burned amount in total supply
        // return _tTotal - balanceOf(_burnAddress);

        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        (, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        uint256 currentRate = _getRate();

        if (!deductTransferFee) {
            (uint256 rAmount,,) = _getRValues(tAmount, tFee, tLiquidity, currentRate);
            return rAmount;

        } else {
            (, uint256 rTransferAmount,) = _getRValues(tAmount, tFee, tLiquidity, currentRate);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");

        uint256 currentRate = _getRate();
        return rAmount / currentRate;
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");

        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");

        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

//Remove from Blacklist 
    function removeFromBlackList(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }
    function setExcludedFromFee(address account, bool e) external onlyOwner {
        _isExcludedFromFee[account] = e;
    }

    function setMaxTx(uint256 maxTx) external onlyOwner {
        _maxTxAmount = maxTx;
    }

    function setMinTokenBalance(uint256 minTokenBalance) external onlyOwner {
        _minTokenBalance = minTokenBalance;
    }

    function setAntiWhaleEnabled(bool e) external onlyOwner {
        _isAntiWhaleEnabled = e;
    }

    function setExcludedFromAntiWhale(address account, bool e) external onlyOwner {
        _isExcludedFromAntiWhale[account] = e;
    }

    function setExcludedFromBuy(address account, bool e) external onlyOwner {
        _isExcludedFromBuy[account] = e;
    }

    function setExcludedFromMaxTx(address account, bool e) external onlyOwner {
        _isExcludedFromMaxTx[account] = e;
    }

    function setAntiWhaleThreshold(uint256 antiWhaleThreshold) external onlyOwner {
        _antiWhaleThreshold = antiWhaleThreshold;
    }

    function setFeesTransfer(uint taxFee, uint liquidityFee) external onlyOwner {
        _taxFee       = taxFee;
        _liquidityFee = liquidityFee;
    }

    function setFeesBuy(uint taxFee, uint liquidityFee) external onlyOwner {
        _taxFeeBuy       = taxFee;
        _liquidityFeeBuy = liquidityFee;
    }

    function setFeesSell(uint taxFee, uint liquidityFee) external onlyOwner {
        _taxFeeSell       = taxFee;
        _liquidityFeeSell = liquidityFee;
    }

    function setAddresses(address teamWallet, address marketingWallet) external onlyOwner {
        _teamWallet       = teamWallet;
        _marketingWallet = marketingWallet;
    }

    function setLiquidityPercentages(uint256 teamFee, uint256 marketingFee) external onlyOwner {
        _percentageOfLiquidityForTeam        = teamFee;
        _percentageOfLiquidityForMarketing  = marketingFee;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    receive() external payable {}

    function setUniswapRouter(address r) external onlyOwner {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(r);
        uniswapV2Router = _uniswapV2Router;
    }

    function setUniswapPair(address p) external onlyOwner {
        uniswapV2Pair = p;
    }

    function setExcludedFromAutoLiquidity(address a, bool b) external onlyOwner {
        _isExcludedFromAutoLiquidity[a] = b;
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal    = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee       = calculateFee(tAmount, _taxFee);
        uint256 tLiquidity = calculateFee(tAmount, _liquidityFee);
        uint256 tTransferAmount = tAmount - tFee;
        tTransferAmount = tTransferAmount - tLiquidity;
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount    = tAmount * currentRate;
        uint256 rFee       = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rTransferAmount = rAmount - rFee;
        rTransferAmount = rTransferAmount - rLiquidity;
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function takeTransactionFee(address sender, address to, uint256 tAmount, uint256 currentRate) private {
        if (tAmount == 0) { return; }

        uint256 rAmount = tAmount * currentRate;
        _rOwned[to] = _rOwned[to] + rAmount;
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + tAmount;
        }
        emit Transfer(sender, to, tAmount);
    }
    
    function calculateFee(uint256 amount, uint256 fee) private pure returns (uint256) {
        return amount * fee / 100;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {  
        
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted");
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!_isExcludedFromMaxTx[from]) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        // prevent blacklisted addresses to buy
        if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
            require(!_isExcludedFromBuy[to], "Address is not allowed to buy");
        }

        /*
            - swapAndLiquify will be initiated when token balance of this contract
            has accumulated enough over the minimum number of tokens required.
            - don't get caught in a circular liquidity event.
            - don't swapAndLiquify if sender is uniswap pair.
        */
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool isOverMinTokenBalance = contractTokenBalance >= _minTokenBalance;
        if (
            isOverMinTokenBalance &&
            !inSwapAndLiquify &&
            !_isExcludedFromAutoLiquidity[from] &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = _minTokenBalance;
            swapAndLiquify(contractTokenBalance);
        }

        
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);

        /*
            anti whale: when buying, check if sender balance will be greater than anti whale threshold
            if greater, throw error
        */
        if ( _isAntiWhaleEnabled && !_isExcludedFromAntiWhale[to] ) {
            require(balanceOf(to) <= _antiWhaleThreshold, "Anti whale: can't hold more than the specified threshold");
        }
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split contract balance into halves
        uint256 half      = contractTokenBalance / 2;
        uint256 otherHalf = contractTokenBalance - half;

        uint256 initialBalance = address(this).balance;

        swapTokensForBnb(half);

        uint256 newBalance = address(this).balance - initialBalance;
        uint256 bnbForTeam       = newBalance / 10000 * _percentageOfLiquidityForTeam;
        uint256 bnbForMarketing = newBalance / 10000 * _percentageOfLiquidityForMarketing;
        uint256 bnbForLiquidity = newBalance - bnbForTeam - bnbForMarketing;

        if ( bnbForTeam != 0 ) {
            emit TeamSent(_teamWallet, bnbForTeam);
            payable(_teamWallet).transfer(bnbForTeam);
        }
        if ( bnbForMarketing != 0 ) {
            emit MarketingSent(_marketingWallet, bnbForMarketing);
            payable(_marketingWallet).transfer(bnbForMarketing);
        }
        
        (uint256 tokenAdded, uint256 bnbAdded) = addLiquidity(otherHalf, bnbForLiquidity);
        
        emit SwapAndLiquify(half, bnbAdded, tokenAdded);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private returns (uint256, uint256) {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        (uint amountToken, uint amountETH, ) = uniswapV2Router.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        return (uint256(amountToken), uint256(amountETH));
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        uint256 previousTaxFee       = _taxFee;
        uint256 previousLiquidityFee = _liquidityFee;
        
        bool isBuy  = sender == uniswapV2Pair && recipient != address(uniswapV2Router);
        bool isSell = recipient == uniswapV2Pair;
        
        if (!takeFee) {
            _taxFee       = 0;
            _liquidityFee = 0;

        } else if (isBuy) { 
            _taxFee       = _taxFeeBuy;
            _liquidityFee = _liquidityFeeBuy;

        } else if (isSell) { 
            _taxFee       = _taxFeeSell;
            _liquidityFee = _liquidityFeeSell;
        }
        
        _transferStandard(sender, recipient, amount);
        
        if (!takeFee || isBuy || isSell) {
            _taxFee       = previousTaxFee;
            _liquidityFee = previousLiquidityFee;
        }
    }


//adding multiple addresses to the blacklist - Used to manually block known bots and scammers
    function addToBlacklist(address[] calldata addresses) external onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
        _isBlacklisted[addresses[i]] = true;
      }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, currentRate);

        _rOwned[sender] = _rOwned[sender] - rAmount;
        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender] - tAmount;
        }

        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        }

        takeTransactionFee(sender, address(this), tLiquidity, currentRate);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"bnbSent","type":"uint256"}],"name":"MarketingSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"bnbSent","type":"uint256"}],"name":"TeamSent","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":[],"name":"_antiWhaleThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isAntiWhaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromAntiWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromAutoLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlacklist","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"teamWallet","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"e","type":"bool"}],"name":"setAntiWhaleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"antiWhaleThreshold","type":"uint256"}],"name":"setAntiWhaleThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"b","type":"bool"}],"name":"setExcludedFromAutoLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"teamFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setLiquidityPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokenBalance","type":"uint256"}],"name":"setMinTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p","type":"address"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405267016345785d8a00006010819055620000209060001962000591565b6200002e9060001962000577565b601155610fa0601355610fa0601455600060155560006016556002601755600360185560026019556003601a5561271060105460646200006f919062000555565b6200007b91906200053e565b601b5560646010546200008f91906200053e565b601c55601e805461ffff60a81b191661010160a81b17905560105461271090620000bb9060c862000555565b620000c791906200053e565b601f55348015620000d757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506011543360009081526003602090815260409182902092909255600e80546001600160a01b03199081167393eb80503e76ef75a714c4fc386ee0ab847454c217909155600f8054909116735659ad22a1d3754e8e348c66bae94d5c40d30ee0179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001c357600080fd5b505afa158015620001d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fe91906200050c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024757600080fd5b505afa1580156200025c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028291906200050c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002cb57600080fd5b505af1158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030691906200050c565b601e80546001600160a01b03199081166001600160a01b0393841617909155601d80549091169183169190911790556001600560006200034e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260058452828120805486166001908117909155601e548316825260089094528281208054861685179055601d5490911681529081208054909316821790925590600990620003d56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155601e54821684528284208054861682179055601d549091168352908220805484168217905561dead82527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580549093168117909255600c90620004856000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620004b53390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601054604051620004fd91815260200190565b60405180910390a350620005d4565b6000602082840312156200051f57600080fd5b81516001600160a01b03811681146200053757600080fd5b9392505050565b600082620005505762000550620005be565b500490565b6000816000190483118215151615620005725762000572620005a8565b500290565b6000828210156200058c576200058c620005a8565b500390565b600082620005a357620005a3620005be565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b612e6a80620005e46000396000f3fe6080604052600436106103b15760003560e01c80636bc87c3a116101e7578063a69df4b51161010d578063c49b9a80116100a0578063d8d89bc61161006f578063d8d89bc614610b4e578063dd46706414610b64578063dd62ed3e14610b84578063f2fde38b14610bca57600080fd5b8063c49b9a8014610ad8578063c7f59a6714610af8578063d4c70c8d14610b18578063d5aed6bf14610b2e57600080fd5b8063baa04398116100dc578063baa0439814610a52578063bc33718214610a82578063bd3900c014610aa2578063bea9849e14610ab857600080fd5b8063a69df4b5146109dd578063a9059cbb146109f2578063aa5f57ca14610a12578063b0ac157114610a3257600080fd5b806389dfe6fd1161018557806395d89b411161015457806395d89b41146109585780639e3a9409146109875780639fe640941461099d578063a457c2d7146109bd57600080fd5b806389dfe6fd146108ca5780638da5cb5b146108fa57806390107afe14610918578063935eb35f1461093857600080fd5b80637921199f116101c15780637921199f14610845578063795f694f1461085b5780637d1db4a51461087b57806388f820201461089157600080fd5b80636bc87c3a146107fa57806370a0823114610810578063715018a61461083057600080fd5b8063383c5900116102d757806352390c021161026a578063565836e711610239578063565836e71461078f5780635d83b454146107a5578063602bc62b146107c55780636612e66f146107da57600080fd5b806352390c02146106f657806352d6585814610716578063530948f6146107365780635342acb41461075657600080fd5b80634549b039116102a65780634549b0391461067557806349bd5a5e146106955780634a49ac4c146106b55780634a74bb02146106d557600080fd5b8063383c5900146105fe578063395093511461061e5780633b124fe71461063e57806342737bb11461065457600080fd5b80631cdd3be31161034f5780632d8381191161031e5780632d838119146105825780632f39f21f146105a2578063313ce567146105c25780633685d419146105de57600080fd5b80631cdd3be3146104ec57806323b872dd1461051c578063260978d81461053c5780632c505e901461055257600080fd5b80630fa7c8691161038b5780630fa7c8691461045e57806313114a9d146104805780631694505e1461049f57806318160ddd146104d757600080fd5b806306fdde03146103bd57806307866291146103fe578063095ea7b31461043e57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b50604080518082019091526006815265546f6b61676560d01b60208201525b6040516103f59190612c34565b60405180910390f35b34801561040a57600080fd5b5061042e610419366004612a03565b600c6020526000908152604090205460ff1681565b60405190151581526020016103f5565b34801561044a57600080fd5b5061042e610459366004612aec565b610bea565b34801561046a57600080fd5b5061047e610479366004612be4565b610c01565b005b34801561048c57600080fd5b506012545b6040519081526020016103f5565b3480156104ab57600080fd5b50601d546104bf906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b3480156104e357600080fd5b50601054610491565b3480156104f857600080fd5b5061042e610507366004612a03565b600b6020526000908152604090205460ff1681565b34801561052857600080fd5b5061042e610537366004612a76565b610c3f565b34801561054857600080fd5b50610491601f5481565b34801561055e57600080fd5b5061042e61056d366004612a03565b60096020526000908152604090205460ff1681565b34801561058e57600080fd5b5061049161059d366004612ba8565b610c91565b3480156105ae57600080fd5b5061047e6105bd366004612ab7565b610d15565b3480156105ce57600080fd5b50604051600981526020016103f5565b3480156105ea57600080fd5b5061047e6105f9366004612a03565b610d6a565b34801561060a57600080fd5b5061047e610619366004612be4565b610f21565b34801561062a57600080fd5b5061042e610639366004612aec565b610f56565b34801561064a57600080fd5b5061049160155481565b34801561066057600080fd5b50601e5461042e90600160b01b900460ff1681565b34801561068157600080fd5b50610491610690366004612bc1565b610f8d565b3480156106a157600080fd5b50601e546104bf906001600160a01b031681565b3480156106c157600080fd5b5061047e6106d0366004612a03565b61103c565b3480156106e157600080fd5b50601e5461042e90600160a81b900460ff1681565b34801561070257600080fd5b5061047e610711366004612a03565b611087565b34801561072257600080fd5b5061047e610731366004612be4565b6111da565b34801561074257600080fd5b5061047e610751366004612ab7565b61120f565b34801561076257600080fd5b5061042e610771366004612a03565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561079b57600080fd5b50610491601a5481565b3480156107b157600080fd5b5061047e6107c0366004612ab7565b611264565b3480156107d157600080fd5b50600254610491565b3480156107e657600080fd5b5061047e6107f5366004612ab7565b6112b9565b34801561080657600080fd5b5061049160165481565b34801561081c57600080fd5b5061049161082b366004612a03565b61130e565b34801561083c57600080fd5b5061047e61136d565b34801561085157600080fd5b5061049160195481565b34801561086757600080fd5b5061047e610876366004612ba8565b6113cf565b34801561088757600080fd5b50610491601b5481565b34801561089d57600080fd5b5061042e6108ac366004612a03565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108d657600080fd5b5061042e6108e5366004612a03565b600a6020526000908152604090205460ff1681565b34801561090657600080fd5b506000546001600160a01b03166104bf565b34801561092457600080fd5b5061047e610933366004612a3d565b6113fe565b34801561094457600080fd5b5061047e610953366004612b18565b611456565b34801561096457600080fd5b50604080518082019091526006815265544f4b41474560d01b60208201526103e8565b34801561099357600080fd5b5061049160185481565b3480156109a957600080fd5b5061047e6109b8366004612be4565b6114f5565b3480156109c957600080fd5b5061042e6109d8366004612aec565b61152a565b3480156109e957600080fd5b5061047e611561565b3480156109fe57600080fd5b5061042e610a0d366004612aec565b611667565b348015610a1e57600080fd5b5061047e610a2d366004612b8d565b611674565b348015610a3e57600080fd5b5061047e610a4d366004612ba8565b6116bc565b348015610a5e57600080fd5b5061042e610a6d366004612a03565b60086020526000908152604090205460ff1681565b348015610a8e57600080fd5b5061047e610a9d366004612ba8565b6116eb565b348015610aae57600080fd5b506104bf61dead81565b348015610ac457600080fd5b5061047e610ad3366004612a03565b61171a565b348015610ae457600080fd5b5061047e610af3366004612b8d565b611766565b348015610b0457600080fd5b5061047e610b13366004612ab7565b6117e8565b348015610b2457600080fd5b5061049160175481565b348015610b3a57600080fd5b5061047e610b49366004612a03565b61183d565b348015610b5a57600080fd5b50610491601c5481565b348015610b7057600080fd5b5061047e610b7f366004612ba8565b611889565b348015610b9057600080fd5b50610491610b9f366004612a3d565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610bd657600080fd5b5061047e610be5366004612a03565b61190e565b6000610bf73384846119e6565b5060015b92915050565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610c2b90612c89565b60405180910390fd5b601591909155601655565b6000610c4c848484611b0a565b6001600160a01b038416600090815260076020908152604080832033808552925290912054610c87918691610c82908690612d88565b6119e6565b5060019392505050565b6000601154821115610cf85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c2b565b6000610d02611f78565b9050610d0e8184612d47565b9392505050565b6000546001600160a01b03163314610d3f5760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d945760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03811660009081526006602052604090205460ff16610dfc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b60005b600d54811015610f1d57816001600160a01b0316600d8281548110610e2657610e26612de6565b6000918252602090912001546001600160a01b03161415610f0b57600d8054610e5190600190612d88565b81548110610e6157610e61612de6565b600091825260209091200154600d80546001600160a01b039092169183908110610e8d57610e8d612de6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600690925220805460ff19169055600d805480610ee557610ee5612dd0565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f1581612d9f565b915050610dff565b5050565b6000546001600160a01b03163314610f4b5760405162461bcd60e51b8152600401610c2b90612c89565b601391909155601455565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610bf7918590610c82908690612d2f565b6000601054831115610fe15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c2b565b600080610fed85611f9b565b92509250506000610ffc611f78565b90508461102057600061101187858585611fe5565b50909550610bfb945050505050565b600061102e87858585611fe5565b509550610bfb945050505050565b6000546001600160a01b031633146110665760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146110b15760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03811660009081526006602052604090205460ff161561111a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b6001600160a01b03811660009081526003602052604090205415611174576001600160a01b03811660009081526003602052604090205461115a90610c91565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600660205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146112045760405162461bcd60e51b8152600401610c2b90612c89565b601791909155601855565b6000546001600160a01b031633146112395760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461128e5760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112e35760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526006602052604081205460ff161561134b57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610bfb90610c91565b6000546001600160a01b031633146113975760405162461bcd60e51b8152600401610c2b90612c89565b600080546040516001600160a01b0390911690600080516020612e15833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113f95760405162461bcd60e51b8152600401610c2b90612c89565b601f55565b6000546001600160a01b031633146114285760405162461bcd60e51b8152600401610c2b90612c89565b600e80546001600160a01b039384166001600160a01b031991821617909155600f8054929093169116179055565b6000546001600160a01b031633146114805760405162461bcd60e51b8152600401610c2b90612c89565b60005b818110156114f0576001600b60008585858181106114a3576114a3612de6565b90506020020160208101906114b89190612a03565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556114e981612d9f565b9050611483565b505050565b6000546001600160a01b0316331461151f5760405162461bcd60e51b8152600401610c2b90612c89565b601991909155601a55565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610bf7918590610c82908690612d88565b6001546001600160a01b031633146115c75760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c2b565b60025442116116185760405162461bcd60e51b815260206004820152601860248201527f436f6e7472616374206973207374696c6c206c6f636b656400000000000000006044820152606401610c2b565b600154600080546040516001600160a01b039384169390911691600080516020612e1583398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610bf7338484611b0a565b6000546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610c2b90612c89565b601e8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146116e65760405162461bcd60e51b8152600401610c2b90612c89565b601c55565b6000546001600160a01b031633146117155760405162461bcd60e51b8152600401610c2b90612c89565b601b55565b6000546001600160a01b031633146117445760405162461bcd60e51b8152600401610c2b90612c89565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117905760405162461bcd60e51b8152600401610c2b90612c89565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117dd90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118125760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118675760405162461bcd60e51b8152600401610c2b90612c89565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118b35760405162461bcd60e51b8152600401610c2b90612c89565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118e28142612d2f565b600255600080546040516001600160a01b0390911690600080516020612e15833981519152908390a350565b6000546001600160a01b031633146119385760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03811661199d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2b565b600080546040516001600160a01b0380851693921691600080516020612e1583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611a485760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2b565b6001600160a01b038216611aa95760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2b565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152600b602052604090205460ff16158015611b4c57506001600160a01b0382166000908152600b602052604090205460ff16155b611b985760405162461bcd60e51b815260206004820152601b60248201527f54686973206164647265737320697320626c61636b6c697374656400000000006044820152606401610c2b565b6001600160a01b038316611bfc5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2b565b6001600160a01b038216611c5e5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2b565b60008111611cc05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c2b565b6001600160a01b0383166000908152600c602052604090205460ff16611d4357601b54811115611d435760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c2b565b601e546001600160a01b038481169116148015611d6e5750601d546001600160a01b03838116911614155b15611ddc576001600160a01b0382166000908152600a602052604090205460ff1615611ddc5760405162461bcd60e51b815260206004820152601d60248201527f41646472657373206973206e6f7420616c6c6f77656420746f206275790000006044820152606401610c2b565b6000611de73061130e565b9050601b548110611df75750601b545b601c5481108015908190611e155750601e54600160a01b900460ff16155b8015611e3a57506001600160a01b03851660009081526008602052604090205460ff16155b8015611e4f5750601e54600160a81b900460ff165b15611e6257601c549150611e628261203d565b6001600160a01b03851660009081526005602052604090205460019060ff1680611ea457506001600160a01b03851660009081526005602052604090205460ff165b15611ead575060005b611eb986868684612258565b601e54600160b01b900460ff168015611eeb57506001600160a01b03851660009081526009602052604090205460ff16155b15611f7057601f54611efc8661130e565b1115611f705760405162461bcd60e51b815260206004820152603860248201527f416e7469207768616c653a2063616e277420686f6c64206d6f7265207468616e60448201527f2074686520737065636966696564207468726573686f6c6400000000000000006064820152608401610c2b565b505050505050565b6000806000611f85612315565b9092509050611f948183612d47565b9250505090565b600080600080611fad85601554612498565b90506000611fbd86601654612498565b90506000611fcb8388612d88565b9050611fd78282612d88565b979296509094509092505050565b6000808080611ff48589612d69565b905060006120028689612d69565b905060006120108789612d69565b9050600061201e8385612d88565b905061202a8282612d88565b939b939a50919850919650505050505050565b601e805460ff60a01b1916600160a01b179055600061205d600283612d47565b9050600061206b8284612d88565b905047612077836124b0565b60006120838247612d88565b90506000601354612710836120989190612d47565b6120a29190612d69565b90506000601454612710846120b79190612d47565b6120c19190612d69565b90506000816120d08486612d88565b6120da9190612d88565b9050821561216457600e54604080516001600160a01b039092168252602082018590527fe9c7f2b211c760890268dc4250ab69d148f8840809c94c593b2bc430e673fa63910160405180910390a1600e546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015612162573d6000803e3d6000fd5b505b81156121ec57600f54604080516001600160a01b039092168252602082018490527fbe61dd4a9cfefc957af4f19405f44fbde1f74724fcbf173c8b23225353eb4673910160405180910390a1600f546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156121ea573d6000803e3d6000fd5b505b6000806121f98884612611565b604080518c81526020810183905290810183905291935091507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805460ff60a01b191690555050505050505050565b601554601654601e546000906001600160a01b03888116911614801561228c5750601d546001600160a01b03878116911614155b601e549091506001600160a01b03878116911614846122b457600060158190556016556122de565b81156122cb576017546015556018546016556122de565b80156122de57601954601555601a546016555b6122e9888888612705565b8415806122f35750815b806122fb5750805b1561230b57601584905560168390555b5050505050505050565b6011546010546000918291825b600d54811015612467578260036000600d848154811061234457612344612de6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123af57508160046000600d848154811061238857612388612de6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123c557601154601054945094505050509091565b60036000600d83815481106123dc576123dc612de6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461240b9084612d88565b925060046000600d838154811061242457612424612de6565b60009182526020808320909101546001600160a01b031683528201929092526040019020546124539083612d88565b91508061245f81612d9f565b915050612322565b506010546011546124789190612d47565b82101561248f576011546010549350935050509091565b90939092509050565b600060646124a68385612d69565b610d0e9190612d47565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124e5576124e5612de6565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561253957600080fd5b505afa15801561254d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125719190612a20565b8160018151811061258457612584612de6565b6001600160a01b039283166020918202929092010152601d546125aa91309116846119e6565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125e3908590600090869030904290600401612cbe565b600060405180830381600087803b1580156125fd57600080fd5b505af1158015611f70573d6000803e3d6000fd5b601d54600090819061262e9030906001600160a01b0316866119e6565b601d5460009081906001600160a01b031663f305d719863089858061265b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126f79190612c06565b509097909650945050505050565b600080600061271384611f9b565b9250925092506000612723611f78565b9050600080600061273688878787611fe5565b6001600160a01b038d166000908152600360205260409020549295509093509150612762908490612d88565b6001600160a01b038b1660009081526003602090815260408083209390935560069052205460ff16156127cd576001600160a01b038a166000908152600460205260409020546127b3908990612d88565b6001600160a01b038b166000908152600460205260409020555b6001600160a01b0389166000908152600360205260409020546127f1908390612d2f565b6001600160a01b038a1660009081526003602090815260408083209390935560069052205460ff161561285c576001600160a01b038916600090815260046020526040902054612842908890612d2f565b6001600160a01b038a166000908152600460205260409020555b6128688a3087876128cb565b61287281876129c8565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516128b791815260200190565b60405180910390a350505050505050505050565b816128d5576129c2565b60006128e18284612d69565b6001600160a01b038516600090815260036020526040902054909150612908908290612d2f565b6001600160a01b03851660009081526003602090815260408083209390935560069052205460ff1615612973576001600160a01b038416600090815260046020526040902054612959908490612d2f565b6001600160a01b0385166000908152600460205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129b891815260200190565b60405180910390a3505b50505050565b816011546129d69190612d88565b6011556012546129e7908290612d2f565b6012555050565b803580151581146129fe57600080fd5b919050565b600060208284031215612a1557600080fd5b8135610d0e81612dfc565b600060208284031215612a3257600080fd5b8151610d0e81612dfc565b60008060408385031215612a5057600080fd5b8235612a5b81612dfc565b91506020830135612a6b81612dfc565b809150509250929050565b600080600060608486031215612a8b57600080fd5b8335612a9681612dfc565b92506020840135612aa681612dfc565b929592945050506040919091013590565b60008060408385031215612aca57600080fd5b8235612ad581612dfc565b9150612ae3602084016129ee565b90509250929050565b60008060408385031215612aff57600080fd5b8235612b0a81612dfc565b946020939093013593505050565b60008060208385031215612b2b57600080fd5b823567ffffffffffffffff80821115612b4357600080fd5b818501915085601f830112612b5757600080fd5b813581811115612b6657600080fd5b8660208260051b8501011115612b7b57600080fd5b60209290920196919550909350505050565b600060208284031215612b9f57600080fd5b610d0e826129ee565b600060208284031215612bba57600080fd5b5035919050565b60008060408385031215612bd457600080fd5b82359150612ae3602084016129ee565b60008060408385031215612bf757600080fd5b50508035926020909101359150565b600080600060608486031215612c1b57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612c6157858101830151858201604001528201612c45565b81811115612c73576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d0e5784516001600160a01b031683529383019391830191600101612ce9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612d4257612d42612dba565b500190565b600082612d6457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612d8357612d83612dba565b500290565b600082821015612d9a57612d9a612dba565b500390565b6000600019821415612db357612db3612dba565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612e1157600080fd5b5056fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220121fbf309a2a57d6a8538c13a6088055fba7fb9370d4002d011f5e2c4f7c5bc764736f6c63430008050033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80636bc87c3a116101e7578063a69df4b51161010d578063c49b9a80116100a0578063d8d89bc61161006f578063d8d89bc614610b4e578063dd46706414610b64578063dd62ed3e14610b84578063f2fde38b14610bca57600080fd5b8063c49b9a8014610ad8578063c7f59a6714610af8578063d4c70c8d14610b18578063d5aed6bf14610b2e57600080fd5b8063baa04398116100dc578063baa0439814610a52578063bc33718214610a82578063bd3900c014610aa2578063bea9849e14610ab857600080fd5b8063a69df4b5146109dd578063a9059cbb146109f2578063aa5f57ca14610a12578063b0ac157114610a3257600080fd5b806389dfe6fd1161018557806395d89b411161015457806395d89b41146109585780639e3a9409146109875780639fe640941461099d578063a457c2d7146109bd57600080fd5b806389dfe6fd146108ca5780638da5cb5b146108fa57806390107afe14610918578063935eb35f1461093857600080fd5b80637921199f116101c15780637921199f14610845578063795f694f1461085b5780637d1db4a51461087b57806388f820201461089157600080fd5b80636bc87c3a146107fa57806370a0823114610810578063715018a61461083057600080fd5b8063383c5900116102d757806352390c021161026a578063565836e711610239578063565836e71461078f5780635d83b454146107a5578063602bc62b146107c55780636612e66f146107da57600080fd5b806352390c02146106f657806352d6585814610716578063530948f6146107365780635342acb41461075657600080fd5b80634549b039116102a65780634549b0391461067557806349bd5a5e146106955780634a49ac4c146106b55780634a74bb02146106d557600080fd5b8063383c5900146105fe578063395093511461061e5780633b124fe71461063e57806342737bb11461065457600080fd5b80631cdd3be31161034f5780632d8381191161031e5780632d838119146105825780632f39f21f146105a2578063313ce567146105c25780633685d419146105de57600080fd5b80631cdd3be3146104ec57806323b872dd1461051c578063260978d81461053c5780632c505e901461055257600080fd5b80630fa7c8691161038b5780630fa7c8691461045e57806313114a9d146104805780631694505e1461049f57806318160ddd146104d757600080fd5b806306fdde03146103bd57806307866291146103fe578063095ea7b31461043e57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b50604080518082019091526006815265546f6b61676560d01b60208201525b6040516103f59190612c34565b60405180910390f35b34801561040a57600080fd5b5061042e610419366004612a03565b600c6020526000908152604090205460ff1681565b60405190151581526020016103f5565b34801561044a57600080fd5b5061042e610459366004612aec565b610bea565b34801561046a57600080fd5b5061047e610479366004612be4565b610c01565b005b34801561048c57600080fd5b506012545b6040519081526020016103f5565b3480156104ab57600080fd5b50601d546104bf906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b3480156104e357600080fd5b50601054610491565b3480156104f857600080fd5b5061042e610507366004612a03565b600b6020526000908152604090205460ff1681565b34801561052857600080fd5b5061042e610537366004612a76565b610c3f565b34801561054857600080fd5b50610491601f5481565b34801561055e57600080fd5b5061042e61056d366004612a03565b60096020526000908152604090205460ff1681565b34801561058e57600080fd5b5061049161059d366004612ba8565b610c91565b3480156105ae57600080fd5b5061047e6105bd366004612ab7565b610d15565b3480156105ce57600080fd5b50604051600981526020016103f5565b3480156105ea57600080fd5b5061047e6105f9366004612a03565b610d6a565b34801561060a57600080fd5b5061047e610619366004612be4565b610f21565b34801561062a57600080fd5b5061042e610639366004612aec565b610f56565b34801561064a57600080fd5b5061049160155481565b34801561066057600080fd5b50601e5461042e90600160b01b900460ff1681565b34801561068157600080fd5b50610491610690366004612bc1565b610f8d565b3480156106a157600080fd5b50601e546104bf906001600160a01b031681565b3480156106c157600080fd5b5061047e6106d0366004612a03565b61103c565b3480156106e157600080fd5b50601e5461042e90600160a81b900460ff1681565b34801561070257600080fd5b5061047e610711366004612a03565b611087565b34801561072257600080fd5b5061047e610731366004612be4565b6111da565b34801561074257600080fd5b5061047e610751366004612ab7565b61120f565b34801561076257600080fd5b5061042e610771366004612a03565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561079b57600080fd5b50610491601a5481565b3480156107b157600080fd5b5061047e6107c0366004612ab7565b611264565b3480156107d157600080fd5b50600254610491565b3480156107e657600080fd5b5061047e6107f5366004612ab7565b6112b9565b34801561080657600080fd5b5061049160165481565b34801561081c57600080fd5b5061049161082b366004612a03565b61130e565b34801561083c57600080fd5b5061047e61136d565b34801561085157600080fd5b5061049160195481565b34801561086757600080fd5b5061047e610876366004612ba8565b6113cf565b34801561088757600080fd5b50610491601b5481565b34801561089d57600080fd5b5061042e6108ac366004612a03565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108d657600080fd5b5061042e6108e5366004612a03565b600a6020526000908152604090205460ff1681565b34801561090657600080fd5b506000546001600160a01b03166104bf565b34801561092457600080fd5b5061047e610933366004612a3d565b6113fe565b34801561094457600080fd5b5061047e610953366004612b18565b611456565b34801561096457600080fd5b50604080518082019091526006815265544f4b41474560d01b60208201526103e8565b34801561099357600080fd5b5061049160185481565b3480156109a957600080fd5b5061047e6109b8366004612be4565b6114f5565b3480156109c957600080fd5b5061042e6109d8366004612aec565b61152a565b3480156109e957600080fd5b5061047e611561565b3480156109fe57600080fd5b5061042e610a0d366004612aec565b611667565b348015610a1e57600080fd5b5061047e610a2d366004612b8d565b611674565b348015610a3e57600080fd5b5061047e610a4d366004612ba8565b6116bc565b348015610a5e57600080fd5b5061042e610a6d366004612a03565b60086020526000908152604090205460ff1681565b348015610a8e57600080fd5b5061047e610a9d366004612ba8565b6116eb565b348015610aae57600080fd5b506104bf61dead81565b348015610ac457600080fd5b5061047e610ad3366004612a03565b61171a565b348015610ae457600080fd5b5061047e610af3366004612b8d565b611766565b348015610b0457600080fd5b5061047e610b13366004612ab7565b6117e8565b348015610b2457600080fd5b5061049160175481565b348015610b3a57600080fd5b5061047e610b49366004612a03565b61183d565b348015610b5a57600080fd5b50610491601c5481565b348015610b7057600080fd5b5061047e610b7f366004612ba8565b611889565b348015610b9057600080fd5b50610491610b9f366004612a3d565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610bd657600080fd5b5061047e610be5366004612a03565b61190e565b6000610bf73384846119e6565b5060015b92915050565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610c2b90612c89565b60405180910390fd5b601591909155601655565b6000610c4c848484611b0a565b6001600160a01b038416600090815260076020908152604080832033808552925290912054610c87918691610c82908690612d88565b6119e6565b5060019392505050565b6000601154821115610cf85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c2b565b6000610d02611f78565b9050610d0e8184612d47565b9392505050565b6000546001600160a01b03163314610d3f5760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d945760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03811660009081526006602052604090205460ff16610dfc5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b60005b600d54811015610f1d57816001600160a01b0316600d8281548110610e2657610e26612de6565b6000918252602090912001546001600160a01b03161415610f0b57600d8054610e5190600190612d88565b81548110610e6157610e61612de6565b600091825260209091200154600d80546001600160a01b039092169183908110610e8d57610e8d612de6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600690925220805460ff19169055600d805480610ee557610ee5612dd0565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f1581612d9f565b915050610dff565b5050565b6000546001600160a01b03163314610f4b5760405162461bcd60e51b8152600401610c2b90612c89565b601391909155601455565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610bf7918590610c82908690612d2f565b6000601054831115610fe15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c2b565b600080610fed85611f9b565b92509250506000610ffc611f78565b90508461102057600061101187858585611fe5565b50909550610bfb945050505050565b600061102e87858585611fe5565b509550610bfb945050505050565b6000546001600160a01b031633146110665760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146110b15760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03811660009081526006602052604090205460ff161561111a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c2b565b6001600160a01b03811660009081526003602052604090205415611174576001600160a01b03811660009081526003602052604090205461115a90610c91565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600660205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146112045760405162461bcd60e51b8152600401610c2b90612c89565b601791909155601855565b6000546001600160a01b031633146112395760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461128e5760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112e35760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526006602052604081205460ff161561134b57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610bfb90610c91565b6000546001600160a01b031633146113975760405162461bcd60e51b8152600401610c2b90612c89565b600080546040516001600160a01b0390911690600080516020612e15833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113f95760405162461bcd60e51b8152600401610c2b90612c89565b601f55565b6000546001600160a01b031633146114285760405162461bcd60e51b8152600401610c2b90612c89565b600e80546001600160a01b039384166001600160a01b031991821617909155600f8054929093169116179055565b6000546001600160a01b031633146114805760405162461bcd60e51b8152600401610c2b90612c89565b60005b818110156114f0576001600b60008585858181106114a3576114a3612de6565b90506020020160208101906114b89190612a03565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556114e981612d9f565b9050611483565b505050565b6000546001600160a01b0316331461151f5760405162461bcd60e51b8152600401610c2b90612c89565b601991909155601a55565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610bf7918590610c82908690612d88565b6001546001600160a01b031633146115c75760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c2b565b60025442116116185760405162461bcd60e51b815260206004820152601860248201527f436f6e7472616374206973207374696c6c206c6f636b656400000000000000006044820152606401610c2b565b600154600080546040516001600160a01b039384169390911691600080516020612e1583398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610bf7338484611b0a565b6000546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610c2b90612c89565b601e8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146116e65760405162461bcd60e51b8152600401610c2b90612c89565b601c55565b6000546001600160a01b031633146117155760405162461bcd60e51b8152600401610c2b90612c89565b601b55565b6000546001600160a01b031633146117445760405162461bcd60e51b8152600401610c2b90612c89565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117905760405162461bcd60e51b8152600401610c2b90612c89565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117dd90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118125760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118675760405162461bcd60e51b8152600401610c2b90612c89565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118b35760405162461bcd60e51b8152600401610c2b90612c89565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118e28142612d2f565b600255600080546040516001600160a01b0390911690600080516020612e15833981519152908390a350565b6000546001600160a01b031633146119385760405162461bcd60e51b8152600401610c2b90612c89565b6001600160a01b03811661199d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2b565b600080546040516001600160a01b0380851693921691600080516020612e1583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611a485760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2b565b6001600160a01b038216611aa95760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2b565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152600b602052604090205460ff16158015611b4c57506001600160a01b0382166000908152600b602052604090205460ff16155b611b985760405162461bcd60e51b815260206004820152601b60248201527f54686973206164647265737320697320626c61636b6c697374656400000000006044820152606401610c2b565b6001600160a01b038316611bfc5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2b565b6001600160a01b038216611c5e5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2b565b60008111611cc05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c2b565b6001600160a01b0383166000908152600c602052604090205460ff16611d4357601b54811115611d435760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c2b565b601e546001600160a01b038481169116148015611d6e5750601d546001600160a01b03838116911614155b15611ddc576001600160a01b0382166000908152600a602052604090205460ff1615611ddc5760405162461bcd60e51b815260206004820152601d60248201527f41646472657373206973206e6f7420616c6c6f77656420746f206275790000006044820152606401610c2b565b6000611de73061130e565b9050601b548110611df75750601b545b601c5481108015908190611e155750601e54600160a01b900460ff16155b8015611e3a57506001600160a01b03851660009081526008602052604090205460ff16155b8015611e4f5750601e54600160a81b900460ff165b15611e6257601c549150611e628261203d565b6001600160a01b03851660009081526005602052604090205460019060ff1680611ea457506001600160a01b03851660009081526005602052604090205460ff165b15611ead575060005b611eb986868684612258565b601e54600160b01b900460ff168015611eeb57506001600160a01b03851660009081526009602052604090205460ff16155b15611f7057601f54611efc8661130e565b1115611f705760405162461bcd60e51b815260206004820152603860248201527f416e7469207768616c653a2063616e277420686f6c64206d6f7265207468616e60448201527f2074686520737065636966696564207468726573686f6c6400000000000000006064820152608401610c2b565b505050505050565b6000806000611f85612315565b9092509050611f948183612d47565b9250505090565b600080600080611fad85601554612498565b90506000611fbd86601654612498565b90506000611fcb8388612d88565b9050611fd78282612d88565b979296509094509092505050565b6000808080611ff48589612d69565b905060006120028689612d69565b905060006120108789612d69565b9050600061201e8385612d88565b905061202a8282612d88565b939b939a50919850919650505050505050565b601e805460ff60a01b1916600160a01b179055600061205d600283612d47565b9050600061206b8284612d88565b905047612077836124b0565b60006120838247612d88565b90506000601354612710836120989190612d47565b6120a29190612d69565b90506000601454612710846120b79190612d47565b6120c19190612d69565b90506000816120d08486612d88565b6120da9190612d88565b9050821561216457600e54604080516001600160a01b039092168252602082018590527fe9c7f2b211c760890268dc4250ab69d148f8840809c94c593b2bc430e673fa63910160405180910390a1600e546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015612162573d6000803e3d6000fd5b505b81156121ec57600f54604080516001600160a01b039092168252602082018490527fbe61dd4a9cfefc957af4f19405f44fbde1f74724fcbf173c8b23225353eb4673910160405180910390a1600f546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156121ea573d6000803e3d6000fd5b505b6000806121f98884612611565b604080518c81526020810183905290810183905291935091507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805460ff60a01b191690555050505050505050565b601554601654601e546000906001600160a01b03888116911614801561228c5750601d546001600160a01b03878116911614155b601e549091506001600160a01b03878116911614846122b457600060158190556016556122de565b81156122cb576017546015556018546016556122de565b80156122de57601954601555601a546016555b6122e9888888612705565b8415806122f35750815b806122fb5750805b1561230b57601584905560168390555b5050505050505050565b6011546010546000918291825b600d54811015612467578260036000600d848154811061234457612344612de6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123af57508160046000600d848154811061238857612388612de6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123c557601154601054945094505050509091565b60036000600d83815481106123dc576123dc612de6565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461240b9084612d88565b925060046000600d838154811061242457612424612de6565b60009182526020808320909101546001600160a01b031683528201929092526040019020546124539083612d88565b91508061245f81612d9f565b915050612322565b506010546011546124789190612d47565b82101561248f576011546010549350935050509091565b90939092509050565b600060646124a68385612d69565b610d0e9190612d47565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124e5576124e5612de6565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561253957600080fd5b505afa15801561254d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125719190612a20565b8160018151811061258457612584612de6565b6001600160a01b039283166020918202929092010152601d546125aa91309116846119e6565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125e3908590600090869030904290600401612cbe565b600060405180830381600087803b1580156125fd57600080fd5b505af1158015611f70573d6000803e3d6000fd5b601d54600090819061262e9030906001600160a01b0316866119e6565b601d5460009081906001600160a01b031663f305d719863089858061265b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126f79190612c06565b509097909650945050505050565b600080600061271384611f9b565b9250925092506000612723611f78565b9050600080600061273688878787611fe5565b6001600160a01b038d166000908152600360205260409020549295509093509150612762908490612d88565b6001600160a01b038b1660009081526003602090815260408083209390935560069052205460ff16156127cd576001600160a01b038a166000908152600460205260409020546127b3908990612d88565b6001600160a01b038b166000908152600460205260409020555b6001600160a01b0389166000908152600360205260409020546127f1908390612d2f565b6001600160a01b038a1660009081526003602090815260408083209390935560069052205460ff161561285c576001600160a01b038916600090815260046020526040902054612842908890612d2f565b6001600160a01b038a166000908152600460205260409020555b6128688a3087876128cb565b61287281876129c8565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516128b791815260200190565b60405180910390a350505050505050505050565b816128d5576129c2565b60006128e18284612d69565b6001600160a01b038516600090815260036020526040902054909150612908908290612d2f565b6001600160a01b03851660009081526003602090815260408083209390935560069052205460ff1615612973576001600160a01b038416600090815260046020526040902054612959908490612d2f565b6001600160a01b0385166000908152600460205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129b891815260200190565b60405180910390a3505b50505050565b816011546129d69190612d88565b6011556012546129e7908290612d2f565b6012555050565b803580151581146129fe57600080fd5b919050565b600060208284031215612a1557600080fd5b8135610d0e81612dfc565b600060208284031215612a3257600080fd5b8151610d0e81612dfc565b60008060408385031215612a5057600080fd5b8235612a5b81612dfc565b91506020830135612a6b81612dfc565b809150509250929050565b600080600060608486031215612a8b57600080fd5b8335612a9681612dfc565b92506020840135612aa681612dfc565b929592945050506040919091013590565b60008060408385031215612aca57600080fd5b8235612ad581612dfc565b9150612ae3602084016129ee565b90509250929050565b60008060408385031215612aff57600080fd5b8235612b0a81612dfc565b946020939093013593505050565b60008060208385031215612b2b57600080fd5b823567ffffffffffffffff80821115612b4357600080fd5b818501915085601f830112612b5757600080fd5b813581811115612b6657600080fd5b8660208260051b8501011115612b7b57600080fd5b60209290920196919550909350505050565b600060208284031215612b9f57600080fd5b610d0e826129ee565b600060208284031215612bba57600080fd5b5035919050565b60008060408385031215612bd457600080fd5b82359150612ae3602084016129ee565b60008060408385031215612bf757600080fd5b50508035926020909101359150565b600080600060608486031215612c1b57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612c6157858101830151858201604001528201612c45565b81811115612c73576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d0e5784516001600160a01b031683529383019391830191600101612ce9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612d4257612d42612dba565b500190565b600082612d6457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612d8357612d83612dba565b500290565b600082821015612d9a57612d9a612dba565b500390565b6000600019821415612db357612db3612dba565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612e1157600080fd5b5056fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220121fbf309a2a57d6a8538c13a6088055fba7fb9370d4002d011f5e2c4f7c5bc764736f6c63430008050033

Deployed Bytecode Sourcemap

10986:20249:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15066:83;;;;;;;;;;-1:-1:-1;15136:5:0;;;;;;;;;;;;-1:-1:-1;;;15136:5:0;;;;15066:83;;;;;;;:::i;:::-;;;;;;;;11570:53;;;;;;;;;;-1:-1:-1;11570:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5252:14:1;;5245:22;5227:41;;5215:2;5200:18;11570:53:0;5182:92:1;16087:161:0;;;;;;;;;;-1:-1:-1;16087:161:0;;;;;:::i;:::-;;:::i;20081:156::-;;;;;;;;;;-1:-1:-1;20081:156:0;;;;;:::i;:::-;;:::i;:::-;;17112:87;;;;;;;;;;-1:-1:-1;17181:10:0;;17112:87;;;12489:25:1;;;12477:2;12462:18;17112:87:0;12444:76:1;12946:41:0;;;;;;;;;;-1:-1:-1;12946:41:0;;;;-1:-1:-1;;;;;12946:41:0;;;;;;-1:-1:-1;;;;;4152:32:1;;;4134:51;;4122:2;4107:18;12946:41:0;4089:102:1;15343:204:0;;;;;;;;;;-1:-1:-1;15532:7:0;;15343:204;;11516:47;;;;;;;;;;-1:-1:-1;11516:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16254:266;;;;;;;;;;-1:-1:-1;16254:266:0;;;;;:::i;:::-;;:::i;13445:58::-;;;;;;;;;;;;;;;;11394:57;;;;;;;;;;-1:-1:-1;11394:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17827:251;;;;;;;;;;-1:-1:-1;17827:251:0;;;;;:::i;:::-;;:::i;19672:122::-;;;;;;;;;;-1:-1:-1;19672:122:0;;;;;:::i;:::-;;:::i;15252:83::-;;;;;;;;;;-1:-1:-1;15252:83:0;;12159:1;13976:36:1;;13964:2;13949:18;15252:83:0;13931:87:1;18428:479:0;;;;;;;;;;-1:-1:-1;18428:479:0;;;;;:::i;:::-;;:::i;20766:217::-;;;;;;;;;;-1:-1:-1;20766:217:0;;;;;:::i;:::-;;:::i;16528:215::-;;;;;;;;;;-1:-1:-1;16528:215:0;;;;;:::i;:::-;;:::i;12438:33::-;;;;;;;;;;;;;;;;13397:41;;;;;;;;;;-1:-1:-1;13397:41:0;;;;-1:-1:-1;;;13397:41:0;;;;;;17207:612;;;;;;;;;;-1:-1:-1;17207:612:0;;;;;:::i;:::-;;:::i;12994:39::-;;;;;;;;;;-1:-1:-1;12994:39:0;;;;-1:-1:-1;;;;;12994:39:0;;;18941:115;;;;;;;;;;-1:-1:-1;18941:115:0;;;;;:::i;:::-;;:::i;13068:40::-;;;;;;;;;;-1:-1:-1;13068:40:0;;;;-1:-1:-1;;;13068:40:0;;;;;;18086:334;;;;;;;;;;-1:-1:-1;18086:334:0;;;;;:::i;:::-;;:::i;20245:157::-;;;;;;;;;;-1:-1:-1;20245:157:0;;;;;:::i;:::-;;:::i;19802:126::-;;;;;;;;;;-1:-1:-1;19802:126:0;;;;;:::i;:::-;;:::i;23922:123::-;;;;;;;;;;-1:-1:-1;23922:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;24010:27:0;23986:4;24010:27;;;:18;:27;;;;;;;;;23922:123;12749:37;;;;;;;;;;;;;;;;21496:130;;;;;;;;;;-1:-1:-1;21496:130:0;;;;;:::i;:::-;;:::i;2378:90::-;;;;;;;;;;-1:-1:-1;2451:9:0;;2378:90;;19062:122;;;;;;;;;;-1:-1:-1;19062:122:0;;;;;:::i;:::-;;:::i;12504:33::-;;;;;;;;;;;;;;;;15555:198;;;;;;;;;;-1:-1:-1;15555:198:0;;;;;:::i;:::-;;:::i;1970:148::-;;;;;;;;;;;;;:::i;12705:37::-;;;;;;;;;;;;;;;;19936:137;;;;;;;;;;-1:-1:-1;19936:137:0;;;;;:::i;:::-;;:::i;12799:56::-;;;;;;;;;;;;;;;;16984:120;;;;;;;;;;-1:-1:-1;16984:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17076:20:0;17052:4;17076:20;;;:11;:20;;;;;;;;;16984:120;11458:51;;;;;;;;;;-1:-1:-1;11458:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;1756:79;;;;;;;;;;-1:-1:-1;1794:7:0;1821:6;-1:-1:-1;;;;;1821:6:0;1756:79;;20578:180;;;;;;;;;;-1:-1:-1;20578:180:0;;;;;:::i;:::-;;:::i;30154:190::-;;;;;;;;;;-1:-1:-1;30154:190:0;;;;;:::i;:::-;;:::i;15157:87::-;;;;;;;;;;-1:-1:-1;15229:7:0;;;;;;;;;;;;-1:-1:-1;;;15229:7:0;;;;15157:87;;12640:36;;;;;;;;;;;;;;;;20410:160;;;;;;;;;;-1:-1:-1;20410:160:0;;;;;:::i;:::-;;:::i;16751:225::-;;;;;;;;;;-1:-1:-1;16751:225:0;;;;;:::i;:::-;;:::i;2714:298::-;;;;;;;;;;;;;:::i;15761:167::-;;;;;;;;;;-1:-1:-1;15761:167:0;;;;;:::i;:::-;;:::i;19424:98::-;;;;;;;;;;-1:-1:-1;19424:98:0;;;;;:::i;:::-;;:::i;19291:125::-;;;;;;;;;;-1:-1:-1;19291:125:0;;;;;:::i;:::-;;:::i;11326:61::-;;;;;;;;;;-1:-1:-1;11326:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19192:91;;;;;;;;;;-1:-1:-1;19192:91:0;;;;;:::i;:::-;;:::i;11741:81::-;;;;;;;;;;;;11780:42;11741:81;;21211:179;;;;;;;;;;-1:-1:-1;21211:179:0;;;;;:::i;:::-;;:::i;20991:171::-;;;;;;;;;;-1:-1:-1;20991:171:0;;;;;:::i;:::-;;:::i;19530:134::-;;;;;;;;;;-1:-1:-1;19530:134:0;;;;;:::i;:::-;;:::i;12597:36::-;;;;;;;;;;;;;;;;21398:90;;;;;;;;;;-1:-1:-1;21398:90:0;;;;;:::i;:::-;;:::i;12862:48::-;;;;;;;;;;;;;;;;2476:226;;;;;;;;;;-1:-1:-1;2476:226:0;;;;;:::i;:::-;;:::i;15936:143::-;;;;;;;;;;-1:-1:-1;15936:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16044:18:0;;;16017:7;16044:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15936:143;2126:244;;;;;;;;;;-1:-1:-1;2126:244:0;;;;;:::i;:::-;;:::i;16087:161::-;16162:4;16179:39;542:10;16202:7;16211:6;16179:8;:39::i;:::-;-1:-1:-1;16236:4:0;16087:161;;;;;:::o;20081:156::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;;;;;;;;;20168:7:::1;:22:::0;;;;20201:13:::1;:28:::0;20081:156::o;16254:266::-;16352:4;16369:36;16379:6;16387:9;16398:6;16369:9;:36::i;:::-;-1:-1:-1;;;;;16447:19:0;;;;;;:11;:19;;;;;;;;542:10;16447:33;;;;;;;;;16416:74;;16425:6;;16447:42;;16483:6;;16447:42;:::i;:::-;16416:8;:74::i;:::-;-1:-1:-1;16508:4:0;16254:266;;;;;:::o;17827:251::-;17893:7;17932;;17921;:18;;17913:73;;;;-1:-1:-1;;;17913:73:0;;7481:2:1;17913:73:0;;;7463:21:1;7520:2;7500:18;;;7493:30;7559:34;7539:18;;;7532:62;-1:-1:-1;;;7610:18:1;;;7603:40;7660:19;;17913:73:0;7453:232:1;17913:73:0;17999:19;18021:10;:8;:10::i;:::-;17999:32;-1:-1:-1;18049:21:0;17999:32;18049:7;:21;:::i;:::-;18042:28;17827:251;-1:-1:-1;;;17827:251:0:o;19672:122::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19755:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:31;;-1:-1:-1;;19755:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19672:122::o;18428:479::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18508:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18500:60;;;::::0;-1:-1:-1;;;18500:60:0;;8299:2:1;18500:60:0::1;::::0;::::1;8281:21:1::0;8338:2;8318:18;;;8311:30;8377:29;8357:18;;;8350:57;8424:18;;18500:60:0::1;8271:177:1::0;18500:60:0::1;18578:9;18573:327;18597:9;:16:::0;18593:20;::::1;18573:327;;;18655:7;-1:-1:-1::0;;;;;18639:23:0::1;:9;18649:1;18639:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18639:12:0::1;:23;18635:254;;;18698:9;18708:16:::0;;:20:::1;::::0;18727:1:::1;::::0;18708:20:::1;:::i;:::-;18698:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18683:9:::1;:12:::0;;-1:-1:-1;;;;;18698:31:0;;::::1;::::0;18693:1;;18683:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;18683:46:0::1;-1:-1:-1::0;;;;;18683:46:0;;::::1;;::::0;;18748:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;18787:11:::1;:20:::0;;;;:28;;-1:-1:-1;;18787:28:0::1;::::0;;18834:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18834:15:0;;;;;-1:-1:-1;;;;;;18834:15:0::1;::::0;;;;;18573:327:::1;18428:479:::0;:::o;18635:254::-:1;18615:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18573:327;;;;18428:479:::0;:::o;20766:217::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;20868:29:::1;:46:::0;;;;20925:34:::1;:50:::0;20766:217::o;16528:215::-;542:10;16616:4;16665:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16665:34:0;;;;;;;;;;16616:4;;16633:80;;16656:7;;16665:47;;16702:10;;16665:47;:::i;17207:612::-;17297:7;17336;;17325;:18;;17317:62;;;;-1:-1:-1;;;17317:62:0;;9011:2:1;17317:62:0;;;8993:21:1;9050:2;9030:18;;;9023:30;9089:33;9069:18;;;9062:61;9140:18;;17317:62:0;8983:181:1;17317:62:0;17393:12;17407:18;17429:20;17441:7;17429:11;:20::i;:::-;17390:59;;;;;17460:19;17482:10;:8;:10::i;:::-;17460:32;;17510:17;17505:307;;17545:15;17566:51;17578:7;17587:4;17593:10;17605:11;17566;:51::i;:::-;-1:-1:-1;17544:73:0;;-1:-1:-1;17632:14:0;;-1:-1:-1;;;;;17632:14:0;17505:307;17684:23;17712:51;17724:7;17733:4;17739:10;17751:11;17712;:51::i;:::-;-1:-1:-1;17681:82:0;-1:-1:-1;17778:22:0;;-1:-1:-1;;;;;17778:22:0;18941:115;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19017:23:0::1;19043:5;19017:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;19017:31:0::1;::::0;;18941:115::o;18086:334::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18167:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18166:21;18158:61;;;::::0;-1:-1:-1;;;18158:61:0;;8299:2:1;18158:61:0::1;::::0;::::1;8281:21:1::0;8338:2;8318:18;;;8311:30;8377:29;8357:18;;;8350:57;8424:18;;18158:61:0::1;8271:177:1::0;18158:61:0::1;-1:-1:-1::0;;;;;18236:16:0;::::1;18255:1;18236:16:::0;;;:7:::1;:16;::::0;;;;;:20;18232:109:::1;;-1:-1:-1::0;;;;;18312:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18292:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18273:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18232:109:::1;-1:-1:-1::0;;;;;18351:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18351:27:0::1;18374:4;18351:27:::0;;::::1;::::0;;;18389:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;18389:23:0::1;::::0;;::::1;::::0;;18086:334::o;20245:157::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;20327:10:::1;:25:::0;;;;20363:16:::1;:31:::0;20245:157::o;19802:126::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19887:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:33;;-1:-1:-1;;19887:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19802:126::o;21496:130::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21583:31:0;;;::::1;;::::0;;;:28:::1;:31;::::0;;;;:35;;-1:-1:-1;;21583:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21496:130::o;19062:122::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19145:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:31;;-1:-1:-1;;19145:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19062:122::o;15555:198::-;-1:-1:-1;;;;;15645:20:0;;15621:7;15645:20;;;:11;:20;;;;;;;;15641:49;;;-1:-1:-1;;;;;;15674:16:0;;;;;:7;:16;;;;;;;15555:198::o;15641:49::-;-1:-1:-1;;;;;15728:16:0;;;;;;:7;:16;;;;;;15708:37;;:19;:37::i;1970:148::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;2077:1:::1;2061:6:::0;;2040:40:::1;::::0;-1:-1:-1;;;;;2061:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;2040:40:0;2077:1;;2040:40:::1;2108:1;2091:19:::0;;-1:-1:-1;;;;;;2091:19:0::1;::::0;;1970:148::o;19936:137::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;20025:19:::1;:40:::0;19936:137::o;20578:180::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;20675:11:::1;:30:::0;;-1:-1:-1;;;;;20675:30:0;;::::1;-1:-1:-1::0;;;;;;20675:30:0;;::::1;;::::0;;;20716:16:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;20578:180::o;30154:190::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;30243:9:::1;30238:99;30254:20:::0;;::::1;30238:99;;;30323:4;30292:14;:28;30307:9;;30317:1;30307:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30292:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30292:28:0;:35;;-1:-1:-1;;30292:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30276:3:::1;::::0;::::1;:::i;:::-;;;30238:99;;;;30154:190:::0;;:::o;20410:160::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;20493:11:::1;:26:::0;;;;20530:17:::1;:32:::0;20410:160::o;16751:225::-;542:10;16844:4;16893:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16893:34:0;;;;;;;;;;16844:4;;16861:85;;16884:7;;16893:52;;16930:15;;16893:52;:::i;2714:298::-;2766:14;;-1:-1:-1;;;;;2766:14:0;2784:10;2766:28;2758:76;;;;-1:-1:-1;;;2758:76:0;;12141:2:1;2758:76:0;;;12123:21:1;12180:2;12160:18;;;12153:30;12219:34;12199:18;;;12192:62;-1:-1:-1;;;12270:18:1;;;12263:33;12313:19;;2758:76:0;12113:225:1;2758:76:0;2871:9;;2853:15;:27;2845:65;;;;-1:-1:-1;;;2845:65:0;;6723:2:1;2845:65:0;;;6705:21:1;6762:2;6742:18;;;6735:30;6801:26;6781:18;;;6774:54;6845:18;;2845:65:0;6695:174:1;2845:65:0;2955:14;;;2947:6;;2926:44;;-1:-1:-1;;;;;2955:14:0;;;;2947:6;;;;-1:-1:-1;;;;;;;;;;;2926:44:0;;2990:14;;;2981:23;;-1:-1:-1;;;;;;2981:23:0;-1:-1:-1;;;;;2990:14:0;;;2981:23;;;;;;2714:298::o;15761:167::-;15839:4;15856:42;542:10;15880:9;15891:6;15856:9;:42::i;19424:98::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;19491:19:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;19491:23:0::1;-1:-1:-1::0;;;;19491:23:0;;::::1;::::0;;;::::1;::::0;;19424:98::o;19291:125::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;19374:16:::1;:34:::0;19291:125::o;19192:91::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;19255:12:::1;:20:::0;19192:91::o;21211:179::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;21348:15:::1;:34:::0;;-1:-1:-1;;;;;;21348:34:0::1;-1:-1:-1::0;;;;;21348:34:0;;;::::1;::::0;;;::::1;::::0;;21211:179::o;20991:171::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;21068:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;21068:32:0::1;-1:-1:-1::0;;;;21068:32:0;;::::1;;::::0;;21116:38:::1;::::0;::::1;::::0;::::1;::::0;21092:8;5252:14:1;5245:22;5227:41;;5215:2;5200:18;;5182:92;21116:38:0::1;;;;;;;;20991:171:::0;:::o;19530:134::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19619:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:37;;-1:-1:-1;;19619:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19530:134::o;21398:90::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;21463:13:::1;:17:::0;;-1:-1:-1;;;;;;21463:17:0::1;-1:-1:-1::0;;;;;21463:17:0;;;::::1;::::0;;;::::1;::::0;;21398:90::o;2476:226::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;2557:6:::1;::::0;;;2540:23;;-1:-1:-1;;;;;;2540:23:0;;::::1;-1:-1:-1::0;;;;;2557:6:0;::::1;2540:23;::::0;;;2574:19:::1;::::0;;2616:22:::1;2634:4:::0;2616:15:::1;:22;:::i;:::-;2604:9;:34:::0;2691:1:::1;2675:6:::0;;2654:40:::1;::::0;-1:-1:-1;;;;;2675:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;2654:40:0;2691:1;;2654:40:::1;2476:226:::0;:::o;2126:244::-;1883:6;;-1:-1:-1;;;;;1883:6:0;542:10;1883:22;1875:67;;;;-1:-1:-1;;;1875:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2215:22:0;::::1;2207:73;;;::::0;-1:-1:-1;;;2207:73:0;;7892:2:1;2207:73:0::1;::::0;::::1;7874:21:1::0;7931:2;7911:18;;;7904:30;7970:34;7950:18;;;7943:62;-1:-1:-1;;;8021:18:1;;;8014:36;8067:19;;2207:73:0::1;7864:228:1::0;2207:73:0::1;2317:6;::::0;;2296:38:::1;::::0;-1:-1:-1;;;;;2296:38:0;;::::1;::::0;2317:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2296:38:0;::::1;2345:6;:17:::0;;-1:-1:-1;;;;;;2345:17:0::1;-1:-1:-1::0;;;;;2345:17:0;;;::::1;::::0;;;::::1;::::0;;2126:244::o;24053:337::-;-1:-1:-1;;;;;24146:19:0;;24138:68;;;;-1:-1:-1;;;24138:68:0;;7076:2:1;24138:68:0;;;7058:21:1;7115:2;7095:18;;;7088:30;7154:34;7134:18;;;7127:62;-1:-1:-1;;;7205:18:1;;;7198:34;7249:19;;24138:68:0;7048:226:1;24138:68:0;-1:-1:-1;;;;;24225:21:0;;24217:68;;;;-1:-1:-1;;;24217:68:0;;11738:2:1;24217:68:0;;;11720:21:1;11777:2;11757:18;;;11750:30;11816:34;11796:18;;;11789:62;-1:-1:-1;;;11867:18:1;;;11860:32;11909:19;;24217:68:0;11710:224:1;24217:68:0;-1:-1:-1;;;;;24298:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24350:32;;12489:25:1;;;24350:32:0;;12462:18:1;24350:32:0;;;;;;;24053:337;;;:::o;24398:2277::-;-1:-1:-1;;;;;24533:20:0;;;;;;:14;:20;;;;;;;;24532:21;:44;;;;-1:-1:-1;;;;;;24558:18:0;;;;;;:14;:18;;;;;;;;24557:19;24532:44;24524:84;;;;-1:-1:-1;;;24524:84:0;;8655:2:1;24524:84:0;;;8637:21:1;8694:2;8674:18;;;8667:30;8733:29;8713:18;;;8706:57;8780:18;;24524:84:0;8627:177:1;24524:84:0;-1:-1:-1;;;;;24627:18:0;;24619:68;;;;-1:-1:-1;;;24619:68:0;;6317:2:1;24619:68:0;;;6299:21:1;6356:2;6336:18;;;6329:30;6395:34;6375:18;;;6368:62;-1:-1:-1;;;6446:18:1;;;6439:35;6491:19;;24619:68:0;6289:227:1;24619:68:0;-1:-1:-1;;;;;24706:16:0;;24698:64;;;;-1:-1:-1;;;24698:64:0;;10551:2:1;24698:64:0;;;10533:21:1;10590:2;10570:18;;;10563:30;10629:34;10609:18;;;10602:62;-1:-1:-1;;;10680:18:1;;;10673:33;10723:19;;24698:64:0;10523:225:1;24698:64:0;24790:1;24781:6;:10;24773:64;;;;-1:-1:-1;;;24773:64:0;;10141:2:1;24773:64:0;;;10123:21:1;10180:2;10160:18;;;10153:30;10219:34;10199:18;;;10192:62;-1:-1:-1;;;10270:18:1;;;10263:39;10319:19;;24773:64:0;10113:231:1;24773:64:0;-1:-1:-1;;;;;24855:26:0;;;;;;:20;:26;;;;;;;;24850:135;;24916:12;;24906:6;:22;;24898:75;;;;-1:-1:-1;;;24898:75:0;;9371:2:1;24898:75:0;;;9353:21:1;9410:2;9390:18;;;9383:30;9449:34;9429:18;;;9422:62;-1:-1:-1;;;9500:18:1;;;9493:38;9548:19;;24898:75:0;9343:230:1;24898:75:0;25058:13;;-1:-1:-1;;;;;25050:21:0;;;25058:13;;25050:21;:55;;;;-1:-1:-1;25089:15:0;;-1:-1:-1;;;;;25075:30:0;;;25089:15;;25075:30;;25050:55;25046:153;;;-1:-1:-1;;;;;25131:22:0;;;;;;:18;:22;;;;;;;;25130:23;25122:65;;;;-1:-1:-1;;;25122:65:0;;10955:2:1;25122:65:0;;;10937:21:1;10994:2;10974:18;;;10967:30;11033:31;11013:18;;;11006:59;11082:18;;25122:65:0;10927:179:1;25122:65:0;25525:28;25556:24;25574:4;25556:9;:24::i;:::-;25525:55;;25629:12;;25605:20;:36;25601:104;;-1:-1:-1;25681:12:0;;25601:104;25778:16;;25754:40;;;;;;;25823:55;;-1:-1:-1;25862:16:0;;-1:-1:-1;;;25862:16:0;;;;25861:17;25823:55;:107;;;;-1:-1:-1;;;;;;25896:34:0;;;;;;:28;:34;;;;;;;;25895:35;25823:107;:145;;;;-1:-1:-1;25947:21:0;;-1:-1:-1;;;25947:21:0;;;;25823:145;25805:292;;;26018:16;;25995:39;;26049:36;26064:20;26049:14;:36::i;:::-;-1:-1:-1;;;;;26153:24:0;;26119:12;26153:24;;;:18;:24;;;;;;26134:4;;26153:24;;;:50;;-1:-1:-1;;;;;;26181:22:0;;;;;;:18;:22;;;;;;;;26153:50;26149:98;;;-1:-1:-1;26230:5:0;26149:98;26257:41;26272:4;26278:2;26282:6;26290:7;26257:14;:41::i;:::-;26481:19;;-1:-1:-1;;;26481:19:0;;;;:52;;;;-1:-1:-1;;;;;;26505:28:0;;;;;;:24;:28;;;;;;;;26504:29;26481:52;26476:192;;;26576:19;;26559:13;26569:2;26559:9;:13::i;:::-;:36;;26551:105;;;;-1:-1:-1;;;26551:105:0;;11313:2:1;26551:105:0;;;11295:21:1;11352:2;11332:18;;;11325:30;11391:34;11371:18;;;11364:62;11462:26;11442:18;;;11435:54;11506:19;;26551:105:0;11285:246:1;26551:105:0;24501:2174;;;24398:2277;;;:::o;22655:160::-;22696:7;22717:15;22734;22753:19;:17;:19::i;:::-;22716:56;;-1:-1:-1;22716:56:0;-1:-1:-1;22790:17:0;22716:56;;22790:17;:::i;:::-;22783:24;;;;22655:160;:::o;21786:386::-;21846:7;21855;21864;21884:12;21905:30;21918:7;21927;;21905:12;:30::i;:::-;21884:51;;21946:18;21967:36;21980:7;21989:13;;21967:12;:36::i;:::-;21946:57;-1:-1:-1;22014:23:0;22040:14;22050:4;22040:7;:14;:::i;:::-;22014:40;-1:-1:-1;22083:28:0;22101:10;22014:40;22083:28;:::i;:::-;22065:46;22147:4;;-1:-1:-1;22153:10:0;;-1:-1:-1;21786:386:0;;-1:-1:-1;;;21786:386:0:o;22180:467::-;22295:7;;;;22354:21;22364:11;22354:7;:21;:::i;:::-;22333:42;-1:-1:-1;22386:12:0;22407:18;22414:11;22407:4;:18;:::i;:::-;22386:39;-1:-1:-1;22436:18:0;22457:24;22470:11;22457:10;:24;:::i;:::-;22436:45;-1:-1:-1;22492:23:0;22518:14;22528:4;22518:7;:14;:::i;:::-;22492:40;-1:-1:-1;22561:28:0;22579:10;22492:40;22561:28;:::i;:::-;22608:7;;;;-1:-1:-1;22634:4:0;;-1:-1:-1;22180:467:0;;-1:-1:-1;;;;;;;22180:467:0:o;26683:1176::-;13677:16;:23;;-1:-1:-1;;;;13677:23:0;-1:-1:-1;;;13677:23:0;;;;26835:24:::1;26858:1;26835:20:::0;:24:::1;:::i;:::-;26815:44:::0;-1:-1:-1;26870:17:0::1;26890:27;26815:44:::0;26890:20;:27:::1;:::i;:::-;26870:47:::0;-1:-1:-1;26955:21:0::1;26989:22;27006:4:::0;26989:16:::1;:22::i;:::-;27024:18;27045:38;27069:14:::0;27045:21:::1;:38;:::i;:::-;27024:59;;27094:18;27142:29;;27134:5;27121:10;:18;;;;:::i;:::-;:50;;;;:::i;:::-;27094:77;;27182:23;27229:34;;27221:5;27208:10;:18;;;;:::i;:::-;:55;;;;:::i;:::-;27182:81:::0;-1:-1:-1;27274:23:0::1;27182:81:::0;27300:23:::1;27313:10:::0;27300;:23:::1;:::i;:::-;:41;;;;:::i;:::-;27274:67:::0;-1:-1:-1;27359:15:0;;27354:144:::1;;27406:11;::::0;27397:33:::1;::::0;;-1:-1:-1;;;;;27406:11:0;;::::1;4370:51:1::0;;4452:2;4437:18;;4430:34;;;27397:33:0::1;::::0;4343:18:1;27397:33:0::1;;;;;;;27453:11;::::0;27445:41:::1;::::0;-1:-1:-1;;;;;27453:11:0;;::::1;::::0;27445:41;::::1;;;::::0;27475:10;;27453:11:::1;27445:41:::0;27453:11;27445:41;27475:10;27453:11;27445:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27354:144;27513:20:::0;;27508:174:::1;;27570:16;::::0;27556:48:::1;::::0;;-1:-1:-1;;;;;27570:16:0;;::::1;4370:51:1::0;;4452:2;4437:18;;4430:34;;;27556:48:0::1;::::0;4343:18:1;27556:48:0::1;;;;;;;27627:16;::::0;27619:51:::1;::::0;-1:-1:-1;;;;;27627:16:0;;::::1;::::0;27619:51;::::1;;;::::0;27654:15;;27627:16:::1;27619:51:::0;27627:16;27619:51;27654:15;27627:16;27619:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27508:174;27703:18;27723:16:::0;27743:40:::1;27756:9;27767:15;27743:12;:40::i;:::-;27809:42;::::0;;13712:25:1;;;13768:2;13753:18;;13746:34;;;13796:18;;;13789:34;;;27702:81:0;;-1:-1:-1;27702:81:0;-1:-1:-1;27809:42:0::1;::::0;13700:2:1;13685:18;27809:42:0::1;;;;;;;-1:-1:-1::0;;13723:16:0;:24;;-1:-1:-1;;;;13723:24:0;;;-1:-1:-1;;;;;;;;26683:1176:0:o;29111:938::-;29250:7;;29299:13;;29357;;29219:22;;-1:-1:-1;;;;;29347:23:0;;;29357:13;;29347:23;:64;;;;-1:-1:-1;29395:15:0;;-1:-1:-1;;;;;29374:37:0;;;29395:15;;29374:37;;29347:64;29449:13;;29333:78;;-1:-1:-1;;;;;;29436:26:0;;;29449:13;;29436:26;29488:7;29483:333;;29528:1;29512:7;:17;;;29544:13;:17;29483:333;;;29585:5;29581:235;;;29624:10;;29608:7;:26;29665:16;;29649:13;:32;29581:235;;;29705:6;29701:115;;;29745:11;;29729:7;:27;29787:17;;29771:13;:33;29701:115;29836:44;29854:6;29862:9;29873:6;29836:17;:44::i;:::-;29906:7;29905:8;:17;;;;29917:5;29905:17;:27;;;;29926:6;29905:27;29901:141;;;29949:7;:30;;;29994:13;:36;;;29901:141;29208:841;;;;29111:938;;;;:::o;22823:552::-;22920:7;;22956;;22873;;;;;22980:283;23004:9;:16;23000:20;;22980:283;;;23070:7;23046;:21;23054:9;23064:1;23054:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23054:12:0;23046:21;;;;;;;;;;;;;:31;;:66;;;23105:7;23081;:21;23089:9;23099:1;23089:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23089:12:0;23081:21;;;;;;;;;;;;;:31;23046:66;23042:97;;;23122:7;;23131;;23114:25;;;;;;;22823:552;;:::o;23042:97::-;23174:7;:21;23182:9;23192:1;23182:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23182:12:0;23174:21;;;;;;;;;;;;;23164:31;;:7;:31;:::i;:::-;23154:41;;23230:7;:21;23238:9;23248:1;23238:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23238:12:0;23230:21;;;;;;;;;;;;;23220:31;;:7;:31;:::i;:::-;23210:41;-1:-1:-1;23022:3:0;;;;:::i;:::-;;;;22980:283;;;;23297:7;;23287;;:17;;;;:::i;:::-;23277:7;:27;23273:58;;;23314:7;;23323;;23306:25;;;;;;22823:552;;:::o;23273:58::-;23350:7;;23359;;-1:-1:-1;22823:552:0;-1:-1:-1;22823:552:0:o;23784:126::-;23857:7;23899:3;23884:12;23893:3;23884:6;:12;:::i;:::-;:18;;;;:::i;27867:589::-;28017:16;;;28031:1;28017:16;;;;;;;;27993:21;;28017:16;;;;;;;;;;-1:-1:-1;28017:16:0;27993:40;;28062:4;28044;28049:1;28044:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28044:23:0;;;:7;;;;;;;;;;:23;;;;28088:15;;:22;;;-1:-1:-1;;;28088:22:0;;;;:15;;;;;:20;;:22;;;;;28044:7;;28088:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28078:4;28083:1;28078:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28078:32:0;;;:7;;;;;;;;;:32;28155:15;;28123:62;;28140:4;;28155:15;28173:11;28123:8;:62::i;:::-;28224:15;;:224;;-1:-1:-1;;;28224:224:0;;-1:-1:-1;;;;;28224:15:0;;;;:66;;:224;;28305:11;;28224:15;;28375:4;;28402;;28422:15;;28224:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28464:639;28671:15;;28543:7;;;;28639:62;;28656:4;;-1:-1:-1;;;;;28671:15:0;28689:11;28639:8;:62::i;:::-;28783:15;;28745:16;;;;-1:-1:-1;;;;;28783:15:0;:31;28822:9;28855:4;28875:11;28745:16;;28987:7;1794;1821:6;-1:-1:-1;;;;;1821:6:0;;1756:79;28987:7;28783:252;;;;;;-1:-1:-1;;;;;;28783:252:0;;;-1:-1:-1;;;;;4834:15:1;;;28783:252:0;;;4816:34:1;4866:18;;;4859:34;;;;4909:18;;;4902:34;;;;4952:18;;;4945:34;5016:15;;;4995:19;;;4988:44;29009:15:0;5048:19:1;;;5041:35;4750:19;;28783:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28744:291:0;;;;-1:-1:-1;28464:639:0;-1:-1:-1;;;;;28464:639:0:o;30352:878::-;30451:23;30476:12;30490:18;30512:20;30524:7;30512:11;:20::i;:::-;30450:82;;;;;;30543:19;30565:10;:8;:10::i;:::-;30543:32;;30587:15;30604:23;30629:12;30645:51;30657:7;30666:4;30672:10;30684:11;30645;:51::i;:::-;-1:-1:-1;;;;;30727:15:0;;;;;;:7;:15;;;;;;30586:110;;-1:-1:-1;30586:110:0;;-1:-1:-1;30586:110:0;-1:-1:-1;30727:25:0;;30586:110;;30727:25;:::i;:::-;-1:-1:-1;;;;;30709:15:0;;;;;;:7;:15;;;;;;;;:43;;;;30767:11;:19;;;;;;30763:95;;;-1:-1:-1;;;;;30821:15:0;;;;;;:7;:15;;;;;;:25;;30839:7;;30821:25;:::i;:::-;-1:-1:-1;;;;;30803:15:0;;;;;;:7;:15;;;;;:43;30763:95;-1:-1:-1;;;;;30891:18:0;;;;;;:7;:18;;;;;;:36;;30912:15;;30891:36;:::i;:::-;-1:-1:-1;;;;;30870:18:0;;;;;;:7;:18;;;;;;;;:57;;;;30942:11;:22;;;;;;30938:112;;;-1:-1:-1;;;;;31002:18:0;;;;;;:7;:18;;;;;;:36;;31023:15;;31002:36;:::i;:::-;-1:-1:-1;;;;;30981:18:0;;;;;;:7;:18;;;;;:57;30938:112;31062:66;31081:6;31097:4;31104:10;31116:11;31062:18;:66::i;:::-;31139:23;31151:4;31157;31139:11;:23::i;:::-;31195:9;-1:-1:-1;;;;;31178:44:0;31187:6;-1:-1:-1;;;;;31178:44:0;;31206:15;31178:44;;;;12489:25:1;;12477:2;12462:18;;12444:76;31178:44:0;;;;;;;;30439:791;;;;;;;30352:878;;;:::o;23387:385::-;23504:12;23500:29;;23520:7;;23500:29;23541:15;23559:21;23569:11;23559:7;:21;:::i;:::-;-1:-1:-1;;;;;23605:11:0;;;;;;:7;:11;;;;;;23541:39;;-1:-1:-1;23605:21:0;;23541:39;;23605:21;:::i;:::-;-1:-1:-1;;;;;23591:11:0;;;;;;:7;:11;;;;;;;;:35;;;;23641:11;:15;;;;;;23637:83;;;-1:-1:-1;;;;;23687:11:0;;;;;;:7;:11;;;;;;:21;;23701:7;;23687:21;:::i;:::-;-1:-1:-1;;;;;23673:11:0;;;;;;:7;:11;;;;;:35;23637:83;23752:2;-1:-1:-1;;;;;23735:29:0;23744:6;-1:-1:-1;;;;;23735:29:0;;23756:7;23735:29;;;;12489:25:1;;12477:2;12462:18;;12444:76;23735:29:0;;;;;;;;23489:283;23387:385;;;;;:::o;21634:144::-;21725:4;21715:7;;:14;;;;:::i;:::-;21702:7;:27;21753:10;;:17;;21766:4;;21753:17;:::i;:::-;21740:10;:30;-1:-1:-1;;21634:144:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:2;;;832:1;829;822:12;784:2;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;774:301;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:2;;;1242:1;1239;1232:12;1194:2;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1184:352;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1184:352::o;1541:315::-;1606:6;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:2;;;1683:1;1680;1673:12;1635:2;1722:9;1709:23;1741:31;1766:5;1741:31;:::i;:::-;1791:5;-1:-1:-1;1815:35:1;1846:2;1831:18;;1815:35;:::i;:::-;1805:45;;1625:231;;;;;:::o;1861:315::-;1929:6;1937;1990:2;1978:9;1969:7;1965:23;1961:32;1958:2;;;2006:1;2003;1996:12;1958:2;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1948:228:1:o;2181:615::-;2267:6;2275;2328:2;2316:9;2307:7;2303:23;2299:32;2296:2;;;2344:1;2341;2334:12;2296:2;2384:9;2371:23;2413:18;2454:2;2446:6;2443:14;2440:2;;;2470:1;2467;2460:12;2440:2;2508:6;2497:9;2493:22;2483:32;;2553:7;2546:4;2542:2;2538:13;2534:27;2524:2;;2575:1;2572;2565:12;2524:2;2615;2602:16;2641:2;2633:6;2630:14;2627:2;;;2657:1;2654;2647:12;2627:2;2710:7;2705:2;2695:6;2692:1;2688:14;2684:2;2680:23;2676:32;2673:45;2670:2;;;2731:1;2728;2721:12;2670:2;2762;2754:11;;;;;2784:6;;-1:-1:-1;2286:510:1;;-1:-1:-1;;;;2286:510:1:o;2801:180::-;2857:6;2910:2;2898:9;2889:7;2885:23;2881:32;2878:2;;;2926:1;2923;2916:12;2878:2;2949:26;2965:9;2949:26;:::i;2986:180::-;3045:6;3098:2;3086:9;3077:7;3073:23;3069:32;3066:2;;;3114:1;3111;3104:12;3066:2;-1:-1:-1;3137:23:1;;3056:110;-1:-1:-1;3056:110:1:o;3171:248::-;3236:6;3244;3297:2;3285:9;3276:7;3272:23;3268:32;3265:2;;;3313:1;3310;3303:12;3265:2;3349:9;3336:23;3326:33;;3378:35;3409:2;3398:9;3394:18;3378:35;:::i;3424:248::-;3492:6;3500;3553:2;3541:9;3532:7;3528:23;3524:32;3521:2;;;3569:1;3566;3559:12;3521:2;-1:-1:-1;;3592:23:1;;;3662:2;3647:18;;;3634:32;;-1:-1:-1;3511:161:1:o;3677:306::-;3765:6;3773;3781;3834:2;3822:9;3813:7;3809:23;3805:32;3802:2;;;3850:1;3847;3840:12;3802:2;3879:9;3873:16;3863:26;;3929:2;3918:9;3914:18;3908:25;3898:35;;3973:2;3962:9;3958:18;3952:25;3942:35;;3792:191;;;;;:::o;5513:597::-;5625:4;5654:2;5683;5672:9;5665:21;5715:6;5709:13;5758:6;5753:2;5742:9;5738:18;5731:34;5783:1;5793:140;5807:6;5804:1;5801:13;5793:140;;;5902:14;;;5898:23;;5892:30;5868:17;;;5887:2;5864:26;5857:66;5822:10;;5793:140;;;5951:6;5948:1;5945:13;5942:2;;;6021:1;6016:2;6007:6;5996:9;5992:22;5988:31;5981:42;5942:2;-1:-1:-1;6094:2:1;6073:15;-1:-1:-1;;6069:29:1;6054:45;;;;6101:2;6050:54;;5634:476;-1:-1:-1;;;5634:476:1:o;9578:356::-;9780:2;9762:21;;;9799:18;;;9792:30;9858:34;9853:2;9838:18;;9831:62;9925:2;9910:18;;9752:182::o;12525:980::-;12787:4;12835:3;12824:9;12820:19;12866:6;12855:9;12848:25;12892:2;12930:6;12925:2;12914:9;12910:18;12903:34;12973:3;12968:2;12957:9;12953:18;12946:31;12997:6;13032;13026:13;13063:6;13055;13048:22;13101:3;13090:9;13086:19;13079:26;;13140:2;13132:6;13128:15;13114:29;;13161:1;13171:195;13185:6;13182:1;13179:13;13171:195;;;13250:13;;-1:-1:-1;;;;;13246:39:1;13234:52;;13341:15;;;;13306:12;;;;13282:1;13200:9;13171:195;;;-1:-1:-1;;;;;;;13422:32:1;;;;13417:2;13402:18;;13395:60;-1:-1:-1;;;13486:3:1;13471:19;13464:35;13383:3;12796:709;-1:-1:-1;;;12796:709:1:o;14023:128::-;14063:3;14094:1;14090:6;14087:1;14084:13;14081:2;;;14100:18;;:::i;:::-;-1:-1:-1;14136:9:1;;14071:80::o;14156:217::-;14196:1;14222;14212:2;;14266:10;14261:3;14257:20;14254:1;14247:31;14301:4;14298:1;14291:15;14329:4;14326:1;14319:15;14212:2;-1:-1:-1;14358:9:1;;14202:171::o;14378:168::-;14418:7;14484:1;14480;14476:6;14472:14;14469:1;14466:21;14461:1;14454:9;14447:17;14443:45;14440:2;;;14491:18;;:::i;:::-;-1:-1:-1;14531:9:1;;14430:116::o;14551:125::-;14591:4;14619:1;14616;14613:8;14610:2;;;14624:18;;:::i;:::-;-1:-1:-1;14661:9:1;;14600:76::o;14681:135::-;14720:3;-1:-1:-1;;14741:17:1;;14738:2;;;14761:18;;:::i;:::-;-1:-1:-1;14808:1:1;14797:13;;14728:88::o;14821:127::-;14882:10;14877:3;14873:20;14870:1;14863:31;14913:4;14910:1;14903:15;14937:4;14934:1;14927:15;14953:127;15014:10;15009:3;15005:20;15002:1;14995:31;15045:4;15042:1;15035:15;15069:4;15066:1;15059:15;15085:127;15146:10;15141:3;15137:20;15134:1;15127:31;15177:4;15174:1;15167:15;15201:4;15198:1;15191:15;15349:131;-1:-1:-1;;;;;15424:31:1;;15414:42;;15404:2;;15470:1;15467;15460:12;15404:2;15394:86;:::o

Swarm Source

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