ETH Price: $3,105.85 (+1.22%)
Gas: 7 Gwei

Token

Shiboki (SHIBOKI)
 

Overview

Max Total Supply

10,000,000,000,000 SHIBOKI

Holders

323

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 2 Decimals)

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:
SHIBOKI

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;

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

    event TransferDetails(address indexed from, address indexed to, uint256 total_Amount, uint256 reflected_amount, uint256 total_TransferAmount, uint256 reflected_TransferAmount);
}

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

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


library Address {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }


    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                 assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}



abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    
    function owner() public view virtual returns (address) {
        return _owner;
    }
    
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

interface 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 SHIBOKI is Context, IERC20, Ownable {
    using Address for address;

    mapping (address => uint256) public _balance_reflected;
    mapping (address => uint256) public _balance_total;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    
    bool public blacklistMode = true;
    mapping (address => bool) public isBlacklisted;

    
    // add liquidity and do airdrops
    bool public tradingOpen = false;
    bool public TOBITNA = true;


    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);

    uint8 private   _decimals           = 2;
    uint256 private _supply_total       = 10 * 10**12 * 10**_decimals;
    uint256 private _supply_reflected   = (MAX - (MAX % _supply_total));
    string private  _name               = "Shiboki";
    string private  _symbol             = "SHIBOKI";


    // 0 to disable conversion
    // an integer to convert only fixed number of tokens
    uint256 public _fee_team_convert_limit = _supply_total * 1 / 10000;
    uint256 public _fee_marketing_convert_limit = _supply_total * 2 / 10000;

    // Minimum Balance to maintain
    uint256 public _fee_team_min_bal = 0;
    uint256 public _fee_marketing_min_bal = 0;
    
    //refection fee
    uint256 public _fee_reflection = 2;
    uint256 private _fee_reflection_old = _fee_reflection;
    uint256 private _contractReflectionStored = 0;
    
    // marketing
    uint256 public _fee_marketing = 5;
    uint256 private _fee_marketing_old = _fee_marketing;
    address payable public _wallet_marketing;

    // presale
    address public preseller;    

    // for team, team tax = buyback tax
    uint256 public _fee_team = 2;
    uint256 private _fee_team_old = _fee_team;
    address payable public _wallet_team;
    address payable public _wallet_buyback;

    // Auto LP
    uint256 public _fee_liquidity = 1;
    uint256 private _fee_liquidity_old = _fee_liquidity;

    uint256 public _fee_denominator = 100;
                                     
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxWalletToken = _supply_total;
    uint256 public _maxTxAmount =  _supply_total;

    uint256 public _numTokensSellToAddToLiquidity =  ( _supply_total * 2 ) / 1000;

    uint256 public sellMultiplier = 200;


    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
        
    );

    address PCSRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _balance_reflected[owner()] = _supply_reflected;

        _wallet_marketing = payable(0xd410769Aa6F7Ed8983aF6Ffa501d32AF85ed8177);
        _wallet_team = payable(0x1D667e597d8c8F660a63db47d11Ccfb70d799C99);
        _wallet_buyback = payable(0x6211280782bFc2a7d419f45Dd8b0E27B5d4ccff5);
        
        // Pancakeswap Router Initialization & Pair creation
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(PCSRouter);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[deadAddress] = true;
        
        emit Transfer(address(0), owner(), _supply_total);
    }


/*  CORE INTERFACE FUNCTION */

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _balance_total[account];
        return tokenFromReflection(_balance_reflected[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);

        require (_allowances[sender][_msgSender()] >= amount,"ERC20: transfer amount exceeds allowance");
        
        _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) {
        require (_allowances[_msgSender()][spender] >= subtractedValue,"ERC20: decreased allowance below zero");

        _approve(_msgSender(), spender, (_allowances[_msgSender()][spender] - subtractedValue));
        return true;
    }

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

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    

    // Interface imported from GENx

        function ___tokenInfo () public view returns(
        uint8 Decimals,
        uint256 MaxTxAmount,
        uint256 MaxWalletToken,
        uint256 TotalSupply,
        uint256 Reflected_Supply,
        uint256 Reflection_Rate,
        bool TradingOpen
        ) {
        return (_decimals, _maxTxAmount, _maxWalletToken, _supply_total, _supply_reflected, _getRate(), tradingOpen );
    }

    function ___feesInfo () public view returns(
        
        uint256 NumTokensSellToAddToLiquidity,
        uint256 contractTokenBalance,
        uint256 Reflection_tokens_stored
        ) {
        return (_numTokensSellToAddToLiquidity, balanceOf(address(this)), _contractReflectionStored);
    }

    function ___wallets () public view returns(
        uint256 Reflection_Fees,
        uint256 Liquidity_Fee,
        uint256 Team_Fee,
        uint256 Team_Fee_Convert_Limit,
        uint256 Team_Fee_Minimum_Balance,
        uint256 Marketing_Fee,
        uint256 Marketing_Fee_Convert_Limit,
        uint256 Marketing_Fee_Minimum_Balance
    ) {
        return ( _fee_reflection, _fee_liquidity,
            _fee_team,_fee_team_convert_limit,_fee_team_min_bal,
            _fee_marketing,_fee_marketing_convert_limit, _fee_marketing_min_bal);
    }

/*  Wallet Management  */

    function Change_Wallet_Marketing (address newWallet) external onlyOwner() {
        _wallet_marketing = payable(newWallet);
    }

    function Change_Wallet_Presale (address newWallet) external onlyOwner() {
        preseller = payable(newWallet);
        _isExcludedFromFee[preseller] = true;
        _isExcluded[preseller] = true;
    }

    function Change_Wallet_Team (address newWallet) external onlyOwner() {
        _wallet_team = payable(newWallet);
    }

    function Change_Wallet_buyback (address newWallet) external onlyOwner() {
        _wallet_buyback = payable(newWallet);
    }


/* Interface Read & Write Functions --- Reflection Specific */

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,,) = _getValues(tAmount,false);
        _balance_reflected[sender] = _balance_reflected[sender] - rAmount;
        _supply_reflected = _supply_reflected - rAmount;
        _contractReflectionStored = _contractReflectionStored + tAmount;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _supply_total, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,,) = _getValues(tAmount,false);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,,) = _getValues(tAmount,false);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _supply_reflected, "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(_balance_reflected[account] > 0) {
            _balance_total[account] = tokenFromReflection(_balance_reflected[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _balance_total[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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


/* Interface Read & Write Functions */

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    function tradingStatus_TOBITNA(bool _status) public onlyOwner {
         TOBITNA = _status;
    }

    
    //set the number of tokens required to activate auto-liquidity
    function setNumTokensSellToAddToLiquidityt(uint256 numTokensSellToAddToLiquidity) external onlyOwner() {
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }
    
    //set the Max transaction amount (percent of total supply)
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = (_supply_total * maxTxPercent ) / 100;
    }
    
    //set the Max transaction amount (in tokens)
     function setMaxTxTokens(uint256 maxTxTokens) external onlyOwner() {
        _maxTxAmount = maxTxTokens;
    }
    
    //settting the maximum permitted wallet holding (percent of total supply)
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = (_supply_total * maxWallPercent ) / 100;
    }
    
    //settting the maximum permitted wallet holding (in tokens)
     function setMaxWalletTokens(uint256 maxWallTokens) external onlyOwner() {
        _maxWalletToken = maxWallTokens;
    }
    
    
    
    //toggle on and off to activate auto liquidity 
    function setSwapAndLiquifyEnabled(bool _status) public onlyOwner {
        swapAndLiquifyEnabled = _status;
        emit SwapAndLiquifyEnabledUpdated(_status);
    }
    

/** All list management functions BEGIN*/

    function enable_blacklist(bool _status) public onlyOwner {
        blacklistMode = _status;
    }

    function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }
    }


    function s_excludeFromFee(address[] calldata addresses, bool status) external onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = status;
        }
    }
    

    /** All list management functions END*/




/* Airdrop Begins */

// NOTE: need to manually supply high gas incase this list is > 100 addresses
 function multitransfer(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

    uint256 showerCapacity = 0;
    uint256 reflectRate = _getRate();
    require(addresses.length == tokens.length,"Mismatch between Address and token count");


    for(uint i=0; i < addresses.length; i++){
        showerCapacity = showerCapacity + tokens[i];
    }

    require(balanceOf(msg.sender) >= showerCapacity, "Not enough tokens to airdrop");

     // Update reflected Balance for sender
    _balance_reflected[from]    = _balance_reflected[from]  - showerCapacity * reflectRate ;

    // Only update actual balance of sender if he's excluded from rewards
    if (_isExcluded[from]){
        _balance_total[from]    = _balance_total[from]      - showerCapacity;
    }

    for(uint i=0; i < addresses.length; i++){
        
        // Only update actual balance of recipient if he's excluded from rewards
        if (_isExcluded[addresses[i]]){
            _balance_total[addresses[i]]      = _balance_total[addresses[i]]        + tokens[i]; 
        }

        // update reflected balance of receipient
        _balance_reflected[addresses[i]]      = _balance_reflected[addresses[i]]    + tokens[i] * reflectRate;

        emit Transfer(from,addresses[i],tokens[i]);

    }

}


// Liquidity and contract Balance functions

// convert all stored tokens for LP into LP Pairs
    function convertLiquidityBalance(uint256 tokensToConvert) public onlyOwner {

        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount - 1;
        }

        if(tokensToConvert == 0 || tokensToConvert > contractTokenBalance){
            tokensToConvert = contractTokenBalance;
        }
        swapAndLiquify(tokensToConvert);
    }

// convert all stored tokens for LP into LP Pairs
    function purgeContractBalance() public {
        require(msg.sender == owner() || msg.sender == _wallet_marketing, "Not authorized to perform this");
         _wallet_marketing.transfer(address(this).balance);
    }


// Reflect Finance core code

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _supply_reflected;
        uint256 tSupply = _supply_total;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_balance_reflected[_excluded[i]] > rSupply || _balance_total[_excluded[i]] > tSupply) return (_supply_reflected, _supply_total);
            rSupply = rSupply - _balance_reflected[_excluded[i]];
            tSupply = tSupply - _balance_total[_excluded[i]];
        }
        if (rSupply < (_supply_reflected/_supply_total)) return (_supply_reflected, _supply_total);
        return (rSupply, tSupply);
    }


    function _getValues(uint256 tAmount, bool isSell) private view returns (
        uint256 rAmount, uint256 rTransferAmount, uint256 rReflection,
        uint256 tTransferAmount, uint256 tMarketing, uint256 tLiquidity, uint256 tTeam, uint256 tReflection) {

        uint256 multiplier = isSell ? sellMultiplier : 100;

        tMarketing       = ( tAmount * _fee_marketing ) * multiplier / (_fee_denominator * 100);
        tLiquidity      = ( tAmount * _fee_liquidity ) * multiplier / (_fee_denominator * 100);
        tTeam           = ( tAmount * _fee_team * 2 ) * multiplier / (_fee_denominator * 100); // taken 2x, one for buyback, one for team, to avoid stack too deep error with too many taxes/variables
        tReflection     = ( tAmount * _fee_reflection ) * multiplier  / (_fee_denominator * 100);

        tTransferAmount = tAmount - ( tMarketing + tLiquidity + tTeam + tReflection);

        rReflection     = tReflection * _getRate();

        rAmount         = tAmount * _getRate();

        rTransferAmount = tTransferAmount * _getRate();

    }



    function _fees_to_bnb_process( address payable wallet, uint256 tokensToConvert) private lockTheSwap {

        uint256 rTokensToConvert = tokensToConvert * _getRate();

        _balance_reflected[wallet]    = _balance_reflected[wallet]  - rTokensToConvert;
        if (_isExcluded[wallet]){
            _balance_total[wallet]    = _balance_total[wallet]      - tokensToConvert;
        }
        _balance_reflected[address(this)]      = _balance_reflected[address(this)]    + rTokensToConvert;

        emit Transfer(wallet, address(this), tokensToConvert);

        swapTokensForEthAndSend(tokensToConvert,wallet);

    }


// Fee & Wallet Related

    function _fees_to_bnb(uint256 tokensToConvert, address payable feeWallet, uint256 minBalanceToKeep) private {
        // case 1: 0 tokens to convert, exit the function
        // case 2: tokens to convert are more than the max limit
        
        if(tokensToConvert == 0){
            return;
        } 

        if(tokensToConvert > _maxTxAmount){
            tokensToConvert = _maxTxAmount;
        }

        if((tokensToConvert+minBalanceToKeep)  <= balanceOf(feeWallet)){
            _fees_to_bnb_process(feeWallet,tokensToConvert);
        }
    }

    function _takeFee(uint256 feeAmount, address receiverWallet) private {
        uint256 reflectedReeAmount = feeAmount * _getRate();
        _balance_reflected[receiverWallet] = _balance_reflected[receiverWallet] + reflectedReeAmount;


        if(_isExcluded[receiverWallet]){
            _balance_total[receiverWallet] = _balance_total[receiverWallet] + feeAmount;
        }
        if(feeAmount > 0){
            emit Transfer(msg.sender, receiverWallet, feeAmount);    
        }
        
    }

// Made all parameters in alphabetical order
    function _setAllFees(uint256 marketingFee, uint256 liquidityFees, uint256 teamFee, uint256 reflectionFees) private {
        _fee_marketing      = marketingFee;
        _fee_liquidity      = liquidityFees;
        _fee_team           = teamFee;
        _fee_reflection     = reflectionFees;
        
    }

    function set_sell_multiplier(uint256 Multiplier) external onlyOwner{
        sellMultiplier = Multiplier;        
    }

    function set_All_Fees_Triggers(uint256 marketing_fee_convert_limit, uint256 team_fee_convert_limit) external onlyOwner {
        _fee_marketing_convert_limit      = marketing_fee_convert_limit;
        _fee_team_convert_limit         = team_fee_convert_limit;   
    }

    function set_All_Fees_Minimum_Balance(uint256 marketing_fee_minimum_balance, uint256 team_fee_minimum_balance) external onlyOwner {
        _fee_team_min_bal       = team_fee_minimum_balance;
        _fee_marketing_min_bal    = marketing_fee_minimum_balance;
    }

    function set_All_Fees(uint256 Team_Fee, uint256 Liquidity_Fees, uint256 Reflection_Fees, uint256 MarketingFee) external onlyOwner {
        uint256 total_fees =  MarketingFee + Liquidity_Fees +  Team_Fee + Reflection_Fees;
        require(total_fees < 4000, "Cannot set fees this high, pancake swap will hate us!");
        _setAllFees( MarketingFee, Liquidity_Fees, Team_Fee, Reflection_Fees);
    }


    function removeAllFee() private {
        _fee_marketing_old        = _fee_marketing;
        _fee_liquidity_old      = _fee_liquidity;
        _fee_team_old           = _fee_team;
        _fee_reflection_old     = _fee_reflection;

        _setAllFees(0,0,0,0);
    }
    
    function restoreAllFee() private {
        _setAllFees(_fee_marketing_old, _fee_liquidity_old, _fee_team_old, _fee_reflection_old);
    }


    // this one reduces supply
    function burn_tokens_reduce_supply(address wallet, uint256 tokensToConvert) external {

        require(msg.sender == owner() || msg.sender == wallet, "Not authorized to burn");

        uint256 rTokensToConvert = tokensToConvert * _getRate();

        _balance_reflected[wallet]    = _balance_reflected[wallet]  - rTokensToConvert;
        if (_isExcluded[wallet]){
            _balance_total[wallet]    = _balance_total[wallet]      - tokensToConvert;
        }

        _supply_total = _supply_total - tokensToConvert;
        _supply_reflected = _supply_reflected - rTokensToConvert;

        emit Transfer(wallet, address(this), tokensToConvert);

    }

    // this one sends to dead address
    function burn_tokens_to_dead(address wallet, uint256 tokensToConvert) external {

        require(msg.sender == owner() || msg.sender == wallet, "Not authorized to burn");

        uint256 rTokensToConvert = tokensToConvert * _getRate();

        _balance_reflected[wallet]          = _balance_reflected[wallet]  - rTokensToConvert;
        if (_isExcluded[wallet]){
            _balance_total[wallet]          = _balance_total[wallet]      - tokensToConvert;
        }

        if (_isExcluded[deadAddress]){
            _balance_total[deadAddress]     = _balance_total[deadAddress]        + tokensToConvert;  
        }

        // update reflected balance of receipient
        _balance_reflected[deadAddress]     = _balance_reflected[deadAddress]    + rTokensToConvert;

        emit Transfer(wallet, deadAddress, tokensToConvert);

    }


