ETH Price: $2,534.52 (+3.99%)

Token

Stax Protocol (STAX)
 

Overview

Max Total Supply

1,000,000,000 STAX

Holders

413

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,345,925.261293308 STAX

Value
$0.00
0x682f2455d47f1b66a7c50c63d740783ca7466e9a
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:
StaxProtocol

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

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

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


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);
    

}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

// pragma solidity >=0.5.0;

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;
}


// pragma solidity >=0.5.0;

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 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 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;
}

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 StaxProtocol is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private marketingWallet = payable(0xDc56E71964B462ba3f2CB2F48ac9FA0647918583); // Marketing Wallet
    address payable private ecosystemWallet = payable(0x9D157DDdeF8Be87FDfF2bC9CBf4F1ab57f7Ce951); // Ecosystem Wallet
    address payable private devWallet = payable (0x867F78a010Ac5cE2697B5E6605ae5eBb11fb2A0a); // dev Wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

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

    string private _name = "Stax Protocol";
    string private _symbol = "STAX";
    

    uint256 public _maxWalletToken = _tTotal.div(100).mul(2);

    uint256 public _buyLiquidityFee = 20; //2%
    uint256 public _buyDevFee = 10;     //1% 
    uint256 public _buyMarketingFee = 50;   //5%
    uint256 public _buyReflectionFee = 0;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 100;  //10%
    uint256 public _sellDevFee = 20;   //10%
    uint256 public _sellReflectionFee = 0;
    
    uint256 private ecosystemFee = 30;   //3%
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketingFee = _buyMarketingFee;
    uint256 private devFee = _buyDevFee;
    uint256 private reflectionFee=_buyReflectionFee;


    uint256 private totalFee =
        liquidityFee.add(marketingFee).add(devFee).add(ecosystemFee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(5); //0.05%
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    bool private antiBotmode = true;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    

    constructor () {

        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;
        _isTrusted[owner()] = true;
        _isTrusted[uniswapV2Pair] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }

    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setAntiBotmode(bool _status) external onlyOwner() {
       antiBotmode=_status;
    }
    
    function disableAntiBotmode() external onlyOwner() {
       antiBotmode=false;
       _maxWalletToken = _tTotal.div(1000).mul(2); //0.2% 
       swapTokenswithoutImpact(balanceOf(address(this)));
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }

    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 _tTotal;
    }

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

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

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

    function excludeFromReward(address account) public onlyOwner() {

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[from], "You have no power here!");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && !((launchedAt + deadBlocks) > block.number)){
                require(amount+ balanceOf(to)<=_maxWalletToken,
                    "Total Holding is currently limited");
        }
        

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot - first 2 blocks
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }
        
        //Punish high slippage bots for next - only bot txns go through here
        if(launchedAt>0 && from!= owner() && block.number >= (launchedAt + deadBlocks)  && antiBotmode){
                currenttotalFee=990;    //90%
        }

        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { //buys
                    currenttotalFee=0;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance>=swapThreshold){
                    contractTokenBalance = swapThreshold;
                    swapTokens(contractTokenBalance);
            }
          
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        
        
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
        
        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );
         uint256 amountETHEcosystem = amountETH.mul(ecosystemFee).div(
            totalETHFee
        );
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHEcosystem,ecosystemWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    
    function swapTokenswithoutImpact(uint256 contractTokenBalance) private lockTheSwap {
        
        
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
        
        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        uint256 amountETHEcosystem = amountETH.mul(ecosystemFee).div(	
            totalETHFee	
        );
         
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHEcosystem,ecosystemWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }

        _transfer(uniswapV2Pair,DEAD,contractTokenBalance);
        IUniswapV2Pair(uniswapV2Pair).sync();
        
    }
    

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    

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

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

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        uint256 _previousReflectionFee=reflectionFee;
        uint256 _previousTotalFee=currenttotalFee;
        if(!takeFee){
            reflectionFee = 0;
            currenttotalFee=0;
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee){
            reflectionFee = _previousReflectionFee;
            currenttotalFee=_previousTotalFee;
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(
            10**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**3
        );
    }
    
    function excludeMultiple(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    }
    
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner() {
        marketingWallet = payable(_marketingWallet);
        devWallet = payable(_devWallet);
    }


    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            if(!_isTrusted[addresses[i]]){
                _isSniper[addresses[i]] = status;
            }
        }
    }
    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
        
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    function withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

    function setMaxWalletExempt(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
    }

    function distribute_airdrop(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**_decimals * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens* 10**_decimals));
            }
    }

     function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee,uint256 _ecosystemFee) external onlyOwner {
       
        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        _buyReflectionFee= _reflectionFee;

        reflectionFee= _reflectionFee;
        liquidityFee = _liquidityFee;
        devFee = _devFee;
        marketingFee = _marketingFee;
        ecosystemFee=_ecosystemFee;

        totalFee = liquidityFee.add(marketingFee).add(devFee).add(ecosystemFee);

    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        _sellReflectionFee= _reflectionFee;
    }
    
    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":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":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","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":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAntiBotmode","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":"distribute_airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","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":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_ecosystemFee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811673dc56e71964b462ba3f2cb2f48ac9fa064791858317909155600480548216739d157dddef8be87fdff2bc9cbf4f1ab57f7ce9511790556005805490911673867f78a010ac5ce2697b5e6605ae5ebb11fb2a0a1790556002600a9081556000600b55601180547409000000000000000000000000000000000000dead6001600160a81b03199091161790819055620000b891600160a01b90910460ff16906200092f565b620000c890633b9aca00620009ee565b6012819055620000db9060001962000a67565b620000e99060001962000a10565b60135560408051808201909152600d8082526c14dd185e08141c9bdd1bd8dbdb609a1b602090920191825262000122916015916200078f565b50604080518082019091526004808252630a6a882b60e31b602090920191825262000150916016916200078f565b506200018860026200017460646012546200061260201b62001ffb1790919060201c565b6200066560201b6200203d1790919060201c565b6017556014601855600a6019556032601a556000601b556000601c556064601d556014601e556000601f55601e602055601854602155601a54602255601954602355601b5460245562000210602054620001fc602354620001fc602254602154620006f060201b620020bc1790919060201c565b620006f060201b620020bc1790919060201c565b6025556025546026556200023d6005620001746127106012546200061260201b62001ffb1790919060201c565b6027556029805462ffffff60a81b1916600160b81b1790553480156200026257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200030657600080fd5b505afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062000835565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038a57600080fd5b505afa1580156200039f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c5919062000835565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200040e57600080fd5b505af115801562000423573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000449919062000835565b602980546001600160a01b03199081166001600160a01b0393841617909155602880549091169183169190911790556001600c6000620004916000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d90620004ea6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155602954821684528284208054861682179055601154909116835290822080549093168117909255600f906200056c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556029549091168152600f909252902080549091166001179055620005bb3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040516200060391815260200190565b60405180910390a35062000aaa565b60006200065c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200075360201b60201c565b90505b92915050565b60008262000676575060006200065f565b6000620006848385620009ee565b905082620006938583620008cf565b146200065c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006ff8385620008b4565b9050838110156200065c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006e7565b60008183620007775760405162461bcd60e51b8152600401620006e791906200085e565b506000620007868486620008cf565b95945050505050565b8280546200079d9062000a2a565b90600052602060002090601f016020900481019282620007c157600085556200080c565b82601f10620007dc57805160ff19168380011785556200080c565b828001600101855582156200080c579182015b828111156200080c578251825591602001919060010190620007ef565b506200081a9291506200081e565b5090565b5b808211156200081a57600081556001016200081f565b60006020828403121562000847578081fd5b81516001600160a01b03811681146200065c578182fd5b6000602080835283518082850152825b818110156200088c578581018301518582016040015282016200086e565b818111156200089e5783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620008ca57620008ca62000a7e565b500190565b600082620008e157620008e162000a94565b500490565b600181815b80851115620009275781600019048211156200090b576200090b62000a7e565b808516156200091957918102915b93841c9390800290620008eb565b509250929050565b60006200065c60ff8416836000826200094b575060016200065f565b816200095a575060006200065f565b81600181146200097357600281146200097e576200099e565b60019150506200065f565b60ff84111562000992576200099262000a7e565b50506001821b6200065f565b5060208310610133831016604e8410600b8410161715620009c3575081810a6200065f565b620009cf8383620008e6565b8060001904821115620009e657620009e662000a7e565b029392505050565b600081600019048311821515161562000a0b5762000a0b62000a7e565b500290565b60008282101562000a255762000a2562000a7e565b500390565b600181811c9082168062000a3f57607f821691505b6020821081141562000a6157634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a795762000a7962000a94565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613c8f8062000aba6000396000f3fe60806040526004361061037a5760003560e01c80636ce37fa0116101d1578063a457c2d711610102578063dc44b6a0116100a0578063f259c57b1161006f578063f259c57b14610a23578063f2fde38b14610a43578063fabb0b4f14610a63578063ffb54a9914610a7957600080fd5b8063dc44b6a014610987578063dd62ed3e1461099d578063ea2f0b37146109e3578063eafb5a3c14610a0357600080fd5b8063c5d24189116100dc578063c5d2418914610925578063c86079521461093b578063c9cf778914610951578063d3f6a1571461096757600080fd5b8063a457c2d7146108cf578063a9059cbb146108ef578063bf56b3711461090f57600080fd5b806384530c461161016f5780638da5cb5b116101495780638da5cb5b1461085c5780638f4590d21461087a57806395d89b411461089a578063a3b84b6b146108af57600080fd5b806384530c46146107ed57806388790a681461080d57806388f820201461082357600080fd5b806371b9189c116101ab57806371b9189c14610781578063743942b6146107a15780637598f8bc146107c157806378109e54146107d757600080fd5b80636ce37fa01461072c57806370a082311461074c578063715018a61461076c57600080fd5b80632dd5efe7116102ab578063401aa5c0116102495780634b01547f116102235780634b01547f146106b657806352390c02146106d65780635d54c0af146106f6578063620158521461071657600080fd5b8063401aa5c0146106605780634549b0391461067657806349bd5a5e1461069657600080fd5b806337533c911161028557806337533c91146105eb57806339509351146106005780633bd5d173146106205780633ddf65ab1461064057600080fd5b80632dd5efe71461057f578063313ce5671461059f5780633685d419146105cb57600080fd5b806318160ddd1161031857806325b86edf116102f257806325b86edf146104fe5780632691bc801461051e5780632d4103d61461053f5780632d8381191461055f57600080fd5b806318160ddd146104a957806323ab8a93146104be57806323b872dd146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60275481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610a9a565b6040516103a69190613939565b3480156103dd57600080fd5b506103f16103ec3660046137e9565b610b2c565b005b3480156103ff57600080fd5b5061041361040e3660046136c2565b610b86565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e3660046135b8565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060145461039c565b34801561047d57600080fd5b50602854610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060125461039c565b3480156104ca57600080fd5b506103f16104d9366004613668565b610b9d565b3480156104ea57600080fd5b506104136104f9366004613628565b610d3f565b34801561050a57600080fd5b506103f16105193660046137d7565b610da8565b34801561052a57600080fd5b5060295461041390600160b01b900460ff1681565b34801561054b57600080fd5b506103f161055a3660046137ba565b610ed8565b34801561056b57600080fd5b5061039c61057a3660046137e9565b610f63565b34801561058b57600080fd5b506103f161059a3660046135b8565b610fe7565b3480156105ab57600080fd5b50601154600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105d757600080fd5b506103f16105e63660046135b8565b611035565b3480156105f757600080fd5b506103f1611220565b34801561060c57600080fd5b5061041361061b3660046136c2565b611283565b34801561062c57600080fd5b506103f161063b3660046137e9565b6112b9565b34801561064c57600080fd5b506103f161065b366004613782565b6113a3565b34801561066c57600080fd5b5061039c601b5481565b34801561068257600080fd5b5061039c610691366004613819565b6113eb565b3480156106a257600080fd5b50602954610491906001600160a01b031681565b3480156106c257600080fd5b506103f16106d1366004613782565b611478565b3480156106e257600080fd5b506103f16106f13660046135b8565b6114c0565b34801561070257600080fd5b506103f161071136600461372d565b6115aa565b34801561072257600080fd5b5061039c60195481565b34801561073857600080fd5b506103f161074736600461388b565b6116ac565b34801561075857600080fd5b5061039c6107673660046135b8565b6116e7565b34801561077857600080fd5b506103f1611746565b34801561078d57600080fd5b506103f161079c3660046136ed565b6117ba565b3480156107ad57600080fd5b506103f16107bc3660046135b8565b611867565b3480156107cd57600080fd5b5061039c601f5481565b3480156107e357600080fd5b5061039c60175481565b3480156107f957600080fd5b506103f16108083660046136ed565b6118c6565b34801561081957600080fd5b5061039c601c5481565b34801561082f57600080fd5b5061041361083e3660046135b8565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561086857600080fd5b506000546001600160a01b0316610491565b34801561088657600080fd5b506103f161089536600461383d565b61196e565b3480156108a657600080fd5b506103c46119b8565b3480156108bb57600080fd5b506103f16108ca3660046138bc565b6119c7565b3480156108db57600080fd5b506104136108ea3660046136c2565b611a3e565b3480156108fb57600080fd5b5061041361090a3660046136c2565b611a8d565b34801561091b57600080fd5b5061039c600b5481565b34801561093157600080fd5b5061039c601a5481565b34801561094757600080fd5b5061039c601d5481565b34801561095d57600080fd5b5061039c601e5481565b34801561097357600080fd5b506103f16109823660046135f0565b611a9a565b34801561099357600080fd5b5061039c60185481565b3480156109a957600080fd5b5061039c6109b83660046135f0565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109ef57600080fd5b506103f16109fe3660046135b8565b611af2565b348015610a0f57600080fd5b506103f1610a1e3660046135b8565b611b3d565b348015610a2f57600080fd5b506103f1610a3e3660046135b8565b611ec3565b348015610a4f57600080fd5b506103f1610a5e3660046135b8565b611f11565b348015610a6f57600080fd5b5061039c600a5481565b348015610a8557600080fd5b5060295461041390600160a81b900460ff1681565b606060158054610aa990613b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad590613b7a565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b5f5760405162461bcd60e51b8152600401610b569061398c565b60405180910390fd5b610b8081610b7a6103e8601254611ffb90919063ffffffff16565b9061203d565b60175550565b6000610b9333848461211b565b5060015b92915050565b6000546001600160a01b03163314610bc75760405162461bcd60e51b8152600401610b569061398c565b6107d18210610c2f5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b56565b6011546000908390610c4c90600160a01b900460ff16600a613a99565b610c569084613b44565b610c609190613b44565b905080610c6c866116e7565b1015610cba5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b56565b60005b83811015610d3757610d2586868684818110610ce957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610cfe91906135b8565b601154610d1690600160a01b900460ff16600a613a99565b610d209087613b44565b61223f565b80610d2f81613bb5565b915050610cbd565b505050505050565b6000610d4c84848461223f565b610d9e8433610d9985604051806060016040528060288152602001613c0d602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612762565b61211b565b5060019392505050565b6000546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610b569061398c565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610e1457600080fd5b505afa158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c9190613801565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed2919061379e565b50505050565b6000546001600160a01b03163314610f025760405162461bcd60e51b8152600401610b569061398c565b6029805460ff60a81b1916600160a81b84151502179055610f22306114c0565b602954610f37906001600160a01b03166114c0565b602954600160a81b900460ff168015610f505750600b54155b15610f5f5743600b55600a8190555b5050565b6000601354821115610fca5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b56565b6000610fd461279c565b9050610fe08382611ffb565b9392505050565b6000546001600160a01b031633146110115760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b0381166000908152600e602052604090205460ff166110c75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b56565b60005b601054811015610f5f57816001600160a01b0316601082815481106110ff57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561120e576010805461112a90600190613b63565b8154811061114857634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b03909216918390811061118257634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff1916905560108054806111e857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061121881613bb5565b9150506110ca565b6000546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b569061398c565b6029805460ff60b81b1916905560125461126d90600290610b7a906103e8611ffb565b60175561128161127c306116e7565b6127bf565b565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b93918590610d9990866120bc565b336000818152600e602052604090205460ff161561132e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b56565b6000611339836129a3565b505050506001600160a01b038416600090815260066020526040902054919250611365919050826129f2565b6001600160a01b03831660009081526006602052604090205560135461138b90826129f2565b60135560145461139b90846120bc565b601455505050565b6000546001600160a01b031633146113cd5760405162461bcd60e51b8152600401610b569061398c565b60298054911515600160b81b0260ff60b81b19909216919091179055565b600060125483111561143f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b56565b8161145e57600061144f846129a3565b50939550610b97945050505050565b6000611469846129a3565b50929550610b97945050505050565b6000546001600160a01b031633146114a25760405162461bcd60e51b8152600401610b569061398c565b60298054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03811660009081526006602052604090205415611544576001600160a01b03811660009081526006602052604090205461152a90610f63565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d45760405162461bcd60e51b8152600401610b569061398c565b60005b82811015610ed257600f600085858481811061160357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061161891906135b8565b6001600160a01b0316815260208101919091526040016000205460ff1661169c57816009600086868581811061165e57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061167391906135b8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6116a581613bb5565b90506115d7565b6000546001600160a01b031633146116d65760405162461bcd60e51b8152600401610b569061398c565b601c92909255601d55601e55601f55565b6001600160a01b0381166000908152600e602052604081205460ff161561172457506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b9790610f63565b6000546001600160a01b031633146117705760405162461bcd60e51b8152600401610b569061398c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117e45760405162461bcd60e51b8152600401610b569061398c565b60005b81811015611862576001600c600085858581811061181557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061182a91906135b8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561185b81613bb5565b90506117e7565b505050565b6000546001600160a01b031633146118915760405162461bcd60e51b8152600401610b569061398c565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f5f573d6000803e3d6000fd5b6000546001600160a01b031633146118f05760405162461bcd60e51b8152600401610b569061398c565b60005b81811015611862576001600f600085858581811061192157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061193691906135b8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561196781613bb5565b90506118f3565b6000546001600160a01b031633146119985760405162461bcd60e51b8152600401610b569061398c565b80826012546119a79190613b44565b6119b19190613a36565b6027555050565b606060168054610aa990613b7a565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610b569061398c565b6018849055601a8390556019829055601b85905560248590556021849055602382905560228390556020819055611a3481611a2e848188886120bc565b906120bc565b6025555050505050565b6000610b933384610d9985604051806060016040528060258152602001613c35602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612762565b6000610b9333848461223f565b6000546001600160a01b03163314611ac45760405162461bcd60e51b8152600401610b569061398c565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611b675760405162461bcd60e51b8152600401610b569061398c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf91906135d4565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c2757600080fd5b505afa158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5f91906135d4565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611ca557600080fd5b505afa158015611cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdd91906135d4565b90506001600160a01b038116611e8357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2657600080fd5b505afa158015611d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5e91906135d4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611da657600080fd5b505afa158015611dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dde91906135d4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e2657600080fd5b505af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e91906135d4565b602980546001600160a01b0319166001600160a01b0392909216919091179055611e9f565b602980546001600160a01b0319166001600160a01b0383161790555b50602880546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611eed5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f3b5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b038116611fa05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b56565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fe083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a34565b60008261204c57506000610b97565b60006120588385613b44565b9050826120658583613a36565b14610fe05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b56565b6000806120c98385613a1e565b905083811015610fe05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b56565b6001600160a01b03831661217d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b56565b6001600160a01b0382166121de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b56565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b56565b6001600160a01b0382166123055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b56565b600081116123675760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b56565b6001600160a01b03831660009081526009602052604090205460ff16156123d05760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610b56565b6000546001600160a01b038481169116148015906123fc57506000546001600160a01b03838116911614155b1561245a57602954600160a81b900460ff1661245a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b56565b6029546000906001600160a01b038581169116148061248657506029546001600160a01b038481169116145b80156124ce57506001600160a01b0384166000908152600c602052604090205460ff16806124cc57506001600160a01b0383166000908152600c602052604090205460ff165b155b156124d7575060015b6000600b5411801561251b57506001600160a01b0383166000908152600d602052604090205460ff1615801561251b57506000546001600160a01b03858116911614155b8015612536575043600a54600b546125339190613a1e565b11155b156125aa57601754612547846116e7565b6125519084613a1e565b11156125aa5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b56565b602554602655601b54602455602954600160a81b900460ff1680156125dc57506029546001600160a01b038481169116145b15612608576125fe601e54611a2e601d54601c546120bc90919063ffffffff16565b602655601f546024555b6000600b54118015612628575043600a54600b546126269190613a1e565b115b15612651576001600160a01b0383166000908152600960205260409020805460ff191660011790555b6000600b5411801561267157506000546001600160a01b03858116911614155b801561268c5750600a54600b546126889190613a1e565b4310155b80156126a15750602954600160b81b900460ff165b156126ad576103de6026555b602954600160b01b900460ff16156126f057602954600160a81b900460ff1680156126e557506029546001600160a01b038581169116145b156126f05760006026555b602954600160a01b900460ff161580156127135750602954600160a81b900460ff165b801561272c57506029546001600160a01b038481169116145b1561275657600061273c306116e7565b90506027548110612754575060275461275481612a62565b505b610ed284848484612bb2565b600081848411156127865760405162461bcd60e51b8152600401610b569190613939565b5060006127938486613b63565b95945050505050565b60008060006127a9612cde565b90925090506127b88282611ffb565b9250505090565b6029805460ff60a01b1916600160a01b1790556025546021546000916127f5916002916127ef918290879061203d565b90611ffb565b9050600061280383836129f2565b905061280e81612e98565b602154479060009061282e90612825906002611ffb565b602554906129f2565b9050600061285060026127ef846127ef6021548861203d90919063ffffffff16565b9050600061286d836127ef6023548761203d90919063ffffffff16565b9050600061288a846127ef6022548861203d90919063ffffffff16565b905060006128a7856127ef6020548961203d90919063ffffffff16565b90504780156128f5576003546128c79084906001600160a01b0316613056565b6004546128de9083906001600160a01b0316613056565b6005546128f59085906001600160a01b0316613056565b881561290557612905898661308c565b602954601154612922916001600160a01b0390811691168c61223f565b602960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b50506029805460ff60a01b19169055505050505050505050505050565b60008060008060008060008060006129ba8a613170565b92509250925060008060006129d88d86866129d361279c565b6131b2565b919f909e50909c50959a5093985091965092945050505050565b6000610fe083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612762565b60008183612a555760405162461bcd60e51b8152600401610b569190613939565b5060006127938486613a36565b6029805460ff60a01b1916600160a01b179055602554602154600091612a92916002916127ef918290879061203d565b90506000612aa083836129f2565b9050612aab81612e98565b6021544790600090612ac290612825906002611ffb565b90506000612ae460026127ef846127ef6021548861203d90919063ffffffff16565b90506000612b01836127ef6023548761203d90919063ffffffff16565b90506000612b1e846127ef6022548861203d90919063ffffffff16565b90506000612b3b856127ef6020548961203d90919063ffffffff16565b9050478015612b8957600354612b5b9084906001600160a01b0316613056565b600454612b729083906001600160a01b0316613056565b600554612b899085906001600160a01b0316613056565b8815612b9957612b99898661308c565b50506029805460ff60a01b191690555050505050505050565b60245460265482612bc857600060248190556026555b6001600160a01b0386166000908152600e602052604090205460ff168015612c0957506001600160a01b0385166000908152600e602052604090205460ff16155b15612c1e57612c19868686613202565b612cca565b6001600160a01b0386166000908152600e602052604090205460ff16158015612c5f57506001600160a01b0385166000908152600e602052604090205460ff165b15612c6f57612c19868686613328565b6001600160a01b0386166000908152600e602052604090205460ff168015612caf57506001600160a01b0385166000908152600e602052604090205460ff165b15612cbf57612c198686866133d1565b612cca868686613444565b82610d375760249190915560265550505050565b6013546012546000918291825b601054811015612e6857826006600060108481548110612d1b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d945750816007600060108481548110612d6d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612daa57601354601254945094505050509091565b612dfe6006600060108481548110612dd257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906129f2565b9250612e546007600060108481548110612e2857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906129f2565b915080612e6081613bb5565b915050612ceb565b50601254601354612e7891611ffb565b821015612e8f576013546012549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612edb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f2f57600080fd5b505afa158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6791906135d4565b81600181518110612f8857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602854612fae913091168461211b565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fe79085906000908690309042906004016139e2565b600060405180830381600087803b15801561300157600080fd5b505af1158015613015573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161304a9291906139c1565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611862573d6000803e3d6000fd5b6028546130a49030906001600160a01b03168461211b565b6028546001600160a01b031663f305d7198230856000806130cd6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561313057600080fd5b505af1158015613144573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613169919061385e565b5050505050565b60008060008061317f85613488565b9050600061318c866134a5565b905060006131a48261319e89866129f2565b906129f2565b979296509094509092505050565b60008080806131c1888661203d565b905060006131cf888761203d565b905060006131dd888861203d565b905060006131ef8261319e86866129f2565b939b939a50919850919650505050505050565b600080600080600080613214876129a3565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061324690886129f2565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461327590876129f2565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546132a490866120bc565b6001600160a01b0389166000908152600660205260409020556132c6816134c2565b6132d0848361354a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161331591815260200190565b60405180910390a3505050505050505050565b60008060008060008061333a876129a3565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061336c90876129f2565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546133a290846120bc565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546132a490866120bc565b6000806000806000806133e3876129a3565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061341590886129f2565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461336c90876129f2565b600080600080600080613456876129a3565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061327590876129f2565b6000610b976103e86127ef6024548561203d90919063ffffffff16565b6000610b976103e86127ef6026548561203d90919063ffffffff16565b60006134cc61279c565b905060006134da838361203d565b306000908152600660205260409020549091506134f790826120bc565b30600090815260066020908152604080832093909355600e9052205460ff1615611862573060009081526007602052604090205461353590846120bc565b30600090815260076020526040902055505050565b60135461355790836129f2565b60135560145461356790826120bc565b6014555050565b60008083601f84011261357f578182fd5b50813567ffffffffffffffff811115613596578182fd5b6020830191508360208260051b85010111156135b157600080fd5b9250929050565b6000602082840312156135c9578081fd5b8135610fe081613be6565b6000602082840312156135e5578081fd5b8151610fe081613be6565b60008060408385031215613602578081fd5b823561360d81613be6565b9150602083013561361d81613be6565b809150509250929050565b60008060006060848603121561363c578081fd5b833561364781613be6565b9250602084013561365781613be6565b929592945050506040919091013590565b6000806000806060858703121561367d578081fd5b843561368881613be6565b9350602085013567ffffffffffffffff8111156136a3578182fd5b6136af8782880161356e565b9598909750949560400135949350505050565b600080604083850312156136d4578182fd5b82356136df81613be6565b946020939093013593505050565b600080602083850312156136ff578182fd5b823567ffffffffffffffff811115613715578283fd5b6137218582860161356e565b90969095509350505050565b600080600060408486031215613741578283fd5b833567ffffffffffffffff811115613757578384fd5b6137638682870161356e565b909450925050602084013561377781613bfe565b809150509250925092565b600060208284031215613793578081fd5b8135610fe081613bfe565b6000602082840312156137af578081fd5b8151610fe081613bfe565b600080604083850312156137cc578182fd5b82356136df81613bfe565b60008060408385031215613602578182fd5b6000602082840312156137fa578081fd5b5035919050565b600060208284031215613812578081fd5b5051919050565b6000806040838503121561382b578182fd5b82359150602083013561361d81613bfe565b6000806040838503121561384f578182fd5b50508035926020909101359150565b600080600060608486031215613872578081fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156138a0578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156138d3578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b8381101561392e5781516001600160a01b031687529582019590820190600101613909565b509495945050505050565b6000602080835283518082850152825b8181101561396557858101830151858201604001528201613949565b818111156139765783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006139da60408301846138f6565b949350505050565b85815284602082015260a060408201526000613a0160a08301866138f6565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613a3157613a31613bd0565b500190565b600082613a5157634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115613a91578160001904821115613a7757613a77613bd0565b80851615613a8457918102915b93841c9390800290613a5b565b509250929050565b6000610fe060ff841683600082613ab257506001610b97565b81613abf57506000610b97565b8160018114613ad55760028114613adf57613afb565b6001915050610b97565b60ff841115613af057613af0613bd0565b50506001821b610b97565b5060208310610133831016604e8410600b8410161715613b1e575081810a610b97565b613b288383613a56565b8060001904821115613b3c57613b3c613bd0565b029392505050565b6000816000190483118215151615613b5e57613b5e613bd0565b500290565b600082821015613b7557613b75613bd0565b500390565b600181811c90821680613b8e57607f821691505b60208210811415613baf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613bc957613bc9613bd0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114613bfb57600080fd5b50565b8015158114613bfb57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094f7274ed179c18a24d4158a2f8e2faf68a5bafb4f71b9b615a89965cd62696d64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80636ce37fa0116101d1578063a457c2d711610102578063dc44b6a0116100a0578063f259c57b1161006f578063f259c57b14610a23578063f2fde38b14610a43578063fabb0b4f14610a63578063ffb54a9914610a7957600080fd5b8063dc44b6a014610987578063dd62ed3e1461099d578063ea2f0b37146109e3578063eafb5a3c14610a0357600080fd5b8063c5d24189116100dc578063c5d2418914610925578063c86079521461093b578063c9cf778914610951578063d3f6a1571461096757600080fd5b8063a457c2d7146108cf578063a9059cbb146108ef578063bf56b3711461090f57600080fd5b806384530c461161016f5780638da5cb5b116101495780638da5cb5b1461085c5780638f4590d21461087a57806395d89b411461089a578063a3b84b6b146108af57600080fd5b806384530c46146107ed57806388790a681461080d57806388f820201461082357600080fd5b806371b9189c116101ab57806371b9189c14610781578063743942b6146107a15780637598f8bc146107c157806378109e54146107d757600080fd5b80636ce37fa01461072c57806370a082311461074c578063715018a61461076c57600080fd5b80632dd5efe7116102ab578063401aa5c0116102495780634b01547f116102235780634b01547f146106b657806352390c02146106d65780635d54c0af146106f6578063620158521461071657600080fd5b8063401aa5c0146106605780634549b0391461067657806349bd5a5e1461069657600080fd5b806337533c911161028557806337533c91146105eb57806339509351146106005780633bd5d173146106205780633ddf65ab1461064057600080fd5b80632dd5efe71461057f578063313ce5671461059f5780633685d419146105cb57600080fd5b806318160ddd1161031857806325b86edf116102f257806325b86edf146104fe5780632691bc801461051e5780632d4103d61461053f5780632d8381191461055f57600080fd5b806318160ddd146104a957806323ab8a93146104be57806323b872dd146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60275481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610a9a565b6040516103a69190613939565b3480156103dd57600080fd5b506103f16103ec3660046137e9565b610b2c565b005b3480156103ff57600080fd5b5061041361040e3660046136c2565b610b86565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e3660046135b8565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060145461039c565b34801561047d57600080fd5b50602854610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060125461039c565b3480156104ca57600080fd5b506103f16104d9366004613668565b610b9d565b3480156104ea57600080fd5b506104136104f9366004613628565b610d3f565b34801561050a57600080fd5b506103f16105193660046137d7565b610da8565b34801561052a57600080fd5b5060295461041390600160b01b900460ff1681565b34801561054b57600080fd5b506103f161055a3660046137ba565b610ed8565b34801561056b57600080fd5b5061039c61057a3660046137e9565b610f63565b34801561058b57600080fd5b506103f161059a3660046135b8565b610fe7565b3480156105ab57600080fd5b50601154600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105d757600080fd5b506103f16105e63660046135b8565b611035565b3480156105f757600080fd5b506103f1611220565b34801561060c57600080fd5b5061041361061b3660046136c2565b611283565b34801561062c57600080fd5b506103f161063b3660046137e9565b6112b9565b34801561064c57600080fd5b506103f161065b366004613782565b6113a3565b34801561066c57600080fd5b5061039c601b5481565b34801561068257600080fd5b5061039c610691366004613819565b6113eb565b3480156106a257600080fd5b50602954610491906001600160a01b031681565b3480156106c257600080fd5b506103f16106d1366004613782565b611478565b3480156106e257600080fd5b506103f16106f13660046135b8565b6114c0565b34801561070257600080fd5b506103f161071136600461372d565b6115aa565b34801561072257600080fd5b5061039c60195481565b34801561073857600080fd5b506103f161074736600461388b565b6116ac565b34801561075857600080fd5b5061039c6107673660046135b8565b6116e7565b34801561077857600080fd5b506103f1611746565b34801561078d57600080fd5b506103f161079c3660046136ed565b6117ba565b3480156107ad57600080fd5b506103f16107bc3660046135b8565b611867565b3480156107cd57600080fd5b5061039c601f5481565b3480156107e357600080fd5b5061039c60175481565b3480156107f957600080fd5b506103f16108083660046136ed565b6118c6565b34801561081957600080fd5b5061039c601c5481565b34801561082f57600080fd5b5061041361083e3660046135b8565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561086857600080fd5b506000546001600160a01b0316610491565b34801561088657600080fd5b506103f161089536600461383d565b61196e565b3480156108a657600080fd5b506103c46119b8565b3480156108bb57600080fd5b506103f16108ca3660046138bc565b6119c7565b3480156108db57600080fd5b506104136108ea3660046136c2565b611a3e565b3480156108fb57600080fd5b5061041361090a3660046136c2565b611a8d565b34801561091b57600080fd5b5061039c600b5481565b34801561093157600080fd5b5061039c601a5481565b34801561094757600080fd5b5061039c601d5481565b34801561095d57600080fd5b5061039c601e5481565b34801561097357600080fd5b506103f16109823660046135f0565b611a9a565b34801561099357600080fd5b5061039c60185481565b3480156109a957600080fd5b5061039c6109b83660046135f0565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109ef57600080fd5b506103f16109fe3660046135b8565b611af2565b348015610a0f57600080fd5b506103f1610a1e3660046135b8565b611b3d565b348015610a2f57600080fd5b506103f1610a3e3660046135b8565b611ec3565b348015610a4f57600080fd5b506103f1610a5e3660046135b8565b611f11565b348015610a6f57600080fd5b5061039c600a5481565b348015610a8557600080fd5b5060295461041390600160a81b900460ff1681565b606060158054610aa990613b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad590613b7a565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b5f5760405162461bcd60e51b8152600401610b569061398c565b60405180910390fd5b610b8081610b7a6103e8601254611ffb90919063ffffffff16565b9061203d565b60175550565b6000610b9333848461211b565b5060015b92915050565b6000546001600160a01b03163314610bc75760405162461bcd60e51b8152600401610b569061398c565b6107d18210610c2f5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b56565b6011546000908390610c4c90600160a01b900460ff16600a613a99565b610c569084613b44565b610c609190613b44565b905080610c6c866116e7565b1015610cba5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b56565b60005b83811015610d3757610d2586868684818110610ce957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610cfe91906135b8565b601154610d1690600160a01b900460ff16600a613a99565b610d209087613b44565b61223f565b80610d2f81613bb5565b915050610cbd565b505050505050565b6000610d4c84848461223f565b610d9e8433610d9985604051806060016040528060288152602001613c0d602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612762565b61211b565b5060019392505050565b6000546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610b569061398c565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610e1457600080fd5b505afa158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c9190613801565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed2919061379e565b50505050565b6000546001600160a01b03163314610f025760405162461bcd60e51b8152600401610b569061398c565b6029805460ff60a81b1916600160a81b84151502179055610f22306114c0565b602954610f37906001600160a01b03166114c0565b602954600160a81b900460ff168015610f505750600b54155b15610f5f5743600b55600a8190555b5050565b6000601354821115610fca5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b56565b6000610fd461279c565b9050610fe08382611ffb565b9392505050565b6000546001600160a01b031633146110115760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b0381166000908152600e602052604090205460ff166110c75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b56565b60005b601054811015610f5f57816001600160a01b0316601082815481106110ff57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561120e576010805461112a90600190613b63565b8154811061114857634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b03909216918390811061118257634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff1916905560108054806111e857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061121881613bb5565b9150506110ca565b6000546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b569061398c565b6029805460ff60b81b1916905560125461126d90600290610b7a906103e8611ffb565b60175561128161127c306116e7565b6127bf565b565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b93918590610d9990866120bc565b336000818152600e602052604090205460ff161561132e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b56565b6000611339836129a3565b505050506001600160a01b038416600090815260066020526040902054919250611365919050826129f2565b6001600160a01b03831660009081526006602052604090205560135461138b90826129f2565b60135560145461139b90846120bc565b601455505050565b6000546001600160a01b031633146113cd5760405162461bcd60e51b8152600401610b569061398c565b60298054911515600160b81b0260ff60b81b19909216919091179055565b600060125483111561143f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b56565b8161145e57600061144f846129a3565b50939550610b97945050505050565b6000611469846129a3565b50929550610b97945050505050565b6000546001600160a01b031633146114a25760405162461bcd60e51b8152600401610b569061398c565b60298054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03811660009081526006602052604090205415611544576001600160a01b03811660009081526006602052604090205461152a90610f63565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d45760405162461bcd60e51b8152600401610b569061398c565b60005b82811015610ed257600f600085858481811061160357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061161891906135b8565b6001600160a01b0316815260208101919091526040016000205460ff1661169c57816009600086868581811061165e57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061167391906135b8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6116a581613bb5565b90506115d7565b6000546001600160a01b031633146116d65760405162461bcd60e51b8152600401610b569061398c565b601c92909255601d55601e55601f55565b6001600160a01b0381166000908152600e602052604081205460ff161561172457506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b9790610f63565b6000546001600160a01b031633146117705760405162461bcd60e51b8152600401610b569061398c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117e45760405162461bcd60e51b8152600401610b569061398c565b60005b81811015611862576001600c600085858581811061181557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061182a91906135b8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561185b81613bb5565b90506117e7565b505050565b6000546001600160a01b031633146118915760405162461bcd60e51b8152600401610b569061398c565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f5f573d6000803e3d6000fd5b6000546001600160a01b031633146118f05760405162461bcd60e51b8152600401610b569061398c565b60005b81811015611862576001600f600085858581811061192157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061193691906135b8565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561196781613bb5565b90506118f3565b6000546001600160a01b031633146119985760405162461bcd60e51b8152600401610b569061398c565b80826012546119a79190613b44565b6119b19190613a36565b6027555050565b606060168054610aa990613b7a565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610b569061398c565b6018849055601a8390556019829055601b85905560248590556021849055602382905560228390556020819055611a3481611a2e848188886120bc565b906120bc565b6025555050505050565b6000610b933384610d9985604051806060016040528060258152602001613c35602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612762565b6000610b9333848461223f565b6000546001600160a01b03163314611ac45760405162461bcd60e51b8152600401610b569061398c565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611b675760405162461bcd60e51b8152600401610b569061398c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf91906135d4565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c2757600080fd5b505afa158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5f91906135d4565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611ca557600080fd5b505afa158015611cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdd91906135d4565b90506001600160a01b038116611e8357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2657600080fd5b505afa158015611d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5e91906135d4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611da657600080fd5b505afa158015611dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dde91906135d4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e2657600080fd5b505af1158015611e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5e91906135d4565b602980546001600160a01b0319166001600160a01b0392909216919091179055611e9f565b602980546001600160a01b0319166001600160a01b0383161790555b50602880546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611eed5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f3b5760405162461bcd60e51b8152600401610b569061398c565b6001600160a01b038116611fa05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b56565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fe083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a34565b60008261204c57506000610b97565b60006120588385613b44565b9050826120658583613a36565b14610fe05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b56565b6000806120c98385613a1e565b905083811015610fe05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b56565b6001600160a01b03831661217d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b56565b6001600160a01b0382166121de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b56565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b56565b6001600160a01b0382166123055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b56565b600081116123675760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b56565b6001600160a01b03831660009081526009602052604090205460ff16156123d05760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610b56565b6000546001600160a01b038481169116148015906123fc57506000546001600160a01b03838116911614155b1561245a57602954600160a81b900460ff1661245a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b56565b6029546000906001600160a01b038581169116148061248657506029546001600160a01b038481169116145b80156124ce57506001600160a01b0384166000908152600c602052604090205460ff16806124cc57506001600160a01b0383166000908152600c602052604090205460ff165b155b156124d7575060015b6000600b5411801561251b57506001600160a01b0383166000908152600d602052604090205460ff1615801561251b57506000546001600160a01b03858116911614155b8015612536575043600a54600b546125339190613a1e565b11155b156125aa57601754612547846116e7565b6125519084613a1e565b11156125aa5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b56565b602554602655601b54602455602954600160a81b900460ff1680156125dc57506029546001600160a01b038481169116145b15612608576125fe601e54611a2e601d54601c546120bc90919063ffffffff16565b602655601f546024555b6000600b54118015612628575043600a54600b546126269190613a1e565b115b15612651576001600160a01b0383166000908152600960205260409020805460ff191660011790555b6000600b5411801561267157506000546001600160a01b03858116911614155b801561268c5750600a54600b546126889190613a1e565b4310155b80156126a15750602954600160b81b900460ff165b156126ad576103de6026555b602954600160b01b900460ff16156126f057602954600160a81b900460ff1680156126e557506029546001600160a01b038581169116145b156126f05760006026555b602954600160a01b900460ff161580156127135750602954600160a81b900460ff165b801561272c57506029546001600160a01b038481169116145b1561275657600061273c306116e7565b90506027548110612754575060275461275481612a62565b505b610ed284848484612bb2565b600081848411156127865760405162461bcd60e51b8152600401610b569190613939565b5060006127938486613b63565b95945050505050565b60008060006127a9612cde565b90925090506127b88282611ffb565b9250505090565b6029805460ff60a01b1916600160a01b1790556025546021546000916127f5916002916127ef918290879061203d565b90611ffb565b9050600061280383836129f2565b905061280e81612e98565b602154479060009061282e90612825906002611ffb565b602554906129f2565b9050600061285060026127ef846127ef6021548861203d90919063ffffffff16565b9050600061286d836127ef6023548761203d90919063ffffffff16565b9050600061288a846127ef6022548861203d90919063ffffffff16565b905060006128a7856127ef6020548961203d90919063ffffffff16565b90504780156128f5576003546128c79084906001600160a01b0316613056565b6004546128de9083906001600160a01b0316613056565b6005546128f59085906001600160a01b0316613056565b881561290557612905898661308c565b602954601154612922916001600160a01b0390811691168c61223f565b602960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b50506029805460ff60a01b19169055505050505050505050505050565b60008060008060008060008060006129ba8a613170565b92509250925060008060006129d88d86866129d361279c565b6131b2565b919f909e50909c50959a5093985091965092945050505050565b6000610fe083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612762565b60008183612a555760405162461bcd60e51b8152600401610b569190613939565b5060006127938486613a36565b6029805460ff60a01b1916600160a01b179055602554602154600091612a92916002916127ef918290879061203d565b90506000612aa083836129f2565b9050612aab81612e98565b6021544790600090612ac290612825906002611ffb565b90506000612ae460026127ef846127ef6021548861203d90919063ffffffff16565b90506000612b01836127ef6023548761203d90919063ffffffff16565b90506000612b1e846127ef6022548861203d90919063ffffffff16565b90506000612b3b856127ef6020548961203d90919063ffffffff16565b9050478015612b8957600354612b5b9084906001600160a01b0316613056565b600454612b729083906001600160a01b0316613056565b600554612b899085906001600160a01b0316613056565b8815612b9957612b99898661308c565b50506029805460ff60a01b191690555050505050505050565b60245460265482612bc857600060248190556026555b6001600160a01b0386166000908152600e602052604090205460ff168015612c0957506001600160a01b0385166000908152600e602052604090205460ff16155b15612c1e57612c19868686613202565b612cca565b6001600160a01b0386166000908152600e602052604090205460ff16158015612c5f57506001600160a01b0385166000908152600e602052604090205460ff165b15612c6f57612c19868686613328565b6001600160a01b0386166000908152600e602052604090205460ff168015612caf57506001600160a01b0385166000908152600e602052604090205460ff165b15612cbf57612c198686866133d1565b612cca868686613444565b82610d375760249190915560265550505050565b6013546012546000918291825b601054811015612e6857826006600060108481548110612d1b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d945750816007600060108481548110612d6d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612daa57601354601254945094505050509091565b612dfe6006600060108481548110612dd257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906129f2565b9250612e546007600060108481548110612e2857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906129f2565b915080612e6081613bb5565b915050612ceb565b50601254601354612e7891611ffb565b821015612e8f576013546012549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612edb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612f2f57600080fd5b505afa158015612f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6791906135d4565b81600181518110612f8857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602854612fae913091168461211b565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fe79085906000908690309042906004016139e2565b600060405180830381600087803b15801561300157600080fd5b505af1158015613015573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161304a9291906139c1565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611862573d6000803e3d6000fd5b6028546130a49030906001600160a01b03168461211b565b6028546001600160a01b031663f305d7198230856000806130cd6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561313057600080fd5b505af1158015613144573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613169919061385e565b5050505050565b60008060008061317f85613488565b9050600061318c866134a5565b905060006131a48261319e89866129f2565b906129f2565b979296509094509092505050565b60008080806131c1888661203d565b905060006131cf888761203d565b905060006131dd888861203d565b905060006131ef8261319e86866129f2565b939b939a50919850919650505050505050565b600080600080600080613214876129a3565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061324690886129f2565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461327590876129f2565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546132a490866120bc565b6001600160a01b0389166000908152600660205260409020556132c6816134c2565b6132d0848361354a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161331591815260200190565b60405180910390a3505050505050505050565b60008060008060008061333a876129a3565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061336c90876129f2565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546133a290846120bc565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546132a490866120bc565b6000806000806000806133e3876129a3565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061341590886129f2565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461336c90876129f2565b600080600080600080613456876129a3565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061327590876129f2565b6000610b976103e86127ef6024548561203d90919063ffffffff16565b6000610b976103e86127ef6026548561203d90919063ffffffff16565b60006134cc61279c565b905060006134da838361203d565b306000908152600660205260409020549091506134f790826120bc565b30600090815260066020908152604080832093909355600e9052205460ff1615611862573060009081526007602052604090205461353590846120bc565b30600090815260076020526040902055505050565b60135461355790836129f2565b60135560145461356790826120bc565b6014555050565b60008083601f84011261357f578182fd5b50813567ffffffffffffffff811115613596578182fd5b6020830191508360208260051b85010111156135b157600080fd5b9250929050565b6000602082840312156135c9578081fd5b8135610fe081613be6565b6000602082840312156135e5578081fd5b8151610fe081613be6565b60008060408385031215613602578081fd5b823561360d81613be6565b9150602083013561361d81613be6565b809150509250929050565b60008060006060848603121561363c578081fd5b833561364781613be6565b9250602084013561365781613be6565b929592945050506040919091013590565b6000806000806060858703121561367d578081fd5b843561368881613be6565b9350602085013567ffffffffffffffff8111156136a3578182fd5b6136af8782880161356e565b9598909750949560400135949350505050565b600080604083850312156136d4578182fd5b82356136df81613be6565b946020939093013593505050565b600080602083850312156136ff578182fd5b823567ffffffffffffffff811115613715578283fd5b6137218582860161356e565b90969095509350505050565b600080600060408486031215613741578283fd5b833567ffffffffffffffff811115613757578384fd5b6137638682870161356e565b909450925050602084013561377781613bfe565b809150509250925092565b600060208284031215613793578081fd5b8135610fe081613bfe565b6000602082840312156137af578081fd5b8151610fe081613bfe565b600080604083850312156137cc578182fd5b82356136df81613bfe565b60008060408385031215613602578182fd5b6000602082840312156137fa578081fd5b5035919050565b600060208284031215613812578081fd5b5051919050565b6000806040838503121561382b578182fd5b82359150602083013561361d81613bfe565b6000806040838503121561384f578182fd5b50508035926020909101359150565b600080600060608486031215613872578081fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156138a0578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156138d3578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b8381101561392e5781516001600160a01b031687529582019590820190600101613909565b509495945050505050565b6000602080835283518082850152825b8181101561396557858101830151858201604001528201613949565b818111156139765783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006139da60408301846138f6565b949350505050565b85815284602082015260a060408201526000613a0160a08301866138f6565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613a3157613a31613bd0565b500190565b600082613a5157634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115613a91578160001904821115613a7757613a77613bd0565b80851615613a8457918102915b93841c9390800290613a5b565b509250929050565b6000610fe060ff841683600082613ab257506001610b97565b81613abf57506000610b97565b8160018114613ad55760028114613adf57613afb565b6001915050610b97565b60ff841115613af057613af0613bd0565b50506001821b610b97565b5060208310610133831016604e8410600b8410161715613b1e575081810a610b97565b613b288383613a56565b8060001904821115613b3c57613b3c613bd0565b029392505050565b6000816000190483118215151615613b5e57613b5e613bd0565b500290565b600082821015613b7557613b75613bd0565b500390565b600181811c90821680613b8e57607f821691505b60208210811415613baf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613bc957613bc9613bd0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114613bfb57600080fd5b50565b8015158114613bfb57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094f7274ed179c18a24d4158a2f8e2faf68a5bafb4f71b9b615a89965cd62696d64736f6c63430008040033