// Liquidity functions

    function swapAndLiquify(uint256 tokensToSwap) private lockTheSwap {
        
            uint256 tokensHalf = tokensToSwap/2;
            uint256 contractBnbBalance = address(this).balance;

            swapTokensForEth(tokensHalf);
            
            uint256 bnbSwapped = address(this).balance - contractBnbBalance;

            addLiquidity(tokensHalf,bnbSwapped);

            emit SwapAndLiquify(tokensToSwap, tokensHalf, bnbSwapped);    

    }

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

    function swapTokensForEthAndSend(uint256 tokenAmount, address payable receiverWallet) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiverWallet,
            block.timestamp
        );
    }


    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }


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

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


    // All transfer functions

    function _transfer(address from, address to, uint256 amount) private {

        if (to != owner() && to != address(this)  && to != address(deadAddress) && to != uniswapV2Pair && to != _wallet_marketing && to != _wallet_team){
            uint256 heldTokens = balanceOf(to);
            require((heldTokens + amount) <= _maxWalletToken, "Total Holding is currently limited");}
        
        if(from != owner() && to != owner() && from != preseller){
            require(tradingOpen,"Trading not open yet");
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

            if(TOBITNA && from == uniswapV2Pair){
                isBlacklisted[to] = true;
            }
        }

        // Blacklist
        if(blacklistMode){
            require(!isBlacklisted[from],"Blacklisted");    
        }


        // extra bracket to supress stack too deep error
        {
            uint256 contractTokenBalance = balanceOf(address(this));
        
            if(contractTokenBalance >= _maxTxAmount) {
                contractTokenBalance = _maxTxAmount - 1;
            }
            
            bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity;
            if (overMinTokenBalance &&
                !inSwapAndLiquify &&
                from != uniswapV2Pair &&
                swapAndLiquifyEnabled
            ) {
                contractTokenBalance = _numTokensSellToAddToLiquidity;
                swapAndLiquify(contractTokenBalance);
            }

            // Convert fees to BNB
            if(!inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled){
                _fees_to_bnb(_fee_team_convert_limit,_wallet_team, _fee_team_min_bal);
                _fees_to_bnb(_fee_team_convert_limit,_wallet_buyback, _fee_team_min_bal);
                _fees_to_bnb(_fee_marketing_convert_limit,_wallet_marketing, _fee_marketing_min_bal);
            }
            
        }
        // extra useless ugly brackets ends
        
        
        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        if(!takeFee){
            removeAllFee();
        }
        
        // Get all tranfer values        
        (uint256 rAmount, uint256 rTransferAmount, uint256 rReflection, uint256 tTransferAmount, uint256 tMarketing, uint256 tLiquidity, uint256 tTeam,  uint256 tReflection) = _getValues(amount, (to == uniswapV2Pair));


        _transferStandard(from,to,amount,rAmount,tTransferAmount, rTransferAmount);
       
        // update reflections
        _supply_reflected = _supply_reflected - rReflection;
        _contractReflectionStored = _contractReflectionStored + tReflection;

        if(!takeFee){
            restoreAllFee();
        } else{
            _takeFee(tMarketing,_wallet_marketing);
            _takeFee(tLiquidity,address(this));
            _takeFee(tTeam/2,_wallet_team);
            _takeFee(tTeam/2,_wallet_buyback);
        }

    }

    function _transferStandard(address from, address to, uint256 tAmount, uint256 rAmount, uint256 tTransferAmount, uint256 rTransferAmount) private {
         // Update reflected Balance for sender
        _balance_reflected[from]    = _balance_reflected[from]  - rAmount;


        // Only update actual balance of sender if he's excluded from rewards
        if (_isExcluded[from]){
            _balance_total[from]    = _balance_total[from]      - tAmount;
        }

        // Only update actual balance of recipient if he's excluded from rewards
        if (_isExcluded[to]){
            _balance_total[to]      = _balance_total[to]        + tTransferAmount;  
        }

        // update reflected balance of receipient
        _balance_reflected[to]      = _balance_reflected[to]    + rTransferAmount;

        emit Transfer(from, to, tTransferAmount);
      
      //  emit TransferDetails(from, to, tAmount, rAmount, tTransferAmount, rTransferAmount);
    }

    //receive BNB from PancakeSwap Router
    receive() external payable {}



}

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":"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":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"total_Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflected_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total_TransferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflected_TransferAmount","type":"uint256"}],"name":"TransferDetails","type":"event"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"Change_Wallet_Marketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"Change_Wallet_Presale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"Change_Wallet_Team","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"Change_Wallet_buyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TOBITNA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"___feesInfo","outputs":[{"internalType":"uint256","name":"NumTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"internalType":"uint256","name":"Reflection_tokens_stored","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"___tokenInfo","outputs":[{"internalType":"uint8","name":"Decimals","type":"uint8"},{"internalType":"uint256","name":"MaxTxAmount","type":"uint256"},{"internalType":"uint256","name":"MaxWalletToken","type":"uint256"},{"internalType":"uint256","name":"TotalSupply","type":"uint256"},{"internalType":"uint256","name":"Reflected_Supply","type":"uint256"},{"internalType":"uint256","name":"Reflection_Rate","type":"uint256"},{"internalType":"bool","name":"TradingOpen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"___wallets","outputs":[{"internalType":"uint256","name":"Reflection_Fees","type":"uint256"},{"internalType":"uint256","name":"Liquidity_Fee","type":"uint256"},{"internalType":"uint256","name":"Team_Fee","type":"uint256"},{"internalType":"uint256","name":"Team_Fee_Convert_Limit","type":"uint256"},{"internalType":"uint256","name":"Team_Fee_Minimum_Balance","type":"uint256"},{"internalType":"uint256","name":"Marketing_Fee","type":"uint256"},{"internalType":"uint256","name":"Marketing_Fee_Convert_Limit","type":"uint256"},{"internalType":"uint256","name":"Marketing_Fee_Minimum_Balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balance_reflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balance_total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_liquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_marketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_marketing_convert_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_marketing_min_bal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_reflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_team","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_team_convert_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fee_team_min_bal","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":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallet_buyback","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallet_marketing","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallet_team","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":"blacklistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"tokensToConvert","type":"uint256"}],"name":"burn_tokens_reduce_supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"tokensToConvert","type":"uint256"}],"name":"burn_tokens_to_dead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokensToConvert","type":"uint256"}],"name":"convertLiquidityBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enable_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multitransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preseller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purgeContractBalance","outputs":[],"stateMutability":"nonpayable","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":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"s_excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxTokens","type":"uint256"}],"name":"setMaxTxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallTokens","type":"uint256"}],"name":"setMaxWalletTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidityt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Team_Fee","type":"uint256"},{"internalType":"uint256","name":"Liquidity_Fees","type":"uint256"},{"internalType":"uint256","name":"Reflection_Fees","type":"uint256"},{"internalType":"uint256","name":"MarketingFee","type":"uint256"}],"name":"set_All_Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing_fee_minimum_balance","type":"uint256"},{"internalType":"uint256","name":"team_fee_minimum_balance","type":"uint256"}],"name":"set_All_Fees_Minimum_Balance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing_fee_convert_limit","type":"uint256"},{"internalType":"uint256","name":"team_fee_convert_limit","type":"uint256"}],"name":"set_All_Fees_Triggers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Multiplier","type":"uint256"}],"name":"set_sell_multiplier","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":"view","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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus_TOBITNA","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]

60c06040526006805460ff199081166001179091556008805461ffff1916610100179055600a8054909116600290811782556200003c91620006e3565b6200004e906509184e72a000620006fb565b600b819055620000619060001962000733565b6200006f906000196200074a565b600c5560408051808201909152600780825266536869626f6b6960c81b6020909201918252620000a291600d9162000528565b5060408051808201909152600780825266534849424f4b4960c81b6020909201918252620000d391600e9162000528565b50612710600b546001620000e89190620006fb565b620000f4919062000764565b600f55612710600b5460026200010b9190620006fb565b62000117919062000764565b60105560006011819055601281905560026013819055601481905560159190915560056016819055601755601a819055601b8190556001601e819055601f5560646020556021805461ff001916610100179055600b54602281905560238190556103e891620001879190620006fb565b62000193919062000764565b60245560c8602555602680546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d179091556027805490911661dead179055348015620001de57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600c5460016000620002386000546001600160a01b031690565b6001600160a01b039081168252602080830193909352604091820160002093909355601880546001600160a01b031990811673d410769aa6f7ed8983af6ffa501d32af85ed817717909155601c80548216731d667e597d8c8f660a63db47d11ccfb70d799c99179055601d8054909116736211280782bfc2a7d419f45dd8b0e27b5d4ccff5179055602654815163c45a015560e01b81529151931692839263c45a01559260048082019391829003018186803b158015620002f857600080fd5b505afa1580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033391906200077b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037c57600080fd5b505afa15801562000391573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b791906200077b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200040057600080fd5b505af115801562000415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043b91906200077b565b6001600160a01b0390811660a0528116608052600160046000620004676000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526004909352818320805485166001908117909155602754909116835291208054909216179055620004d16000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200051991815260200190565b60405180910390a350620007e3565b8280546200053690620007a6565b90600052602060002090601f0160209004810192826200055a5760008555620005a5565b82601f106200057557805160ff1916838001178555620005a5565b82800160010185558215620005a5579182015b82811115620005a557825182559160200191906001019062000588565b50620005b3929150620005b7565b5090565b5b80821115620005b35760008155600101620005b8565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000625578160001904821115620006095762000609620005ce565b808516156200061757918102915b93841c9390800290620005e9565b509250929050565b6000826200063e57506001620006dd565b816200064d57506000620006dd565b8160018114620006665760028114620006715762000691565b6001915050620006dd565b60ff841115620006855762000685620005ce565b50506001821b620006dd565b5060208310610133831016604e8410600b8410161715620006b6575081810a620006dd565b620006c28383620005e4565b8060001904821115620006d957620006d9620005ce565b0290505b92915050565b6000620006f460ff8416836200062d565b9392505050565b6000816000190483118215151615620007185762000718620005ce565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200074557620007456200071d565b500690565b6000828210156200075f576200075f620005ce565b500390565b6000826200077657620007766200071d565b500490565b6000602082840312156200078e57600080fd5b81516001600160a01b0381168114620006f457600080fd5b600181811c90821680620007bb57607f821691505b60208210811415620007dd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516143d9620008646000396000818161087101528181612c7001528181612e9801528181612fb10152818161301c015261315301526000818161065c015281816138e9015281816139b1015281816139ed01528181613a6701528181613a8e01528181613d1e01528181613de60152613e2201526143d96000f3fe6080604052600436106104d55760003560e01c806370a0823111610279578063b34b8ca31161015e578063d61df083116100d6578063fba206c31161008a578063fe575a871161006f578063fe575a8714610e6e578063fed0d2a114610e9e578063ffb54a9914610eb457600080fd5b8063fba206c314610e43578063fd748c3014610e5857600080fd5b8063dd62ed3e116100bb578063dd62ed3e14610dbd578063ec72d65f14610e03578063f2fde38b14610e2357600080fd5b8063d61df08314610d7d578063d7c48e2b14610d9d57600080fd5b8063c49b9a801161012d578063ccc569df11610112578063ccc569df14610d1e578063d10ae16514610d3e578063d543dbeb14610d5d57600080fd5b8063c49b9a8014610ce8578063cc884f7314610d0857600080fd5b8063b34b8ca314610c86578063b3f22ce314610ca6578063b839257614610cbc578063b85f117514610cd257600080fd5b80638d55f905116101f157806395d89b41116101c0578063a7eb8ee8116101a5578063a7eb8ee814610c19578063a9059cbb14610c39578063b1eb20e914610c5957600080fd5b806395d89b4114610be4578063a457c2d714610bf957600080fd5b80638d55f90514610b705780638da5cb5b14610b905780638e2eee8414610bae578063910fb00814610bce57600080fd5b80638097e6971161024857806388f820201161022d57806388f8202014610afd578063896648c114610b365780638b5d7de214610b5057600080fd5b80638097e69714610abd57806382bf293c14610add57600080fd5b806370a0823114610a5157806378109e5414610a715780637ceb35b814610a875780637d1db4a514610aa757600080fd5b8063313ce567116103ba5780634a74bb021161033257806360e4868f116102e6578063635ca7e0116102cb578063635ca7e0146109b1578063666a245d146109d157806367dc9e92146109f157600080fd5b806360e4868f1461094b578063617c62a11461096157600080fd5b80635342acb4116103175780635342acb4146108d25780635cfd7df41461090b5780635e562f3b1461092b57600080fd5b80634a74bb021461089357806352390c02146108b257600080fd5b806339509351116103895780633d61e69e1161036e5780633d61e69e1461081f5780634549b0391461083f57806349bd5a5e1461085f57600080fd5b806339509351146107df5780633bd5d173146107ff57600080fd5b8063313ce5671461076757806333a06c94146107895780633417ab1d146107a95780633685d419146107bf57600080fd5b806313114a9d1161044d578063227b55d71161041c57806328e2eaab1161040157806328e2eaab1461071b57806329138c88146107315780632d8381191461074757600080fd5b8063227b55d7146106db57806323b872dd146106fb57600080fd5b806313114a9d146106355780631694505e1461064a57806318160ddd146106965780631c3c4fec146106ab57600080fd5b806306fdde03116104a45780630b8df8e3116104895780630b8df8e3146105d55780630d295980146105f55780630fec5dd01461061557600080fd5b806306fdde0314610583578063095ea7b3146105a557600080fd5b8063053cfa25146104e157806306d94b0b1461052157806306e6ce751461054357806306f3a47b1461056357600080fd5b366104dc57005b600080fd5b3480156104ed57600080fd5b5061050e6104fc366004613eac565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561052d57600080fd5b5061054161053c366004613ec9565b610ece565b005b34801561054f57600080fd5b5061054161055e366004613f56565b61104e565b34801561056f57600080fd5b5061054161057e366004613faa565b61110b565b34801561058f57600080fd5b5061059861115b565b6040516105189190613fcc565b3480156105b157600080fd5b506105c56105c0366004613ec9565b6111ed565b6040519015158152602001610518565b3480156105e157600080fd5b506105416105f0366004613eac565b611204565b34801561060157600080fd5b50610541610610366004614021565b61126e565b34801561062157600080fd5b5061054161063036600461403c565b6112c9565b34801561064157600080fd5b5060155461050e565b34801561065657600080fd5b5061067e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610518565b3480156106a257600080fd5b50600b5461050e565b3480156106b757600080fd5b506106c0611316565b60408051938452602084019290925290820152606001610518565b3480156106e757600080fd5b506105416106f6366004613eac565b611335565b34801561070757600080fd5b506105c5610716366004614055565b61139f565b34801561072757600080fd5b5061050e60125481565b34801561073d57600080fd5b5061050e601a5481565b34801561075357600080fd5b5061050e61076236600461403c565b61148a565b34801561077357600080fd5b50600a5460405160ff9091168152602001610518565b34801561079557600080fd5b50601d5461067e906001600160a01b031681565b3480156107b557600080fd5b5061050e60105481565b3480156107cb57600080fd5b506105416107da366004613eac565b611521565b3480156107eb57600080fd5b506105c56107fa366004613ec9565b6116f6565b34801561080b57600080fd5b5061054161081a36600461403c565b61172d565b34801561082b57600080fd5b5061054161083a366004614021565b611830565b34801561084b57600080fd5b5061050e61085a366004614096565b611892565b34801561086b57600080fd5b5061067e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561089f57600080fd5b506021546105c590610100900460ff1681565b3480156108be57600080fd5b506105416108cd366004613eac565b611927565b3480156108de57600080fd5b506105c56108ed366004613eac565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561091757600080fd5b5061054161092636600461403c565b611a98565b34801561093757600080fd5b50610541610946366004614021565b611ae5565b34801561095757600080fd5b5061050e600f5481565b34801561096d57600080fd5b50610976611b40565b6040805160ff90981688526020880196909652948601939093526060850191909152608084015260a0830152151560c082015260e001610518565b3480156109bd57600080fd5b506105416109cc366004613eac565b611b8c565b3480156109dd57600080fd5b5060185461067e906001600160a01b031681565b3480156109fd57600080fd5b50601354601e54601a54600f54601154601654601054601254604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610518565b348015610a5d57600080fd5b5061050e610a6c366004613eac565b611c2d565b348015610a7d57600080fd5b5061050e60225481565b348015610a9357600080fd5b50610541610aa2366004613eac565b611c8c565b348015610ab357600080fd5b5061050e60235481565b348015610ac957600080fd5b50610541610ad836600461403c565b611cf6565b348015610ae957600080fd5b50610541610af836600461403c565b611d43565b348015610b0957600080fd5b506105c5610b18366004613eac565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b4257600080fd5b506006546105c59060ff1681565b348015610b5c57600080fd5b50601c5461067e906001600160a01b031681565b348015610b7c57600080fd5b50610541610b8b3660046140c2565b611dab565b348015610b9c57600080fd5b506000546001600160a01b031661067e565b348015610bba57600080fd5b50610541610bc9366004613f56565b611eaa565b348015610bda57600080fd5b5061050e601e5481565b348015610bf057600080fd5b50610598611f61565b348015610c0557600080fd5b506105c5610c14366004613ec9565b611f70565b348015610c2557600080fd5b50610541610c34366004613faa565b61203f565b348015610c4557600080fd5b506105c5610c54366004613ec9565b612092565b348015610c6557600080fd5b5061050e610c74366004613eac565b60016020526000908152604090205481565b348015610c9257600080fd5b50610541610ca136600461403c565b61209f565b348015610cb257600080fd5b5061050e60245481565b348015610cc857600080fd5b5061050e60165481565b348015610cde57600080fd5b5061050e60135481565b348015610cf457600080fd5b50610541610d03366004614021565b61212d565b348015610d1457600080fd5b5061050e60115481565b348015610d2a57600080fd5b50610541610d393660046140f4565b6121c9565b348015610d4a57600080fd5b506008546105c590610100900460ff1681565b348015610d6957600080fd5b50610541610d7836600461403c565b61263a565b348015610d8957600080fd5b50610541610d98366004613ec9565b6126a2565b348015610da957600080fd5b5060195461067e906001600160a01b031681565b348015610dc957600080fd5b5061050e610dd8366004614177565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610e0f57600080fd5b50610541610e1e36600461403c565b61289c565b348015610e2f57600080fd5b50610541610e3e366004613eac565b6128e9565b348015610e4f57600080fd5b50610541612a08565b348015610e6457600080fd5b5061050e60205481565b348015610e7a57600080fd5b506105c5610e89366004613eac565b60076020526000908152604090205460ff1681565b348015610eaa57600080fd5b5061050e60255481565b348015610ec057600080fd5b506008546105c59060ff1681565b6000546001600160a01b0316331480610eef5750336001600160a01b038316145b610f405760405162461bcd60e51b815260206004820152601660248201527f4e6f7420617574686f72697a656420746f206275726e0000000000000000000060448201526064015b60405180910390fd5b6000610f4a612ab3565b610f5490836141c6565b6001600160a01b038416600090815260016020526040902054909150610f7b9082906141e5565b6001600160a01b03841660009081526001602090815260408083209390935560059052205460ff1615610fe6576001600160a01b038316600090815260026020526040902054610fcc9083906141e5565b6001600160a01b0384166000908152600260205260409020555b81600b54610ff491906141e5565b600b55600c546110059082906141e5565b600c5560405182815230906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050565b6000546001600160a01b031633146110965760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60005b828110156111055781600460008686858181106110b8576110b86141fc565b90506020020160208101906110cd9190613eac565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556110fe81614212565b9050611099565b50505050565b6000546001600160a01b031633146111535760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601155601255565b6060600d805461116a9061422d565b80601f01602080910402602001604051908101604052809291908181526020018280546111969061422d565b80156111e35780601f106111b8576101008083540402835291602001916111e3565b820191906000526020600020905b8154815290600101906020018083116111c657829003601f168201915b5050505050905090565b60006111fa338484612ad6565b5060015b92915050565b6000546001600160a01b0316331461124c5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112b65760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146113115760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602255565b600080600060245461132730611c2d565b601554925092509250909192565b6000546001600160a01b0316331461137d5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006113ac848484612c26565b6001600160a01b03841660009081526003602090815260408083203384529091529020548211156114455760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610f37565b6001600160a01b03841660009081526003602090815260408083203380855292529091205461148091869161147b9086906141e5565b612ad6565b5060019392505050565b6000600c548211156115045760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610f37565b600061150e612ab3565b905061151a8184614268565b9392505050565b6000546001600160a01b031633146115695760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6001600160a01b03811660009081526005602052604090205460ff166115d15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610f37565b60005b6009548110156116f257816001600160a01b0316600982815481106115fb576115fb6141fc565b6000918252602090912001546001600160a01b031614156116e05760098054611626906001906141e5565b81548110611636576116366141fc565b600091825260209091200154600980546001600160a01b039092169183908110611662576116626141fc565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560098054806116ba576116ba61428a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806116ea81614212565b9150506115d4565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916111fa91859061147b9086906142a0565b3360008181526005602052604090205460ff16156117b35760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610f37565b60006117c083600061324a565b5050506001600160a01b0387166000908152600160205260409020549495506117f09486945092506141e5915050565b6001600160a01b038316600090815260016020526040902055600c546118179082906141e5565b600c556015546118289084906142a0565b601555505050565b6000546001600160a01b031633146118785760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b600880549115156101000261ff0019909216919091179055565b6000600b548311156118e65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f37565b816119095760006118f884600061324a565b509597506111fe9650505050505050565b600061191684600061324a565b509497506111fe9650505050505050565b6000546001600160a01b0316331461196f5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6001600160a01b03811660009081526005602052604090205460ff16156119d85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f37565b6001600160a01b03811660009081526001602052604090205415611a32576001600160a01b038116600090815260016020526040902054611a189061148a565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b03163314611ae05760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602355565b6000546001600160a01b03163314611b2d5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6006805460ff1916911515919091179055565b6000806000806000806000600a60009054906101000a900460ff16602354602254600b54600c54611b6f612ab3565b600854959d949c50929a509098509650945060ff90911692509050565b6000546001600160a01b03163314611bd45760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601980546001600160a01b0319166001600160a01b0392831690811782556000908152600460209081526040808320805460ff199081166001908117909255945490951683526005909152902080549091169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615611c6a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546111fe9061148a565b6000546001600160a01b03163314611cd45760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d3e5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602455565b6000546001600160a01b03163314611d8b5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b606481600b54611d9b91906141c6565b611da59190614268565b60225550565b6000546001600160a01b03163314611df35760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60008285611e0186856142a0565b611e0b91906142a0565b611e1591906142a0565b9050610fa08110611e8e5760405162461bcd60e51b815260206004820152603560248201527f43616e6e6f74207365742066656573207468697320686967682c2070616e636160448201527f6b6520737761702077696c6c20686174652075732100000000000000000000006064820152608401610f37565b6016829055601e849055601a85905560138390555b5050505050565b6000546001600160a01b03163314611ef25760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60005b82811015611105578160076000868685818110611f1457611f146141fc565b9050602002016020810190611f299190613eac565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611f5a81614212565b9050611ef5565b6060600e805461116a9061422d565b3360009081526003602090815260408083206001600160a01b03861684529091528120548211156120095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610f37565b3360008181526003602090815260408083206001600160a01b03881684529091529020546111fa9190859061147b9086906141e5565b6000546001600160a01b031633146120875760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601091909155600f55565b60006111fa338484612c26565b6000546001600160a01b031633146120e75760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60006120f230611c2d565b9050602354811061210f57600160235461210c91906141e5565b90505b81158061211b57508082115b15612124578091505b6116f2826133bb565b6000546001600160a01b031633146121755760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602180548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906121be90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146122115760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60008061221c612ab3565b90508483146122935760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60448201527f656e20636f756e740000000000000000000000000000000000000000000000006064820152608401610f37565b60005b858110156122d6578484828181106122b0576122b06141fc565b90506020020135836122c291906142a0565b9250806122ce81614212565b915050612296565b50816122e133611c2d565b101561232f5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f70000000006044820152606401610f37565b61233981836141c6565b6001600160a01b03881660009081526001602052604090205461235c91906141e5565b6001600160a01b03881660009081526001602090815260408083209390935560059052205460ff16156123c7576001600160a01b0387166000908152600260205260409020546123ad9083906141e5565b6001600160a01b0388166000908152600260205260409020555b60005b8581101561263057600560008888848181106123e8576123e86141fc565b90506020020160208101906123fd9190613eac565b6001600160a01b0316815260208101919091526040016000205460ff16156124d457848482818110612431576124316141fc565b905060200201356002600089898581811061244e5761244e6141fc565b90506020020160208101906124639190613eac565b6001600160a01b03166001600160a01b031681526020019081526020016000205461248e91906142a0565b600260008989858181106124a4576124a46141fc565b90506020020160208101906124b99190613eac565b6001600160a01b031681526020810191909152604001600020555b818585838181106124e7576124e76141fc565b905060200201356124f891906141c6565b6001600089898581811061250e5761250e6141fc565b90506020020160208101906125239190613eac565b6001600160a01b03166001600160a01b031681526020019081526020016000205461254e91906142a0565b60016000898985818110612564576125646141fc565b90506020020160208101906125799190613eac565b6001600160a01b031681526020810191909152604001600020558686828181106125a5576125a56141fc565b90506020020160208101906125ba9190613eac565b6001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878785818110612600576126006141fc565b9050602002013560405161261691815260200190565b60405180910390a38061262881614212565b9150506123ca565b5050505050505050565b6000546001600160a01b031633146126825760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b606481600b5461269291906141c6565b61269c9190614268565b60235550565b6000546001600160a01b03163314806126c35750336001600160a01b038316145b61270f5760405162461bcd60e51b815260206004820152601660248201527f4e6f7420617574686f72697a656420746f206275726e000000000000000000006044820152606401610f37565b6000612719612ab3565b61272390836141c6565b6001600160a01b03841660009081526001602052604090205490915061274a9082906141e5565b6001600160a01b03841660009081526001602090815260408083209390935560059052205460ff16156127b5576001600160a01b03831660009081526002602052604090205461279b9083906141e5565b6001600160a01b0384166000908152600260205260409020555b6027546001600160a01b031660009081526005602052604090205460ff161561281a576027546001600160a01b03166000908152600260205260409020546127fe9083906142a0565b6027546001600160a01b03166000908152600260205260409020555b6027546001600160a01b03166000908152600160205260409020546128409082906142a0565b602780546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611041565b6000546001600160a01b031633146128e45760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602555565b6000546001600160a01b031633146129315760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6001600160a01b0381166129ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f37565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480612a2b57506018546001600160a01b031633145b612a775760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420617574686f72697a656420746f20706572666f726d207468697300006044820152606401610f37565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ab0573d6000803e3d6000fd5b50565b6000806000612ac061344a565b9092509050612acf8183614268565b9250505090565b6001600160a01b038316612b515760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f37565b6001600160a01b038216612bcd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f37565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611041565b6000546001600160a01b03838116911614801590612c4d57506001600160a01b0382163014155b8015612c6757506027546001600160a01b03838116911614155b8015612ca557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015612cbf57506018546001600160a01b03838116911614155b8015612cd95750601c546001600160a01b03838116911614155b15612d6f576000612ce983611c2d565b602254909150612cf983836142a0565b1115612d6d5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610f37565b505b6000546001600160a01b03848116911614801590612d9b57506000546001600160a01b03838116911614155b8015612db557506019546001600160a01b03848116911614155b15612ef55760085460ff16612e0c5760405162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e207965740000000000000000000000006044820152606401610f37565b602354811115612e845760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610f37565b600854610100900460ff168015612ecc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15612ef5576001600160a01b0382166000908152600760205260409020805460ff191660011790555b60065460ff1615612f69576001600160a01b03831660009081526007602052604090205460ff1615612f695760405162461bcd60e51b815260206004820152600b60248201527f426c61636b6c69737465640000000000000000000000000000000000000000006044820152606401610f37565b6000612f7430611c2d565b90506023548110612f91576001602354612f8e91906141e5565b90505b60245481108015908190612fa8575060215460ff16155b8015612fe657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015612ff95750602154610100900460ff165b1561300c57602454915061300c826133bb565b60215460ff1615801561305157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156130645750602154610100900460ff165b156130c057600f54601c5460115461308692916001600160a01b0316906135cd565b600f54601d546011546130a392916001600160a01b0316906135cd565b6010546018546012546130c092916001600160a01b0316906135cd565b50506001600160a01b03831660009081526004602052604090205460019060ff168061310457506001600160a01b03831660009081526004602052604090205460ff165b1561310d575060005b806131415761314160168054601755601e8054601f55601a8054601b55601380546014556000938490559183905582905555565b60008060008060008060008061318b8a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168d6001600160a01b03161461324a565b975097509750975097509750975097506131a98c8c8c8b898c613610565b85600c546131b791906141e5565b600c556015546131c89082906142a0565b601555886131dd576131d8613786565b61323c565b6018546131f49085906001600160a01b03166137a9565b6131fe83306137a9565b61321d61320c600284614268565b601c546001600160a01b03166137a9565b61323c61322b600284614268565b601d546001600160a01b03166137a9565b505050505050505050505050565b600080600080600080600080600089613264576064613268565b6025545b9050602054606461327991906141c6565b816016548d61328891906141c6565b61329291906141c6565b61329c9190614268565b945060205460646132ad91906141c6565b81601e548d6132bc91906141c6565b6132c691906141c6565b6132d09190614268565b935060205460646132e191906141c6565b81601a548d6132f091906141c6565b6132fb9060026141c6565b61330591906141c6565b61330f9190614268565b9250602054606461332091906141c6565b816013548d61332f91906141c6565b61333991906141c6565b6133439190614268565b9150818361335186886142a0565b61335b91906142a0565b61336591906142a0565b61336f908c6141e5565b9550613379612ab3565b61338390836141c6565b965061338d612ab3565b613397908c6141c6565b98506133a1612ab3565b6133ab90876141c6565b9750509295985092959890939650565b6021805460ff1916600117905560006133d5600283614268565b9050476133e182613892565b60006133ed82476141e5565b90506133f98382613a61565b60408051858152602081018590529081018290527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506021805460ff191690555050565b600c54600b546000918291825b60095481101561359c57826001600060098481548110613479576134796141fc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806134e457508160026000600984815481106134bd576134bd6141fc565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156134fa57600c54600b54945094505050509091565b6001600060098381548110613511576135116141fc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461354090846141e5565b92506002600060098381548110613559576135596141fc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461358890836141e5565b91508061359481614212565b915050613457565b50600b54600c546135ad9190614268565b8210156135c457600c54600b549350935050509091565b90939092509050565b826135d757505050565b6023548311156135e75760235492505b6135f082611c2d565b6135fa82856142a0565b11613609576136098284613b87565b505050565b565b6001600160a01b0386166000908152600160205260409020546136349084906141e5565b6001600160a01b03871660009081526001602090815260408083209390935560059052205460ff161561369f576001600160a01b0386166000908152600260205260409020546136859085906141e5565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156136fe576001600160a01b0385166000908152600260205260409020546136e49083906142a0565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b0385166000908152600160205260409020546137229082906142a0565b6001600160a01b0380871660008181526001602052604090819020939093559151908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906137769086815260200190565b60405180910390a3505050505050565b61360e601754601f54601b54601454601693909355601e91909155601a55601355565b60006137b3612ab3565b6137bd90846141c6565b6001600160a01b0383166000908152600160205260409020549091506137e49082906142a0565b6001600160a01b03831660009081526001602090815260408083209390935560059052205460ff161561384f576001600160a01b0382166000908152600260205260409020546138359084906142a0565b6001600160a01b0383166000908152600260205260409020555b8215613609576040518381526001600160a01b0383169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611041565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138c7576138c76141fc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561394057600080fd5b505afa158015613954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397891906142b8565b8160018151811061398b5761398b6141fc565b60200260200101906001600160a01b031690816001600160a01b0316815250506139d6307f000000000000000000000000000000000000000000000000000000000000000084612ad6565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790613a2b908590600090869030904290600401614319565b600060405180830381600087803b158015613a4557600080fd5b505af1158015613a59573d6000803e3d6000fd5b505050505050565b613a8c307f000000000000000000000000000000000000000000000000000000000000000084612ad6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080613ad36000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015613b4e57600080fd5b505af1158015613b62573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ea39190614355565b6021805460ff191660011790556000613b9e612ab3565b613ba890836141c6565b6001600160a01b038416600090815260016020526040902054909150613bcf9082906141e5565b6001600160a01b03841660009081526001602090815260408083209390935560059052205460ff1615613c3a576001600160a01b038316600090815260026020526040902054613c209083906141e5565b6001600160a01b0384166000908152600260205260409020555b30600090815260016020526040902054613c559082906142a0565b30600081815260016020526040908190209290925590516001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613ca69086815260200190565b60405180910390a3613cb88284613cc7565b50506021805460ff1916905550565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613cfc57613cfc6141fc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d7557600080fd5b505afa158015613d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dad91906142b8565b81600181518110613dc057613dc06141fc565b60200260200101906001600160a01b031690816001600160a01b031681525050613e0b307f000000000000000000000000000000000000000000000000000000000000000085612ad6565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790613e60908690600090869088904290600401614319565b600060405180830381600087803b158015613e7a57600080fd5b505af1158015613e8e573d6000803e3d6000fd5b50505050505050565b6001600160a01b0381168114612ab057600080fd5b600060208284031215613ebe57600080fd5b813561151a81613e97565b60008060408385031215613edc57600080fd5b8235613ee781613e97565b946020939093013593505050565b60008083601f840112613f0757600080fd5b50813567ffffffffffffffff811115613f1f57600080fd5b6020830191508360208260051b8501011115613f3a57600080fd5b9250929050565b80358015158114613f5157600080fd5b919050565b600080600060408486031215613f6b57600080fd5b833567ffffffffffffffff811115613f8257600080fd5b613f8e86828701613ef5565b9094509250613fa1905060208501613f41565b90509250925092565b60008060408385031215613fbd57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613ff957858101830151858201604001528201613fdd565b8181111561400b576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561403357600080fd5b61151a82613f41565b60006020828403121561404e57600080fd5b5035919050565b60008060006060848603121561406a57600080fd5b833561407581613e97565b9250602084013561408581613e97565b929592945050506040919091013590565b600080604083850312156140a957600080fd5b823591506140b960208401613f41565b90509250929050565b600080600080608085870312156140d857600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060006060868803121561410c57600080fd5b853561411781613e97565b9450602086013567ffffffffffffffff8082111561413457600080fd5b61414089838a01613ef5565b9096509450604088013591508082111561415957600080fd5b5061416688828901613ef5565b969995985093965092949392505050565b6000806040838503121561418a57600080fd5b823561419581613e97565b915060208301356141a581613e97565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156141e0576141e06141b0565b500290565b6000828210156141f7576141f76141b0565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614226576142266141b0565b5060010190565b600181811c9082168061424157607f821691505b6020821081141561426257634e487b7160e01b600052602260045260246000fd5b50919050565b60008261428557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b600082198211156142b3576142b36141b0565b500190565b6000602082840312156142ca57600080fd5b815161151a81613e97565b600081518084526020808501945080840160005b8381101561430e5781516001600160a01b0316875295820195908201906001016142e9565b509495945050505050565b85815284602082015260a06040820152600061433860a08301866142d5565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561436a57600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204dfce083c10b9b0e80bc35a6891891665d0a3a4612f0f3c5a272e25053bed6bd64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106104d55760003560e01c806370a0823111610279578063b34b8ca31161015e578063d61df083116100d6578063fba206c31161008a578063fe575a871161006f578063fe575a8714610e6e578063fed0d2a114610e9e578063ffb54a9914610eb457600080fd5b8063fba206c314610e43578063fd748c3014610e5857600080fd5b8063dd62ed3e116100bb578063dd62ed3e14610dbd578063ec72d65f14610e03578063f2fde38b14610e2357600080fd5b8063d61df08314610d7d578063d7c48e2b14610d9d57600080fd5b8063c49b9a801161012d578063ccc569df11610112578063ccc569df14610d1e578063d10ae16514610d3e578063d543dbeb14610d5d57600080fd5b8063c49b9a8014610ce8578063cc884f7314610d0857600080fd5b8063b34b8ca314610c86578063b3f22ce314610ca6578063b839257614610cbc578063b85f117514610cd257600080fd5b80638d55f905116101f157806395d89b41116101c0578063a7eb8ee8116101a5578063a7eb8ee814610c19578063a9059cbb14610c39578063b1eb20e914610c5957600080fd5b806395d89b4114610be4578063a457c2d714610bf957600080fd5b80638d55f90514610b705780638da5cb5b14610b905780638e2eee8414610bae578063910fb00814610bce57600080fd5b80638097e6971161024857806388f820201161022d57806388f8202014610afd578063896648c114610b365780638b5d7de214610b5057600080fd5b80638097e69714610abd57806382bf293c14610add57600080fd5b806370a0823114610a5157806378109e5414610a715780637ceb35b814610a875780637d1db4a514610aa757600080fd5b8063313ce567116103ba5780634a74bb021161033257806360e4868f116102e6578063635ca7e0116102cb578063635ca7e0146109b1578063666a245d146109d157806367dc9e92146109f157600080fd5b806360e4868f1461094b578063617c62a11461096157600080fd5b80635342acb4116103175780635342acb4146108d25780635cfd7df41461090b5780635e562f3b1461092b57600080fd5b80634a74bb021461089357806352390c02146108b257600080fd5b806339509351116103895780633d61e69e1161036e5780633d61e69e1461081f5780634549b0391461083f57806349bd5a5e1461085f57600080fd5b806339509351146107df5780633bd5d173146107ff57600080fd5b8063313ce5671461076757806333a06c94146107895780633417ab1d146107a95780633685d419146107bf57600080fd5b806313114a9d1161044d578063227b55d71161041c57806328e2eaab1161040157806328e2eaab1461071b57806329138c88146107315780632d8381191461074757600080fd5b8063227b55d7146106db57806323b872dd146106fb57600080fd5b806313114a9d146106355780631694505e1461064a57806318160ddd146106965780631c3c4fec146106ab57600080fd5b806306fdde03116104a45780630b8df8e3116104895780630b8df8e3146105d55780630d295980146105f55780630fec5dd01461061557600080fd5b806306fdde0314610583578063095ea7b3146105a557600080fd5b8063053cfa25146104e157806306d94b0b1461052157806306e6ce751461054357806306f3a47b1461056357600080fd5b366104dc57005b600080fd5b3480156104ed57600080fd5b5061050e6104fc366004613eac565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561052d57600080fd5b5061054161053c366004613ec9565b610ece565b005b34801561054f57600080fd5b5061054161055e366004613f56565b61104e565b34801561056f57600080fd5b5061054161057e366004613faa565b61110b565b34801561058f57600080fd5b5061059861115b565b6040516105189190613fcc565b3480156105b157600080fd5b506105c56105c0366004613ec9565b6111ed565b6040519015158152602001610518565b3480156105e157600080fd5b506105416105f0366004613eac565b611204565b34801561060157600080fd5b50610541610610366004614021565b61126e565b34801561062157600080fd5b5061054161063036600461403c565b6112c9565b34801561064157600080fd5b5060155461050e565b34801561065657600080fd5b5061067e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610518565b3480156106a257600080fd5b50600b5461050e565b3480156106b757600080fd5b506106c0611316565b60408051938452602084019290925290820152606001610518565b3480156106e757600080fd5b506105416106f6366004613eac565b611335565b34801561070757600080fd5b506105c5610716366004614055565b61139f565b34801561072757600080fd5b5061050e60125481565b34801561073d57600080fd5b5061050e601a5481565b34801561075357600080fd5b5061050e61076236600461403c565b61148a565b34801561077357600080fd5b50600a5460405160ff9091168152602001610518565b34801561079557600080fd5b50601d5461067e906001600160a01b031681565b3480156107b557600080fd5b5061050e60105481565b3480156107cb57600080fd5b506105416107da366004613eac565b611521565b3480156107eb57600080fd5b506105c56107fa366004613ec9565b6116f6565b34801561080b57600080fd5b5061054161081a36600461403c565b61172d565b34801561082b57600080fd5b5061054161083a366004614021565b611830565b34801561084b57600080fd5b5061050e61085a366004614096565b611892565b34801561086b57600080fd5b5061067e7f000000000000000000000000b285caf4a44a665671421c83e54a5a98060026ae81565b34801561089f57600080fd5b506021546105c590610100900460ff1681565b3480156108be57600080fd5b506105416108cd366004613eac565b611927565b3480156108de57600080fd5b506105c56108ed366004613eac565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561091757600080fd5b5061054161092636600461403c565b611a98565b34801561093757600080fd5b50610541610946366004614021565b611ae5565b34801561095757600080fd5b5061050e600f5481565b34801561096d57600080fd5b50610976611b40565b6040805160ff90981688526020880196909652948601939093526060850191909152608084015260a0830152151560c082015260e001610518565b3480156109bd57600080fd5b506105416109cc366004613eac565b611b8c565b3480156109dd57600080fd5b5060185461067e906001600160a01b031681565b3480156109fd57600080fd5b50601354601e54601a54600f54601154601654601054601254604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610518565b348015610a5d57600080fd5b5061050e610a6c366004613eac565b611c2d565b348015610a7d57600080fd5b5061050e60225481565b348015610a9357600080fd5b50610541610aa2366004613eac565b611c8c565b348015610ab357600080fd5b5061050e60235481565b348015610ac957600080fd5b50610541610ad836600461403c565b611cf6565b348015610ae957600080fd5b50610541610af836600461403c565b611d43565b348015610b0957600080fd5b506105c5610b18366004613eac565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b4257600080fd5b506006546105c59060ff1681565b348015610b5c57600080fd5b50601c5461067e906001600160a01b031681565b348015610b7c57600080fd5b50610541610b8b3660046140c2565b611dab565b348015610b9c57600080fd5b506000546001600160a01b031661067e565b348015610bba57600080fd5b50610541610bc9366004613f56565b611eaa565b348015610bda57600080fd5b5061050e601e5481565b348015610bf057600080fd5b50610598611f61565b348015610c0557600080fd5b506105c5610c14366004613ec9565b611f70565b348015610c2557600080fd5b50610541610c34366004613faa565b61203f565b348015610c4557600080fd5b506105c5610c54366004613ec9565b612092565b348015610c6557600080fd5b5061050e610c74366004613eac565b60016020526000908152604090205481565b348015610c9257600080fd5b50610541610ca136600461403c565b61209f565b348015610cb257600080fd5b5061050e60245481565b348015610cc857600080fd5b5061050e60165481565b348015610cde57600080fd5b5061050e60135481565b348015610cf457600080fd5b50610541610d03366004614021565b61212d565b348015610d1457600080fd5b5061050e60115481565b348015610d2a57600080fd5b50610541610d393660046140f4565b6121c9565b348015610d4a57600080fd5b506008546105c590610100900460ff1681565b348015610d6957600080fd5b50610541610d7836600461403c565b61263a565b348015610d8957600080fd5b50610541610d98366004613ec9565b6126a2565b348015610da957600080fd5b5060195461067e906001600160a01b031681565b348015610dc957600080fd5b5061050e610dd8366004614177565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610e0f57600080fd5b50610541610e1e36600461403c565b61289c565b348015610e2f57600080fd5b50610541610e3e366004613eac565b6128e9565b348015610e4f57600080fd5b50610541612a08565b348015610e6457600080fd5b5061050e60205481565b348015610e7a57600080fd5b506105c5610e89366004613eac565b60076020526000908152604090205460ff1681565b348015610eaa57600080fd5b5061050e60255481565b348015610ec057600080fd5b506008546105c59060ff1681565b6000546001600160a01b0316331480610eef5750336001600160a01b038316145b610f405760405162461bcd60e51b815260206004820152601660248201527f4e6f7420617574686f72697a656420746f206275726e0000000000000000000060448201526064015b60405180910390fd5b6000610f4a612ab3565b610f5490836141c6565b6001600160a01b038416600090815260016020526040902054909150610f7b9082906141e5565b6001600160a01b03841660009081526001602090815260408083209390935560059052205460ff1615610fe6576001600160a01b038316600090815260026020526040902054610fcc9083906141e5565b6001600160a01b0384166000908152600260205260409020555b81600b54610ff491906141e5565b600b55600c546110059082906141e5565b600c5560405182815230906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050565b6000546001600160a01b031633146110965760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60005b828110156111055781600460008686858181106110b8576110b86141fc565b90506020020160208101906110cd9190613eac565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556110fe81614212565b9050611099565b50505050565b6000546001600160a01b031633146111535760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601155601255565b6060600d805461116a9061422d565b80601f01602080910402602001604051908101604052809291908181526020018280546111969061422d565b80156111e35780601f106111b8576101008083540402835291602001916111e3565b820191906000526020600020905b8154815290600101906020018083116111c657829003601f168201915b5050505050905090565b60006111fa338484612ad6565b5060015b92915050565b6000546001600160a01b0316331461124c5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112b65760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146113115760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602255565b600080600060245461132730611c2d565b601554925092509250909192565b6000546001600160a01b0316331461137d5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006113ac848484612c26565b6001600160a01b03841660009081526003602090815260408083203384529091529020548211156114455760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610f37565b6001600160a01b03841660009081526003602090815260408083203380855292529091205461148091869161147b9086906141e5565b612ad6565b5060019392505050565b6000600c548211156115045760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610f37565b600061150e612ab3565b905061151a8184614268565b9392505050565b6000546001600160a01b031633146115695760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6001600160a01b03811660009081526005602052604090205460ff166115d15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610f37565b60005b6009548110156116f257816001600160a01b0316600982815481106115fb576115fb6141fc565b6000918252602090912001546001600160a01b031614156116e05760098054611626906001906141e5565b81548110611636576116366141fc565b600091825260209091200154600980546001600160a01b039092169183908110611662576116626141fc565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560098054806116ba576116ba61428a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806116ea81614212565b9150506115d4565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916111fa91859061147b9086906142a0565b3360008181526005602052604090205460ff16156117b35760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610f37565b60006117c083600061324a565b5050506001600160a01b0387166000908152600160205260409020549495506117f09486945092506141e5915050565b6001600160a01b038316600090815260016020526040902055600c546118179082906141e5565b600c556015546118289084906142a0565b601555505050565b6000546001600160a01b031633146118785760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b600880549115156101000261ff0019909216919091179055565b6000600b548311156118e65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f37565b816119095760006118f884600061324a565b509597506111fe9650505050505050565b600061191684600061324a565b509497506111fe9650505050505050565b6000546001600160a01b0316331461196f5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6001600160a01b03811660009081526005602052604090205460ff16156119d85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f37565b6001600160a01b03811660009081526001602052604090205415611a32576001600160a01b038116600090815260016020526040902054611a189061148a565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b03163314611ae05760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602355565b6000546001600160a01b03163314611b2d5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6006805460ff1916911515919091179055565b6000806000806000806000600a60009054906101000a900460ff16602354602254600b54600c54611b6f612ab3565b600854959d949c50929a509098509650945060ff90911692509050565b6000546001600160a01b03163314611bd45760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601980546001600160a01b0319166001600160a01b0392831690811782556000908152600460209081526040808320805460ff199081166001908117909255945490951683526005909152902080549091169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615611c6a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546111fe9061148a565b6000546001600160a01b03163314611cd45760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d3e5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602455565b6000546001600160a01b03163314611d8b5760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b606481600b54611d9b91906141c6565b611da59190614268565b60225550565b6000546001600160a01b03163314611df35760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60008285611e0186856142a0565b611e0b91906142a0565b611e1591906142a0565b9050610fa08110611e8e5760405162461bcd60e51b815260206004820152603560248201527f43616e6e6f74207365742066656573207468697320686967682c2070616e636160448201527f6b6520737761702077696c6c20686174652075732100000000000000000000006064820152608401610f37565b6016829055601e849055601a85905560138390555b5050505050565b6000546001600160a01b03163314611ef25760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60005b82811015611105578160076000868685818110611f1457611f146141fc565b9050602002016020810190611f299190613eac565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611f5a81614212565b9050611ef5565b6060600e805461116a9061422d565b3360009081526003602090815260408083206001600160a01b03861684529091528120548211156120095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610f37565b3360008181526003602090815260408083206001600160a01b03881684529091529020546111fa9190859061147b9086906141e5565b6000546001600160a01b031633146120875760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b601091909155600f55565b60006111fa338484612c26565b6000546001600160a01b031633146120e75760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60006120f230611c2d565b9050602354811061210f57600160235461210c91906141e5565b90505b81158061211b57508082115b15612124578091505b6116f2826133bb565b6000546001600160a01b031633146121755760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602180548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906121be90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146122115760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b60008061221c612ab3565b90508483146122935760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60448201527f656e20636f756e740000000000000000000000000000000000000000000000006064820152608401610f37565b60005b858110156122d6578484828181106122b0576122b06141fc565b90506020020135836122c291906142a0565b9250806122ce81614212565b915050612296565b50816122e133611c2d565b101561232f5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f70000000006044820152606401610f37565b61233981836141c6565b6001600160a01b03881660009081526001602052604090205461235c91906141e5565b6001600160a01b03881660009081526001602090815260408083209390935560059052205460ff16156123c7576001600160a01b0387166000908152600260205260409020546123ad9083906141e5565b6001600160a01b0388166000908152600260205260409020555b60005b8581101561263057600560008888848181106123e8576123e86141fc565b90506020020160208101906123fd9190613eac565b6001600160a01b0316815260208101919091526040016000205460ff16156124d457848482818110612431576124316141fc565b905060200201356002600089898581811061244e5761244e6141fc565b90506020020160208101906124639190613eac565b6001600160a01b03166001600160a01b031681526020019081526020016000205461248e91906142a0565b600260008989858181106124a4576124a46141fc565b90506020020160208101906124b99190613eac565b6001600160a01b031681526020810191909152604001600020555b818585838181106124e7576124e76141fc565b905060200201356124f891906141c6565b6001600089898581811061250e5761250e6141fc565b90506020020160208101906125239190613eac565b6001600160a01b03166001600160a01b031681526020019081526020016000205461254e91906142a0565b60016000898985818110612564576125646141fc565b90506020020160208101906125799190613eac565b6001600160a01b031681526020810191909152604001600020558686828181106125a5576125a56141fc565b90506020020160208101906125ba9190613eac565b6001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878785818110612600576126006141fc565b9050602002013560405161261691815260200190565b60405180910390a38061262881614212565b9150506123ca565b5050505050505050565b6000546001600160a01b031633146126825760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b606481600b5461269291906141c6565b61269c9190614268565b60235550565b6000546001600160a01b03163314806126c35750336001600160a01b038316145b61270f5760405162461bcd60e51b815260206004820152601660248201527f4e6f7420617574686f72697a656420746f206275726e000000000000000000006044820152606401610f37565b6000612719612ab3565b61272390836141c6565b6001600160a01b03841660009081526001602052604090205490915061274a9082906141e5565b6001600160a01b03841660009081526001602090815260408083209390935560059052205460ff16156127b5576001600160a01b03831660009081526002602052604090205461279b9083906141e5565b6001600160a01b0384166000908152600260205260409020555b6027546001600160a01b031660009081526005602052604090205460ff161561281a576027546001600160a01b03166000908152600260205260409020546127fe9083906142a0565b6027546001600160a01b03166000908152600260205260409020555b6027546001600160a01b03166000908152600160205260409020546128409082906142a0565b602780546001600160a01b03908116600090815260016020908152604091829020949094559154915185815291811692908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611041565b6000546001600160a01b031633146128e45760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b602555565b6000546001600160a01b031633146129315760405162461bcd60e51b815260206004820181905260248201526000805160206143848339815191526044820152606401610f37565b6001600160a01b0381166129ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f37565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480612a2b57506018546001600160a01b031633145b612a775760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420617574686f72697a656420746f20706572666f726d207468697300006044820152606401610f37565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ab0573d6000803e3d6000fd5b50565b6000806000612ac061344a565b9092509050612acf8183614268565b9250505090565b6001600160a01b038316612b515760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f37565b6001600160a01b038216612bcd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f37565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611041565b6000546001600160a01b03838116911614801590612c4d57506001600160a01b0382163014155b8015612c6757506027546001600160a01b03838116911614155b8015612ca557507f000000000000000000000000b285caf4a44a665671421c83e54a5a98060026ae6001600160a01b0316826001600160a01b031614155b8015612cbf57506018546001600160a01b03838116911614155b8015612cd95750601c546001600160a01b03838116911614155b15612d6f576000612ce983611c2d565b602254909150612cf983836142a0565b1115612d6d5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610f37565b505b6000546001600160a01b03848116911614801590612d9b57506000546001600160a01b03838116911614155b8015612db557506019546001600160a01b03848116911614155b15612ef55760085460ff16612e0c5760405162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e207965740000000000000000000000006044820152606401610f37565b602354811115612e845760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610f37565b600854610100900460ff168015612ecc57507f000000000000000000000000b285caf4a44a665671421c83e54a5a98060026ae6001600160a01b0316836001600160a01b0316145b15612ef5576001600160a01b0382166000908152600760205260409020805460ff191660011790555b60065460ff1615612f69576001600160a01b03831660009081526007602052604090205460ff1615612f695760405162461bcd60e51b815260206004820152600b60248201527f426c61636b6c69737465640000000000000000000000000000000000000000006044820152606401610f37565b6000612f7430611c2d565b90506023548110612f91576001602354612f8e91906141e5565b90505b60245481108015908190612fa8575060215460ff16155b8015612fe657507f000000000000000000000000b285caf4a44a665671421c83e54a5a98060026ae6001600160a01b0316856001600160a01b031614155b8015612ff95750602154610100900460ff165b1561300c57602454915061300c826133bb565b60215460ff1615801561305157507f000000000000000000000000b285caf4a44a665671421c83e54a5a98060026ae6001600160a01b0316856001600160a01b031614155b80156130645750602154610100900460ff165b156130c057600f54601c5460115461308692916001600160a01b0316906135cd565b600f54601d546011546130a392916001600160a01b0316906135cd565b6010546018546012546130c092916001600160a01b0316906135cd565b50506001600160a01b03831660009081526004602052604090205460019060ff168061310457506001600160a01b03831660009081526004602052604090205460ff165b1561310d575060005b806131415761314160168054601755601e8054601f55601a8054601b55601380546014556000938490559183905582905555565b60008060008060008060008061318b8a7f000000000000000000000000b285caf4a44a665671421c83e54a5a98060026ae6001600160a01b03168d6001600160a01b03161461324a565b975097509750975097509750975097506131a98c8c8c8b898c613610565b85600c546131b791906141e5565b600c556015546131c89082906142a0565b601555886131dd576131d8613786565b61323c565b6018546131f49085906001600160a01b03166137a9565b6131fe83306137a9565b61321d61320c600284614268565b601c546001600160a01b03166137a9565b61323c61322b600284614268565b601d546001600160a01b03166137a9565b505050505050505050505050565b600080600080600080600080600089613264576064613268565b6025545b9050602054606461327991906141c6565b816016548d61328891906141c6565b61329291906141c6565b61329c9190614268565b945060205460646132ad91906141c6565b81601e548d6132bc91906141c6565b6132c691906141c6565b6132d09190614268565b935060205460646132e191906141c6565b81601a548d6132f091906141c6565b6132fb9060026141c6565b61330591906141c6565b61330f9190614268565b9250602054606461332091906141c6565b816013548d61332f91906141c6565b61333991906141c6565b6133439190614268565b9150818361335186886142a0565b61335b91906142a0565b61336591906142a0565b61336f908c6141e5565b9550613379612ab3565b61338390836141c6565b965061338d612ab3565b613397908c6141c6565b98506133a1612ab3565b6133ab90876141c6565b9750509295985092959890939650565b6021805460ff1916600117905560006133d5600283614268565b9050476133e182613892565b60006133ed82476141e5565b90506133f98382613a61565b60408051858152602081018590529081018290527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506021805460ff191690555050565b600c54600b546000918291825b60095481101561359c57826001600060098481548110613479576134796141fc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806134e457508160026000600984815481106134bd576134bd6141fc565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156134fa57600c54600b54945094505050509091565b6001600060098381548110613511576135116141fc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461354090846141e5565b92506002600060098381548110613559576135596141fc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461358890836141e5565b91508061359481614212565b915050613457565b50600b54600c546135ad9190614268565b8210156135c457600c54600b549350935050509091565b90939092509050565b826135d757505050565b6023548311156135e75760235492505b6135f082611c2d565b6135fa82856142a0565b11613609576136098284613b87565b505050565b565b6001600160a01b0386166000908152600160205260409020546136349084906141e5565b6001600160a01b03871660009081526001602090815260408083209390935560059052205460ff161561369f576001600160a01b0386166000908152600260205260409020546136859085906141e5565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156136fe576001600160a01b0385166000908152600260205260409020546136e49083906142a0565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b0385166000908152600160205260409020546137229082906142a0565b6001600160a01b0380871660008181526001602052604090819020939093559151908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906137769086815260200190565b60405180910390a3505050505050565b61360e601754601f54601b54601454601693909355601e91909155601a55601355565b60006137b3612ab3565b6137bd90846141c6565b6001600160a01b0383166000908152600160205260409020549091506137e49082906142a0565b6001600160a01b03831660009081526001602090815260408083209390935560059052205460ff161561384f576001600160a01b0382166000908152600260205260409020546138359084906142a0565b6001600160a01b0383166000908152600260205260409020555b8215613609576040518381526001600160a01b0383169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611041565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138c7576138c76141fc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561394057600080fd5b505afa158015613954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397891906142b8565b8160018151811061398b5761398b6141fc565b60200260200101906001600160a01b031690816001600160a01b0316815250506139d6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612ad6565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790613a2b908590600090869030904290600401614319565b600060405180830381600087803b158015613a4557600080fd5b505af1158015613a59573d6000803e3d6000fd5b505050505050565b613a8c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612ad6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080613ad36000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015613b4e57600080fd5b505af1158015613b62573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ea39190614355565b6021805460ff191660011790556000613b9e612ab3565b613ba890836141c6565b6001600160a01b038416600090815260016020526040902054909150613bcf9082906141e5565b6001600160a01b03841660009081526001602090815260408083209390935560059052205460ff1615613c3a576001600160a01b038316600090815260026020526040902054613c209083906141e5565b6001600160a01b0384166000908152600260205260409020555b30600090815260016020526040902054613c559082906142a0565b30600081815260016020526040908190209290925590516001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613ca69086815260200190565b60405180910390a3613cb88284613cc7565b50506021805460ff1916905550565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613cfc57613cfc6141fc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d7557600080fd5b505afa158015613d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dad91906142b8565b81600181518110613dc057613dc06141fc565b60200260200101906001600160a01b031690816001600160a01b031681525050613e0b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85612ad6565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790613e60908690600090869088904290600401614319565b600060405180830381600087803b158015613e7a57600080fd5b505af1158015613e8e573d6000803e3d6000fd5b50505050505050565b6001600160a01b0381168114612ab057600080fd5b600060208284031215613ebe57600080fd5b813561151a81613e97565b60008060408385031215613edc57600080fd5b8235613ee781613e97565b946020939093013593505050565b60008083601f840112613f0757600080fd5b50813567ffffffffffffffff811115613f1f57600080fd5b6020830191508360208260051b8501011115613f3a57600080fd5b9250929050565b80358015158114613f5157600080fd5b919050565b600080600060408486031215613f6b57600080fd5b833567ffffffffffffffff811115613f8257600080fd5b613f8e86828701613ef5565b9094509250613fa1905060208501613f41565b90509250925092565b60008060408385031215613fbd57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613ff957858101830151858201604001528201613fdd565b8181111561400b576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561403357600080fd5b61151a82613f41565b60006020828403121561404e57600080fd5b5035919050565b60008060006060848603121561406a57600080fd5b833561407581613e97565b9250602084013561408581613e97565b929592945050506040919091013590565b600080604083850312156140a957600080fd5b823591506140b960208401613f41565b90509250929050565b600080600080608085870312156140d857600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060006060868803121561410c57600080fd5b853561411781613e97565b9450602086013567ffffffffffffffff8082111561413457600080fd5b61414089838a01613ef5565b9096509450604088013591508082111561415957600080fd5b5061416688828901613ef5565b969995985093965092949392505050565b6000806040838503121561418a57600080fd5b823561419581613e97565b915060208301356141a581613e97565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156141e0576141e06141b0565b500290565b6000828210156141f7576141f76141b0565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614226576142266141b0565b5060010190565b600181811c9082168061424157607f821691505b6020821081141561426257634e487b7160e01b600052602260045260246000fd5b50919050565b60008261428557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b600082198211156142b3576142b36141b0565b500190565b6000602082840312156142ca57600080fd5b815161151a81613e97565b600081518084526020808501945080840160005b8381101561430e5781516001600160a01b0316875295820195908201906001016142e9565b509495945050505050565b85815284602082015260a06040820152600061433860a08301866142d5565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561436a57600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204dfce083c10b9b0e80bc35a6891891665d0a3a4612f0f3c5a272e25053bed6bd64736f6c63430008090033