Deployed Bytecode Sourcemap

14399:25717:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16705:56;;;;;;;;;;;;;;;;;;;17591:25:1;;;17579:2;17564:18;16705:56:0;;;;;;;;19420:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38159:175::-;;;;;;;;;;-1:-1:-1;38159:175:0;;;;;:::i;:::-;;:::i;:::-;;20332:161;;;;;;;;;;-1:-1:-1;20332:161:0;;;;;:::i;:::-;;:::i;:::-;;;9602:14:1;;9595:22;9577:41;;9565:2;9550:18;20332:161:0;9532:92:1;37230:106:0;;;;;;;;;;-1:-1:-1;37230:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;37310:18:0;37286:4;37310:18;;;:9;:18;;;;;;;;;37230:106;21453:87;;;;;;;;;;-1:-1:-1;21522:10:0;;21453:87;;16781:41;;;;;;;;;;-1:-1:-1;16781:41:0;;;;-1:-1:-1;;;;;16781:41:0;;;;;;-1:-1:-1;;;;;8193:32:1;;;8175:51;;8163:2;8148:18;16781:41:0;8130:102:1;19697:95:0;;;;;;;;;;-1:-1:-1;19777:7:0;;19697:95;;38649:511;;;;;;;;;;-1:-1:-1;38649:511:0;;;;;:::i;:::-;;:::i;20501:313::-;;;;;;;;;;-1:-1:-1;20501:313:0;;;;;:::i;:::-;;:::i;37974:177::-;;;;;;;;;;-1:-1:-1;37974:177:0;;;;;:::i;:::-;;:::i;16932:34::-;;;;;;;;;;-1:-1:-1;16932:34:0;;;;-1:-1:-1;;;16932:34:0;;;;;;18107:337;;;;;;;;;;-1:-1:-1;18107:337:0;;;;;:::i;:::-;;:::i;22385:253::-;;;;;;;;;;-1:-1:-1;22385:253:0;;;;;:::i;:::-;;:::i;38342:113::-;;;;;;;;;;-1:-1:-1;38342:113:0;;;;;:::i;:::-;;:::i;19606:83::-;;;;;;;;;;-1:-1:-1;19672:9:0;;-1:-1:-1;;;19672:9:0;;;;19606:83;;18723:4:1;18711:17;;;18693:36;;18681:2;18666:18;19606:83:0;18648:87:1;22917:479:0;;;;;;;;;;-1:-1:-1;22917:479:0;;;;;:::i;:::-;;:::i;18676:205::-;;;;;;;;;;;;;:::i;20822:218::-;;;;;;;;;;-1:-1:-1;20822:218:0;;;;;:::i;:::-;;:::i;21552:377::-;;;;;;;;;;-1:-1:-1;21552:377:0;;;;;:::i;:::-;;:::i;18568:96::-;;;;;;;;;;-1:-1:-1;18568:96:0;;;;;:::i;:::-;;:::i;16056:36::-;;;;;;;;;;;;;;;;21941:436;;;;;;;;;;-1:-1:-1;21941:436:0;;;;;:::i;:::-;;:::i;16829:28::-;;;;;;;;;;-1:-1:-1;16829:28:0;;;;-1:-1:-1;;;;;16829:28:0;;;18458:102;;;;;;;;;;-1:-1:-1;18458:102:0;;;;;:::i;:::-;;:::i;22646:263::-;;;;;;;;;;-1:-1:-1;22646:263:0;;;;;:::i;:::-;;:::i;37348:267::-;;;;;;;;;;-1:-1:-1;37348:267:0;;;;;:::i;:::-;;:::i;15959:30::-;;;;;;;;;;;;;;;;39773:299;;;;;;;;;;-1:-1:-1;39773:299:0;;;;;:::i;:::-;;:::i;19800:198::-;;;;;;;;;;-1:-1:-1;19800:198:0;;;;;:::i;:::-;;:::i;6030:148::-;;;;;;;;;;;;;:::i;36554:198::-;;;;;;;;;;-1:-1:-1;36554:198:0;;;;;:::i;:::-;;:::i;37831:135::-;;;;;;;;;;-1:-1:-1;37831:135:0;;;;;:::i;:::-;;:::i;16242:37::-;;;;;;;;;;;;;;;;15846:56;;;;;;;;;;;;;;;;37627:188;;;;;;;;;;-1:-1:-1;37627:188:0;;;;;:::i;:::-;;:::i;16101:36::-;;;;;;;;;;;;;;;;21325:120;;;;;;;;;;-1:-1:-1;21325:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21417:20:0;21393:4;21417:20;;;:11;:20;;;;;;;;;21325:120;5805:79;;;;;;;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;5870:6:0;5805:79;;38463:178;;;;;;;;;;-1:-1:-1;38463:178:0;;;;;:::i;:::-;;:::i;19511:87::-;;;;;;;;;;;;;:::i;39169:596::-;;;;;;;;;;-1:-1:-1;39169:596:0;;;;;:::i;:::-;;:::i;21048:269::-;;;;;;;;;;-1:-1:-1;21048:269:0;;;;;:::i;:::-;;:::i;20006:167::-;;;;;;;;;;-1:-1:-1;20006:167:0;;;;;:::i;:::-;;:::i;15146:29::-;;;;;;;;;;;;;;;;16006:36;;;;;;;;;;;;;;;;16144:38;;;;;;;;;;;;;;;;16196:31;;;;;;;;;;;;;;;;36892:190;;;;;;;;;;-1:-1:-1;36892:190:0;;;;;:::i;:::-;;:::i;15911:36::-;;;;;;;;;;;;;;;;20181:143;;;;;;;;;;-1:-1:-1;20181:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20289:18:0;;;20262:7;20289:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20181:143;36770:110;;;;;;;;;;-1:-1:-1;36770:110:0;;;;;:::i;:::-;;:::i;18889:523::-;;;;;;;;;;-1:-1:-1;18889:523:0;;;;;:::i;:::-;;:::i;36434:112::-;;;;;;;;;;-1:-1:-1;36434:112:0;;;;;:::i;:::-;;:::i;6186:244::-;;;;;;;;;;-1:-1:-1;6186:244:0;;;;;:::i;:::-;;:::i;15110:29::-;;;;;;;;;;;;;;;;16894:31;;;;;;;;;;-1:-1:-1;16894:31:0;;;;-1:-1:-1;;;16894:31:0;;;;;;19420:83;19457:13;19490:5;19483:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19420:83;:::o;38159:175::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;;;;;;;;;38280:46:::1;38302:23;38280:17;38292:4;38280:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;38262:15;:64:::0;-1:-1:-1;38159:175:0:o;20332:161::-;20407:4;20424:39;189:10;20447:7;20456:6;20424:8;:39::i;:::-;-1:-1:-1;20481:4:0;20332:161;;;;;:::o;38649:511::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;38796:4:::1;38777:23:::0;::::1;38769:81;;;::::0;-1:-1:-1;;;38769:81:0;;13727:2:1;38769:81:0::1;::::0;::::1;13709:21:1::0;13766:2;13746:18;;;13739:30;13805:34;13785:18;;;13778:62;-1:-1:-1;;;13856:18:1;;;13849:44;13910:19;;38769:81:0::1;13699:236:1::0;38769:81:0::1;38913:9;::::0;38886:12:::1;::::0;38925:9;;38909:13:::1;::::0;-1:-1:-1;;;38913:9:0;::::1;;;38909:2;:13;:::i;:::-;38901:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;38886:55;;38981:4;38962:15;38972:4;38962:9;:15::i;:::-;:23;;38954:63;;;::::0;-1:-1:-1;;;38954:63:0;;13011:2:1;38954:63:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;13089:29;13069:18;;;13062:57;13136:18;;38954:63:0::1;12983:177:1::0;38954:63:0::1;39034:6;39030:123;39044:20:::0;;::::1;39030:123;;;39085:52;39095:4;39100:9;;39110:1;39100:12;;;;;-1:-1:-1::0;;;39100:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39126:9;::::0;39122:13:::1;::::0;-1:-1:-1;;;39126:9:0;::::1;;;39122:2;:13;:::i;:::-;39114:21;::::0;:6;:21:::1;:::i;:::-;39085:9;:52::i;:::-;39066:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39030:123;;;;6009:1;38649:511:::0;;;;:::o;20501:313::-;20599:4;20616:36;20626:6;20634:9;20645:6;20616:9;:36::i;:::-;20663:121;20672:6;189:10;20694:89;20732:6;20694:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20694:19:0;;;;;;:11;:19;;;;;;;;189:10;20694:33;;;;;;;;;;:37;:89::i;:::-;20663:8;:121::i;:::-;-1:-1:-1;20802:4:0;20501:313;;;;;:::o;37974:177::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;38075:30:::1;::::0;-1:-1:-1;;;38075:30:0;;38099:4:::1;38075:30;::::0;::::1;8175:51:1::0;38057:15:0::1;::::0;-1:-1:-1;;;;;38075:15:0;::::1;::::0;::::1;::::0;8148:18:1;;38075:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38116:27;::::0;-1:-1:-1;;;38116:27:0;;-1:-1:-1;;;;;8738:32:1;;;38116:27:0::1;::::0;::::1;8720:51:1::0;8787:18;;;8780:34;;;38057:48:0;;-1:-1:-1;38116:14:0;;::::1;::::0;::::1;::::0;8693:18:1;;38116:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6009:1;37974:177:::0;;:::o;18107:337::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18194:11:::1;:21:::0;;-1:-1:-1;;;;18194:21:0::1;-1:-1:-1::0;;;18194:21:0;::::1;;;;::::0;;18226:32:::1;18252:4;18226:17;:32::i;:::-;18287:13;::::0;18269:32:::1;::::0;-1:-1:-1;;;;;18287:13:0::1;18269:17;:32::i;:::-;18315:11;::::0;-1:-1:-1;;;18315:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;18330:10:0::1;::::0;:15;18315:30:::1;18312:125;;;18374:12;18361:10;:25:::0;18401:10:::1;:24:::0;;;18312:125:::1;18107:337:::0;;:::o;22385:253::-;22451:7;22490;;22479;:18;;22471:73;;;;-1:-1:-1;;;22471:73:0;;11078:2:1;22471:73:0;;;11060:21:1;11117:2;11097:18;;;11090:30;11156:34;11136:18;;;11129:62;-1:-1:-1;;;11207:18:1;;;11200:40;11257:19;;22471:73:0;11050:232:1;22471:73:0;22555:19;22578:10;:8;:10::i;:::-;22555:33;-1:-1:-1;22606:24:0;:7;22555:33;22606:11;:24::i;:::-;22599:31;22385:253;-1:-1:-1;;;22385:253:0:o;38342:113::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38415:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;38415:32:0::1;38443:4;38415:32;::::0;;38342:113::o;22917:479::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22999:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22991:60;;;::::0;-1:-1:-1;;;22991:60:0;;12655:2:1;22991:60:0::1;::::0;::::1;12637:21:1::0;12694:2;12674:18;;;12667:30;12733:29;12713:18;;;12706:57;12780:18;;22991:60:0::1;12627:177:1::0;22991:60:0::1;23067:9;23062:327;23086:9;:16:::0;23082:20;::::1;23062:327;;;23144:7;-1:-1:-1::0;;;;;23128:23:0::1;:9;23138:1;23128:12;;;;;;-1:-1:-1::0;;;23128:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23128:12:0::1;:23;23124:254;;;23187:9;23197:16:::0;;:20:::1;::::0;23216:1:::1;::::0;23197:20:::1;:::i;:::-;23187:31;;;;;;-1:-1:-1::0;;;23187:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23172:9:::1;:12:::0;;-1:-1:-1;;;;;23187:31:0;;::::1;::::0;23182:1;;23172:12;::::1;;;-1:-1:-1::0;;;23172:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23172:46:0::1;-1:-1:-1::0;;;;;23172:46:0;;::::1;;::::0;;23237:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23276:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23276:28:0::1;::::0;;23323:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23323:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23323:15:0;;;;;-1:-1:-1;;;;;;23323:15:0::1;::::0;;;;;18107:337;;:::o;23124:254::-:1;23104:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23062:327;;18676:205:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18737:11:::1;:17:::0;;-1:-1:-1;;;;18737:17:0::1;::::0;;18782:7:::1;::::0;:24:::1;::::0;18804:1:::1;::::0;18782:17:::1;::::0;18794:4:::1;18782:11;:17::i;:24::-;18764:15;:42:::0;18824:49:::1;18848:24;18866:4;18848:9;:24::i;:::-;18824:23;:49::i;:::-;18676:205::o:0;20822:218::-;189:10;20910:4;20959:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20959:34:0;;;;;;;;;;20910:4;;20927:83;;20950:7;;20959:50;;20998:10;20959:38;:50::i;21552:377::-;189:10;21604:14;21653:19;;;:11;:19;;;;;;;;21652:20;21644:77;;;;-1:-1:-1;;;21644:77:0;;16882:2:1;21644:77:0;;;16864:21:1;16921:2;16901:18;;;16894:30;16960:34;16940:18;;;16933:62;-1:-1:-1;;;17011:18:1;;;17004:42;17063:19;;21644:77:0;16854:234:1;21644:77:0;21733:15;21757:19;21768:7;21757:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21805:15:0;;;;;;:7;:15;;;;;;21732:44;;-1:-1:-1;21805:28:0;;:15;-1:-1:-1;21732:44:0;21805:19;:28::i;:::-;-1:-1:-1;;;;;21787:15:0;;;;;;:7;:15;;;;;:46;21854:7;;:20;;21866:7;21854:11;:20::i;:::-;21844:7;:30;21898:10;;:23;;21913:7;21898:14;:23::i;:::-;21885:10;:36;-1:-1:-1;;;21552:377:0:o;18568:96::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18637:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;18637:19:0::1;-1:-1:-1::0;;;;18637:19:0;;::::1;::::0;;;::::1;::::0;;18568:96::o;21941:436::-;22031:7;22070;;22059;:18;;22051:62;;;;-1:-1:-1;;;22051:62:0;;13367:2:1;22051:62:0;;;13349:21:1;13406:2;13386:18;;;13379:30;13445:33;13425:18;;;13418:61;13496:18;;22051:62:0;13339:181:1;22051:62:0;22129:17;22124:246;;22164:15;22188:19;22199:7;22188:10;:19::i;:::-;-1:-1:-1;22163:44:0;;-1:-1:-1;22222:14:0;;-1:-1:-1;;;;;22222:14:0;22124:246;22271:23;22302:19;22313:7;22302:10;:19::i;:::-;-1:-1:-1;22269:52:0;;-1:-1:-1;22336:22:0;;-1:-1:-1;;;;;22336:22:0;18458:102;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18530:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;18530:22:0::1;-1:-1:-1::0;;;;18530:22:0;;::::1;::::0;;;::::1;::::0;;18458:102::o;22646:263::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22725:16:0;::::1;22744:1;22725:16:::0;;;:7:::1;:16;::::0;;;;;:20;22722:108:::1;;-1:-1:-1::0;;;;;22801:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22781:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22762:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22722:108:::1;-1:-1:-1::0;;;;;22840:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22840:27:0::1;22863:4;22840:27:::0;;::::1;::::0;;;22878:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22878:23:0::1;::::0;;::::1;::::0;;22646:263::o;37348:267::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;37448:9:::1;37443:165;37459:20:::0;;::::1;37443:165;;;37505:10;:24;37516:9;;37526:1;37516:12;;;;;-1:-1:-1::0;;;37516:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37505:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37505:24:0;;::::1;;37501:96;;37575:6;37549:9;:23;37559:9;;37569:1;37559:12;;;;;-1:-1:-1::0;;;37559:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37549:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37549:23:0;:32;;-1:-1:-1;;37549:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37501:96:::1;37481:3;::::0;::::1;:::i;:::-;;;37443:165;;39773:299:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;39910:17:::1;:33:::0;;;;39954:17:::1;:33:::0;39998:11:::1;:21:::0;40030:18:::1;:34:::0;39773:299::o;19800:198::-;-1:-1:-1;;;;;19890:20:0;;19866:7;19890:20;;;:11;:20;;;;;;;;19886:49;;;-1:-1:-1;;;;;;19919:16:0;;;;;:7;:16;;;;;;;19800:198::o;19886:49::-;-1:-1:-1;;;;;19973:16:0;;;;;;:7;:16;;;;;;19953:37;;:19;:37::i;6030:148::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;6137:1:::1;6121:6:::0;;6100:40:::1;::::0;-1:-1:-1;;;;;6121:6:0;;::::1;::::0;6100:40:::1;::::0;6137:1;;6100:40:::1;6168:1;6151:19:::0;;-1:-1:-1;;;;;;6151:19:0::1;::::0;;6030:148::o;36554:198::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;36641:9:::1;36636:109;36652:20:::0;;::::1;36636:109;;;36729:4;36694:18;:32;36713:9;;36723:1;36713:12;;;;;-1:-1:-1::0;;;36713:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36694:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36694:32:0;:39;;-1:-1:-1;;36694:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36674:3:::1;::::0;::::1;:::i;:::-;;;36636:109;;;;36554:198:::0;;:::o;37831:135::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;37916:42:::1;::::0;-1:-1:-1;;;;;37916:19:0;::::1;::::0;37936:21:::1;37916:42:::0;::::1;;;::::0;::::1;::::0;;;37936:21;37916:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;37627:188:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;37714:9:::1;37709:99;37725:20:::0;;::::1;37709:99;;;37792:4;37767:10;:24;37778:9;;37788:1;37778:12;;;;;-1:-1:-1::0;;;37778:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37767:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37767:24:0;:29;;-1:-1:-1;;37767:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37747:3:::1;::::0;::::1;:::i;:::-;;;37709:99;;38463:178:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;38617:16:::1;38597;38587:7;;:26;;;;:::i;:::-;38586:47;;;;:::i;:::-;38570:13;:63:::0;-1:-1:-1;;38463:178:0:o;19511:87::-;19550:13;19583:7;19576:14;;;;;:::i;39169:596::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;39337:16:::1;:32:::0;;;39380:16:::1;:32:::0;;;39423:10:::1;:20:::0;;;39454:17:::1;:33:::0;;;39500:13:::1;:29:::0;;;39540:12:::1;:28:::0;;;39579:6:::1;:16:::0;;;39606:12:::1;:28:::0;;;39645:12:::1;:26:::0;;;39695:60:::1;39658:13:::0;39695:42:::1;39436:7:::0;39695:42;39356:13;39399;39695:16:::1;:30::i;:::-;:34:::0;::::1;:42::i;:60::-;39684:8;:71:::0;-1:-1:-1;;;;;39169:596:0:o;21048:269::-;21141:4;21158:129;189:10;21181:7;21190:96;21229:15;21190:96;;;;;;;;;;;;;;;;;189:10;21190:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21190:34:0;;;;;;;;;;;;:38;:96::i;20006:167::-;20084:4;20101:42;189:10;20125:9;20136:6;20101:9;:42::i;36892:190::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;36989:15:::1;:43:::0;;-1:-1:-1;;;;;36989:43:0;;::::1;-1:-1:-1::0;;;;;;36989:43:0;;::::1;;::::0;;;37043:9:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;36892:190::o;36770:110::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36837:27:0::1;36867:5;36837:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36837:35:0::1;::::0;;36770:110::o;18889:523::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18962:29:::1;19013:9;18962:61;;19034:16;19071:10;-1:-1:-1::0;;;;;19071:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19053:47:0::1;;19109:4;19116:10;-1:-1:-1::0;;;;;19116:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19053:81;::::0;-1:-1:-1;;;;;;19053:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;19053:81:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;19053:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19034:100:::0;-1:-1:-1;;;;;;19149:22:0;::::1;19145:221;;19222:10;-1:-1:-1::0;;;;;19222:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19204:50:0::1;;19263:4;19270:10;-1:-1:-1::0;;;;;19270:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19204:84;::::0;-1:-1:-1;;;;;;19204:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;19204:84:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;19204:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19188:13;:100:::0;;-1:-1:-1;;;;;;19188:100:0::1;-1:-1:-1::0;;;;;19188:100:0;;;::::1;::::0;;;::::1;::::0;;19145:221:::1;;;19330:13;:24:::0;;-1:-1:-1;;;;;;19330:24:0::1;-1:-1:-1::0;;;;;19330:24:0;::::1;;::::0;;19145:221:::1;-1:-1:-1::0;19376:15:0::1;:28:::0;;-1:-1:-1;;;;;;19376:28:0::1;-1:-1:-1::0;;;;;19376:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18889:523:0:o;36434:112::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36504:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36504:34:0::1;36534:4;36504:34;::::0;;36434:112::o;6186:244::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6275:22:0;::::1;6267:73;;;::::0;-1:-1:-1;;;6267:73:0;;11489:2:1;6267:73:0::1;::::0;::::1;11471:21:1::0;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;-1:-1:-1;;;11618:18:1;;;11611:36;11664:19;;6267:73:0::1;11461:228:1::0;6267:73:0::1;6377:6;::::0;;6356:38:::1;::::0;-1:-1:-1;;;;;6356:38:0;;::::1;::::0;6377:6;::::1;::::0;6356:38:::1;::::0;::::1;6405:6;:17:::0;;-1:-1:-1;;;;;;6405:17:0::1;-1:-1:-1::0;;;;;6405:17:0;;;::::1;::::0;;;::::1;::::0;;6186:244::o;1964:132::-;2022:7;2049:39;2053:1;2056;2049:39;;;;;;;;;;;;;;;;;:3;:39::i;1704:250::-;1762:7;1786:6;1782:47;;-1:-1:-1;1816:1:0;1809:8;;1782:47;1841:9;1853:5;1857:1;1853;:5;:::i;:::-;1841:17;-1:-1:-1;1886:1:0;1877:5;1881:1;1841:17;1877:5;:::i;:::-;:10;1869:56;;;;-1:-1:-1;;;1869:56:0;;14142:2:1;1869:56:0;;;14124:21:1;14181:2;14161:18;;;14154:30;14220:34;14200:18;;;14193:62;-1:-1:-1;;;14271:18:1;;;14264:31;14312:19;;1869:56:0;14114:223:1;1171:181:0;1229:7;;1261:5;1265:1;1261;:5;:::i;:::-;1249:17;;1290:1;1285;:6;;1277:46;;;;-1:-1:-1;;;1277:46:0;;12299:2:1;1277:46:0;;;12281:21:1;12338:2;12318:18;;;12311:30;12377:29;12357:18;;;12350:57;12424:18;;1277:46:0;12271:177:1;23404:337:0;-1:-1:-1;;;;;23497:19:0;;23489:68;;;;-1:-1:-1;;;23489:68:0;;16124:2:1;23489:68:0;;;16106:21:1;16163:2;16143:18;;;16136:30;16202:34;16182:18;;;16175:62;-1:-1:-1;;;16253:18:1;;;16246:34;16297:19;;23489:68:0;16096:226:1;23489:68:0;-1:-1:-1;;;;;23576:21:0;;23568:68;;;;-1:-1:-1;;;23568:68:0;;11896:2:1;23568:68:0;;;11878:21:1;11935:2;11915:18;;;11908:30;11974:34;11954:18;;;11947:62;-1:-1:-1;;;12025:18:1;;;12018:32;12067:19;;23568:68:0;11868:224:1;23568:68:0;-1:-1:-1;;;;;23649:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23701:32;;17591:25:1;;;23701:32:0;;17564:18:1;23701:32:0;;;;;;;23404:337;;;:::o;23749:2332::-;-1:-1:-1;;;;;23871:18:0;;23863:68;;;;-1:-1:-1;;;23863:68:0;;15315:2:1;23863:68:0;;;15297:21:1;15354:2;15334:18;;;15327:30;15393:34;15373:18;;;15366:62;-1:-1:-1;;;15444:18:1;;;15437:35;15489:19;;23863:68:0;15287:227:1;23863:68:0;-1:-1:-1;;;;;23950:16:0;;23942:64;;;;-1:-1:-1;;;23942:64:0;;10674:2:1;23942:64:0;;;10656:21:1;10713:2;10693:18;;;10686:30;10752:34;10732:18;;;10725:62;-1:-1:-1;;;10803:18:1;;;10796:33;10846:19;;23942:64:0;10646:225:1;23942:64:0;24034:1;24025:6;:10;24017:64;;;;-1:-1:-1;;;24017:64:0;;14905:2:1;24017:64:0;;;14887:21:1;14944:2;14924:18;;;14917:30;14983:34;14963:18;;;14956:62;-1:-1:-1;;;15034:18:1;;;15027:39;15083:19;;24017:64:0;14877:231:1;24017:64:0;-1:-1:-1;;;;;24101:15:0;;;;;;:9;:15;;;;;;;;24100:16;24092:52;;;;-1:-1:-1;;;24092:52:0;;17295:2:1;24092:52:0;;;17277:21:1;17334:2;17314:18;;;17307:30;17373:25;17353:18;;;17346:53;17416:18;;24092:52:0;17267:173:1;24092:52:0;5843:7;5870:6;-1:-1:-1;;;;;24159:14:0;;;5870:6;;24159:14;;;;:30;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;24177:12:0;;;5870:6;;24177:12;;24159:30;24155:84;;;24199:11;;-1:-1:-1;;;24199:11:0;;;;24191:48;;;;-1:-1:-1;;;24191:48:0;;16529:2:1;24191:48:0;;;16511:21:1;16568:2;16548:18;;;16541:30;16607:26;16587:18;;;16580:54;16651:18;;24191:48:0;16501:174:1;24191:48:0;24378:13;;24301:12;;-1:-1:-1;;;;;24372:19:0;;;24378:13;;24372:19;;:40;;-1:-1:-1;24399:13:0;;-1:-1:-1;;;;;24395:17:0;;;24399:13;;24395:17;24372:40;24371:99;;;;-1:-1:-1;;;;;;24419:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24447:22:0;;;;;;:18;:22;;;;;;;;24419:50;24417:53;24371:99;24366:148;;;-1:-1:-1;24498:4:0;24366:148;24540:1;24529:10;;:12;:59;;;;-1:-1:-1;;;;;;24547:22:0;;;;;;:18;:22;;;;;;;;24546:23;:41;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;24573:14:0;;;5870:6;;24573:14;;24546:41;24529:106;;;;;24622:12;24608:10;;24595;;:23;;;;:::i;:::-;24594:40;24592:43;24529:106;24526:247;;;24686:15;;24671:13;24681:2;24671:9;:13::i;:::-;24663:21;;:6;:21;:::i;:::-;:38;;24655:106;;;;-1:-1:-1;;;24655:106:0;;15721:2:1;24655:106:0;;;15703:21:1;15760:2;15740:18;;;15733:30;15799:34;15779:18;;;15772:62;-1:-1:-1;;;15850:18:1;;;15843:32;15892:19;;24655:106:0;15693:224:1;24655:106:0;24811:8;;24795:15;:24;24844:17;;24830:13;:31;24877:11;;-1:-1:-1;;;24877:11:0;;;;:34;;;;-1:-1:-1;24898:13:0;;-1:-1:-1;;;;;24892:19:0;;;24898:13;;24892:19;24877:34;24874:194;;;24952:57;24997:11;;24952:40;24974:17;;24952;;:21;;:40;;;;:::i;:57::-;24935:15;:74;25038:18;;25024:13;:32;24874:194;25138:1;25127:10;;:12;:56;;;;;25171:12;25157:10;;25144;;:23;;;;:::i;:::-;25143:40;25127:56;25124:109;;;-1:-1:-1;;;;;25203:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;25203:18:0;25217:4;25203:18;;;25124:109;25345:1;25334:10;;:12;:30;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;25350:14:0;;;5870:6;;25350:14;;25334:30;:75;;;;;25398:10;;25385;;:23;;;;:::i;:::-;25368:12;:41;;25334:75;:91;;;;-1:-1:-1;25414:11:0;;-1:-1:-1;;;25414:11:0;;;;25334:91;25331:154;;;25461:3;25445:15;:19;25331:154;25500:14;;-1:-1:-1;;;25500:14:0;;;;25497:150;;;25534:11;;-1:-1:-1;;;25534:11:0;;;;:36;;;;-1:-1:-1;25557:13:0;;-1:-1:-1;;;;;25549:21:0;;;25557:13;;25549:21;25534:36;25531:105;;;25618:1;25602:15;:17;25531:105;25680:6;;-1:-1:-1;;;25680:6:0;;;;25679:7;:22;;;;-1:-1:-1;25690:11:0;;-1:-1:-1;;;25690:11:0;;;;25679:22;:45;;;;-1:-1:-1;25711:13:0;;-1:-1:-1;;;;;25705:19:0;;;25711:13;;25705:19;25679:45;25675:350;;;25749:28;25780:24;25798:4;25780:9;:24::i;:::-;25749:55;;25858:13;;25836:20;:35;25833:169;;-1:-1:-1;25918:13:0;;25954:32;25918:13;25954:10;:32::i;:::-;25675:350;;26035:38;26050:4;26055:2;26058:6;26065:7;26035:14;:38::i;1504:192::-;1590:7;1626:12;1618:6;;;;1610:29;;;;-1:-1:-1;;;1610:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1650:9:0;1662:5;1666:1;1662;:5;:::i;:::-;1650:17;1504:192;-1:-1:-1;;;;;1504:192:0:o;34971:163::-;35012:7;35033:15;35050;35069:19;:17;:19::i;:::-;35032:56;;-1:-1:-1;35032:56:0;-1:-1:-1;35106:20:0;35032:56;;35106:11;:20::i;:::-;35099:27;;;;34971:163;:::o;27596:1519::-;17237:6;:13;;-1:-1:-1;;;;17237:13:0;-1:-1:-1;;;17237:13:0;;;27807:8:::1;::::0;27775:12:::1;::::0;17237:13;;27736:101:::1;::::0;27835:1:::1;::::0;27736:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;27710:127:::0;-1:-1:-1;27850:20:0::1;27873:41;:20:::0;27710:127;27873:24:::1;:41::i;:::-;27850:64;;27935:30;27952:12;27935:16;:30::i;:::-;28067:12;::::0;27998:21:::1;::::0;27978:17:::1;::::0;28054:33:::1;::::0;28067:19:::1;::::0;28084:1:::1;28067:16;:19::i;:::-;28054:8;::::0;;:12:::1;:33::i;:::-;28032:55;;28100:26;28129:93;28220:1;28129:72;28189:11;28129:41;28157:12;;28129:9;:27;;:41;;;;:::i;:93::-;28100:122;;28243:20;28266:38;28292:11;28266:21;28280:6;;28266:9;:13;;:21;;;;:::i;:38::-;28243:61;;28315:26;28344:68;28390:11;28344:27;28358:12;;28344:9;:13;;:27;;;;:::i;:68::-;28315:97;;28425:26;28454:70;28501:11;28454:27;28468:12;;28454:9;:13;;:27;;;;:::i;:70::-;28425:99:::0;-1:-1:-1;28626:21:0::1;28661:22:::0;;28658:216:::1;;28732:15;::::0;28700:48:::1;::::0;28713:18;;-1:-1:-1;;;;;28732:15:0::1;28700:12;:48::i;:::-;28795:15;::::0;28763:48:::1;::::0;28776:18;;-1:-1:-1;;;;;28795:15:0::1;28763:12;:48::i;:::-;28852:9;::::0;28826:36:::1;::::0;28839:12;;-1:-1:-1;;;;;28852:9:0::1;28826:12;:36::i;:::-;28888:19:::0;;28884:104:::1;;28928:48;28941:15;28957:18;28928:12;:48::i;:::-;29010:13;::::0;29024:4:::1;::::0;29000:50:::1;::::0;-1:-1:-1;;;;;29010:13:0;;::::1;::::0;29024:4:::1;29029:20:::0;29000:9:::1;:50::i;:::-;29076:13;;;;;;;;;-1:-1:-1::0;;;;;29076:13:0::1;-1:-1:-1::0;;;;;29061:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17273:6:0;:14;;-1:-1:-1;;;;17273:14:0;;;-1:-1:-1;;;;;;;;;;;;27596:1519:0:o;33769:419::-;33828:7;33837;33846;33855;33864;33873;33894:23;33919:12;33933:18;33955:20;33967:7;33955:11;:20::i;:::-;33893:82;;;;;;33987:15;34004:23;34029:12;34045:50;34057:7;34066:4;34072:10;34084;:8;:10::i;:::-;34045:11;:50::i;:::-;33986:109;;;;-1:-1:-1;33986:109:0;;-1:-1:-1;34146:15:0;;-1:-1:-1;34163:4:0;;-1:-1:-1;34169:10:0;;-1:-1:-1;33769:419:0;;-1:-1:-1;;;;;33769:419:0:o;1360:136::-;1418:7;1445:43;1449:1;1452;1445:43;;;;;;;;;;;;;;;;;:3;:43::i;2104:278::-;2190:7;2225:12;2218:5;2210:28;;;;-1:-1:-1;;;2210:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2249:9:0;2261:5;2265:1;2261;:5;:::i;26089:1372::-;17237:6;:13;;-1:-1:-1;;;;17237:13:0;-1:-1:-1;;;17237:13:0;;;26287:8:::1;::::0;26255:12:::1;::::0;17237:13;;26216:101:::1;::::0;26315:1:::1;::::0;26216:80:::1;::::0;;;:20;;:38:::1;:52::i;:101::-;26190:127:::0;-1:-1:-1;26330:20:0::1;26353:41;:20:::0;26190:127;26353:24:::1;:41::i;:::-;26330:64;;26415:30;26432:12;26415:16;:30::i;:::-;26547:12;::::0;26478:21:::1;::::0;26458:17:::1;::::0;26534:33:::1;::::0;26547:19:::1;::::0;26564:1:::1;26547:16;:19::i;26534:33::-;26512:55;;26580:26;26609:93;26700:1;26609:72;26669:11;26609:41;26637:12;;26609:9;:27;;:41;;;;:::i;:93::-;26580:122;;26723:20;26746:38;26772:11;26746:21;26760:6;;26746:9;:13;;:21;;;;:::i;:38::-;26723:61;;26795:26;26824:68;26870:11;26824:27;26838:12;;26824:9;:13;;:27;;;;:::i;:68::-;26795:97;;26904:26;26933:68;26979:11;26933:27;26947:12;;26933:9;:13;;:27;;;;:::i;:68::-;26904:97:::0;-1:-1:-1;27092:21:0::1;27127:22:::0;;27124:216:::1;;27198:15;::::0;27166:48:::1;::::0;27179:18;;-1:-1:-1;;;;;27198:15:0::1;27166:12;:48::i;:::-;27261:15;::::0;27229:48:::1;::::0;27242:18;;-1:-1:-1;;;;;27261:15:0::1;27229:12;:48::i;:::-;27318:9;::::0;27292:36:::1;::::0;27305:12;;-1:-1:-1;;;;;27318:9:0::1;27292:12;:36::i;:::-;27354:19:::0;;27350:104:::1;;27394:48;27407:15;27423:18;27394:12;:48::i;:::-;-1:-1:-1::0;;17273:6:0;:14;;-1:-1:-1;;;;17273:14:0;;;-1:-1:-1;;;;;;;;26089:1372:0:o;30335:943::-;30475:13;;30525:15;;30555:7;30551:88;;30594:1;30578:13;:17;;;30610:15;:17;30551:88;-1:-1:-1;;;;;30663:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30687:22:0;;;;;;:11;:22;;;;;;;;30686:23;30663:46;30659:467;;;30726:48;30748:6;30756:9;30767:6;30726:21;:48::i;:::-;30659:467;;;-1:-1:-1;;;;;30797:19:0;;;;;;:11;:19;;;;;;;;30796:20;:46;;;;-1:-1:-1;;;;;;30820:22:0;;;;;;:11;:22;;;;;;;;30796:46;30792:334;;;30859:46;30879:6;30887:9;30898:6;30859:19;:46::i;30792:334::-;-1:-1:-1;;;;;30927:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;30950:22:0;;;;;;:11;:22;;;;;;;;30927:45;30923:203;;;30989:48;31011:6;31019:9;31030:6;30989:21;:48::i;30923:203::-;31070:44;31088:6;31096:9;31107:6;31070:17;:44::i;:::-;31150:7;31146:125;;31173:13;:38;;;;31226:15;:33;-1:-1:-1;;;;30335:943:0:o;35142:561::-;35239:7;;35275;;35192;;;;;35299:289;35323:9;:16;35319:20;;35299:289;;;35389:7;35365;:21;35373:9;35383:1;35373:12;;;;;;-1:-1:-1;;;35373:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35373:12:0;35365:21;;;;;;;;;;;;;:31;;:66;;;35424:7;35400;:21;35408:9;35418:1;35408:12;;;;;;-1:-1:-1;;;35408:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35408:12:0;35400:21;;;;;;;;;;;;;:31;35365:66;35361:97;;;35441:7;;35450;;35433:25;;;;;;;35142:561;;:::o;35361:97::-;35483:34;35495:7;:21;35503:9;35513:1;35503:12;;;;;;-1:-1:-1;;;35503:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35503:12:0;35495:21;;;;;;;;;;;;;35483:7;;:11;:34::i;:::-;35473:44;;35542:34;35554:7;:21;35562:9;35572:1;35562:12;;;;;;-1:-1:-1;;;35562:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35562:12:0;35554:21;;;;;;;;;;;;;35542:7;;:11;:34::i;:::-;35532:44;-1:-1:-1;35341:3:0;;;;:::i;:::-;;;;35299:289;;;-1:-1:-1;35624:7:0;;35612;;:20;;:11;:20::i;:::-;35602:7;:30;35598:61;;;35642:7;;35651;;35634:25;;;;;;35142:561;;:::o;35598:61::-;35678:7;;35687;;-1:-1:-1;35142:561:0;-1:-1:-1;35142:561:0:o;29134:666::-;29284:16;;;29298:1;29284:16;;;;;;;;29260:21;;29284:16;;;;;;;;;;-1:-1:-1;29284:16:0;29260:40;;29329:4;29311;29316:1;29311:7;;;;;;-1:-1:-1;;;29311:7:0;;;;;;;;;-1:-1:-1;;;;;29311:23:0;;;:7;;;;;;;;;;:23;;;;29355:15;;:22;;;-1:-1:-1;;;29355:22:0;;;;:15;;;;;:20;;:22;;;;;29311:7;;29355:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29345:4;29350:1;29345:7;;;;;;-1:-1:-1;;;29345:7:0;;;;;;;;;-1:-1:-1;;;;;29345:32:0;;;:7;;;;;;;;;:32;29422:15;;29390:62;;29407:4;;29422:15;29440:11;29390:8;:62::i;:::-;29491:15;;:240;;-1:-1:-1;;;29491:240:0;;-1:-1:-1;;;;;29491:15:0;;;;:66;;:240;;29572:11;;29491:15;;29642:4;;29669;;29705:15;;29491:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29757:35;29774:11;29787:4;29757:35;;;;;;;:::i;:::-;;;;;;;;29134:666;;:::o;27473:111::-;27553:23;;-1:-1:-1;;;;;27553:15:0;;;:23;;;;;27569:6;;27553:23;;;;27569:6;27553:15;:23;;;;;;;;;;;;;;;;;;;29814:513;29994:15;;29962:62;;29979:4;;-1:-1:-1;;;;;29994:15:0;30012:11;29962:8;:62::i;:::-;30067:15;;-1:-1:-1;;;;;30067:15:0;:31;30106:9;30139:4;30159:11;30067:15;;30271:7;5843;5870:6;-1:-1:-1;;;;;5870:6:0;;5805:79;30271:7;30067:252;;;;;;-1:-1:-1;;;;;;30067:252:0;;;-1:-1:-1;;;;;9184:15:1;;;30067:252:0;;;9166:34:1;9216:18;;;9209:34;;;;9259:18;;;9252:34;;;;9302:18;;;9295:34;9366:15;;;9345:19;;;9338:44;30293:15:0;9398:19:1;;;9391:35;9100:19;;30067:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29814:513;;:::o;34196:330::-;34256:7;34265;34274;34294:12;34309:24;34325:7;34309:15;:24::i;:::-;34294:39;;34344:18;34365:30;34387:7;34365:21;:30::i;:::-;34344:51;-1:-1:-1;34406:23:0;34432:33;34344:51;34432:17;:7;34444:4;34432:11;:17::i;:::-;:21;;:33::i;:::-;34406:59;34501:4;;-1:-1:-1;34507:10:0;;-1:-1:-1;34196:330:0;;-1:-1:-1;;;34196:330:0:o;34534:429::-;34649:7;;;;34705:24;:7;34717:11;34705;:24::i;:::-;34687:42;-1:-1:-1;34740:12:0;34755:21;:4;34764:11;34755:8;:21::i;:::-;34740:36;-1:-1:-1;34787:18:0;34808:27;:10;34823:11;34808:14;:27::i;:::-;34787:48;-1:-1:-1;34846:23:0;34872:33;34787:48;34872:17;:7;34884:4;34872:11;:17::i;:33::-;34924:7;;;;-1:-1:-1;34950:4:0;;-1:-1:-1;34534:429:0;;-1:-1:-1;;;;;;;34534:429:0:o;32390:566::-;32493:15;32510:23;32535:12;32549:23;32574:12;32588:18;32610:19;32621:7;32610:10;:19::i;:::-;-1:-1:-1;;;;;32658:15:0;;;;;;:7;:15;;;;;;32492:137;;-1:-1:-1;32492:137:0;;-1:-1:-1;32492:137:0;;-1:-1:-1;32492:137:0;-1:-1:-1;32492:137:0;-1:-1:-1;32492:137:0;-1:-1:-1;32658:28:0;;32678:7;32658:19;:28::i;:::-;-1:-1:-1;;;;;32640:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32715:7;:15;;;;:28;;32735:7;32715:19;:28::i;:::-;-1:-1:-1;;;;;32697:15:0;;;;;;;:7;:15;;;;;;:46;;;;32775:18;;;;;;;:39;;32798:15;32775:22;:39::i;:::-;-1:-1:-1;;;;;32754:18:0;;;;;;:7;:18;;;;;:60;32828:26;32843:10;32828:14;:26::i;:::-;32865:23;32877:4;32883;32865:11;:23::i;:::-;32921:9;-1:-1:-1;;;;;32904:44:0;32913:6;-1:-1:-1;;;;;32904:44:0;;32932:15;32904:44;;;;17591:25:1;;17579:2;17564:18;;17546:76;32904:44:0;;;;;;;;32390:566;;;;;;;;;:::o;31796:586::-;31897:15;31914:23;31939:12;31953:23;31978:12;31992:18;32014:19;32025:7;32014:10;:19::i;:::-;-1:-1:-1;;;;;32062:15:0;;;;;;:7;:15;;;;;;31896:137;;-1:-1:-1;31896:137:0;;-1:-1:-1;31896:137:0;;-1:-1:-1;31896:137:0;-1:-1:-1;31896:137:0;-1:-1:-1;31896:137:0;-1:-1:-1;32062:28:0;;31896:137;32062:19;:28::i;:::-;-1:-1:-1;;;;;32044:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32122:18;;;;;:7;:18;;;;;:39;;32145:15;32122:22;:39::i;:::-;-1:-1:-1;;;;;32101:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32193:7;:18;;;;:39;;32216:15;32193:22;:39::i;32964:642::-;33067:15;33084:23;33109:12;33123:23;33148:12;33162:18;33184:19;33195:7;33184:10;:19::i;:::-;-1:-1:-1;;;;;33232:15:0;;;;;;:7;:15;;;;;;33066:137;;-1:-1:-1;33066:137:0;;-1:-1:-1;33066:137:0;;-1:-1:-1;33066:137:0;-1:-1:-1;33066:137:0;-1:-1:-1;33066:137:0;-1:-1:-1;33232:28:0;;33252:7;33232:19;:28::i;:::-;-1:-1:-1;;;;;33214:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33289:7;:15;;;;:28;;33309:7;33289:19;:28::i;31286:502::-;31385:15;31402:23;31427:12;31441:23;31466:12;31480:18;31502:19;31513:7;31502:10;:19::i;:::-;-1:-1:-1;;;;;31550:15:0;;;;;;:7;:15;;;;;;31384:137;;-1:-1:-1;31384:137:0;;-1:-1:-1;31384:137:0;;-1:-1:-1;31384:137:0;-1:-1:-1;31384:137:0;-1:-1:-1;31384:137:0;-1:-1:-1;31550:28:0;;31384:137;31550:19;:28::i;36082:160::-;36146:7;36173:61;36218:5;36173:26;36185:13;;36173:7;:11;;:26;;;;:::i;36254:168::-;36324:7;36351:63;36398:5;36351:28;36363:15;;36351:7;:11;;:28;;;;:::i;35715:355::-;35778:19;35801:10;:8;:10::i;:::-;35778:33;-1:-1:-1;35822:18:0;35843:27;:10;35778:33;35843:14;:27::i;:::-;35922:4;35906:22;;;;:7;:22;;;;;;35822:48;;-1:-1:-1;35906:38:0;;35822:48;35906:26;:38::i;:::-;35897:4;35881:22;;;;:7;:22;;;;;;;;:63;;;;35958:11;:26;;;;;;35955:107;;;36040:4;36024:22;;;;:7;:22;;;;;;:38;;36051:10;36024:26;:38::i;:::-;36015:4;35999:22;;;;:7;:22;;;;;:63;35715:355;;;:::o;33614:147::-;33692:7;;:17;;33704:4;33692:11;:17::i;:::-;33682:7;:27;33733:10;;:20;;33748:4;33733:14;:20::i;:::-;33720:10;:33;-1:-1:-1;;33614:147:0:o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:660::-;2190:6;2198;2206;2214;2267:2;2255:9;2246:7;2242:23;2238:32;2235:2;;;2288:6;2280;2273:22;2235:2;2332:9;2319:23;2351:31;2376:5;2351:31;:::i;:::-;2401:5;-1:-1:-1;2457:2:1;2442:18;;2429:32;2484:18;2473:30;;2470:2;;;2521:6;2513;2506:22;2470:2;2565:70;2627:7;2618:6;2607:9;2603:22;2565:70;:::i;:::-;2225:521;;2654:8;;-1:-1:-1;2539:96:1;;2736:2;2721:18;2708:32;;2225:521;-1:-1:-1;;;;2225:521:1:o;2751:325::-;2819:6;2827;2880:2;2868:9;2859:7;2855:23;2851:32;2848:2;;;2901:6;2893;2886:22;2848:2;2945:9;2932:23;2964:31;2989:5;2964:31;:::i;:::-;3014:5;3066:2;3051:18;;;;3038:32;;-1:-1:-1;;;2838:238:1:o;3081:457::-;3167:6;3175;3228:2;3216:9;3207:7;3203:23;3199:32;3196:2;;;3249:6;3241;3234:22;3196:2;3294:9;3281:23;3327:18;3319:6;3316:30;3313:2;;;3364:6;3356;3349:22;3313:2;3408:70;3470:7;3461:6;3450:9;3446:22;3408:70;:::i;:::-;3497:8;;3382:96;;-1:-1:-1;3186:352:1;-1:-1:-1;;;;3186:352:1:o;3543:586::-;3635:6;3643;3651;3704:2;3692:9;3683:7;3679:23;3675:32;3672:2;;;3725:6;3717;3710:22;3672:2;3770:9;3757:23;3803:18;3795:6;3792:30;3789:2;;;3840:6;3832;3825:22;3789:2;3884:70;3946:7;3937:6;3926:9;3922:22;3884:70;:::i;:::-;3973:8;;-1:-1:-1;3858:96:1;-1:-1:-1;;4058:2:1;4043:18;;4030:32;4071:28;4030:32;4071:28;:::i;:::-;4118:5;4108:15;;;3662:467;;;;;:::o;4134:251::-;4190:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:2;;;4264:6;4256;4249:22;4211:2;4308:9;4295:23;4327:28;4349:5;4327:28;:::i;4390:255::-;4457:6;4510:2;4498:9;4489:7;4485:23;4481:32;4478:2;;;4531:6;4523;4516:22;4478:2;4568:9;4562:16;4587:28;4609:5;4587:28;:::i;4650:319::-;4715:6;4723;4776:2;4764:9;4755:7;4751:23;4747:32;4744:2;;;4797:6;4789;4782:22;4744:2;4841:9;4828:23;4860:28;4882:5;4860:28;:::i;4974:411::-;5055:6;5063;5116:2;5104:9;5095:7;5091:23;5087:32;5084:2;;;5137:6;5129;5122:22;5390:190;5449:6;5502:2;5490:9;5481:7;5477:23;5473:32;5470:2;;;5523:6;5515;5508:22;5470:2;-1:-1:-1;5551:23:1;;5460:120;-1:-1:-1;5460:120:1:o;5585:194::-;5655:6;5708:2;5696:9;5687:7;5683:23;5679:32;5676:2;;;5729:6;5721;5714:22;5676:2;-1:-1:-1;5757:16:1;;5666:113;-1:-1:-1;5666:113:1:o;5784:319::-;5849:6;5857;5910:2;5898:9;5889:7;5885:23;5881:32;5878:2;;;5931:6;5923;5916:22;5878:2;5972:9;5959:23;5949:33;;6032:2;6021:9;6017:18;6004:32;6045:28;6067:5;6045:28;:::i;6108:258::-;6176:6;6184;6237:2;6225:9;6216:7;6212:23;6208:32;6205:2;;;6258:6;6250;6243:22;6205:2;-1:-1:-1;;6286:23:1;;;6356:2;6341:18;;;6328:32;;-1:-1:-1;6195:171:1:o;6371:316::-;6459:6;6467;6475;6528:2;6516:9;6507:7;6503:23;6499:32;6496:2;;;6549:6;6541;6534:22;6496:2;6583:9;6577:16;6567:26;;6633:2;6622:9;6618:18;6612:25;6602:35;;6677:2;6666:9;6662:18;6656:25;6646:35;;6486:201;;;;;:::o;6692:395::-;6778:6;6786;6794;6802;6855:3;6843:9;6834:7;6830:23;6826:33;6823:2;;;6877:6;6869;6862:22;6823:2;-1:-1:-1;;6905:23:1;;;6975:2;6960:18;;6947:32;;-1:-1:-1;7026:2:1;7011:18;;6998:32;;7077:2;7062:18;7049:32;;-1:-1:-1;6813:274:1;-1:-1:-1;6813:274:1:o;7092:464::-;7187:6;7195;7203;7211;7219;7272:3;7260:9;7251:7;7247:23;7243:33;7240:2;;;7294:6;7286;7279:22;7240:2;-1:-1:-1;;7322:23:1;;;7392:2;7377:18;;7364:32;;-1:-1:-1;7443:2:1;7428:18;;7415:32;;7494:2;7479:18;;7466:32;;-1:-1:-1;7545:3:1;7530:19;7517:33;;-1:-1:-1;7230:326:1;-1:-1:-1;7230:326:1:o;7561:463::-;7614:3;7652:5;7646:12;7679:6;7674:3;7667:19;7705:4;7734:2;7729:3;7725:12;7718:19;;7771:2;7764:5;7760:14;7792:3;7804:195;7818:6;7815:1;7812:13;7804:195;;;7883:13;;-1:-1:-1;;;;;7879:39:1;7867:52;;7939:12;;;;7974:15;;;;7915:1;7833:9;7804:195;;;-1:-1:-1;8015:3:1;;7622:402;-1:-1:-1;;;;;7622:402:1:o;9864:603::-;9976:4;10005:2;10034;10023:9;10016:21;10066:6;10060:13;10109:6;10104:2;10093:9;10089:18;10082:34;10134:4;10147:140;10161:6;10158:1;10155:13;10147:140;;;10256:14;;;10252:23;;10246:30;10222:17;;;10241:2;10218:26;10211:66;10176:10;;10147:140;;;10305:6;10302:1;10299:13;10296:2;;;10375:4;10370:2;10361:6;10350:9;10346:22;10342:31;10335:45;10296:2;-1:-1:-1;10451:2:1;10430:15;-1:-1:-1;;10426:29:1;10411:45;;;;10458:2;10407:54;;9985:482;-1:-1:-1;;;9985:482:1:o;14342:356::-;14544:2;14526:21;;;14563:18;;;14556:30;14622:34;14617:2;14602:18;;14595:62;14689:2;14674:18;;14516:182::o;17627:332::-;17834:6;17823:9;17816:25;17877:2;17872;17861:9;17857:18;17850:30;17797:4;17897:56;17949:2;17938:9;17934:18;17926:6;17897:56;:::i;:::-;17889:64;17806:153;-1:-1:-1;;;;17806:153:1:o;17964:582::-;18263:6;18252:9;18245:25;18306:6;18301:2;18290:9;18286:18;18279:34;18349:3;18344:2;18333:9;18329:18;18322:31;18226:4;18370:57;18422:3;18411:9;18407:19;18399:6;18370:57;:::i;:::-;-1:-1:-1;;;;;18463:32:1;;;;18458:2;18443:18;;18436:60;-1:-1:-1;18527:3:1;18512:19;18505:35;18362:65;18235:311;-1:-1:-1;;;18235:311:1:o;18740:128::-;18780:3;18811:1;18807:6;18804:1;18801:13;18798:2;;;18817:18;;:::i;:::-;-1:-1:-1;18853:9:1;;18788:80::o;18873:217::-;18913:1;18939;18929:2;;-1:-1:-1;;;18964:31:1;;19018:4;19015:1;19008:15;19046:4;18971:1;19036:15;18929:2;-1:-1:-1;19075:9:1;;18919:171::o;19095:422::-;19184:1;19227:5;19184:1;19241:270;19262:7;19252:8;19249:21;19241:270;;;19321:4;19317:1;19313:6;19309:17;19303:4;19300:27;19297:2;;;19330:18;;:::i;:::-;19380:7;19370:8;19366:22;19363:2;;;19400:16;;;;19363:2;19479:22;;;;19439:15;;;;19241:270;;;19245:3;19159:358;;;;;:::o;19522:140::-;19580:5;19609:47;19650:4;19640:8;19636:19;19630:4;19716:5;19746:8;19736:2;;-1:-1:-1;19787:1:1;19801:5;;19736:2;19835:4;19825:2;;-1:-1:-1;19872:1:1;19886:5;;19825:2;19917:4;19935:1;19930:59;;;;20003:1;19998:130;;;;19910:218;;19930:59;19960:1;19951:10;;19974:5;;;19998:130;20035:3;20025:8;20022:17;20019:2;;;20042:18;;:::i;:::-;-1:-1:-1;;20098:1:1;20084:16;;20113:5;;19910:218;;20212:2;20202:8;20199:16;20193:3;20187:4;20184:13;20180:36;20174:2;20164:8;20161:16;20156:2;20150:4;20147:12;20143:35;20140:77;20137:2;;;-1:-1:-1;20249:19:1;;;20281:5;;20137:2;20328:34;20353:8;20347:4;20328:34;:::i;:::-;20398:6;20394:1;20390:6;20386:19;20377:7;20374:32;20371:2;;;20409:18;;:::i;:::-;20447:20;;19726:747;-1:-1:-1;;;19726:747:1:o;20478:168::-;20518:7;20584:1;20580;20576:6;20572:14;20569:1;20566:21;20561:1;20554:9;20547:17;20543:45;20540:2;;;20591:18;;:::i;:::-;-1:-1:-1;20631:9:1;;20530:116::o;20651:125::-;20691:4;20719:1;20716;20713:8;20710:2;;;20724:18;;:::i;:::-;-1:-1:-1;20761:9:1;;20700:76::o;20781:380::-;20860:1;20856:12;;;;20903;;;20924:2;;20978:4;20970:6;20966:17;20956:27;;20924:2;21031;21023:6;21020:14;21000:18;20997:38;20994:2;;;21077:10;21072:3;21068:20;21065:1;21058:31;21112:4;21109:1;21102:15;21140:4;21137:1;21130:15;20994:2;;20836:325;;;:::o;21166:135::-;21205:3;-1:-1:-1;;21226:17:1;;21223:2;;;21246:18;;:::i;:::-;-1:-1:-1;21293:1:1;21282:13;;21213:88::o;21306:127::-;21367:10;21362:3;21358:20;21355:1;21348:31;21398:4;21395:1;21388:15;21422:4;21419:1;21412:15;21438:131;-1:-1:-1;;;;;21513:31:1;;21503:42;;21493:2;;21559:1;21556;21549:12;21493:2;21483:86;:::o;21574:118::-;21660:5;21653:13;21646:21;21639:5;21636:32;21626:2;;21682:1;21679;21672:12

Swarm Source

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