Deployed Bytecode Sourcemap

13369:28859:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13516:50;;;;;;;;;;-1:-1:-1;13516:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;571:25:1;;;559:2;544:18;13516:50:0;;;;;;;;34189:674;;;;;;;;;;-1:-1:-1;34189:674:0;;;;;:::i;:::-;;:::i;:::-;;25964:217;;;;;;;;;;-1:-1:-1;25964:217:0;;;;;:::i;:::-;;:::i;33032:267::-;;;;;;;;;;-1:-1:-1;33032:267:0;;;;;:::i;:::-;;:::i;17415:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18351:161::-;;;;;;;;;;-1:-1:-1;18351:161:0;;;;;:::i;:::-;;:::i;:::-;;;2994:14:1;;2987:22;2969:41;;2957:2;2942:18;18351:161:0;2829:187:1;21097:131:0;;;;;;;;;;-1:-1:-1;21097:131:0;;;;;:::i;:::-;;:::i;24035:94::-;;;;;;;;;;-1:-1:-1;24035:94:0;;;;;:::i;:::-;;:::i;25211:122::-;;;;;;;;;;-1:-1:-1;25211:122:0;;;;;:::i;:::-;;:::i;19489:102::-;;;;;;;;;;-1:-1:-1;19558:25:0;;19489:102;;15560:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3582:55:1;;;3564:74;;3552:2;3537:18;15560:51:0;3391:253:1;17692:101:0;;;;;;;;;;-1:-1:-1;17772:13:0;;17692:101;;20185:306;;;;;;;;;;;;;:::i;:::-;;;;3851:25:1;;;3907:2;3892:18;;3885:34;;;;3935:18;;;3928:34;3839:2;3824:18;20185:306:0;3649:319:1;21452:121:0;;;;;;;;;;-1:-1:-1;21452:121:0;;;;;:::i;:::-;;:::i;18520:385::-;;;;;;;;;;-1:-1:-1;18520:385:0;;;;;:::i;:::-;;:::i;14696:41::-;;;;;;;;;;;;;;;;15189:28;;;;;;;;;;;;;;;;22706:262;;;;;;;;;;-1:-1:-1;22706:262:0;;;;;:::i;:::-;;:::i;17601:83::-;;;;;;;;;;-1:-1:-1;17667:9:0;;17601:83;;17667:9;;;;4576:36:1;;4564:2;4549:18;17601:83:0;4434:184:1;15314:38:0;;;;;;;;;;-1:-1:-1;15314:38:0;;;;-1:-1:-1;;;;;15314:38:0;;;14537:71;;;;;;;;;;;;;;;;23346:486;;;;;;;;;;-1:-1:-1;23346:486:0;;;;;:::i;:::-;;:::i;18913:217::-;;;;;;;;;;-1:-1:-1;18913:217:0;;;;;:::i;:::-;;:::i;21784:448::-;;;;;;;;;;-1:-1:-1;21784:448:0;;;;;:::i;:::-;;:::i;24137:99::-;;;;;;;;;;-1:-1:-1;24137:99:0;;;;;:::i;:::-;;:::i;22240:458::-;;;;;;;;;;-1:-1:-1;22240:458:0;;;;;:::i;:::-;;:::i;15618:38::-;;;;;;;;;;;;;;;15691:40;;;;;;;;;;-1:-1:-1;15691:40:0;;;;;;;;;;;22976:362;;;;;;;;;;-1:-1:-1;22976:362:0;;;;;:::i;:::-;;:::i;19599:123::-;;;;;;;;;;-1:-1:-1;19599:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;19687:27:0;19663:4;19687:27;;;:18;:27;;;;;;;;;19599:123;24780:111;;;;;;;;;;-1:-1:-1;24780:111:0;;;;;:::i;:::-;;:::i;25637:99::-;;;;;;;;;;-1:-1:-1;25637:99:0;;;;;:::i;:::-;;:::i;14464:66::-;;;;;;;;;;;;;;;;19779:398;;;;;;;;;;;;;:::i;:::-;;;;5689:4:1;5677:17;;;5659:36;;5726:2;5711:18;;5704:34;;;;5754:18;;;5747:34;;;;5812:2;5797:18;;5790:34;;;;5855:3;5840:19;;5833:35;5899:3;5884:19;;5877:35;5956:14;5949:22;5943:3;5928:19;;5921:51;5646:3;5631:19;19779:398:0;5354:624:1;21236:208:0;;;;;;;;;;-1:-1:-1;21236:208:0;;;;;:::i;:::-;;:::i;15046:40::-;;;;;;;;;;-1:-1:-1;15046:40:0;;;;-1:-1:-1;;;;;15046:40:0;;;20499:561;;;;;;;;;;-1:-1:-1;20872:15:0;;20889:14;;20918:9;;20928:23;;20952:17;;20984:14;;20999:28;;21029:22;;20499:561;;;6326:25:1;;;6382:2;6367:18;;6360:34;;;;6410:18;;;6403:34;;;;6468:2;6453:18;;6446:34;;;;6511:3;6496:19;;6489:35;6555:3;6540:19;;6533:35;6599:3;6584:19;;6577:35;6643:3;6628:19;;6621:35;6313:3;6298:19;20499:561:0;5983:679:1;17801:216:0;;;;;;;;;;-1:-1:-1;17801:216:0;;;;;:::i;:::-;;:::i;15740:46::-;;;;;;;;;;;;;;;;21581:127;;;;;;;;;;-1:-1:-1;21581:127:0;;;;;:::i;:::-;;:::i;15793:44::-;;;;;;;;;;;;;;;;24318:184;;;;;;;;;;-1:-1:-1;24318:184:0;;;;;:::i;:::-;;:::i;24983:150::-;;;;;;;;;;-1:-1:-1;24983:150:0;;;;;:::i;:::-;;:::i;23840:120::-;;;;;;;;;;-1:-1:-1;23840:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23932:20:0;23908:4;23932:20;;;:11;:20;;;;;;;;;23840:120;13766:32;;;;;;;;;;-1:-1:-1;13766:32:0;;;;;;;;15272:35;;;;;;;;;;-1:-1:-1;15272:35:0;;;;-1:-1:-1;;;;;15272:35:0;;;33307:404;;;;;;;;;;-1:-1:-1;33307:404:0;;;;;:::i;:::-;;:::i;4952:87::-;;;;;;;;;;-1:-1:-1;4998:7:0;5025:6;-1:-1:-1;;;;;5025:6:0;4952:87;;25744:210;;;;;;;;;;-1:-1:-1;25744:210:0;;;;;:::i;:::-;;:::i;15377:33::-;;;;;;;;;;;;;;;;17506:87;;;;;;;;;;;;;:::i;19138:343::-;;;;;;;;;;-1:-1:-1;19138:343:0;;;;;:::i;:::-;;:::i;32753:271::-;;;;;;;;;;-1:-1:-1;32753:271:0;;;;;:::i;:::-;;:::i;18025:167::-;;;;;;;;;;-1:-1:-1;18025:167:0;;;;;:::i;:::-;;:::i;13455:54::-;;;;;;;;;;-1:-1:-1;13455:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;27796:455;;;;;;;;;;-1:-1:-1;27796:455:0;;;;;:::i;:::-;;:::i;15846:77::-;;;;;;;;;;;;;;;;14948:33;;;;;;;;;;;;;;;;14771:34;;;;;;;;;;;;;;;;25410:168;;;;;;;;;;-1:-1:-1;25410:168:0;;;;;:::i;:::-;;:::i;14653:36::-;;;;;;;;;;;;;;;;26348:1340;;;;;;;;;;-1:-1:-1;26348:1340:0;;;;;:::i;:::-;;:::i;13942:26::-;;;;;;;;;;-1:-1:-1;13942:26:0;;;;;;;;;;;24578:139;;;;;;;;;;-1:-1:-1;24578:139:0;;;;;:::i;:::-;;:::i;34910:862::-;;;;;;;;;;-1:-1:-1;34910:862:0;;;;;:::i;:::-;;:::i;15111:24::-;;;;;;;;;;-1:-1:-1;15111:24:0;;;;-1:-1:-1;;;;;15111:24:0;;;18200:143;;;;;;;;;;-1:-1:-1;18200:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18308:18:0;;;18281:7;18308:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18200:143;32624:121;;;;;;;;;;-1:-1:-1;32624:121:0;;;;;:::i;:::-;;:::i;5179:244::-;;;;;;;;;;-1:-1:-1;5179:244:0;;;;;:::i;:::-;;:::i;28310:218::-;;;;;;;;;;;;;:::i;15477:37::-;;;;;;;;;;;;;;;;13805:46;;;;;;;;;;-1:-1:-1;13805:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15932:35;;;;;;;;;;;;;;;;13904:31;;;;;;;;;;-1:-1:-1;13904:31:0;;;;;;;;34189:674;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;34295:10;:21;;:45;;-1:-1:-1;34320:10:0;-1:-1:-1;;;;;34320:20:0;;;34295:45;34287:80;;;;-1:-1:-1;;;34287:80:0;;8565:2:1;34287:80:0;;;8547:21:1;8604:2;8584:18;;;8577:30;8643:24;8623:18;;;8616:52;8685:18;;34287:80:0;;;;;;;;;34380:24;34425:10;:8;:10::i;:::-;34407:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;34480:26:0;;;;;;:18;:26;;;;;;34380:55;;-1:-1:-1;34480:46:0;;34380:55;;34480:46;:::i;:::-;-1:-1:-1;;;;;34448:26:0;;;;;;:18;:26;;;;;;;;:78;;;;34541:11;:19;;;;;;34537:124;;;-1:-1:-1;;;;;34604:22:0;;;;;;:14;:22;;;;;;:45;;34634:15;;34604:45;:::i;:::-;-1:-1:-1;;;;;34576:22:0;;;;;;:14;:22;;;;;:73;34537:124;34705:15;34689:13;;:31;;;;:::i;:::-;34673:13;:47;34751:17;;:36;;34771:16;;34751:36;:::i;:::-;34731:17;:56;34805:48;;571:25:1;;;34830:4:0;;-1:-1:-1;;;;;34805:48:0;;;;;559:2:1;544:18;34805:48:0;;;;;;;;34274:589;34189:674;;:::o;25964:217::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;26068:9:::1;26063:111;26079:20:::0;;::::1;26063:111;;;26156:6;26121:18;:32;26140:9;;26150:1;26140:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26121:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26121:32:0;:41;;-1:-1:-1;;26121:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26101:3:::1;::::0;::::1;:::i;:::-;;;26063:111;;;;25964:217:::0;;;:::o;33032:267::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;33173:17:::1;:50:::0;33234:22:::1;:57:::0;33032:267::o;17415:83::-;17452:13;17485:5;17478:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17415:83;:::o;18351:161::-;18426:4;18443:39;1055:10;18466:7;18475:6;18443:8;:39::i;:::-;-1:-1:-1;18500:4:0;18351:161;;;;;:::o;21097:131::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;21182:17:::1;:38:::0;;-1:-1:-1;;;;;;21182:38:0::1;-1:-1:-1::0;;;;;21182:38:0;;;::::1;::::0;;;::::1;::::0;;21097:131::o;24035:94::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;24100:11:::1;:21:::0;;-1:-1:-1;;24100:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24035:94::o;25211:122::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;25294:15:::1;:31:::0;25211:122::o;20185:306::-;20249:37;20297:28;20336:32;20399:30;;20431:24;20449:4;20431:9;:24::i;:::-;20457:25;;20391:92;;;;;;20185:306;;;:::o;21452:121::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;21532:12:::1;:33:::0;;-1:-1:-1;;;;;;21532:33:0::1;-1:-1:-1::0;;;;;21532:33:0;;;::::1;::::0;;;::::1;::::0;;21452:121::o;18520:385::-;18618:4;18635:36;18645:6;18653:9;18664:6;18635:9;:36::i;:::-;-1:-1:-1;;;;;18693:19:0;;;;;;:11;:19;;;;;;;;1055:10;18693:33;;;;;;;;:43;-1:-1:-1;18693:43:0;18684:96;;;;-1:-1:-1;;;18684:96:0;;10540:2:1;18684:96:0;;;10522:21:1;10579:2;10559:18;;;10552:30;10618:34;10598:18;;;10591:62;10689:10;10669:18;;;10662:38;10717:19;;18684:96:0;10338:404:1;18684:96:0;-1:-1:-1;;;;;18833:19:0;;;;;;:11;:19;;;;;;;;1055:10;18833:33;;;;;;;;;18801:74;;18810:6;;18833:40;;18867:6;;18833:40;:::i;:::-;18801:8;:74::i;:::-;-1:-1:-1;18893:4:0;18520:385;;;;;:::o;22706:262::-;22772:7;22811:17;;22800:7;:28;;22792:83;;;;-1:-1:-1;;;22792:83:0;;10949:2:1;22792:83:0;;;10931:21:1;10988:2;10968:18;;;10961:30;11027:34;11007:18;;;11000:62;11098:12;11078:18;;;11071:40;11128:19;;22792:83:0;10747:406:1;22792:83:0;22886:19;22909:10;:8;:10::i;:::-;22886:33;-1:-1:-1;22938:21:0;22886:33;22938:7;:21;:::i;:::-;22930:30;22706:262;-1:-1:-1;;;22706:262:0:o;23346:486::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;-1:-1:-1;;;;;23428:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23420:60;;;::::0;-1:-1:-1;;;23420:60:0;;11639:2:1;23420:60:0::1;::::0;::::1;11621:21:1::0;11678:2;11658:18;;;11651:30;11717:29;11697:18;;;11690:57;11764:18;;23420:60:0::1;11437:351:1::0;23420:60:0::1;23496:9;23491:334;23515:9;:16:::0;23511:20;::::1;23491:334;;;23573:7;-1:-1:-1::0;;;;;23557:23:0::1;:9;23567:1;23557:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23557:12:0::1;:23;23553:261;;;23616:9;23626:16:::0;;:20:::1;::::0;23645:1:::1;::::0;23626:20:::1;:::i;:::-;23616:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23601:9:::1;:12:::0;;-1:-1:-1;;;;;23616:31:0;;::::1;::::0;23611:1;;23601:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23601:46:0::1;-1:-1:-1::0;;;;;23601:46:0;;::::1;;::::0;;23666:23;;::::1;::::0;;:14:::1;:23:::0;;;;;;:27;;;23712:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23712:28:0::1;::::0;;23759:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23759:15:0;;;;;-1:-1:-1;;;;;;23759:15:0::1;::::0;;;;;23491:334:::1;23346:486:::0;:::o;23553:261::-:1;23533:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23491:334;;;;23346:486:::0;:::o;18913:217::-;1055:10;19001:4;19051:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19051:34:0;;;;;;;;;;19001:4;;19018:82;;19041:7;;19051:47;;19088:10;;19051:47;:::i;21784:448::-;1055:10;21836:14;21885:19;;;:11;:19;;;;;;;;21884:20;21876:77;;;;-1:-1:-1;;;21876:77:0;;12317:2:1;21876:77:0;;;12299:21:1;12356:2;12336:18;;;12329:30;12395:34;12375:18;;;12368:62;12466:14;12446:18;;;12439:42;12498:19;;21876:77:0;12115:408:1;21876:77:0;21965:15;21991:25;22002:7;22010:5;21991:10;:25::i;:::-;-1:-1:-1;;;;;;;;22056:26:0;;;;;;:18;:26;;;;;;21964:52;;-1:-1:-1;22056:36:0;;21964:52;;-1:-1:-1;22056:26:0;-1:-1:-1;22056:36:0;;-1:-1:-1;;22056:36:0:i;:::-;-1:-1:-1;;;;;22027:26:0;;;;;;:18;:26;;;;;:65;22123:17;;:27;;22143:7;;22123:27;:::i;:::-;22103:17;:47;22189:25;;:35;;22217:7;;22189:35;:::i;:::-;22161:25;:63;-1:-1:-1;;;21784:448:0:o;24137:99::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;24211:7:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;24211:17:0;;::::1;::::0;;;::::1;::::0;;24137:99::o;22240:458::-;22330:7;22369:13;;22358:7;:24;;22350:68;;;;-1:-1:-1;;;22350:68:0;;12730:2:1;22350:68:0;;;12712:21:1;12769:2;12749:18;;;12742:30;12808:33;12788:18;;;12781:61;12859:18;;22350:68:0;12528:355:1;22350:68:0;22434:17;22429:262;;22469:15;22495:25;22506:7;22514:5;22495:10;:25::i;:::-;-1:-1:-1;22468:52:0;;-1:-1:-1;22535:14:0;;-1:-1:-1;;;;;;;22535:14:0;22429:262;22584:23;22617:25;22628:7;22636:5;22617:10;:25::i;:::-;-1:-1:-1;22582:60:0;;-1:-1:-1;22657:22:0;;-1:-1:-1;;;;;;;22657:22:0;22976:362;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;-1:-1:-1;;;;;23059:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23058:21;23050:61;;;::::0;-1:-1:-1;;;23050:61:0;;13090:2:1;23050:61:0::1;::::0;::::1;13072:21:1::0;13129:2;13109:18;;;13102:30;13168:29;13148:18;;;13141:57;13215:18;;23050:61:0::1;12888:351:1::0;23050:61:0::1;-1:-1:-1::0;;;;;23125:27:0;::::1;23155:1;23125:27:::0;;;:18:::1;:27;::::0;;;;;:31;23122:137:::1;;-1:-1:-1::0;;;;;23219:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;23199:48:::1;::::0;:19:::1;:48::i;:::-;-1:-1:-1::0;;;;;23173:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;:74;23122:137:::1;-1:-1:-1::0;;;;;23269:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23269:27:0::1;23292:4;23269:27:::0;;::::1;::::0;;;23307:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23307:23:0::1;::::0;;::::1;::::0;;22976:362::o;24780:111::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;24857:12:::1;:26:::0;24780:111::o;25637:99::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;25705:13:::1;:23:::0;;-1:-1:-1;;25705:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25637:99::o;19779:398::-;19834:14;19859:19;19889:22;19922:19;19952:24;19987:23;20021:16;20068:9;;;;;;;;;;;20079:12;;20093:15;;20110:13;;20125:17;;20144:10;:8;:10::i;:::-;20156:11;;20060:109;;;;-1:-1:-1;20060:109:0;;-1:-1:-1;20060:109:0;;-1:-1:-1;20060:109:0;-1:-1:-1;20060:109:0;-1:-1:-1;20156:11:0;;;;;-1:-1:-1;19779:398:0;-1:-1:-1;19779:398:0:o;21236:208::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;21319:9:::1;:30:::0;;-1:-1:-1;;;;;;21319:30:0::1;-1:-1:-1::0;;;;;21319:30:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;21360:29:0;;;:18:::1;:29;::::0;;;;;;;:36;;-1:-1:-1;;21360:36:0;;::::1;-1:-1:-1::0;21360:36:0;;::::1;::::0;;;21419:9;;;;::::1;21407:22:::0;;:11:::1;:22:::0;;;;;:29;;;;::::1;::::0;;::::1;::::0;;21236:208::o;17801:216::-;-1:-1:-1;;;;;17891:20:0;;17867:7;17891:20;;;:11;:20;;;;;;;;17887:56;;;-1:-1:-1;;;;;;17920:23:0;;;;;:14;:23;;;;;;;17801:216::o;17887:56::-;-1:-1:-1;;;;;17981:27:0;;;;;;:18;:27;;;;;;17961:48;;:19;:48::i;21581:127::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;21664:15:::1;:36:::0;;-1:-1:-1;;;;;;21664:36:0::1;-1:-1:-1::0;;;;;21664:36:0;;;::::1;::::0;;;::::1;::::0;;21581:127::o;24318:184::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;24432:30:::1;:62:::0;24318:184::o;24983:150::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;25122:3:::1;25103:14;25087:13;;:30;;;;:::i;:::-;25086:39;;;;:::i;:::-;25068:15;:57:::0;-1:-1:-1;24983:150:0:o;33307:404::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;33448:18:::1;33514:15:::0;33503:8;33470:29:::1;33485:14:::0;33470:12;:29:::1;:::i;:::-;:41;;;;:::i;:::-;:59;;;;:::i;:::-;33448:81;;33561:4;33548:10;:17;33540:83;;;::::0;-1:-1:-1;;;33540:83:0;;13446:2:1;33540:83:0::1;::::0;::::1;13428:21:1::0;13485:2;13465:18;;;13458:30;13524:34;13504:18;;;13497:62;13595:23;13575:18;;;13568:51;13636:19;;33540:83:0::1;13244:417:1::0;33540:83:0::1;32431:14:::0;:34;;;32476:14;:35;;;32522:9;:29;;;32562:15;:36;;;33634:69:::1;33437:274;33307:404:::0;;;;:::o;25744:210::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;25846:9:::1;25841:106;25857:20:::0;;::::1;25841:106;;;25929:6;25899:13;:27;25913:9;;25923:1;25913:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25899:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;25899:27:0;:36;;-1:-1:-1;;25899:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25879:3:::1;::::0;::::1;:::i;:::-;;;25841:106;;17506:87:::0;17545:13;17578:7;17571:14;;;;;:::i;19138:343::-;1055:10;19231:4;19257:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19257:34:0;;;;;;;;;;:53;-1:-1:-1;19257:53:0;19248:103;;;;-1:-1:-1;;;19248:103:0;;13868:2:1;19248:103:0;;;13850:21:1;13907:2;13887:18;;;13880:30;13946:34;13926:18;;;13919:62;14017:7;13997:18;;;13990:35;14042:19;;19248:103:0;13666:401:1;19248:103:0;1055:10;19397:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19397:34:0;;;;;;;;;;19364:87;;1055:10;19387:7;;19397:52;;19434:15;;19397:52;:::i;32753:271::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;32883:28:::1;:63:::0;;;;32957:23:::1;:56:::0;32753:271::o;18025:167::-;18103:4;18120:42;1055:10;18144:9;18155:6;18120:9;:42::i;27796:455::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;27884:28:::1;27915:24;27933:4;27915:9;:24::i;:::-;27884:55;;27979:12;;27955:20;:36;27952:107;;28046:1;28031:12;;:16;;;;:::i;:::-;28008:39;;27952:107;28074:20:::0;;;:62:::1;;;28116:20;28098:15;:38;28074:62;28071:131;;;28170:20;28152:38;;28071:131;28212:31;28227:15;28212:14;:31::i;25410:168::-:0;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;25486:21:::1;:31:::0;;;::::1;;;;-1:-1:-1::0;;25486:31:0;;::::1;;::::0;;25533:37:::1;::::0;::::1;::::0;::::1;::::0;25510:7;2994:14:1;2987:22;2969:41;;2957:2;2942:18;;2829:187;25533:37:0::1;;;;;;;;25410:168:::0;:::o;26348:1340::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;26470:22:::1;26503:19:::0;26525:10:::1;:8;:10::i;:::-;26503:32:::0;-1:-1:-1;26550:33:0;;::::1;26542:85;;;::::0;-1:-1:-1;;;26542:85:0;;14274:2:1;26542:85:0::1;::::0;::::1;14256:21:1::0;14313:2;14293:18;;;14286:30;14352:34;14332:18;;;14325:62;14423:10;14403:18;;;14396:38;14451:19;;26542:85:0::1;14072:404:1::0;26542:85:0::1;26642:6;26638:102;26652:20:::0;;::::1;26638:102;;;26723:6;;26730:1;26723:9;;;;;;;:::i;:::-;;;;;;;26706:14;:26;;;;:::i;:::-;26689:43:::0;-1:-1:-1;26674:3:0;::::1;::::0;::::1;:::i;:::-;;;;26638:102;;;;26781:14;26756:21;26766:10;26756:9;:21::i;:::-;:39;;26748:80;;;::::0;-1:-1:-1;;;26748:80:0;;14683:2:1;26748:80:0::1;::::0;::::1;14665:21:1::0;14722:2;14702:18;;;14695:30;14761;14741:18;;;14734:58;14809:18;;26748:80:0::1;14481:352:1::0;26748:80:0::1;26940:28;26957:11:::0;26940:14;:28:::1;:::i;:::-;-1:-1:-1::0;;;;;26912:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;:56:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;26882:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;;;:86;;;;27057:11:::1;:17:::0;;;;::::1;;27053:109;;;-1:-1:-1::0;;;;;27112:20:0;::::1;;::::0;;;:14:::1;:20;::::0;;;;;:42:::1;::::0;27140:14;;27112:42:::1;:::i;:::-;-1:-1:-1::0;;;;;27086:20:0;::::1;;::::0;;;:14:::1;:20;::::0;;;;:68;27053:109:::1;27174:6;27170:513;27184:20:::0;;::::1;27170:513;;;27317:11;:25;27329:9;;27339:1;27329:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27317:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27317:25:0;;::::1;;27313:141;;;27432:6;;27439:1;27432:9;;;;;;;:::i;:::-;;;;;;;27394:14;:28;27409:9;;27419:1;27409:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27394:28:0::1;-1:-1:-1::0;;;;;27394:28:0::1;;;;;;;;;;;;;:47;;;;:::i;:::-;27358:14;:28;27373:9;;27383:1;27373:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27358:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27358:28:0;:83;27313:141:::1;27607:11;27595:6;;27602:1;27595:9;;;;;;;:::i;:::-;;;;;;;:23;;;;:::i;:::-;27557:18;:32;27576:9;;27586:1;27576:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27557:32:0::1;-1:-1:-1::0;;;;;27557:32:0::1;;;;;;;;;;;;;:61;;;;:::i;:::-;27517:18;:32;27536:9;;27546:1;27536:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27517:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27517:32:0;:101;27650:9;;27660:1;27650:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27636:37:0::1;27645:4;-1:-1:-1::0;;;;;27636:37:0::1;;27663:6;;27670:1;27663:9;;;;;;;:::i;:::-;;;;;;;27636:37;;;;571:25:1::0;;559:2;544:18;;425:177;27636:37:0::1;;;;;;;;27206:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27170:513;;;;26461:1227;;26348:1340:::0;;;;;:::o;24578:139::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;24706:3:::1;24689:12;24673:13;;:28;;;;:::i;:::-;24672:37;;;;:::i;:::-;24657:12;:52:::0;-1:-1:-1;24578:139:0:o;34910:862::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;35010:10;:21;;:45;;-1:-1:-1;35035:10:0;-1:-1:-1;;;;;35035:20:0;;;35010:45;35002:80;;;;-1:-1:-1;;;35002:80:0;;8565:2:1;35002:80:0;;;8547:21:1;8604:2;8584:18;;;8577:30;8643:24;8623:18;;;8616:52;8685:18;;35002:80:0;8363:346:1;35002:80:0;35095:24;35140:10;:8;:10::i;:::-;35122:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;35201:26:0;;;;;;:18;:26;;;;;;35095:55;;-1:-1:-1;35201:46:0;;35095:55;;35201:46;:::i;:::-;-1:-1:-1;;;;;35163:26:0;;;;;;:18;:26;;;;;;;;:84;;;;35262:11;:19;;;;;;35258:130;;;-1:-1:-1;;;;;35331:22:0;;;;;;:14;:22;;;;;;:45;;35361:15;;35331:45;:::i;:::-;-1:-1:-1;;;;;35297:22:0;;;;;;:14;:22;;;;;:79;35258:130;35416:11;;-1:-1:-1;;;;;35416:11:0;35404:24;;;;:11;:24;;;;;;;;35400:144;;;35493:11;;-1:-1:-1;;;;;35493:11:0;35478:27;;;;:14;:27;;;;;;:52;;35515:15;;35478:52;:::i;:::-;35459:11;;-1:-1:-1;;;;;35459:11:0;35444:27;;;;:14;:27;;;;;:86;35400:144;35664:11;;-1:-1:-1;;;;;35664:11:0;35645:31;;;;:18;:31;;;;;;:53;;35682:16;;35645:53;:::i;:::-;35626:11;;;-1:-1:-1;;;;;35626:11:0;;;35607:31;;;;:18;:31;;;;;;;;;:91;;;;35733:11;;35716:46;;571:25:1;;;35733:11:0;;;;35716:46;;;;;;544:18:1;35716:46:0;425:177:1;32624:121:0;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;32702:14:::1;:27:::0;32624:121::o;5179:244::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;1055:10;5091:23;5083:68;;;;-1:-1:-1;;;5083:68:0;;9408:2:1;5083:68:0;;;9390:21:1;;;9427:18;;;9420:30;-1:-1:-1;;;;;;;;;;;9466:18:1;;;9459:62;9538:18;;5083:68:0;9206:356:1;5083:68:0;-1:-1:-1;;;;;5268:22:0;::::1;5260:73;;;::::0;-1:-1:-1;;;5260:73:0;;15040:2:1;5260:73:0::1;::::0;::::1;15022:21:1::0;15079:2;15059:18;;;15052:30;15118:34;15098:18;;;15091:62;15189:8;15169:18;;;15162:36;15215:19;;5260:73:0::1;14838:402:1::0;5260:73:0::1;5370:6;::::0;;5349:38:::1;::::0;-1:-1:-1;;;;;5349:38:0;;::::1;::::0;5370:6;::::1;::::0;5349:38:::1;::::0;::::1;5398:6;:17:::0;;-1:-1:-1;;;;;;5398:17:0::1;-1:-1:-1::0;;;;;5398:17:0;;;::::1;::::0;;;::::1;::::0;;5179:244::o;28310:218::-;4998:7;5025:6;-1:-1:-1;;;;;5025:6:0;28368:10;:21;;:56;;-1:-1:-1;28407:17:0;;-1:-1:-1;;;;;28407:17:0;28393:10;:31;28368:56;28360:99;;;;-1:-1:-1;;;28360:99:0;;15447:2:1;28360:99:0;;;15429:21:1;15486:2;15466:18;;;15459:30;15525:32;15505:18;;;15498:60;15575:18;;28360:99:0;15245:354:1;28360:99:0;28471:17;;:49;;-1:-1:-1;;;;;28471:17:0;;;;28498:21;28471:49;;;;;:17;:49;:17;:49;28498:21;28471:17;:49;;;;;;;;;;;;;;;;;;;;;28310:218::o;28570:160::-;28611:7;28632:15;28649;28668:19;:17;:19::i;:::-;28631:56;;-1:-1:-1;28631:56:0;-1:-1:-1;28705:17:0;28631:56;;28705:17;:::i;:::-;28698:24;;;;28570:160;:::o;37654:337::-;-1:-1:-1;;;;;37747:19:0;;37739:68;;;;-1:-1:-1;;;37739:68:0;;15806:2:1;37739:68:0;;;15788:21:1;15845:2;15825:18;;;15818:30;15884:34;15864:18;;;15857:62;15955:6;15935:18;;;15928:34;15979:19;;37739:68:0;15604:400:1;37739:68:0;-1:-1:-1;;;;;37826:21:0;;37818:68;;;;-1:-1:-1;;;37818:68:0;;16211:2:1;37818:68:0;;;16193:21:1;16250:2;16230:18;;;16223:30;16289:34;16269:18;;;16262:62;16360:4;16340:18;;;16333:32;16382:19;;37818:68:0;16009:398:1;37818:68:0;-1:-1:-1;;;;;37899:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37951:32;;571:25:1;;;37951:32:0;;544:18:1;37951:32:0;425:177:1;38034:3111:0;4998:7;5025:6;-1:-1:-1;;;;;38120:13:0;;;5025:6;;38120:13;;;;:36;;-1:-1:-1;;;;;;38137:19:0;;38151:4;38137:19;;38120:36;:67;;;;-1:-1:-1;38175:11:0;;-1:-1:-1;;;;;38161:26:0;;;38175:11;;38161:26;;38120:67;:90;;;;;38197:13;-1:-1:-1;;;;;38191:19:0;:2;-1:-1:-1;;;;;38191:19:0;;;38120:90;:117;;;;-1:-1:-1;38220:17:0;;-1:-1:-1;;;;;38214:23:0;;;38220:17;;38214:23;;38120:117;:139;;;;-1:-1:-1;38247:12:0;;-1:-1:-1;;;;;38241:18:0;;;38247:12;;38241:18;;38120:139;38116:297;;;38275:18;38296:13;38306:2;38296:9;:13::i;:::-;38357:15;;38275:34;;-1:-1:-1;38333:19:0;38346:6;38275:34;38333:19;:::i;:::-;38332:40;;38324:87;;;;-1:-1:-1;;;38324:87:0;;16614:2:1;38324:87:0;;;16596:21:1;16653:2;16633:18;;;16626:30;16692:34;16672:18;;;16665:62;16763:4;16743:18;;;16736:32;16785:19;;38324:87:0;16412:398:1;38324:87:0;38260:153;38116:297;4998:7;5025:6;-1:-1:-1;;;;;38436:15:0;;;5025:6;;38436:15;;;;:32;;-1:-1:-1;4998:7:0;5025:6;-1:-1:-1;;;;;38455:13:0;;;5025:6;;38455:13;;38436:32;:53;;;;-1:-1:-1;38480:9:0;;-1:-1:-1;;;;;38472:17:0;;;38480:9;;38472:17;;38436:53;38433:328;;;38513:11;;;;38505:43;;;;-1:-1:-1;;;38505:43:0;;17017:2:1;38505:43:0;;;16999:21:1;17056:2;17036:18;;;17029:30;17095:22;17075:18;;;17068:50;17135:18;;38505:43:0;16815:344:1;38505:43:0;38581:12;;38571:6;:22;;38563:75;;;;-1:-1:-1;;;38563:75:0;;17366:2:1;38563:75:0;;;17348:21:1;17405:2;17385:18;;;17378:30;17444:34;17424:18;;;17417:62;17515:10;17495:18;;;17488:38;17543:19;;38563:75:0;17164:404:1;38563:75:0;38658:7;;;;;;;:32;;;;;38677:13;-1:-1:-1;;;;;38669:21:0;:4;-1:-1:-1;;;;;38669:21:0;;38658:32;38655:95;;;-1:-1:-1;;;;;38710:17:0;;;;;;:13;:17;;;;;:24;;-1:-1:-1;;38710:24:0;38730:4;38710:24;;;38655:95;38798:13;;;;38795:91;;;-1:-1:-1;;;;;38836:19:0;;;;;;:13;:19;;;;;;;;38835:20;38827:43;;;;-1:-1:-1;;;38827:43:0;;17775:2:1;38827:43:0;;;17757:21:1;17814:2;17794:18;;;17787:30;17853:13;17833:18;;;17826:41;17884:18;;38827:43:0;17573:335:1;38827:43:0;38973:28;39004:24;39022:4;39004:9;:24::i;:::-;38973:55;;39080:12;;39056:20;:36;39053:115;;39151:1;39136:12;;:16;;;;:::i;:::-;39113:39;;39053:115;39247:30;;39223:54;;;;;;;39296:57;;-1:-1:-1;39337:16:0;;;;39336:17;39296:57;:99;;;;;39382:13;-1:-1:-1;;;;;39374:21:0;:4;-1:-1:-1;;;;;39374:21:0;;;39296:99;:141;;;;-1:-1:-1;39416:21:0;;;;;;;39296:141;39292:304;;;39495:30;;39472:53;;39544:36;39559:20;39544:14;:36::i;:::-;39652:16;;;;39651:17;:42;;;;;39680:13;-1:-1:-1;;;;;39672:21:0;:4;-1:-1:-1;;;;;39672:21:0;;;39651:42;:67;;;;-1:-1:-1;39697:21:0;;;;;;;39651:67;39648:369;;;39751:23;;39775:12;;39789:17;;39738:69;;39751:23;-1:-1:-1;;;;;39775:12:0;;39738;:69::i;:::-;39839:23;;39863:15;;39880:17;;39826:72;;39839:23;-1:-1:-1;;;;;39863:15:0;;39826:12;:72::i;:::-;39930:28;;39959:17;;39978:22;;39917:84;;39930:28;-1:-1:-1;;;;;39959:17:0;;39917:12;:84::i;:::-;-1:-1:-1;;;;;;;40150:24:0;;40117:12;40150:24;;;:18;:24;;;;;;40132:4;;40150:24;;;:50;;-1:-1:-1;;;;;;40178:22:0;;;;;;:18;:22;;;;;;;;40150:50;40147:96;;;-1:-1:-1;40226:5:0;40147:96;40267:7;40263:53;;40290:14;33792;;;33764:18;:42;33843:14;;;33817:18;:40;33894:9;;;33868:13;:35;33940:15;;;33914:19;:41;-1:-1:-1;32431:34:0;;;;32476:35;;;;32522:29;;;32562:36;33721:275;40290:14;40380:15;40397:23;40422:19;40443:23;40468:18;40488;40508:13;40524:19;40547:41;40558:6;40573:13;-1:-1:-1;;;;;40567:19:0;:2;-1:-1:-1;;;;;40567:19:0;;40547:10;:41::i;:::-;40379:209;;;;;;;;;;;;;;;;40603:74;40621:4;40626:2;40629:6;40636:7;40644:15;40661;40603:17;:74::i;:::-;40768:11;40748:17;;:31;;;;:::i;:::-;40728:17;:51;40818:25;;:39;;40846:11;;40818:39;:::i;:::-;40790:25;:67;40874:7;40870:266;;40897:15;:13;:15::i;:::-;40870:266;;;40964:17;;40944:38;;40953:10;;-1:-1:-1;;;;;40964:17:0;40944:8;:38::i;:::-;40997:34;41006:10;41025:4;40997:8;:34::i;:::-;41046:30;41055:7;41061:1;41055:5;:7;:::i;:::-;41063:12;;-1:-1:-1;;;;;41063:12:0;41046:8;:30::i;:::-;41091:33;41100:7;41106:1;41100:5;:7;:::i;:::-;41108:15;;-1:-1:-1;;;;;41108:15:0;41091:8;:33::i;:::-;38103:3042;;;;;;;;;38034:3111;;;:::o;29400:1078::-;29482:15;29499:23;29524:19;29554:23;29579:18;29599;29619:13;29634:19;29668:18;29689:6;:29;;29715:3;29689:29;;;29698:14;;29689:29;29668:50;;29795:16;;29814:3;29795:22;;;;:::i;:::-;29781:10;29762:14;;29752:7;:24;;;;:::i;:::-;29750:41;;;;:::i;:::-;:68;;;;:::i;:::-;29731:87;;29892:16;;29911:3;29892:22;;;;:::i;:::-;29878:10;29859:14;;29849:7;:24;;;;:::i;:::-;29847:41;;;;:::i;:::-;:68;;;;:::i;:::-;29829:86;;29988:16;;30007:3;29988:22;;;;:::i;:::-;29974:10;29956:9;;29946:7;:19;;;;:::i;:::-;:23;;29968:1;29946:23;:::i;:::-;29944:40;;;;:::i;:::-;:67;;;;:::i;:::-;29926:85;;30191:16;;30210:3;30191:22;;;;:::i;:::-;30176:10;30156:15;;30146:7;:25;;;;:::i;:::-;30144:42;;;;:::i;:::-;:70;;;;:::i;:::-;30126:88;-1:-1:-1;30126:88:0;30283:5;30257:23;30270:10;30257;:23;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;30245:58;;:7;:58;:::i;:::-;30227:76;;30348:10;:8;:10::i;:::-;30334:24;;:11;:24;:::i;:::-;30316:42;;30399:10;:8;:10::i;:::-;30389:20;;:7;:20;:::i;:::-;30371:38;;30458:10;:8;:10::i;:::-;30440:28;;:15;:28;:::i;:::-;30422:46;;29655:823;29400:1078;;;;;;;;;;;:::o;35808:468::-;16424:16;:23;;-1:-1:-1;;16424:23:0;16443:4;16424:23;;;:16;35920:14:::1;35933:1;35920:12:::0;:14:::1;:::i;:::-;35899:35:::0;-1:-1:-1;35978:21:0::1;36016:28;35899:35:::0;36016:16:::1;:28::i;:::-;36073:18;36094:42;36118:18:::0;36094:21:::1;:42;:::i;:::-;36073:63;;36153:35;36166:10;36177;36153:12;:35::i;:::-;36210:52;::::0;;3851:25:1;;;3907:2;3892:18;;3885:34;;;3935:18;;;3928:34;;;36210:52:0::1;::::0;3839:2:1;3824:18;36210:52:0::1;;;;;;;-1:-1:-1::0;;16470:16:0;:24;;-1:-1:-1;;16470:24:0;;;-1:-1:-1;;35808:468:0:o;28738:652::-;28835:17;;28881:13;;28788:7;;;;;28911:335;28935:9;:16;28931:20;;28911:335;;;29012:7;28977:18;:32;28996:9;29006:1;28996:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28996:12:0;28977:32;;;;;;;;;;;;;:42;;:84;;;29054:7;29023:14;:28;29038:9;29048:1;29038:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29038:12:0;29023:28;;;;;;;;;;;;;:38;28977:84;28973:131;;;29071:17;;29090:13;;29063:41;;;;;;;28738:652;;:::o;28973:131::-;29139:18;:32;29158:9;29168:1;29158:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29158:12:0;29139:32;;;;;;;;;;;;;29129:42;;:7;:42;:::i;:::-;29119:52;;29206:14;:28;29221:9;29231:1;29221:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29221:12:0;29206:28;;;;;;;;;;;;;29196:38;;:7;:38;:::i;:::-;29186:48;-1:-1:-1;28953:3:0;;;;:::i;:::-;;;;28911:335;;;;29289:13;;29271:17;;:31;;;;:::i;:::-;29260:7;:43;29256:90;;;29313:17;;29332:13;;29305:41;;;;;;28738:652;;:::o;29256:90::-;29365:7;;29374;;-1:-1:-1;28738:652:0;-1:-1:-1;28738:652:0:o;31163:571::-;31420:20;31417:57;;31163:571;;;:::o;31417:57::-;31508:12;;31490:15;:30;31487:91;;;31554:12;;31536:30;;31487:91;31632:20;31642:9;31632;:20::i;:::-;31594:32;31610:16;31594:15;:32;:::i;:::-;31593:59;31590:137;;31668:47;31689:9;31699:15;31668:20;:47::i;:::-;31163:571;;;:::o;33968:20::-;33721:275::o;41153:986::-;-1:-1:-1;;;;;41388:24:0;;;;;;:18;:24;;;;;;:35;;41416:7;;41388:35;:::i;:::-;-1:-1:-1;;;;;41358:24:0;;;;;;:18;:24;;;;;;;;:65;;;;41521:11;:17;;;;;;41517:110;;;-1:-1:-1;;;;;41580:20:0;;;;;;:14;:20;;;;;;:35;;41608:7;;41580:35;:::i;:::-;-1:-1:-1;;;;;41554:20:0;;;;;;:14;:20;;;;;:61;41517:110;-1:-1:-1;;;;;41725:15:0;;;;;;:11;:15;;;;;;;;41721:118;;;-1:-1:-1;;;;;41782:18:0;;;;;;:14;:18;;;;;;:43;;41810:15;;41782:43;:::i;:::-;-1:-1:-1;;;;;41756:18:0;;;;;;:14;:18;;;;;:69;41721:118;-1:-1:-1;;;;;41932:22:0;;;;;;:18;:22;;;;;;:43;;41960:15;;41932:43;:::i;:::-;-1:-1:-1;;;;;41902:22:0;;;;;;;:18;:22;;;;;;;:73;;;;41993:35;;;;;;;;;;42012:15;571:25:1;;559:2;544:18;;425:177;41993:35:0;;;;;;;;41153:986;;;;;;:::o;34008:139::-;34052:87;34064:18;;34084;;34104:13;;34119:19;;32431:14;:34;;;;32476:14;:35;;;;32522:9;:29;32562:15;:36;32305:311;31742:509;31822:26;31863:10;:8;:10::i;:::-;31851:22;;:9;:22;:::i;:::-;-1:-1:-1;;;;;31921:34:0;;;;;;:18;:34;;;;;;31822:51;;-1:-1:-1;31921:55:0;;31822:51;;31921:55;:::i;:::-;-1:-1:-1;;;;;31884:34:0;;;;;;:18;:34;;;;;;;;:92;;;;31994:11;:27;;;;;;31991:133;;;-1:-1:-1;;;;;32070:30:0;;;;;;:14;:30;;;;;;:42;;32103:9;;32070:42;:::i;:::-;-1:-1:-1;;;;;32037:30:0;;;;;;:14;:30;;;;;:75;31991:133;32137:13;;32134:100;;32171:47;;571:25:1;;;-1:-1:-1;;;;;32171:47:0;;;32180:10;;32171:47;;559:2:1;544:18;32171:47:0;425:177:1;36284:471:0;36374:16;;;36388:1;36374:16;;;;;;;;36350:21;;36374:16;;;;;;;;;;-1:-1:-1;36374:16:0;36350:40;;36419:4;36401;36406:1;36401:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;36401:23:0;;;-1:-1:-1;;;;;36401:23:0;;;;;36445:15;-1:-1:-1;;;;;36445:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36435:4;36440:1;36435:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;36435:32:0;;;-1:-1:-1;;;;;36435:32:0;;;;;36478:62;36495:4;36510:15;36528:11;36478:8;:62::i;:::-;36551:196;;-1:-1:-1;;;36551:196:0;;-1:-1:-1;;;;;36551:15:0;:66;;;;:196;;36632:11;;36658:1;;36674:4;;36701;;36721:15;;36551:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36339:416;36284:471;:::o;37284:360::-;37365:62;37382:4;37397:15;37415:11;37365:8;:62::i;:::-;37438:15;-1:-1:-1;;;;;37438:31:0;;37477:9;37510:4;37530:11;37556:1;37572;37588:7;4998;5025:6;-1:-1:-1;;;;;5025:6:0;;4952:87;37588:7;37438:198;;;;;;;;;;-1:-1:-1;;;;;19839:15:1;;;37438:198:0;;;19821:34:1;19871:18;;;19864:34;;;;19914:18;;;19907:34;;;;19957:18;;;19950:34;20021:15;;;20000:19;;;19993:44;37610:15:0;20053:19:1;;;20046:35;19732:19;;37438:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30490:636::-;16424:16;:23;;-1:-1:-1;;16424:23:0;16443:4;16424:23;;;:16;30648:10:::1;:8;:10::i;:::-;30630:28;::::0;:15;:28:::1;:::i;:::-;-1:-1:-1::0;;;;;30703:26:0;::::1;;::::0;;;:18:::1;:26;::::0;;;;;30603:55;;-1:-1:-1;30703:46:0::1;::::0;30603:55;;30703:46:::1;:::i;:::-;-1:-1:-1::0;;;;;30671:26:0;::::1;;::::0;;;:18:::1;:26;::::0;;;;;;;:78;;;;30764:11:::1;:19:::0;;;;::::1;;30760:124;;;-1:-1:-1::0;;;;;30827:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;:45:::1;::::0;30857:15;;30827:45:::1;:::i;:::-;-1:-1:-1::0;;;;;30799:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;:73;30760:124:::1;30962:4;30935:33;::::0;;;:18:::1;:33;::::0;;;;;:55:::1;::::0;30974:16;;30935:55:::1;:::i;:::-;30921:4;30894:33;::::0;;;:18:::1;:33;::::0;;;;;;:96;;;;31008:48;;-1:-1:-1;;;;;31008:48:0;::::1;::::0;::::1;::::0;::::1;::::0;31040:15;571:25:1;;559:2;544:18;;425:177;31008:48:0::1;;;;;;;;31069:47;31093:15;31109:6;31069:23;:47::i;:::-;-1:-1:-1::0;;16470:16:0;:24;;-1:-1:-1;;16470:24:0;;;-1:-1:-1;30490:636:0:o;36763:511::-;36892:16;;;36906:1;36892:16;;;;;;;;36868:21;;36892:16;;;;;;;;;;-1:-1:-1;36892:16:0;36868:40;;36937:4;36919;36924:1;36919:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;36919:23:0;;;-1:-1:-1;;;;;36919:23:0;;;;;36963:15;-1:-1:-1;;;;;36963:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36953:4;36958:1;36953:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;36953:32:0;;;-1:-1:-1;;;;;36953:32:0;;;;;36996:62;37013:4;37028:15;37046:11;36996:8;:62::i;:::-;37069:197;;-1:-1:-1;;;37069:197:0;;-1:-1:-1;;;;;37069:15:0;:66;;;;:197;;37150:11;;37176:1;;37192:4;;37211:14;;37240:15;;37069:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36857:417;36763:511;;:::o;14:154:1:-;-1:-1:-1;;;;;93:5:1;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:247;232:6;285:2;273:9;264:7;260:23;256:32;253:52;;;301:1;298;291:12;253:52;340:9;327:23;359:31;384:5;359:31;:::i;607:315::-;675:6;683;736:2;724:9;715:7;711:23;707:32;704:52;;;752:1;749;742:12;704:52;791:9;778:23;810:31;835:5;810:31;:::i;:::-;860:5;912:2;897:18;;;;884:32;;-1:-1:-1;;;607:315:1:o;927:367::-;990:8;1000:6;1054:3;1047:4;1039:6;1035:17;1031:27;1021:55;;1072:1;1069;1062:12;1021:55;-1:-1:-1;1095:20:1;;1138:18;1127:30;;1124:50;;;1170:1;1167;1160:12;1124:50;1207:4;1199:6;1195:17;1183:29;;1267:3;1260:4;1250:6;1247:1;1243:14;1235:6;1231:27;1227:38;1224:47;1221:67;;;1284:1;1281;1274:12;1221:67;927:367;;;;;:::o;1299:160::-;1364:20;;1420:13;;1413:21;1403:32;;1393:60;;1449:1;1446;1439:12;1393:60;1299:160;;;:::o;1464:505::-;1556:6;1564;1572;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1681:9;1668:23;1714:18;1706:6;1703:30;1700:50;;;1746:1;1743;1736:12;1700:50;1785:70;1847:7;1838:6;1827:9;1823:22;1785:70;:::i;:::-;1874:8;;-1:-1:-1;1759:96:1;-1:-1:-1;1928:35:1;;-1:-1:-1;1959:2:1;1944:18;;1928:35;:::i;:::-;1918:45;;1464:505;;;;;:::o;1974:248::-;2042:6;2050;2103:2;2091:9;2082:7;2078:23;2074:32;2071:52;;;2119:1;2116;2109:12;2071:52;-1:-1:-1;;2142:23:1;;;2212:2;2197:18;;;2184:32;;-1:-1:-1;1974:248:1:o;2227:597::-;2339:4;2368:2;2397;2386:9;2379:21;2429:6;2423:13;2472:6;2467:2;2456:9;2452:18;2445:34;2497:1;2507:140;2521:6;2518:1;2515:13;2507:140;;;2616:14;;;2612:23;;2606:30;2582:17;;;2601:2;2578:26;2571:66;2536:10;;2507:140;;;2665:6;2662:1;2659:13;2656:91;;;2735:1;2730:2;2721:6;2710:9;2706:22;2702:31;2695:42;2656:91;-1:-1:-1;2808:2:1;2787:15;-1:-1:-1;;2783:29:1;2768:45;;;;2815:2;2764:54;;2227:597;-1:-1:-1;;;2227:597:1:o;3021:180::-;3077:6;3130:2;3118:9;3109:7;3105:23;3101:32;3098:52;;;3146:1;3143;3136:12;3098:52;3169:26;3185:9;3169:26;:::i;3206:180::-;3265:6;3318:2;3306:9;3297:7;3293:23;3289:32;3286:52;;;3334:1;3331;3324:12;3286:52;-1:-1:-1;3357:23:1;;3206:180;-1:-1:-1;3206:180:1:o;3973:456::-;4050:6;4058;4066;4119:2;4107:9;4098:7;4094:23;4090:32;4087:52;;;4135:1;4132;4125:12;4087:52;4174:9;4161:23;4193:31;4218:5;4193:31;:::i;:::-;4243:5;-1:-1:-1;4300:2:1;4285:18;;4272:32;4313:33;4272:32;4313:33;:::i;:::-;3973:456;;4365:7;;-1:-1:-1;;;4419:2:1;4404:18;;;;4391:32;;3973:456::o;4870:248::-;4935:6;4943;4996:2;4984:9;4975:7;4971:23;4967:32;4964:52;;;5012:1;5009;5002:12;4964:52;5048:9;5035:23;5025:33;;5077:35;5108:2;5097:9;5093:18;5077:35;:::i;:::-;5067:45;;4870:248;;;;;:::o;6667:385::-;6753:6;6761;6769;6777;6830:3;6818:9;6809:7;6805:23;6801:33;6798:53;;;6847:1;6844;6837:12;6798:53;-1:-1:-1;;6870:23:1;;;6940:2;6925:18;;6912:32;;-1:-1:-1;6991:2:1;6976:18;;6963:32;;7042:2;7027:18;7014:32;;-1:-1:-1;6667:385:1;-1:-1:-1;6667:385:1:o;7057:908::-;7188:6;7196;7204;7212;7220;7273:2;7261:9;7252:7;7248:23;7244:32;7241:52;;;7289:1;7286;7279:12;7241:52;7328:9;7315:23;7347:31;7372:5;7347:31;:::i;:::-;7397:5;-1:-1:-1;7453:2:1;7438:18;;7425:32;7476:18;7506:14;;;7503:34;;;7533:1;7530;7523:12;7503:34;7572:70;7634:7;7625:6;7614:9;7610:22;7572:70;:::i;:::-;7661:8;;-1:-1:-1;7546:96:1;-1:-1:-1;7749:2:1;7734:18;;7721:32;;-1:-1:-1;7765:16:1;;;7762:36;;;7794:1;7791;7784:12;7762:36;;7833:72;7897:7;7886:8;7875:9;7871:24;7833:72;:::i;:::-;7057:908;;;;-1:-1:-1;7057:908:1;;-1:-1:-1;7924:8:1;;7807:98;7057:908;-1:-1:-1;;;7057:908:1:o;7970:388::-;8038:6;8046;8099:2;8087:9;8078:7;8074:23;8070:32;8067:52;;;8115:1;8112;8105:12;8067:52;8154:9;8141:23;8173:31;8198:5;8173:31;:::i;:::-;8223:5;-1:-1:-1;8280:2:1;8265:18;;8252:32;8293:33;8252:32;8293:33;:::i;:::-;8345:7;8335:17;;;7970:388;;;;;:::o;8714:184::-;-1:-1:-1;;;8763:1:1;8756:88;8863:4;8860:1;8853:15;8887:4;8884:1;8877:15;8903:168;8943:7;9009:1;9005;9001:6;8997:14;8994:1;8991:21;8986:1;8979:9;8972:17;8968:45;8965:71;;;9016:18;;:::i;:::-;-1:-1:-1;9056:9:1;;8903:168::o;9076:125::-;9116:4;9144:1;9141;9138:8;9135:34;;;9149:18;;:::i;:::-;-1:-1:-1;9186:9:1;;9076:125::o;9567:184::-;-1:-1:-1;;;9616:1:1;9609:88;9716:4;9713:1;9706:15;9740:4;9737:1;9730:15;9756:135;9795:3;-1:-1:-1;;9816:17:1;;9813:43;;;9836:18;;:::i;:::-;-1:-1:-1;9883:1:1;9872:13;;9756:135::o;9896:437::-;9975:1;9971:12;;;;10018;;;10039:61;;10093:4;10085:6;10081:17;10071:27;;10039:61;10146:2;10138:6;10135:14;10115:18;10112:38;10109:218;;;-1:-1:-1;;;10180:1:1;10173:88;10284:4;10281:1;10274:15;10312:4;10309:1;10302:15;10109:218;;9896:437;;;:::o;11158:274::-;11198:1;11224;11214:189;;-1:-1:-1;;;11256:1:1;11249:88;11360:4;11357:1;11350:15;11388:4;11385:1;11378:15;11214:189;-1:-1:-1;11417:9:1;;11158:274::o;11793:184::-;-1:-1:-1;;;11842:1:1;11835:88;11942:4;11939:1;11932:15;11966:4;11963:1;11956:15;11982:128;12022:3;12053:1;12049:6;12046:1;12043:13;12040:39;;;12059:18;;:::i;:::-;-1:-1:-1;12095:9:1;;11982:128::o;18102:251::-;18172:6;18225:2;18213:9;18204:7;18200:23;18196:32;18193:52;;;18241:1;18238;18231:12;18193:52;18273:9;18267:16;18292:31;18317:5;18292:31;:::i;18358:484::-;18411:3;18449:5;18443:12;18476:6;18471:3;18464:19;18502:4;18531:2;18526:3;18522:12;18515:19;;18568:2;18561:5;18557:14;18589:1;18599:218;18613:6;18610:1;18607:13;18599:218;;;18678:13;;-1:-1:-1;;;;;18674:62:1;18662:75;;18757:12;;;;18792:15;;;;18635:1;18628:9;18599:218;;;-1:-1:-1;18833:3:1;;18358:484;-1:-1:-1;;;;;18358:484:1:o;18847:605::-;19146:6;19135:9;19128:25;19189:6;19184:2;19173:9;19169:18;19162:34;19232:3;19227:2;19216:9;19212:18;19205:31;19109:4;19253:57;19305:3;19294:9;19290:19;19282:6;19253:57;:::i;:::-;-1:-1:-1;;;;;19346:55:1;;;;19341:2;19326:18;;19319:83;-1:-1:-1;19433:3:1;19418:19;19411:35;19245:65;18847:605;-1:-1:-1;;;18847:605:1:o;20092:306::-;20180:6;20188;20196;20249:2;20237:9;20228:7;20224:23;20220:32;20217:52;;;20265:1;20262;20255:12;20217:52;20294:9;20288:16;20278:26;;20344:2;20333:9;20329:18;20323:25;20313:35;;20388:2;20377:9;20373:18;20367:25;20357:35;;20092:306;;;;;:::o

Swarm Source

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