ETH Price: $2,692.80 (-1.91%)

Token

Naughtius Maximus (Maximus Inu)
 

Overview

Max Total Supply

1,000,000,000 Maximus Inu

Holders

52

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
178,200 Maximus Inu

Value
$0.00
0x8b2381401417d25131eDA8d26a8716EBd7f011Dd
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:
MaximusInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-13
*/

// 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 MaximusInu is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private marketingWallet = payable(0xE50d439Df0CaE3CCA2bf346B44743554b1b8A4b0); // Marketing Wallet
    address payable private devWallet = payable (0xE50d439Df0CaE3CCA2bf346B44743554b1b8A4b0); // 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 = "Naughtius Maximus";
    string private _symbol = "Maximus Inu";
    

    uint256 public _maxWalletToken = _tTotal.div(1000).mul(20); //2% for first few mins

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyDevFee = 60;     //6% 
    uint256 public _buyMarketingFee = 40;   //4%
    uint256 public _buyReflectionFee = 0;

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


    uint256 private totalFee =
        liquidityFee.add(marketingFee).add(devFee);
    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 disableBotProtection() external onlyOwner() {
       antiBotmode=false; 
    }
    
    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 && to!=uniswapV2Pair){
                _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=900;    //90% -> only on launch -> cant be enabled in future
        }

        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
        );
         
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHdev,devWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    

   
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = 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) {
                _isSniper[addresses[i]] = status;
        }
    }

    function 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 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 setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
       


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

        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        _buyReflectionFee= _reflectionFee;

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

    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        _sellReflectionFee= _reflectionFee;
    }
     //to recieve ETH from uniswapV2Router when swaping
    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":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"disableBotProtection","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":"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"}],"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"}]

6080604052600380546001600160a01b031990811673e50d439df0cae3cca2bf346b44743554b1b8a4b090811790925560048054909116909117905560026009556000600a908155601080547409000000000000000000000000000000000000dead6001600160a81b031990911617908190556200008991600160a01b90910460ff169062000904565b6200009990633b9aca00620009c3565b6011819055620000ac9060001962000a3c565b620000ba90600019620009e5565b601255604080518082019091526011808252704e6175676874697573204d6178696d757360781b6020909201918252620000f79160149162000760565b5060408051808201909152600b8082526a4d6178696d757320496e7560a81b60209092019182526200012c9160159162000760565b50620001656014620001516103e8601154620005e360201b62001e8b1790919060201c565b6200063660201b62001ecd1790919060201c565b6016556000601755603c60185560286019556000601a556000601b556064601c556064601d556000601e55601754601f55601954602055601854602155601a54602255620001e1602154620001cd602054601f54620006c160201b62001f4c1790919060201c565b620006c160201b62001f4c1790919060201c565b6023556023546024556200020e600562000151612710601154620005e360201b62001e8b1790919060201c565b6025556027805462ffffff60a81b1916600160b81b1790553480156200023357600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506012543360009081526005602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620002d757600080fd5b505afa158015620002ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000312919062000806565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035b57600080fd5b505afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000806565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003df57600080fd5b505af1158015620003f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041a919062000806565b602780546001600160a01b03199081166001600160a01b0393841617909155602680549091169183169190911790556001600b6000620004626000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b909252812080549092166001908117909255600c90620004bb6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600c909352818320805485166001908117909155602754821684528284208054861682179055601054909116835290822080549093168117909255600e906200053d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556027549091168152600e9092529020805490911660011790556200058c3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601154604051620005d491815260200190565b60405180910390a35062000a7f565b60006200062d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200072460201b60201c565b90505b92915050565b600082620006475750600062000630565b6000620006558385620009c3565b905082620006648583620008a4565b146200062d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006d0838562000889565b9050838110156200062d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006b8565b60008183620007485760405162461bcd60e51b8152600401620006b8919062000831565b506000620007578486620008a4565b95945050505050565b8280546200076e90620009ff565b90600052602060002090601f016020900481019282620007925760008555620007dd565b82601f10620007ad57805160ff1916838001178555620007dd565b82800160010185558215620007dd579182015b82811115620007dd578251825591602001919060010190620007c0565b50620007eb929150620007ef565b5090565b5b80821115620007eb5760008155600101620007f0565b6000602082840312156200081957600080fd5b81516001600160a01b03811681146200062d57600080fd5b600060208083528351808285015260005b81811015620008605785810183015185820160400152820162000842565b8181111562000873576000604083870101525b50601f01601f1916929092016040019392505050565b600082198211156200089f576200089f62000a53565b500190565b600082620008b657620008b662000a69565b500490565b600181815b80851115620008fc578160001904821115620008e057620008e062000a53565b80851615620008ee57918102915b93841c9390800290620008c0565b509250929050565b60006200062d60ff841683600082620009205750600162000630565b816200092f5750600062000630565b8160018114620009485760028114620009535762000973565b600191505062000630565b60ff84111562000967576200096762000a53565b50506001821b62000630565b5060208310610133831016604e8410600b841016171562000998575081810a62000630565b620009a48383620008bb565b8060001904821115620009bb57620009bb62000a53565b029392505050565b6000816000190483118215151615620009e057620009e062000a53565b500290565b600082821015620009fa57620009fa62000a53565b500390565b600181811c9082168062000a1457607f821691505b6020821081141562000a3657634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a4e5762000a4e62000a69565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6138d68062000a8f6000396000f3fe60806040526004361061036f5760003560e01c8063715018a6116101c6578063a9059cbb116100f7578063dd62ed3e11610095578063f259c57b1161006f578063f259c57b146109f8578063f2fde38b14610a18578063fabb0b4f14610a38578063ffb54a9914610a4e57600080fd5b8063dd62ed3e14610972578063ea2f0b37146109b8578063eafb5a3c146109d857600080fd5b8063c8607952116100d1578063c860795214610910578063c9cf778914610926578063d3f6a1571461093c578063dc44b6a01461095c57600080fd5b8063a9059cbb146108c4578063bf56b371146108e4578063c5d24189146108fa57600080fd5b806388f820201161016457806395d89b411161013e57806395d89b411461084f578063a0c5efc214610864578063a1ac727f14610884578063a457c2d7146108a457600080fd5b806388f82020146107d85780638da5cb5b146108115780638f4590d21461082f57600080fd5b80637598f8bc116101a05780637598f8bc1461077657806378109e541461078c57806384530c46146107a257806388790a68146107c257600080fd5b8063715018a61461072157806371b9189c14610736578063743942b61461075657600080fd5b8063313ce567116102a057806349bd5a5e1161023e5780635d54c0af116102185780635d54c0af146106ab57806362015852146106cb5780636ce37fa0146106e157806370a082311461070157600080fd5b806349bd5a5e1461064b5780634b01547f1461066b57806352390c021461068b57600080fd5b80633bd5d1731161027a5780633bd5d173146105e0578063401aa5c0146106005780634523a7a1146106165780634549b0391461062b57600080fd5b8063313ce567146105745780633685d419146105a057806339509351146105c057600080fd5b806318160ddd1161030d5780632691bc80116102e75780632691bc80146104f35780632d4103d6146105145780632d838119146105345780632dd5efe71461055457600080fd5b806318160ddd1461049e57806323b872dd146104b357806325b86edf146104d357600080fd5b8063095ea7b311610349578063095ea7b3146103e85780630f3a325f1461041857806313114a9d146104515780631694505e1461046657600080fd5b80630445b6671461037b57806306fdde03146103a457806309302dc6146103c657600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160255481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b506103b9610a6f565b60405161039b9190613550565b3480156103d257600080fd5b506103e66103e1366004613433565b610b01565b005b3480156103f457600080fd5b50610408610403366004613316565b610b5b565b604051901515815260200161039b565b34801561042457600080fd5b50610408610433366004613206565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561045d57600080fd5b50601354610391565b34801561047257600080fd5b50602654610486906001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b3480156104aa57600080fd5b50601154610391565b3480156104bf57600080fd5b506104086104ce366004613279565b610b72565b3480156104df57600080fd5b506103e66104ee366004613240565b610bdb565b3480156104ff57600080fd5b5060275461040890600160b01b900460ff1681565b34801561052057600080fd5b506103e661052f366004613415565b610d0b565b34801561054057600080fd5b5061039161054f366004613433565b610d96565b34801561056057600080fd5b506103e661056f366004613206565b610e1a565b34801561058057600080fd5b50601054600160a01b900460ff1660405160ff909116815260200161039b565b3480156105ac57600080fd5b506103e66105bb366004613206565b610e68565b3480156105cc57600080fd5b506104086105db366004613316565b61101b565b3480156105ec57600080fd5b506103e66105fb366004613433565b611051565b34801561060c57600080fd5b50610391601a5481565b34801561062257600080fd5b506103e661113b565b34801561063757600080fd5b50610391610646366004613465565b611174565b34801561065757600080fd5b50602754610486906001600160a01b031681565b34801561067757600080fd5b506103e66106863660046133db565b611201565b34801561069757600080fd5b506103e66106a6366004613206565b611249565b3480156106b757600080fd5b506103e66106c6366004613384565b611333565b3480156106d757600080fd5b5061039160185481565b3480156106ed57600080fd5b506103e66106fc3660046134da565b6113cc565b34801561070d57600080fd5b5061039161071c366004613206565b611407565b34801561072d57600080fd5b506103e6611466565b34801561074257600080fd5b506103e6610751366004613342565b6114da565b34801561076257600080fd5b506103e6610771366004613206565b611579565b34801561078257600080fd5b50610391601e5481565b34801561079857600080fd5b5061039160165481565b3480156107ae57600080fd5b506103e66107bd366004613342565b6115d8565b3480156107ce57600080fd5b50610391601b5481565b3480156107e457600080fd5b506104086107f3366004613206565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561081d57600080fd5b506000546001600160a01b0316610486565b34801561083b57600080fd5b506103e661084a36600461348a565b611672565b34801561085b57600080fd5b506103b96116bc565b34801561087057600080fd5b506103e661087f3660046134da565b6116cb565b34801561089057600080fd5b506103e661089f3660046132ba565b61173a565b3480156108b057600080fd5b506104086108bf366004613316565b6118ce565b3480156108d057600080fd5b506104086108df366004613316565b61191d565b3480156108f057600080fd5b50610391600a5481565b34801561090657600080fd5b5061039160195481565b34801561091c57600080fd5b50610391601c5481565b34801561093257600080fd5b50610391601d5481565b34801561094857600080fd5b506103e6610957366004613240565b61192a565b34801561096857600080fd5b5061039160175481565b34801561097e57600080fd5b5061039161098d366004613240565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156109c457600080fd5b506103e66109d3366004613206565b611982565b3480156109e457600080fd5b506103e66109f3366004613206565b6119cd565b348015610a0457600080fd5b506103e6610a13366004613206565b611d53565b348015610a2457600080fd5b506103e6610a33366004613206565b611da1565b348015610a4457600080fd5b5061039160095481565b348015610a5a57600080fd5b5060275461040890600160a81b900460ff1681565b606060148054610a7e90613795565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaa90613795565b8015610af75780601f10610acc57610100808354040283529160200191610af7565b820191906000526020600020905b815481529060010190602001808311610ada57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b345760405162461bcd60e51b8152600401610b2b906135a5565b60405180910390fd5b610b5581610b4f6103e8601154611e8b90919063ffffffff16565b90611ecd565b60165550565b6000610b68338484611fab565b5060015b92915050565b6000610b7f8484846120cf565b610bd18433610bcc85604051806060016040528060288152602001613854602891396001600160a01b038a166000908152600760209081526040808320338452909152902054919061260c565b611fab565b5060019392505050565b6000546001600160a01b03163314610c055760405162461bcd60e51b8152600401610b2b906135a5565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c4757600080fd5b505afa158015610c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7f919061344c565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610ccd57600080fd5b505af1158015610ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0591906133f8565b50505050565b6000546001600160a01b03163314610d355760405162461bcd60e51b8152600401610b2b906135a5565b6027805460ff60a81b1916600160a81b84151502179055610d5530611249565b602754610d6a906001600160a01b0316611249565b602754600160a81b900460ff168015610d835750600a54155b15610d925743600a5560098190555b5050565b6000601254821115610dfd5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b2b565b6000610e07612646565b9050610e138382611e8b565b9392505050565b6000546001600160a01b03163314610e445760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610e925760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b0381166000908152600d602052604090205460ff16610efa5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b2b565b60005b600f54811015610d9257816001600160a01b0316600f8281548110610f2457610f24613817565b6000918252602090912001546001600160a01b0316141561100957600f8054610f4f9060019061377e565b81548110610f5f57610f5f613817565b600091825260209091200154600f80546001600160a01b039092169183908110610f8b57610f8b613817565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600d90925220805460ff19169055600f805480610fe357610fe3613801565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611013816137d0565b915050610efd565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610b68918590610bcc9086611f4c565b336000818152600d602052604090205460ff16156110c65760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b2b565b60006110d183612669565b505050506001600160a01b0384166000908152600560205260409020549192506110fd919050826126b8565b6001600160a01b03831660009081526005602052604090205560125461112390826126b8565b6012556013546111339084611f4c565b601355505050565b6000546001600160a01b031633146111655760405162461bcd60e51b8152600401610b2b906135a5565b6027805460ff60b81b19169055565b60006011548311156111c85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b2b565b816111e75760006111d884612669565b50939550610b6c945050505050565b60006111f284612669565b50929550610b6c945050505050565b6000546001600160a01b0316331461122b5760405162461bcd60e51b8152600401610b2b906135a5565b60278054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112735760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b038116600090815260056020526040902054156112cd576001600160a01b0381166000908152600560205260409020546112b390610d96565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b0316331461135d5760405162461bcd60e51b8152600401610b2b906135a5565b60005b82811015610d0557816008600086868581811061137f5761137f613817565b90506020020160208101906113949190613206565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113c5816137d0565b9050611360565b6000546001600160a01b031633146113f65760405162461bcd60e51b8152600401610b2b906135a5565b601b92909255601c55601d55601e55565b6001600160a01b0381166000908152600d602052604081205460ff161561144457506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610b6c90610d96565b6000546001600160a01b031633146114905760405162461bcd60e51b8152600401610b2b906135a5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115045760405162461bcd60e51b8152600401610b2b906135a5565b60005b81811015611574576001600b600085858581811061152757611527613817565b905060200201602081019061153c9190613206565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561156d816137d0565b9050611507565b505050565b6000546001600160a01b031633146115a35760405162461bcd60e51b8152600401610b2b906135a5565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610d92573d6000803e3d6000fd5b6000546001600160a01b031633146116025760405162461bcd60e51b8152600401610b2b906135a5565b60005b81811015611574576001600e600085858581811061162557611625613817565b905060200201602081019061163a9190613206565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561166b816137d0565b9050611605565b6000546001600160a01b0316331461169c5760405162461bcd60e51b8152600401610b2b906135a5565b80826011546116ab919061375f565b6116b5919061364f565b6025555050565b606060158054610a7e90613795565b6000546001600160a01b031633146116f55760405162461bcd60e51b8152600401610b2b906135a5565b602284905560218190556020829055601f839055601783905560198290556018819055601a8490556117318161172b8585611f4c565b90611f4c565b60235550505050565b6000546001600160a01b031633146117645760405162461bcd60e51b8152600401610b2b906135a5565b6107d182106117cc5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b2b565b60105460009083906117e990600160a01b900460ff16600a6136b4565b6117f3908461375f565b6117fd919061375f565b90508061180986611407565b10156118575760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b2b565b60005b838110156118c6576118b48686868481811061187857611878613817565b905060200201602081019061188d9190613206565b6010546118a590600160a01b900460ff16600a6136b4565b6118af908761375f565b6120cf565b806118be816137d0565b91505061185a565b505050505050565b6000610b683384610bcc8560405180606001604052806025815260200161387c602591393360009081526007602090815260408083206001600160a01b038d168452909152902054919061260c565b6000610b683384846120cf565b6000546001600160a01b031633146119545760405162461bcd60e51b8152600401610b2b906135a5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6000546001600160a01b031633146119ac5760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146119f75760405162461bcd60e51b8152600401610b2b906135a5565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3757600080fd5b505afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190613223565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab757600080fd5b505afa158015611acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aef9190613223565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611b3557600080fd5b505afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d9190613223565b90506001600160a01b038116611d1357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb657600080fd5b505afa158015611bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bee9190613223565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c3657600080fd5b505afa158015611c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6e9190613223565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611cb657600080fd5b505af1158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190613223565b602780546001600160a01b0319166001600160a01b0392909216919091179055611d2f565b602780546001600160a01b0319166001600160a01b0383161790555b50602680546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d7d5760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611dcb5760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b038116611e305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e1383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126fa565b600082611edc57506000610b6c565b6000611ee8838561375f565b905082611ef5858361364f565b14610e135760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2b565b600080611f598385613637565b905083811015610e135760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b2b565b6001600160a01b03831661200d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2b565b6001600160a01b03821661206e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b2b565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b2b565b6001600160a01b0382166121955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b2b565b600081116121f75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b2b565b6001600160a01b03831660009081526008602052604090205460ff16156122605760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610b2b565b6000546001600160a01b0384811691161480159061228c57506000546001600160a01b03838116911614155b156122ea57602754600160a81b900460ff166122ea5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b2b565b6027546000906001600160a01b038581169116148061231657506027546001600160a01b038481169116145b801561235e57506001600160a01b0384166000908152600b602052604090205460ff168061235c57506001600160a01b0383166000908152600b602052604090205460ff165b155b15612367575060015b6000600a541180156123ab57506001600160a01b0383166000908152600c602052604090205460ff161580156123ab57506000546001600160a01b03858116911614155b80156123c6575043600954600a546123c39190613637565b11155b1561243a576016546123d784611407565b6123e19084613637565b111561243a5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b2b565b602354602455601a54602255602754600160a81b900460ff16801561246c57506027546001600160a01b038481169116145b156124985761248e601d5461172b601c54601b54611f4c90919063ffffffff16565b602455601e546022555b6000600a541180156124b8575043600954600a546124b69190613637565b115b80156124d257506027546001600160a01b03848116911614155b156124fb576001600160a01b0383166000908152600860205260409020805460ff191660011790555b6000600a5411801561251b57506000546001600160a01b03858116911614155b80156125365750600954600a546125329190613637565b4310155b801561254b5750602754600160b81b900460ff165b15612557576103846024555b602754600160b01b900460ff161561259a57602754600160a81b900460ff16801561258f57506027546001600160a01b038581169116145b1561259a5760006024555b602754600160a01b900460ff161580156125bd5750602754600160a81b900460ff165b80156125d657506027546001600160a01b038481169116145b156126005760006125e630611407565b905060255481106125fe57506025546125fe81612728565b505b610d0584848484612852565b600081848411156126305760405162461bcd60e51b8152600401610b2b9190613550565b50600061263d848661377e565b95945050505050565b600080600061265361297e565b90925090506126628282611e8b565b9250505090565b60008060008060008060008060006126808a612b00565b925092509250600080600061269e8d8686612699612646565b612b42565b919f909e50909c50959a5093985091965092945050505050565b6000610e1383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061260c565b6000818361271b5760405162461bcd60e51b8152600401610b2b9190613550565b50600061263d848661364f565b6027805460ff60a01b1916600160a01b179055602354601f5460009161275e916002916127589182908790611ecd565b90611e8b565b9050600061276c83836126b8565b905061277781612b92565b601f5447906000906127979061278e906002611e8b565b602354906126b8565b905060006127b9600261275884612758601f5488611ecd90919063ffffffff16565b905060006127d68361275860215487611ecd90919063ffffffff16565b905060006127f38461275860205488611ecd90919063ffffffff16565b905047801561282a576003546128139083906001600160a01b0316612d34565b60045461282a9084906001600160a01b0316612d34565b871561283a5761283a8885612d6a565b50506027805460ff60a01b1916905550505050505050565b6022546024548261286857600060228190556024555b6001600160a01b0386166000908152600d602052604090205460ff1680156128a957506001600160a01b0385166000908152600d602052604090205460ff16155b156128be576128b9868686612e4e565b61296a565b6001600160a01b0386166000908152600d602052604090205460ff161580156128ff57506001600160a01b0385166000908152600d602052604090205460ff165b1561290f576128b9868686612f74565b6001600160a01b0386166000908152600d602052604090205460ff16801561294f57506001600160a01b0385166000908152600d602052604090205460ff165b1561295f576128b986868661301d565b61296a868686613090565b826118c65760229190915560245550505050565b6012546011546000918291825b600f54811015612ad0578260056000600f84815481106129ad576129ad613817565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a1857508160066000600f84815481106129f1576129f1613817565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a2e57601254601154945094505050509091565b612a7460056000600f8481548110612a4857612a48613817565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126b8565b9250612abc60066000600f8481548110612a9057612a90613817565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126b8565b915080612ac8816137d0565b91505061298b565b50601154601254612ae091611e8b565b821015612af7576012546011549350935050509091565b90939092509050565b600080600080612b0f856130d4565b90506000612b1c866130f1565b90506000612b3482612b2e89866126b8565b906126b8565b979296509094509092505050565b6000808080612b518886611ecd565b90506000612b5f8887611ecd565b90506000612b6d8888611ecd565b90506000612b7f82612b2e86866126b8565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bc757612bc7613817565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c1b57600080fd5b505afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c539190613223565b81600181518110612c6657612c66613817565b6001600160a01b039283166020918202929092010152602654612c8c9130911684611fab565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc59085906000908690309042906004016135fb565b600060405180830381600087803b158015612cdf57600080fd5b505af1158015612cf3573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d289291906135da565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611574573d6000803e3d6000fd5b602654612d829030906001600160a01b031684611fab565b6026546001600160a01b031663f305d719823085600080612dab6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4791906134ac565b5050505050565b600080600080600080612e6087612669565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612e9290886126b8565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612ec190876126b8565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054612ef09086611f4c565b6001600160a01b038916600090815260056020526040902055612f128161310e565b612f1c8483613196565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f6191815260200190565b60405180910390a3505050505050505050565b600080600080600080612f8687612669565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612fb890876126b8565b6001600160a01b03808b16600090815260056020908152604080832094909455918b16815260069091522054612fee9084611f4c565b6001600160a01b038916600090815260066020908152604080832093909355600590522054612ef09086611f4c565b60008060008060008061302f87612669565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061306190886126b8565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612fb890876126b8565b6000806000806000806130a287612669565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612ec190876126b8565b6000610b6c6103e861275860225485611ecd90919063ffffffff16565b6000610b6c6103e861275860245485611ecd90919063ffffffff16565b6000613118612646565b905060006131268383611ecd565b306000908152600560205260409020549091506131439082611f4c565b30600090815260056020908152604080832093909355600d9052205460ff161561157457306000908152600660205260409020546131819084611f4c565b30600090815260066020526040902055505050565b6012546131a390836126b8565b6012556013546131b39082611f4c565b6013555050565b60008083601f8401126131cc57600080fd5b50813567ffffffffffffffff8111156131e457600080fd5b6020830191508360208260051b85010111156131ff57600080fd5b9250929050565b60006020828403121561321857600080fd5b8135610e138161382d565b60006020828403121561323557600080fd5b8151610e138161382d565b6000806040838503121561325357600080fd5b823561325e8161382d565b9150602083013561326e8161382d565b809150509250929050565b60008060006060848603121561328e57600080fd5b83356132998161382d565b925060208401356132a98161382d565b929592945050506040919091013590565b600080600080606085870312156132d057600080fd5b84356132db8161382d565b9350602085013567ffffffffffffffff8111156132f757600080fd5b613303878288016131ba565b9598909750949560400135949350505050565b6000806040838503121561332957600080fd5b82356133348161382d565b946020939093013593505050565b6000806020838503121561335557600080fd5b823567ffffffffffffffff81111561336c57600080fd5b613378858286016131ba565b90969095509350505050565b60008060006040848603121561339957600080fd5b833567ffffffffffffffff8111156133b057600080fd5b6133bc868287016131ba565b90945092505060208401356133d081613845565b809150509250925092565b6000602082840312156133ed57600080fd5b8135610e1381613845565b60006020828403121561340a57600080fd5b8151610e1381613845565b6000806040838503121561342857600080fd5b823561333481613845565b60006020828403121561344557600080fd5b5035919050565b60006020828403121561345e57600080fd5b5051919050565b6000806040838503121561347857600080fd5b82359150602083013561326e81613845565b6000806040838503121561349d57600080fd5b50508035926020909101359150565b6000806000606084860312156134c157600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156134f057600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156135455781516001600160a01b031687529582019590820190600101613520565b509495945050505050565b600060208083528351808285015260005b8181101561357d57858101830151858201604001528201613561565b8181111561358f576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006135f3604083018461350c565b949350505050565b85815284602082015260a06040820152600061361a60a083018661350c565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561364a5761364a6137eb565b500190565b60008261366c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156136ac578160001904821115613692576136926137eb565b8085161561369f57918102915b93841c9390800290613676565b509250929050565b6000610e1360ff8416836000826136cd57506001610b6c565b816136da57506000610b6c565b81600181146136f057600281146136fa57613716565b6001915050610b6c565b60ff84111561370b5761370b6137eb565b50506001821b610b6c565b5060208310610133831016604e8410600b8410161715613739575081810a610b6c565b6137438383613671565b8060001904821115613757576137576137eb565b029392505050565b6000816000190483118215151615613779576137796137eb565b500290565b600082821015613790576137906137eb565b500390565b600181811c908216806137a957607f821691505b602082108114156137ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156137e4576137e46137eb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461384257600080fd5b50565b801515811461384257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207eeb9a409397f00ab7035a86362ec7298ca8804005081c722e540ab009cda70464736f6c63430008070033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c8063715018a6116101c6578063a9059cbb116100f7578063dd62ed3e11610095578063f259c57b1161006f578063f259c57b146109f8578063f2fde38b14610a18578063fabb0b4f14610a38578063ffb54a9914610a4e57600080fd5b8063dd62ed3e14610972578063ea2f0b37146109b8578063eafb5a3c146109d857600080fd5b8063c8607952116100d1578063c860795214610910578063c9cf778914610926578063d3f6a1571461093c578063dc44b6a01461095c57600080fd5b8063a9059cbb146108c4578063bf56b371146108e4578063c5d24189146108fa57600080fd5b806388f820201161016457806395d89b411161013e57806395d89b411461084f578063a0c5efc214610864578063a1ac727f14610884578063a457c2d7146108a457600080fd5b806388f82020146107d85780638da5cb5b146108115780638f4590d21461082f57600080fd5b80637598f8bc116101a05780637598f8bc1461077657806378109e541461078c57806384530c46146107a257806388790a68146107c257600080fd5b8063715018a61461072157806371b9189c14610736578063743942b61461075657600080fd5b8063313ce567116102a057806349bd5a5e1161023e5780635d54c0af116102185780635d54c0af146106ab57806362015852146106cb5780636ce37fa0146106e157806370a082311461070157600080fd5b806349bd5a5e1461064b5780634b01547f1461066b57806352390c021461068b57600080fd5b80633bd5d1731161027a5780633bd5d173146105e0578063401aa5c0146106005780634523a7a1146106165780634549b0391461062b57600080fd5b8063313ce567146105745780633685d419146105a057806339509351146105c057600080fd5b806318160ddd1161030d5780632691bc80116102e75780632691bc80146104f35780632d4103d6146105145780632d838119146105345780632dd5efe71461055457600080fd5b806318160ddd1461049e57806323b872dd146104b357806325b86edf146104d357600080fd5b8063095ea7b311610349578063095ea7b3146103e85780630f3a325f1461041857806313114a9d146104515780631694505e1461046657600080fd5b80630445b6671461037b57806306fdde03146103a457806309302dc6146103c657600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160255481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b506103b9610a6f565b60405161039b9190613550565b3480156103d257600080fd5b506103e66103e1366004613433565b610b01565b005b3480156103f457600080fd5b50610408610403366004613316565b610b5b565b604051901515815260200161039b565b34801561042457600080fd5b50610408610433366004613206565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561045d57600080fd5b50601354610391565b34801561047257600080fd5b50602654610486906001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b3480156104aa57600080fd5b50601154610391565b3480156104bf57600080fd5b506104086104ce366004613279565b610b72565b3480156104df57600080fd5b506103e66104ee366004613240565b610bdb565b3480156104ff57600080fd5b5060275461040890600160b01b900460ff1681565b34801561052057600080fd5b506103e661052f366004613415565b610d0b565b34801561054057600080fd5b5061039161054f366004613433565b610d96565b34801561056057600080fd5b506103e661056f366004613206565b610e1a565b34801561058057600080fd5b50601054600160a01b900460ff1660405160ff909116815260200161039b565b3480156105ac57600080fd5b506103e66105bb366004613206565b610e68565b3480156105cc57600080fd5b506104086105db366004613316565b61101b565b3480156105ec57600080fd5b506103e66105fb366004613433565b611051565b34801561060c57600080fd5b50610391601a5481565b34801561062257600080fd5b506103e661113b565b34801561063757600080fd5b50610391610646366004613465565b611174565b34801561065757600080fd5b50602754610486906001600160a01b031681565b34801561067757600080fd5b506103e66106863660046133db565b611201565b34801561069757600080fd5b506103e66106a6366004613206565b611249565b3480156106b757600080fd5b506103e66106c6366004613384565b611333565b3480156106d757600080fd5b5061039160185481565b3480156106ed57600080fd5b506103e66106fc3660046134da565b6113cc565b34801561070d57600080fd5b5061039161071c366004613206565b611407565b34801561072d57600080fd5b506103e6611466565b34801561074257600080fd5b506103e6610751366004613342565b6114da565b34801561076257600080fd5b506103e6610771366004613206565b611579565b34801561078257600080fd5b50610391601e5481565b34801561079857600080fd5b5061039160165481565b3480156107ae57600080fd5b506103e66107bd366004613342565b6115d8565b3480156107ce57600080fd5b50610391601b5481565b3480156107e457600080fd5b506104086107f3366004613206565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561081d57600080fd5b506000546001600160a01b0316610486565b34801561083b57600080fd5b506103e661084a36600461348a565b611672565b34801561085b57600080fd5b506103b96116bc565b34801561087057600080fd5b506103e661087f3660046134da565b6116cb565b34801561089057600080fd5b506103e661089f3660046132ba565b61173a565b3480156108b057600080fd5b506104086108bf366004613316565b6118ce565b3480156108d057600080fd5b506104086108df366004613316565b61191d565b3480156108f057600080fd5b50610391600a5481565b34801561090657600080fd5b5061039160195481565b34801561091c57600080fd5b50610391601c5481565b34801561093257600080fd5b50610391601d5481565b34801561094857600080fd5b506103e6610957366004613240565b61192a565b34801561096857600080fd5b5061039160175481565b34801561097e57600080fd5b5061039161098d366004613240565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156109c457600080fd5b506103e66109d3366004613206565b611982565b3480156109e457600080fd5b506103e66109f3366004613206565b6119cd565b348015610a0457600080fd5b506103e6610a13366004613206565b611d53565b348015610a2457600080fd5b506103e6610a33366004613206565b611da1565b348015610a4457600080fd5b5061039160095481565b348015610a5a57600080fd5b5060275461040890600160a81b900460ff1681565b606060148054610a7e90613795565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaa90613795565b8015610af75780601f10610acc57610100808354040283529160200191610af7565b820191906000526020600020905b815481529060010190602001808311610ada57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b345760405162461bcd60e51b8152600401610b2b906135a5565b60405180910390fd5b610b5581610b4f6103e8601154611e8b90919063ffffffff16565b90611ecd565b60165550565b6000610b68338484611fab565b5060015b92915050565b6000610b7f8484846120cf565b610bd18433610bcc85604051806060016040528060288152602001613854602891396001600160a01b038a166000908152600760209081526040808320338452909152902054919061260c565b611fab565b5060019392505050565b6000546001600160a01b03163314610c055760405162461bcd60e51b8152600401610b2b906135a5565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c4757600080fd5b505afa158015610c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7f919061344c565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610ccd57600080fd5b505af1158015610ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0591906133f8565b50505050565b6000546001600160a01b03163314610d355760405162461bcd60e51b8152600401610b2b906135a5565b6027805460ff60a81b1916600160a81b84151502179055610d5530611249565b602754610d6a906001600160a01b0316611249565b602754600160a81b900460ff168015610d835750600a54155b15610d925743600a5560098190555b5050565b6000601254821115610dfd5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b2b565b6000610e07612646565b9050610e138382611e8b565b9392505050565b6000546001600160a01b03163314610e445760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610e925760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b0381166000908152600d602052604090205460ff16610efa5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b2b565b60005b600f54811015610d9257816001600160a01b0316600f8281548110610f2457610f24613817565b6000918252602090912001546001600160a01b0316141561100957600f8054610f4f9060019061377e565b81548110610f5f57610f5f613817565b600091825260209091200154600f80546001600160a01b039092169183908110610f8b57610f8b613817565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600d90925220805460ff19169055600f805480610fe357610fe3613801565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611013816137d0565b915050610efd565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610b68918590610bcc9086611f4c565b336000818152600d602052604090205460ff16156110c65760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b2b565b60006110d183612669565b505050506001600160a01b0384166000908152600560205260409020549192506110fd919050826126b8565b6001600160a01b03831660009081526005602052604090205560125461112390826126b8565b6012556013546111339084611f4c565b601355505050565b6000546001600160a01b031633146111655760405162461bcd60e51b8152600401610b2b906135a5565b6027805460ff60b81b19169055565b60006011548311156111c85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b2b565b816111e75760006111d884612669565b50939550610b6c945050505050565b60006111f284612669565b50929550610b6c945050505050565b6000546001600160a01b0316331461122b5760405162461bcd60e51b8152600401610b2b906135a5565b60278054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112735760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b038116600090815260056020526040902054156112cd576001600160a01b0381166000908152600560205260409020546112b390610d96565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b0316331461135d5760405162461bcd60e51b8152600401610b2b906135a5565b60005b82811015610d0557816008600086868581811061137f5761137f613817565b90506020020160208101906113949190613206565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113c5816137d0565b9050611360565b6000546001600160a01b031633146113f65760405162461bcd60e51b8152600401610b2b906135a5565b601b92909255601c55601d55601e55565b6001600160a01b0381166000908152600d602052604081205460ff161561144457506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610b6c90610d96565b6000546001600160a01b031633146114905760405162461bcd60e51b8152600401610b2b906135a5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115045760405162461bcd60e51b8152600401610b2b906135a5565b60005b81811015611574576001600b600085858581811061152757611527613817565b905060200201602081019061153c9190613206565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561156d816137d0565b9050611507565b505050565b6000546001600160a01b031633146115a35760405162461bcd60e51b8152600401610b2b906135a5565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610d92573d6000803e3d6000fd5b6000546001600160a01b031633146116025760405162461bcd60e51b8152600401610b2b906135a5565b60005b81811015611574576001600e600085858581811061162557611625613817565b905060200201602081019061163a9190613206565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561166b816137d0565b9050611605565b6000546001600160a01b0316331461169c5760405162461bcd60e51b8152600401610b2b906135a5565b80826011546116ab919061375f565b6116b5919061364f565b6025555050565b606060158054610a7e90613795565b6000546001600160a01b031633146116f55760405162461bcd60e51b8152600401610b2b906135a5565b602284905560218190556020829055601f839055601783905560198290556018819055601a8490556117318161172b8585611f4c565b90611f4c565b60235550505050565b6000546001600160a01b031633146117645760405162461bcd60e51b8152600401610b2b906135a5565b6107d182106117cc5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b2b565b60105460009083906117e990600160a01b900460ff16600a6136b4565b6117f3908461375f565b6117fd919061375f565b90508061180986611407565b10156118575760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b2b565b60005b838110156118c6576118b48686868481811061187857611878613817565b905060200201602081019061188d9190613206565b6010546118a590600160a01b900460ff16600a6136b4565b6118af908761375f565b6120cf565b806118be816137d0565b91505061185a565b505050505050565b6000610b683384610bcc8560405180606001604052806025815260200161387c602591393360009081526007602090815260408083206001600160a01b038d168452909152902054919061260c565b6000610b683384846120cf565b6000546001600160a01b031633146119545760405162461bcd60e51b8152600401610b2b906135a5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6000546001600160a01b031633146119ac5760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146119f75760405162461bcd60e51b8152600401610b2b906135a5565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3757600080fd5b505afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190613223565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab757600080fd5b505afa158015611acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aef9190613223565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611b3557600080fd5b505afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d9190613223565b90506001600160a01b038116611d1357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb657600080fd5b505afa158015611bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bee9190613223565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c3657600080fd5b505afa158015611c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6e9190613223565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611cb657600080fd5b505af1158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190613223565b602780546001600160a01b0319166001600160a01b0392909216919091179055611d2f565b602780546001600160a01b0319166001600160a01b0383161790555b50602680546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d7d5760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611dcb5760405162461bcd60e51b8152600401610b2b906135a5565b6001600160a01b038116611e305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e1383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126fa565b600082611edc57506000610b6c565b6000611ee8838561375f565b905082611ef5858361364f565b14610e135760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2b565b600080611f598385613637565b905083811015610e135760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b2b565b6001600160a01b03831661200d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2b565b6001600160a01b03821661206e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b2b565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b2b565b6001600160a01b0382166121955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b2b565b600081116121f75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b2b565b6001600160a01b03831660009081526008602052604090205460ff16156122605760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610b2b565b6000546001600160a01b0384811691161480159061228c57506000546001600160a01b03838116911614155b156122ea57602754600160a81b900460ff166122ea5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b2b565b6027546000906001600160a01b038581169116148061231657506027546001600160a01b038481169116145b801561235e57506001600160a01b0384166000908152600b602052604090205460ff168061235c57506001600160a01b0383166000908152600b602052604090205460ff165b155b15612367575060015b6000600a541180156123ab57506001600160a01b0383166000908152600c602052604090205460ff161580156123ab57506000546001600160a01b03858116911614155b80156123c6575043600954600a546123c39190613637565b11155b1561243a576016546123d784611407565b6123e19084613637565b111561243a5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b2b565b602354602455601a54602255602754600160a81b900460ff16801561246c57506027546001600160a01b038481169116145b156124985761248e601d5461172b601c54601b54611f4c90919063ffffffff16565b602455601e546022555b6000600a541180156124b8575043600954600a546124b69190613637565b115b80156124d257506027546001600160a01b03848116911614155b156124fb576001600160a01b0383166000908152600860205260409020805460ff191660011790555b6000600a5411801561251b57506000546001600160a01b03858116911614155b80156125365750600954600a546125329190613637565b4310155b801561254b5750602754600160b81b900460ff165b15612557576103846024555b602754600160b01b900460ff161561259a57602754600160a81b900460ff16801561258f57506027546001600160a01b038581169116145b1561259a5760006024555b602754600160a01b900460ff161580156125bd5750602754600160a81b900460ff165b80156125d657506027546001600160a01b038481169116145b156126005760006125e630611407565b905060255481106125fe57506025546125fe81612728565b505b610d0584848484612852565b600081848411156126305760405162461bcd60e51b8152600401610b2b9190613550565b50600061263d848661377e565b95945050505050565b600080600061265361297e565b90925090506126628282611e8b565b9250505090565b60008060008060008060008060006126808a612b00565b925092509250600080600061269e8d8686612699612646565b612b42565b919f909e50909c50959a5093985091965092945050505050565b6000610e1383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061260c565b6000818361271b5760405162461bcd60e51b8152600401610b2b9190613550565b50600061263d848661364f565b6027805460ff60a01b1916600160a01b179055602354601f5460009161275e916002916127589182908790611ecd565b90611e8b565b9050600061276c83836126b8565b905061277781612b92565b601f5447906000906127979061278e906002611e8b565b602354906126b8565b905060006127b9600261275884612758601f5488611ecd90919063ffffffff16565b905060006127d68361275860215487611ecd90919063ffffffff16565b905060006127f38461275860205488611ecd90919063ffffffff16565b905047801561282a576003546128139083906001600160a01b0316612d34565b60045461282a9084906001600160a01b0316612d34565b871561283a5761283a8885612d6a565b50506027805460ff60a01b1916905550505050505050565b6022546024548261286857600060228190556024555b6001600160a01b0386166000908152600d602052604090205460ff1680156128a957506001600160a01b0385166000908152600d602052604090205460ff16155b156128be576128b9868686612e4e565b61296a565b6001600160a01b0386166000908152600d602052604090205460ff161580156128ff57506001600160a01b0385166000908152600d602052604090205460ff165b1561290f576128b9868686612f74565b6001600160a01b0386166000908152600d602052604090205460ff16801561294f57506001600160a01b0385166000908152600d602052604090205460ff165b1561295f576128b986868661301d565b61296a868686613090565b826118c65760229190915560245550505050565b6012546011546000918291825b600f54811015612ad0578260056000600f84815481106129ad576129ad613817565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a1857508160066000600f84815481106129f1576129f1613817565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a2e57601254601154945094505050509091565b612a7460056000600f8481548110612a4857612a48613817565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126b8565b9250612abc60066000600f8481548110612a9057612a90613817565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126b8565b915080612ac8816137d0565b91505061298b565b50601154601254612ae091611e8b565b821015612af7576012546011549350935050509091565b90939092509050565b600080600080612b0f856130d4565b90506000612b1c866130f1565b90506000612b3482612b2e89866126b8565b906126b8565b979296509094509092505050565b6000808080612b518886611ecd565b90506000612b5f8887611ecd565b90506000612b6d8888611ecd565b90506000612b7f82612b2e86866126b8565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bc757612bc7613817565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c1b57600080fd5b505afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c539190613223565b81600181518110612c6657612c66613817565b6001600160a01b039283166020918202929092010152602654612c8c9130911684611fab565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc59085906000908690309042906004016135fb565b600060405180830381600087803b158015612cdf57600080fd5b505af1158015612cf3573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d289291906135da565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611574573d6000803e3d6000fd5b602654612d829030906001600160a01b031684611fab565b6026546001600160a01b031663f305d719823085600080612dab6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4791906134ac565b5050505050565b600080600080600080612e6087612669565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612e9290886126b8565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612ec190876126b8565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054612ef09086611f4c565b6001600160a01b038916600090815260056020526040902055612f128161310e565b612f1c8483613196565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f6191815260200190565b60405180910390a3505050505050505050565b600080600080600080612f8687612669565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612fb890876126b8565b6001600160a01b03808b16600090815260056020908152604080832094909455918b16815260069091522054612fee9084611f4c565b6001600160a01b038916600090815260066020908152604080832093909355600590522054612ef09086611f4c565b60008060008060008061302f87612669565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061306190886126b8565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612fb890876126b8565b6000806000806000806130a287612669565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612ec190876126b8565b6000610b6c6103e861275860225485611ecd90919063ffffffff16565b6000610b6c6103e861275860245485611ecd90919063ffffffff16565b6000613118612646565b905060006131268383611ecd565b306000908152600560205260409020549091506131439082611f4c565b30600090815260056020908152604080832093909355600d9052205460ff161561157457306000908152600660205260409020546131819084611f4c565b30600090815260066020526040902055505050565b6012546131a390836126b8565b6012556013546131b39082611f4c565b6013555050565b60008083601f8401126131cc57600080fd5b50813567ffffffffffffffff8111156131e457600080fd5b6020830191508360208260051b85010111156131ff57600080fd5b9250929050565b60006020828403121561321857600080fd5b8135610e138161382d565b60006020828403121561323557600080fd5b8151610e138161382d565b6000806040838503121561325357600080fd5b823561325e8161382d565b9150602083013561326e8161382d565b809150509250929050565b60008060006060848603121561328e57600080fd5b83356132998161382d565b925060208401356132a98161382d565b929592945050506040919091013590565b600080600080606085870312156132d057600080fd5b84356132db8161382d565b9350602085013567ffffffffffffffff8111156132f757600080fd5b613303878288016131ba565b9598909750949560400135949350505050565b6000806040838503121561332957600080fd5b82356133348161382d565b946020939093013593505050565b6000806020838503121561335557600080fd5b823567ffffffffffffffff81111561336c57600080fd5b613378858286016131ba565b90969095509350505050565b60008060006040848603121561339957600080fd5b833567ffffffffffffffff8111156133b057600080fd5b6133bc868287016131ba565b90945092505060208401356133d081613845565b809150509250925092565b6000602082840312156133ed57600080fd5b8135610e1381613845565b60006020828403121561340a57600080fd5b8151610e1381613845565b6000806040838503121561342857600080fd5b823561333481613845565b60006020828403121561344557600080fd5b5035919050565b60006020828403121561345e57600080fd5b5051919050565b6000806040838503121561347857600080fd5b82359150602083013561326e81613845565b6000806040838503121561349d57600080fd5b50508035926020909101359150565b6000806000606084860312156134c157600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156134f057600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156135455781516001600160a01b031687529582019590820190600101613520565b509495945050505050565b600060208083528351808285015260005b8181101561357d57858101830151858201604001528201613561565b8181111561358f576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006135f3604083018461350c565b949350505050565b85815284602082015260a06040820152600061361a60a083018661350c565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561364a5761364a6137eb565b500190565b60008261366c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156136ac578160001904821115613692576136926137eb565b8085161561369f57918102915b93841c9390800290613676565b509250929050565b6000610e1360ff8416836000826136cd57506001610b6c565b816136da57506000610b6c565b81600181146136f057600281146136fa57613716565b6001915050610b6c565b60ff84111561370b5761370b6137eb565b50506001821b610b6c565b5060208310610133831016604e8410600b8410161715613739575081810a610b6c565b6137438383613671565b8060001904821115613757576137576137eb565b029392505050565b6000816000190483118215151615613779576137796137eb565b500290565b600082821015613790576137906137eb565b500390565b600181811c908216806137a957607f821691505b602082108114156137ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156137e4576137e46137eb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461384257600080fd5b50565b801515811461384257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207eeb9a409397f00ab7035a86362ec7298ca8804005081c722e540ab009cda70464736f6c63430008070033

Deployed Bytecode Sourcemap

14399:23636:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16550:56;;;;;;;;;;;;;;;;;;;16866:25:1;;;16854:2;16839:18;16550:56:0;;;;;;;;19047:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36611:175::-;;;;;;;;;;-1:-1:-1;36611:175:0;;;;;:::i;:::-;;:::i;:::-;;19959:161;;;;;;;;;;-1:-1:-1;19959:161:0;;;;;:::i;:::-;;:::i;:::-;;;8883:14:1;;8876:22;8858:41;;8846:2;8831:18;19959:161:0;8718:187:1;35233:106:0;;;;;;;;;;-1:-1:-1;35233:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35313:18:0;35289:4;35313:18;;;:9;:18;;;;;;;;;35233:106;21080:87;;;;;;;;;;-1:-1:-1;21149:10:0;;21080:87;;16626:41;;;;;;;;;;-1:-1:-1;16626:41:0;;;;-1:-1:-1;;;;;16626:41:0;;;;;;-1:-1:-1;;;;;7474:32:1;;;7456:51;;7444:2;7429:18;16626:41:0;7310:203:1;19324:95:0;;;;;;;;;;-1:-1:-1;19404:7:0;;19324:95;;20128:313;;;;;;;;;;-1:-1:-1;20128:313:0;;;;;:::i;:::-;;:::i;36426:177::-;;;;;;;;;;-1:-1:-1;36426:177:0;;;;;:::i;:::-;;:::i;16777:34::-;;;;;;;;;;-1:-1:-1;16777:34:0;;;;-1:-1:-1;;;16777:34:0;;;;;;17952:337;;;;;;;;;;-1:-1:-1;17952:337:0;;;;;:::i;:::-;;:::i;22012:253::-;;;;;;;;;;-1:-1:-1;22012:253:0;;;;;:::i;:::-;;:::i;36794:113::-;;;;;;;;;;-1:-1:-1;36794:113:0;;;;;:::i;:::-;;:::i;19233:83::-;;;;;;;;;;-1:-1:-1;19299:9:0;;-1:-1:-1;;;19299:9:0;;;;19233:83;;17998:4:1;17986:17;;;17968:36;;17956:2;17941:18;19233:83:0;17826:184:1;22544:479:0;;;;;;;;;;-1:-1:-1;22544:479:0;;;;;:::i;:::-;;:::i;20449:218::-;;;;;;;;;;-1:-1:-1;20449:218:0;;;;;:::i;:::-;;:::i;21179:377::-;;;;;;;;;;-1:-1:-1;21179:377:0;;;;;:::i;:::-;;:::i;15965:36::-;;;;;;;;;;;;;;;;18415:89;;;;;;;;;;;;;:::i;21568:436::-;;;;;;;;;;-1:-1:-1;21568:436:0;;;;;:::i;:::-;;:::i;16674:28::-;;;;;;;;;;-1:-1:-1;16674:28:0;;;;-1:-1:-1;;;;;16674:28:0;;;18303:102;;;;;;;;;;-1:-1:-1;18303:102:0;;;;;:::i;:::-;;:::i;22273:263::-;;;;;;;;;;-1:-1:-1;22273:263:0;;;;;:::i;:::-;;:::i;35351:208::-;;;;;;;;;;-1:-1:-1;35351:208:0;;;;;:::i;:::-;;:::i;15868:30::-;;;;;;;;;;;;;;;;37641:299;;;;;;;;;;-1:-1:-1;37641:299:0;;;;;:::i;:::-;;:::i;19427:198::-;;;;;;;;;;-1:-1:-1;19427:198:0;;;;;:::i;:::-;;:::i;6030:148::-;;;;;;;;;;;;;:::i;34557:198::-;;;;;;;;;;-1:-1:-1;34557:198:0;;;;;:::i;:::-;;:::i;36283:135::-;;;;;;;;;;-1:-1:-1;36283:135:0;;;;;:::i;:::-;;:::i;16152:37::-;;;;;;;;;;;;;;;;15735:58;;;;;;;;;;;;;;;;36079:188;;;;;;;;;;-1:-1:-1;36079:188:0;;;;;:::i;:::-;;:::i;16010:36::-;;;;;;;;;;;;;;;;20952:120;;;;;;;;;;-1:-1:-1;20952:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21044:20:0;21020:4;21044:20;;;:11;:20;;;;;;;;;20952:120;5805:79;;;;;;;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;5870:6:0;5805:79;;36915:178;;;;;;;;;;-1:-1:-1;36915:178:0;;;;;:::i;:::-;;:::i;19138:87::-;;;;;;;;;;;;;:::i;37110:523::-;;;;;;;;;;-1:-1:-1;37110:523:0;;;;;:::i;:::-;;:::i;35567:500::-;;;;;;;;;;-1:-1:-1;35567:500:0;;;;;:::i;:::-;;:::i;20675:269::-;;;;;;;;;;-1:-1:-1;20675:269:0;;;;;:::i;:::-;;:::i;19633:167::-;;;;;;;;;;-1:-1:-1;19633:167:0;;;;;:::i;:::-;;:::i;15024:29::-;;;;;;;;;;;;;;;;15915:36;;;;;;;;;;;;;;;;16053:38;;;;;;;;;;;;;;;;16105:32;;;;;;;;;;;;;;;;34895:190;;;;;;;;;;-1:-1:-1;34895:190:0;;;;;:::i;:::-;;:::i;15826:35::-;;;;;;;;;;;;;;;;19808:143;;;;;;;;;;-1:-1:-1;19808:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19916:18:0;;;19889:7;19916:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19808:143;34773:110;;;;;;;;;;-1:-1:-1;34773:110:0;;;;;:::i;:::-;;:::i;18516:523::-;;;;;;;;;;-1:-1:-1;18516:523:0;;;;;:::i;:::-;;:::i;34437:112::-;;;;;;;;;;-1:-1:-1;34437:112:0;;;;;:::i;:::-;;:::i;6186:244::-;;;;;;;;;;-1:-1:-1;6186:244:0;;;;;:::i;:::-;;:::i;14988:29::-;;;;;;;;;;;;;;;;16739:31;;;;;;;;;;-1:-1:-1;16739:31:0;;;;-1:-1:-1;;;16739:31:0;;;;;;19047:83;19084:13;19117:5;19110:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19047:83;:::o;36611:175::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;;;;;;;;;36732:46:::1;36754:23;36732:17;36744:4;36732:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;36714:15;:64:::0;-1:-1:-1;36611:175:0:o;19959:161::-;20034:4;20051:39;189:10;20074:7;20083:6;20051:8;:39::i;:::-;-1:-1:-1;20108:4:0;19959:161;;;;;:::o;20128:313::-;20226:4;20243:36;20253:6;20261:9;20272:6;20243:9;:36::i;:::-;20290:121;20299:6;189:10;20321:89;20359:6;20321:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20321:19:0;;;;;;:11;:19;;;;;;;;189:10;20321:33;;;;;;;;;;:37;:89::i;:::-;20290:8;:121::i;:::-;-1:-1:-1;20429:4:0;20128:313;;;;;:::o;36426:177::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;36527:30:::1;::::0;-1:-1:-1;;;36527:30:0;;36551:4:::1;36527:30;::::0;::::1;7456:51:1::0;36509:15:0::1;::::0;-1:-1:-1;;;;;36527:15:0;::::1;::::0;::::1;::::0;7429:18:1;;36527:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36568:27;::::0;-1:-1:-1;;;36568:27:0;;-1:-1:-1;;;;;8019:32:1;;;36568:27:0::1;::::0;::::1;8001:51:1::0;8068:18;;;8061:34;;;36509:48:0;;-1:-1:-1;36568:14:0;;::::1;::::0;::::1;::::0;7974:18:1;;36568:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36498:105;36426:177:::0;;:::o;17952:337::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18039:11:::1;:21:::0;;-1:-1:-1;;;;18039:21:0::1;-1:-1:-1::0;;;18039:21:0;::::1;;;;::::0;;18071:32:::1;18097:4;18071:17;:32::i;:::-;18132:13;::::0;18114:32:::1;::::0;-1:-1:-1;;;;;18132:13:0::1;18114:17;:32::i;:::-;18160:11;::::0;-1:-1:-1;;;18160:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;18175:10:0::1;::::0;:15;18160:30:::1;18157:125;;;18219:12;18206:10;:25:::0;18246:10:::1;:24:::0;;;18157:125:::1;17952:337:::0;;:::o;22012:253::-;22078:7;22117;;22106;:18;;22098:73;;;;-1:-1:-1;;;22098:73:0;;10353:2:1;22098:73:0;;;10335:21:1;10392:2;10372:18;;;10365:30;10431:34;10411:18;;;10404:62;-1:-1:-1;;;10482:18:1;;;10475:40;10532:19;;22098:73:0;10151:406:1;22098:73:0;22182:19;22205:10;:8;:10::i;:::-;22182:33;-1:-1:-1;22233:24:0;:7;22182:33;22233:11;:24::i;:::-;22226:31;22012:253;-1:-1:-1;;;22012:253:0:o;36794: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;;;;;36867:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;36867:32:0::1;36895:4;36867:32;::::0;;36794:113::o;22544: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;;;;;22626:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22618:60;;;::::0;-1:-1:-1;;;22618:60:0;;11930:2:1;22618:60:0::1;::::0;::::1;11912:21:1::0;11969:2;11949:18;;;11942:30;12008:29;11988:18;;;11981:57;12055:18;;22618:60:0::1;11728:351:1::0;22618:60:0::1;22694:9;22689:327;22713:9;:16:::0;22709:20;::::1;22689:327;;;22771:7;-1:-1:-1::0;;;;;22755:23:0::1;:9;22765:1;22755:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22755:12:0::1;:23;22751:254;;;22814:9;22824:16:::0;;:20:::1;::::0;22843:1:::1;::::0;22824:20:::1;:::i;:::-;22814:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22799:9:::1;:12:::0;;-1:-1:-1;;;;;22814:31:0;;::::1;::::0;22809:1;;22799:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22799:46:0::1;-1:-1:-1::0;;;;;22799:46:0;;::::1;;::::0;;22864:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22903:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22903:28:0::1;::::0;;22950:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22950:15:0;;;;;-1:-1:-1;;;;;;22950:15:0::1;::::0;;;;;17952:337;;:::o;22751:254::-:1;22731:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22689:327;;20449:218:::0;189:10;20537:4;20586:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20586:34:0;;;;;;;;;;20537:4;;20554:83;;20577:7;;20586:50;;20625:10;20586:38;:50::i;21179:377::-;189:10;21231:14;21280:19;;;:11;:19;;;;;;;;21279:20;21271:77;;;;-1:-1:-1;;;21271:77:0;;16157:2:1;21271:77:0;;;16139:21:1;16196:2;16176:18;;;16169:30;16235:34;16215:18;;;16208:62;-1:-1:-1;;;16286:18:1;;;16279:42;16338:19;;21271:77:0;15955:408:1;21271:77:0;21360:15;21384:19;21395:7;21384:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21432:15:0;;;;;;:7;:15;;;;;;21359:44;;-1:-1:-1;21432:28:0;;:15;-1:-1:-1;21359:44:0;21432:19;:28::i;:::-;-1:-1:-1;;;;;21414:15:0;;;;;;:7;:15;;;;;:46;21481:7;;:20;;21493:7;21481:11;:20::i;:::-;21471:7;:30;21525:10;;:23;;21540:7;21525:14;:23::i;:::-;21512:10;:36;-1:-1:-1;;;21179:377:0:o;18415:89::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18478:11:::1;:17:::0;;-1:-1:-1;;;;18478:17:0::1;::::0;;18415:89::o;21568:436::-;21658:7;21697;;21686;:18;;21678:62;;;;-1:-1:-1;;;21678:62:0;;12642:2:1;21678:62:0;;;12624:21:1;12681:2;12661:18;;;12654:30;12720:33;12700:18;;;12693:61;12771:18;;21678:62:0;12440:355:1;21678:62:0;21756:17;21751:246;;21791:15;21815:19;21826:7;21815:10;:19::i;:::-;-1:-1:-1;21790:44:0;;-1:-1:-1;21849:14:0;;-1:-1:-1;;;;;21849:14:0;21751:246;21898:23;21929:19;21940:7;21929:10;:19::i;:::-;-1:-1:-1;21896:52:0;;-1:-1:-1;21963:22:0;;-1:-1:-1;;;;;21963:22:0;18303:102;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18375:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;18375:22:0::1;-1:-1:-1::0;;;;18375:22:0;;::::1;::::0;;;::::1;::::0;;18303:102::o;22273: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;;;;;22352:16:0;::::1;22371:1;22352:16:::0;;;:7:::1;:16;::::0;;;;;:20;22349:108:::1;;-1:-1:-1::0;;;;;22428:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22408:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22389:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22349:108:::1;-1:-1:-1::0;;;;;22467:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22467:27:0::1;22490:4;22467:27:::0;;::::1;::::0;;;22505:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22505:23:0::1;::::0;;::::1;::::0;;22273:263::o;35351:208::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;35451:9:::1;35446:106;35462:20:::0;;::::1;35446:106;;;35534:6;35508:9;:23;35518:9;;35528:1;35518:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35508:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35508:23:0;:32;;-1:-1:-1;;35508:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35484:3:::1;::::0;::::1;:::i;:::-;;;35446:106;;37641:299:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;37778:17:::1;:33:::0;;;;37822:17:::1;:33:::0;37866:11:::1;:21:::0;37898:18:::1;:34:::0;37641:299::o;19427:198::-;-1:-1:-1;;;;;19517:20:0;;19493:7;19517:20;;;:11;:20;;;;;;;;19513:49;;;-1:-1:-1;;;;;;19546:16:0;;;;;:7;:16;;;;;;;19427:198::o;19513:49::-;-1:-1:-1;;;;;19600:16:0;;;;;;:7;:16;;;;;;19580: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;34557:198::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;34644:9:::1;34639:109;34655:20:::0;;::::1;34639:109;;;34732:4;34697:18;:32;34716:9;;34726:1;34716:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34697:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34697:32:0;:39;;-1:-1:-1;;34697:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34677:3:::1;::::0;::::1;:::i;:::-;;;34639:109;;;;34557:198:::0;;:::o;36283:135::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;36368:42:::1;::::0;-1:-1:-1;;;;;36368:19:0;::::1;::::0;36388:21:::1;36368:42:::0;::::1;;;::::0;::::1;::::0;;;36388:21;36368:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;36079:188:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;36166:9:::1;36161:99;36177:20:::0;;::::1;36161:99;;;36244:4;36219:10;:24;36230:9;;36240:1;36230:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36219:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36219:24:0;:29;;-1:-1:-1;;36219:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36199:3:::1;::::0;::::1;:::i;:::-;;;36161:99;;36915:178:::0;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;37069:16:::1;37049;37039:7;;:26;;;;:::i;:::-;37038:47;;;;:::i;:::-;37022:13;:63:::0;-1:-1:-1;;36915:178:0:o;19138:87::-;19177:13;19210:7;19203:14;;;;;:::i;37110:523::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;37260:13:::1;:29:::0;;;37300:6:::1;:16:::0;;;37327:12:::1;:28:::0;;;37366:12:::1;:28:::0;;;37407:16:::1;:32:::0;;;37450:16:::1;:32:::0;;;37493:10:::1;:20:::0;;;37524:17:::1;:33:::0;;;37581:42:::1;37309:7:::0;37581:30:::1;37381:13:::0;37342;37581:16:::1;:30::i;:::-;:34:::0;::::1;:42::i;:::-;37570:8;:53:::0;-1:-1:-1;;;;37110:523:0:o;35567:500::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;35703:4:::1;35684:23:::0;::::1;35676:81;;;::::0;-1:-1:-1;;;35676:81:0;;13002:2:1;35676:81:0::1;::::0;::::1;12984:21:1::0;13041:2;13021:18;;;13014:30;13080:34;13060:18;;;13053:62;-1:-1:-1;;;13131:18:1;;;13124:44;13185:19;;35676:81:0::1;12800:410:1::0;35676:81:0::1;35820:9;::::0;35793:12:::1;::::0;35832:9;;35816:13:::1;::::0;-1:-1:-1;;;35820:9:0;::::1;;;35816:2;:13;:::i;:::-;35808:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;35793:55;;35888:4;35869:15;35879:4;35869:9;:15::i;:::-;:23;;35861:63;;;::::0;-1:-1:-1;;;35861:63:0;;12286:2:1;35861:63:0::1;::::0;::::1;12268:21:1::0;12325:2;12305:18;;;12298:30;12364:29;12344:18;;;12337:57;12411:18;;35861:63:0::1;12084:351:1::0;35861:63:0::1;35941:6;35937:123;35951:20:::0;;::::1;35937:123;;;35992:52;36002:4;36007:9;;36017:1;36007:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36033:9;::::0;36029:13:::1;::::0;-1:-1:-1;;;36033:9:0;::::1;;;36029:2;:13;:::i;:::-;36021:21;::::0;:6;:21:::1;:::i;:::-;35992:9;:52::i;:::-;35973:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35937:123;;;;35663:404;35567:500:::0;;;;:::o;20675:269::-;20768:4;20785:129;189:10;20808:7;20817:96;20856:15;20817:96;;;;;;;;;;;;;;;;;189:10;20817:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20817:34:0;;;;;;;;;;;;:38;:96::i;19633:167::-;19711:4;19728:42;189:10;19752:9;19763:6;19728:9;:42::i;34895:190::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;34992:15:::1;:43:::0;;-1:-1:-1;;;;;34992:43:0;;::::1;-1:-1:-1::0;;;;;;34992:43:0;;::::1;;::::0;;;35046:9:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;34895:190::o;34773: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;;;;;34840:27:0::1;34870:5;34840:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34840:35:0::1;::::0;;34773:110::o;18516:523::-;5939:6;;-1:-1:-1;;;;;5939:6:0;189:10;5939:22;5931:67;;;;-1:-1:-1;;;5931:67:0;;;;;;;:::i;:::-;18589:29:::1;18640:9;18589:61;;18661:16;18698:10;-1:-1:-1::0;;;;;18698:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18680:47:0::1;;18736:4;18743:10;-1:-1:-1::0;;;;;18743:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18680:81;::::0;-1:-1:-1;;;;;;18680:81:0::1;::::0;;;;;;-1:-1:-1;;;;;7748:15:1;;;18680:81:0::1;::::0;::::1;7730:34:1::0;7800:15;;7780:18;;;7773:43;7665:18;;18680:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18661:100:::0;-1:-1:-1;;;;;;18776:22:0;::::1;18772:221;;18849:10;-1:-1:-1::0;;;;;18849:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18831:50:0::1;;18890:4;18897:10;-1:-1:-1::0;;;;;18897:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18831:84;::::0;-1:-1:-1;;;;;;18831:84:0::1;::::0;;;;;;-1:-1:-1;;;;;7748:15:1;;;18831:84:0::1;::::0;::::1;7730:34:1::0;7800:15;;7780:18;;;7773:43;7665:18;;18831:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18815:13;:100:::0;;-1:-1:-1;;;;;;18815:100:0::1;-1:-1:-1::0;;;;;18815:100:0;;;::::1;::::0;;;::::1;::::0;;18772:221:::1;;;18957:13;:24:::0;;-1:-1:-1;;;;;;18957:24:0::1;-1:-1:-1::0;;;;;18957:24:0;::::1;;::::0;;18772:221:::1;-1:-1:-1::0;19003:15:0::1;:28:::0;;-1:-1:-1;;;;;;19003:28:0::1;-1:-1:-1::0;;;;;19003:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18516:523:0:o;34437: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;;;;;34507:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34507:34:0::1;34537:4;34507:34;::::0;;34437: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;;10764:2:1;6267:73:0::1;::::0;::::1;10746:21:1::0;10803:2;10783:18;;;10776:30;10842:34;10822:18;;;10815:62;-1:-1:-1;;;10893:18:1;;;10886:36;10939:19;;6267:73:0::1;10562:402: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;;13417:2:1;1869:56:0;;;13399:21:1;13456:2;13436:18;;;13429:30;13495:34;13475:18;;;13468:62;-1:-1:-1;;;13546:18:1;;;13539:31;13587:19;;1869:56:0;13215:397: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;;11574:2:1;1277:46:0;;;11556:21:1;11613:2;11593:18;;;11586:30;11652:29;11632:18;;;11625:57;11699:18;;1277:46:0;11372:351:1;23031:337:0;-1:-1:-1;;;;;23124:19:0;;23116:68;;;;-1:-1:-1;;;23116:68:0;;15399:2:1;23116:68:0;;;15381:21:1;15438:2;15418:18;;;15411:30;15477:34;15457:18;;;15450:62;-1:-1:-1;;;15528:18:1;;;15521:34;15572:19;;23116:68:0;15197:400:1;23116:68:0;-1:-1:-1;;;;;23203:21:0;;23195:68;;;;-1:-1:-1;;;23195:68:0;;11171:2:1;23195:68:0;;;11153:21:1;11210:2;11190:18;;;11183:30;11249:34;11229:18;;;11222:62;-1:-1:-1;;;11300:18:1;;;11293:32;11342:19;;23195:68:0;10969:398:1;23195:68:0;-1:-1:-1;;;;;23276:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23328:32;;16866:25:1;;;23328:32:0;;16839:18:1;23328:32:0;;;;;;;23031:337;;;:::o;23376:2400::-;-1:-1:-1;;;;;23498:18:0;;23490:68;;;;-1:-1:-1;;;23490:68:0;;14590:2:1;23490:68:0;;;14572:21:1;14629:2;14609:18;;;14602:30;14668:34;14648:18;;;14641:62;-1:-1:-1;;;14719:18:1;;;14712:35;14764:19;;23490:68:0;14388:401:1;23490:68:0;-1:-1:-1;;;;;23577:16:0;;23569:64;;;;-1:-1:-1;;;23569:64:0;;9949:2:1;23569:64:0;;;9931:21:1;9988:2;9968:18;;;9961:30;10027:34;10007:18;;;10000:62;-1:-1:-1;;;10078:18:1;;;10071:33;10121:19;;23569:64:0;9747:399:1;23569:64:0;23661:1;23652:6;:10;23644:64;;;;-1:-1:-1;;;23644:64:0;;14180:2:1;23644:64:0;;;14162:21:1;14219:2;14199:18;;;14192:30;14258:34;14238:18;;;14231:62;-1:-1:-1;;;14309:18:1;;;14302:39;14358:19;;23644:64:0;13978:405:1;23644:64:0;-1:-1:-1;;;;;23728:15:0;;;;;;:9;:15;;;;;;;;23727:16;23719:52;;;;-1:-1:-1;;;23719:52:0;;16570:2:1;23719:52:0;;;16552:21:1;16609:2;16589:18;;;16582:30;16648:25;16628:18;;;16621:53;16691:18;;23719:52:0;16368:347:1;23719:52:0;5843:7;5870:6;-1:-1:-1;;;;;23786:14:0;;;5870:6;;23786:14;;;;:30;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;23804:12:0;;;5870:6;;23804:12;;23786:30;23782:84;;;23826:11;;-1:-1:-1;;;23826:11:0;;;;23818:48;;;;-1:-1:-1;;;23818:48:0;;15804:2:1;23818:48:0;;;15786:21:1;15843:2;15823:18;;;15816:30;15882:26;15862:18;;;15855:54;15926:18;;23818:48:0;15602:348:1;23818:48:0;24005:13;;23928:12;;-1:-1:-1;;;;;23999:19:0;;;24005:13;;23999:19;;:40;;-1:-1:-1;24026:13:0;;-1:-1:-1;;;;;24022:17:0;;;24026:13;;24022:17;23999:40;23998:99;;;;-1:-1:-1;;;;;;24046:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24074:22:0;;;;;;:18;:22;;;;;;;;24046:50;24044:53;23998:99;23993:148;;;-1:-1:-1;24125:4:0;23993:148;24167:1;24156:10;;:12;:59;;;;-1:-1:-1;;;;;;24174:22:0;;;;;;:18;:22;;;;;;;;24173:23;:41;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;24200:14:0;;;5870:6;;24200:14;;24173:41;24156:106;;;;;24249:12;24235:10;;24222;;:23;;;;:::i;:::-;24221:40;24219:43;24156:106;24153:247;;;24313:15;;24298:13;24308:2;24298:9;:13::i;:::-;24290:21;;:6;:21;:::i;:::-;:38;;24282:106;;;;-1:-1:-1;;;24282:106:0;;14996:2:1;24282:106:0;;;14978:21:1;15035:2;15015:18;;;15008:30;15074:34;15054:18;;;15047:62;-1:-1:-1;;;15125:18:1;;;15118:32;15167:19;;24282:106:0;14794:398:1;24282:106:0;24438:8;;24422:15;:24;24471:17;;24457:13;:31;24504:11;;-1:-1:-1;;;24504:11:0;;;;:34;;;;-1:-1:-1;24525:13:0;;-1:-1:-1;;;;;24519:19:0;;;24525:13;;24519:19;24504:34;24501:194;;;24579:57;24624:11;;24579:40;24601:17;;24579;;:21;;:40;;;;:::i;:57::-;24562:15;:74;24665:18;;24651:13;:32;24501:194;24765:1;24754:10;;:12;:56;;;;;24798:12;24784:10;;24771;;:23;;;;:::i;:::-;24770:40;24754:56;:77;;;;-1:-1:-1;24818:13:0;;-1:-1:-1;;;;;24814:17:0;;;24818:13;;24814:17;;24754:77;24751:130;;;-1:-1:-1;;;;;24851:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;24851:18:0;24865:4;24851:18;;;24751:130;24993:1;24982:10;;:12;:30;;;;-1:-1:-1;5843:7:0;5870:6;-1:-1:-1;;;;;24998:14:0;;;5870:6;;24998:14;;24982:30;:75;;;;;25046:10;;25033;;:23;;;;:::i;:::-;25016:12;:41;;24982:75;:91;;;;-1:-1:-1;25062:11:0;;-1:-1:-1;;;25062:11:0;;;;24982:91;24979:201;;;25109:3;25093:15;:19;24979:201;25195:14;;-1:-1:-1;;;25195:14:0;;;;25192:150;;;25229:11;;-1:-1:-1;;;25229:11:0;;;;:36;;;;-1:-1:-1;25252:13:0;;-1:-1:-1;;;;;25244:21:0;;;25252:13;;25244:21;25229:36;25226:105;;;25313:1;25297:15;:17;25226:105;25375:6;;-1:-1:-1;;;25375:6:0;;;;25374:7;:22;;;;-1:-1:-1;25385:11:0;;-1:-1:-1;;;25385:11:0;;;;25374:22;:45;;;;-1:-1:-1;25406:13:0;;-1:-1:-1;;;;;25400:19:0;;;25406:13;;25400:19;25374:45;25370:350;;;25444:28;25475:24;25493:4;25475:9;:24::i;:::-;25444:55;;25553:13;;25531:20;:35;25528:169;;-1:-1:-1;25613:13:0;;25649:32;25613:13;25649:10;:32::i;:::-;25421:299;25370:350;25730:38;25745:4;25750:2;25753:6;25760:7;25730: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;32974:163::-;33015:7;33036:15;33053;33072:19;:17;:19::i;:::-;33035:56;;-1:-1:-1;33035:56:0;-1:-1:-1;33109:20:0;33035:56;;33109:11;:20::i;:::-;33102:27;;;;32974:163;:::o;31772:419::-;31831:7;31840;31849;31858;31867;31876;31897:23;31922:12;31936:18;31958:20;31970:7;31958:11;:20::i;:::-;31896:82;;;;;;31990:15;32007:23;32032:12;32048:50;32060:7;32069:4;32075:10;32087;:8;:10::i;:::-;32048:11;:50::i;:::-;31989:109;;;;-1:-1:-1;31989:109:0;;-1:-1:-1;32149:15:0;;-1:-1:-1;32166:4:0;;-1:-1:-1;32172:10:0;;-1:-1:-1;31772:419:0;;-1:-1:-1;;;;;31772: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;25784:1211::-;17082:6;:13;;-1:-1:-1;;;;17082:13:0;-1:-1:-1;;;17082:13:0;;;25982:8:::1;::::0;25950:12:::1;::::0;17082:13;;25911:101:::1;::::0;26010:1:::1;::::0;25911:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25885:127:::0;-1:-1:-1;26025:20:0::1;26048:41;:20:::0;25885:127;26048:24:::1;:41::i;:::-;26025:64;;26110:30;26127:12;26110:16;:30::i;:::-;26242:12;::::0;26173:21:::1;::::0;26153:17:::1;::::0;26229:33:::1;::::0;26242:19:::1;::::0;26259:1:::1;26242:16;:19::i;:::-;26229:8;::::0;;:12:::1;:33::i;:::-;26207:55;;26275:26;26304:93;26395:1;26304:72;26364:11;26304:41;26332:12;;26304:9;:27;;:41;;;;:::i;:93::-;26275:122;;26418:20;26441:38;26467:11;26441:21;26455:6;;26441:9;:13;;:21;;;;:::i;:38::-;26418:61;;26490:26;26519:68;26565:11;26519:27;26533:12;;26519:9;:13;;:27;;;;:::i;:68::-;26490:97:::0;-1:-1:-1;26689:21:0::1;26724:22:::0;;26721:153:::1;;26795:15;::::0;26763:48:::1;::::0;26776:18;;-1:-1:-1;;;;;26795:15:0::1;26763:12;:48::i;:::-;26852:9;::::0;26826:36:::1;::::0;26839:12;;-1:-1:-1;;;;;26852:9:0::1;26826:12;:36::i;:::-;26888:19:::0;;26884:104:::1;;26928:48;26941:15;26957:18;26928:12;:48::i;:::-;-1:-1:-1::0;;17118:6:0;:14;;-1:-1:-1;;;;17118:14:0;;;-1:-1:-1;;;;;;;25784:1211:0:o;28338:943::-;28478:13;;28528:15;;28558:7;28554:88;;28597:1;28581:13;:17;;;28613:15;:17;28554:88;-1:-1:-1;;;;;28666:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28690:22:0;;;;;;:11;:22;;;;;;;;28689:23;28666:46;28662:467;;;28729:48;28751:6;28759:9;28770:6;28729:21;:48::i;:::-;28662:467;;;-1:-1:-1;;;;;28800:19:0;;;;;;:11;:19;;;;;;;;28799:20;:46;;;;-1:-1:-1;;;;;;28823:22:0;;;;;;:11;:22;;;;;;;;28799:46;28795:334;;;28862:46;28882:6;28890:9;28901:6;28862:19;:46::i;28795:334::-;-1:-1:-1;;;;;28930:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28953:22:0;;;;;;:11;:22;;;;;;;;28930:45;28926:203;;;28992:48;29014:6;29022:9;29033:6;28992:21;:48::i;28926:203::-;29073:44;29091:6;29099:9;29110:6;29073:17;:44::i;:::-;29153:7;29149:125;;29176:13;:38;;;;29229:15;:33;-1:-1:-1;;;;28338:943:0:o;33145:561::-;33242:7;;33278;;33195;;;;;33302:289;33326:9;:16;33322:20;;33302:289;;;33392:7;33368;:21;33376:9;33386:1;33376:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33376:12:0;33368:21;;;;;;;;;;;;;:31;;:66;;;33427:7;33403;:21;33411:9;33421:1;33411:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33411:12:0;33403:21;;;;;;;;;;;;;:31;33368:66;33364:97;;;33444:7;;33453;;33436:25;;;;;;;33145:561;;:::o;33364:97::-;33486:34;33498:7;:21;33506:9;33516:1;33506:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33506:12:0;33498:21;;;;;;;;;;;;;33486:7;;:11;:34::i;:::-;33476:44;;33545:34;33557:7;:21;33565:9;33575:1;33565:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33565:12:0;33557:21;;;;;;;;;;;;;33545:7;;:11;:34::i;:::-;33535:44;-1:-1:-1;33344:3:0;;;;:::i;:::-;;;;33302:289;;;-1:-1:-1;33627:7:0;;33615;;:20;;:11;:20::i;:::-;33605:7;:30;33601:61;;;33645:7;;33654;;33637:25;;;;;;33145:561;;:::o;33601:61::-;33681:7;;33690;;-1:-1:-1;33145:561:0;-1:-1:-1;33145:561:0:o;32199:330::-;32259:7;32268;32277;32297:12;32312:24;32328:7;32312:15;:24::i;:::-;32297:39;;32347:18;32368:30;32390:7;32368:21;:30::i;:::-;32347:51;-1:-1:-1;32409:23:0;32435:33;32347:51;32435:17;:7;32447:4;32435:11;:17::i;:::-;:21;;:33::i;:::-;32409:59;32504:4;;-1:-1:-1;32510:10:0;;-1:-1:-1;32199:330:0;;-1:-1:-1;;;32199:330:0:o;32537:429::-;32652:7;;;;32708:24;:7;32720:11;32708;:24::i;:::-;32690:42;-1:-1:-1;32743:12:0;32758:21;:4;32767:11;32758:8;:21::i;:::-;32743:36;-1:-1:-1;32790:18:0;32811:27;:10;32826:11;32811:14;:27::i;:::-;32790:48;-1:-1:-1;32849:23:0;32875:33;32790:48;32875:17;:7;32887:4;32875:11;:17::i;:33::-;32927:7;;;;-1:-1:-1;32953:4:0;;-1:-1:-1;32537:429:0;;-1:-1:-1;;;;;;;32537:429:0:o;27137:666::-;27287:16;;;27301:1;27287:16;;;;;;;;27263:21;;27287:16;;;;;;;;;;-1:-1:-1;27287:16:0;27263:40;;27332:4;27314;27319:1;27314:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27314:23:0;;;:7;;;;;;;;;;:23;;;;27358:15;;:22;;;-1:-1:-1;;;27358:22:0;;;;:15;;;;;:20;;:22;;;;;27314:7;;27358:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27348:4;27353:1;27348:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27348:32:0;;;:7;;;;;;;;;:32;27425:15;;27393:62;;27410:4;;27425:15;27443:11;27393:8;:62::i;:::-;27494:15;;:240;;-1:-1:-1;;;27494:240:0;;-1:-1:-1;;;;;27494:15:0;;;;:66;;:240;;27575:11;;27494:15;;27645:4;;27672;;27708:15;;27494:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27760:35;27777:11;27790:4;27760:35;;;;;;;:::i;:::-;;;;;;;;27192:611;27137:666;:::o;27007:111::-;27087:23;;-1:-1:-1;;;;;27087:15:0;;;:23;;;;;27103:6;;27087:23;;;;27103:6;27087:15;:23;;;;;;;;;;;;;;;;;;;27817:513;27997:15;;27965:62;;27982:4;;-1:-1:-1;;;;;27997:15:0;28015:11;27965:8;:62::i;:::-;28070:15;;-1:-1:-1;;;;;28070:15:0;:31;28109:9;28142:4;28162:11;28070:15;;28274:7;5843;5870:6;-1:-1:-1;;;;;5870:6:0;;5805:79;28274:7;28070:252;;;;;;-1:-1:-1;;;;;;28070:252:0;;;-1:-1:-1;;;;;8465:15:1;;;28070:252:0;;;8447:34:1;8497:18;;;8490:34;;;;8540:18;;;8533:34;;;;8583:18;;;8576:34;8647:15;;;8626:19;;;8619:44;28296:15:0;8679:19:1;;;8672:35;8381:19;;28070:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27817:513;;:::o;30393:566::-;30496:15;30513:23;30538:12;30552:23;30577:12;30591:18;30613:19;30624:7;30613:10;:19::i;:::-;-1:-1:-1;;;;;30661:15:0;;;;;;:7;:15;;;;;;30495:137;;-1:-1:-1;30495:137:0;;-1:-1:-1;30495:137:0;;-1:-1:-1;30495:137:0;-1:-1:-1;30495:137:0;-1:-1:-1;30495:137:0;-1:-1:-1;30661:28:0;;30681:7;30661:19;:28::i;:::-;-1:-1:-1;;;;;30643:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30718:7;:15;;;;:28;;30738:7;30718:19;:28::i;:::-;-1:-1:-1;;;;;30700:15:0;;;;;;;:7;:15;;;;;;:46;;;;30778:18;;;;;;;:39;;30801:15;30778:22;:39::i;:::-;-1:-1:-1;;;;;30757:18:0;;;;;;:7;:18;;;;;:60;30831:26;30846:10;30831:14;:26::i;:::-;30868:23;30880:4;30886;30868:11;:23::i;:::-;30924:9;-1:-1:-1;;;;;30907:44:0;30916:6;-1:-1:-1;;;;;30907:44:0;;30935:15;30907:44;;;;16866:25:1;;16854:2;16839:18;;16720:177;30907:44:0;;;;;;;;30484:475;;;;;;30393:566;;;:::o;29799:586::-;29900:15;29917:23;29942:12;29956:23;29981:12;29995:18;30017:19;30028:7;30017:10;:19::i;:::-;-1:-1:-1;;;;;30065:15:0;;;;;;:7;:15;;;;;;29899:137;;-1:-1:-1;29899:137:0;;-1:-1:-1;29899:137:0;;-1:-1:-1;29899:137:0;-1:-1:-1;29899:137:0;-1:-1:-1;29899:137:0;-1:-1:-1;30065:28:0;;29899:137;30065:19;:28::i;:::-;-1:-1:-1;;;;;30047:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30125:18;;;;;:7;:18;;;;;:39;;30148:15;30125:22;:39::i;:::-;-1:-1:-1;;;;;30104:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30196:7;:18;;;;:39;;30219:15;30196:22;:39::i;30967:642::-;31070:15;31087:23;31112:12;31126:23;31151:12;31165:18;31187:19;31198:7;31187:10;:19::i;:::-;-1:-1:-1;;;;;31235:15:0;;;;;;:7;:15;;;;;;31069:137;;-1:-1:-1;31069:137:0;;-1:-1:-1;31069:137:0;;-1:-1:-1;31069:137:0;-1:-1:-1;31069:137:0;-1:-1:-1;31069:137:0;-1:-1:-1;31235:28:0;;31255:7;31235:19;:28::i;:::-;-1:-1:-1;;;;;31217:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31292:7;:15;;;;:28;;31312:7;31292:19;:28::i;29289:502::-;29388:15;29405:23;29430:12;29444:23;29469:12;29483:18;29505:19;29516:7;29505:10;:19::i;:::-;-1:-1:-1;;;;;29553:15:0;;;;;;:7;:15;;;;;;29387:137;;-1:-1:-1;29387:137:0;;-1:-1:-1;29387:137:0;;-1:-1:-1;29387:137:0;-1:-1:-1;29387:137:0;-1:-1:-1;29387:137:0;-1:-1:-1;29553:28:0;;29387:137;29553:19;:28::i;34085:160::-;34149:7;34176:61;34221:5;34176:26;34188:13;;34176:7;:11;;:26;;;;:::i;34257:168::-;34327:7;34354:63;34401:5;34354:28;34366:15;;34354:7;:11;;:28;;;;:::i;33718:355::-;33781:19;33804:10;:8;:10::i;:::-;33781:33;-1:-1:-1;33825:18:0;33846:27;:10;33781:33;33846:14;:27::i;:::-;33925:4;33909:22;;;;:7;:22;;;;;;33825:48;;-1:-1:-1;33909:38:0;;33825:48;33909:26;:38::i;:::-;33900:4;33884:22;;;;:7;:22;;;;;;;;:63;;;;33961:11;:26;;;;;;33958:107;;;34043:4;34027:22;;;;:7;:22;;;;;;:38;;34054:10;34027:26;:38::i;:::-;34018:4;34002:22;;;;:7;:22;;;;;:63;33770:303;;33718:355;:::o;31617:147::-;31695:7;;:17;;31707:4;31695:11;:17::i;:::-;31685:7;:27;31736:10;;:20;;31751:4;31736:14;:20::i;:::-;31723:10;:33;-1:-1:-1;;31617:147:0:o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:247::-;445:6;498:2;486:9;477:7;473:23;469:32;466:52;;;514:1;511;504:12;466:52;553:9;540:23;572:31;597:5;572:31;:::i;638:251::-;708:6;761:2;749:9;740:7;736:23;732:32;729:52;;;777:1;774;767:12;729:52;809:9;803:16;828:31;853:5;828:31;:::i;1154:388::-;1222:6;1230;1283:2;1271:9;1262:7;1258:23;1254:32;1251:52;;;1299:1;1296;1289:12;1251:52;1338:9;1325:23;1357:31;1382:5;1357:31;:::i;:::-;1407:5;-1:-1:-1;1464:2:1;1449:18;;1436:32;1477:33;1436:32;1477:33;:::i;:::-;1529:7;1519:17;;;1154:388;;;;;:::o;1547:456::-;1624:6;1632;1640;1693:2;1681:9;1672:7;1668:23;1664:32;1661:52;;;1709:1;1706;1699:12;1661:52;1748:9;1735:23;1767:31;1792:5;1767:31;:::i;:::-;1817:5;-1:-1:-1;1874:2:1;1859:18;;1846:32;1887:33;1846:32;1887:33;:::i;:::-;1547:456;;1939:7;;-1:-1:-1;;;1993:2:1;1978:18;;;;1965:32;;1547:456::o;2008:640::-;2112:6;2120;2128;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2244:9;2231:23;2263:31;2288:5;2263:31;:::i;:::-;2313:5;-1:-1:-1;2369:2:1;2354:18;;2341:32;2396:18;2385:30;;2382:50;;;2428:1;2425;2418:12;2382:50;2467:70;2529:7;2520:6;2509:9;2505:22;2467:70;:::i;:::-;2008:640;;2556:8;;-1:-1:-1;2441:96:1;;2638:2;2623:18;2610:32;;2008:640;-1:-1:-1;;;;2008:640:1:o;2653:315::-;2721:6;2729;2782:2;2770:9;2761:7;2757:23;2753:32;2750:52;;;2798:1;2795;2788:12;2750:52;2837:9;2824:23;2856:31;2881:5;2856:31;:::i;:::-;2906:5;2958:2;2943:18;;;;2930:32;;-1:-1:-1;;;2653:315:1:o;2973:437::-;3059:6;3067;3120:2;3108:9;3099:7;3095:23;3091:32;3088:52;;;3136:1;3133;3126:12;3088:52;3176:9;3163:23;3209:18;3201:6;3198:30;3195:50;;;3241:1;3238;3231:12;3195:50;3280:70;3342:7;3333:6;3322:9;3318:22;3280:70;:::i;:::-;3369:8;;3254:96;;-1:-1:-1;2973:437:1;-1:-1:-1;;;;2973:437:1:o;3415:566::-;3507:6;3515;3523;3576:2;3564:9;3555:7;3551:23;3547:32;3544:52;;;3592:1;3589;3582:12;3544:52;3632:9;3619:23;3665:18;3657:6;3654:30;3651:50;;;3697:1;3694;3687:12;3651:50;3736:70;3798:7;3789:6;3778:9;3774:22;3736:70;:::i;:::-;3825:8;;-1:-1:-1;3710:96:1;-1:-1:-1;;3910:2:1;3895:18;;3882:32;3923:28;3882:32;3923:28;:::i;:::-;3970:5;3960:15;;;3415:566;;;;;:::o;3986:241::-;4042:6;4095:2;4083:9;4074:7;4070:23;4066:32;4063:52;;;4111:1;4108;4101:12;4063:52;4150:9;4137:23;4169:28;4191:5;4169:28;:::i;4232:245::-;4299:6;4352:2;4340:9;4331:7;4327:23;4323:32;4320:52;;;4368:1;4365;4358:12;4320:52;4400:9;4394:16;4419:28;4441:5;4419:28;:::i;4482:309::-;4547:6;4555;4608:2;4596:9;4587:7;4583:23;4579:32;4576:52;;;4624:1;4621;4614:12;4576:52;4663:9;4650:23;4682:28;4704:5;4682:28;:::i;5202:180::-;5261:6;5314:2;5302:9;5293:7;5289:23;5285:32;5282:52;;;5330:1;5327;5320:12;5282:52;-1:-1:-1;5353:23:1;;5202:180;-1:-1:-1;5202:180:1:o;5387:184::-;5457:6;5510:2;5498:9;5489:7;5485:23;5481:32;5478:52;;;5526:1;5523;5516:12;5478:52;-1:-1:-1;5549:16:1;;5387:184;-1:-1:-1;5387:184:1:o;5576:309::-;5641:6;5649;5702:2;5690:9;5681:7;5677:23;5673:32;5670:52;;;5718:1;5715;5708:12;5670:52;5754:9;5741:23;5731:33;;5814:2;5803:9;5799:18;5786:32;5827:28;5849:5;5827:28;:::i;5890:248::-;5958:6;5966;6019:2;6007:9;5998:7;5994:23;5990:32;5987:52;;;6035:1;6032;6025:12;5987:52;-1:-1:-1;;6058:23:1;;;6128:2;6113:18;;;6100:32;;-1:-1:-1;5890:248:1:o;6143:306::-;6231:6;6239;6247;6300:2;6288:9;6279:7;6275:23;6271:32;6268:52;;;6316:1;6313;6306:12;6268:52;6345:9;6339:16;6329:26;;6395:2;6384:9;6380:18;6374:25;6364:35;;6439:2;6428:9;6424:18;6418:25;6408:35;;6143:306;;;;;:::o;6454:385::-;6540:6;6548;6556;6564;6617:3;6605:9;6596:7;6592:23;6588:33;6585:53;;;6634:1;6631;6624:12;6585:53;-1:-1:-1;;6657:23:1;;;6727:2;6712:18;;6699:32;;-1:-1:-1;6778:2:1;6763:18;;6750:32;;6829:2;6814:18;6801:32;;-1:-1:-1;6454:385:1;-1:-1:-1;6454:385:1:o;6844:461::-;6897:3;6935:5;6929:12;6962:6;6957:3;6950:19;6988:4;7017:2;7012:3;7008:12;7001:19;;7054:2;7047:5;7043:14;7075:1;7085:195;7099:6;7096:1;7093:13;7085:195;;;7164:13;;-1:-1:-1;;;;;7160:39:1;7148:52;;7220:12;;;;7255:15;;;;7196:1;7114:9;7085:195;;;-1:-1:-1;7296:3:1;;6844:461;-1:-1:-1;;;;;6844:461:1:o;9145:597::-;9257:4;9286:2;9315;9304:9;9297:21;9347:6;9341:13;9390:6;9385:2;9374:9;9370:18;9363:34;9415:1;9425:140;9439:6;9436:1;9433:13;9425:140;;;9534:14;;;9530:23;;9524:30;9500:17;;;9519:2;9496:26;9489:66;9454:10;;9425:140;;;9583:6;9580:1;9577:13;9574:91;;;9653:1;9648:2;9639:6;9628:9;9624:22;9620:31;9613:42;9574:91;-1:-1:-1;9726:2:1;9705:15;-1:-1:-1;;9701:29:1;9686:45;;;;9733:2;9682:54;;9145:597;-1:-1:-1;;;9145:597:1:o;13617:356::-;13819:2;13801:21;;;13838:18;;;13831:30;13897:34;13892:2;13877:18;;13870:62;13964:2;13949:18;;13617:356::o;16902:332::-;17109:6;17098:9;17091:25;17152:2;17147;17136:9;17132:18;17125:30;17072:4;17172:56;17224:2;17213:9;17209:18;17201:6;17172:56;:::i;:::-;17164:64;16902:332;-1:-1:-1;;;;16902:332:1:o;17239:582::-;17538:6;17527:9;17520:25;17581:6;17576:2;17565:9;17561:18;17554:34;17624:3;17619:2;17608:9;17604:18;17597:31;17501:4;17645:57;17697:3;17686:9;17682:19;17674:6;17645:57;:::i;:::-;-1:-1:-1;;;;;17738:32:1;;;;17733:2;17718:18;;17711:60;-1:-1:-1;17802:3:1;17787:19;17780:35;17637:65;17239:582;-1:-1:-1;;;17239:582:1:o;18015:128::-;18055:3;18086:1;18082:6;18079:1;18076:13;18073:39;;;18092:18;;:::i;:::-;-1:-1:-1;18128:9:1;;18015:128::o;18148:217::-;18188:1;18214;18204:132;;18258:10;18253:3;18249:20;18246:1;18239:31;18293:4;18290:1;18283:15;18321:4;18318:1;18311:15;18204:132;-1:-1:-1;18350:9:1;;18148:217::o;18370:422::-;18459:1;18502:5;18459:1;18516:270;18537:7;18527:8;18524:21;18516:270;;;18596:4;18592:1;18588:6;18584:17;18578:4;18575:27;18572:53;;;18605:18;;:::i;:::-;18655:7;18645:8;18641:22;18638:55;;;18675:16;;;;18638:55;18754:22;;;;18714:15;;;;18516:270;;;18520:3;18370:422;;;;;:::o;18797:140::-;18855:5;18884:47;18925:4;18915:8;18911:19;18905:4;18991:5;19021:8;19011:80;;-1:-1:-1;19062:1:1;19076:5;;19011:80;19110:4;19100:76;;-1:-1:-1;19147:1:1;19161:5;;19100:76;19192:4;19210:1;19205:59;;;;19278:1;19273:130;;;;19185:218;;19205:59;19235:1;19226:10;;19249:5;;;19273:130;19310:3;19300:8;19297:17;19294:43;;;19317:18;;:::i;:::-;-1:-1:-1;;19373:1:1;19359:16;;19388:5;;19185:218;;19487:2;19477:8;19474:16;19468:3;19462:4;19459:13;19455:36;19449:2;19439:8;19436:16;19431:2;19425:4;19422:12;19418:35;19415:77;19412:159;;;-1:-1:-1;19524:19:1;;;19556:5;;19412:159;19603:34;19628:8;19622:4;19603:34;:::i;:::-;19673:6;19669:1;19665:6;19661:19;19652:7;19649:32;19646:58;;;19684:18;;:::i;:::-;19722:20;;18942:806;-1:-1:-1;;;18942:806:1:o;19753:168::-;19793:7;19859:1;19855;19851:6;19847:14;19844:1;19841:21;19836:1;19829:9;19822:17;19818:45;19815:71;;;19866:18;;:::i;:::-;-1:-1:-1;19906:9:1;;19753:168::o;19926:125::-;19966:4;19994:1;19991;19988:8;19985:34;;;19999:18;;:::i;:::-;-1:-1:-1;20036:9:1;;19926:125::o;20056:380::-;20135:1;20131:12;;;;20178;;;20199:61;;20253:4;20245:6;20241:17;20231:27;;20199:61;20306:2;20298:6;20295:14;20275:18;20272:38;20269:161;;;20352:10;20347:3;20343:20;20340:1;20333:31;20387:4;20384:1;20377:15;20415:4;20412:1;20405:15;20269:161;;20056:380;;;:::o;20441:135::-;20480:3;-1:-1:-1;;20501:17:1;;20498:43;;;20521:18;;:::i;:::-;-1:-1:-1;20568:1:1;20557:13;;20441:135::o;20581:127::-;20642:10;20637:3;20633:20;20630:1;20623:31;20673:4;20670:1;20663:15;20697:4;20694:1;20687:15;20713:127;20774:10;20769:3;20765:20;20762:1;20755:31;20805:4;20802:1;20795:15;20829:4;20826:1;20819:15;20845:127;20906:10;20901:3;20897:20;20894:1;20887:31;20937:4;20934:1;20927:15;20961:4;20958:1;20951:15;21109:131;-1:-1:-1;;;;;21184:31:1;;21174:42;;21164:70;;21230:1;21227;21220:12;21164:70;21109:131;:::o;21245:118::-;21331:5;21324:13;21317:21;21310:5;21307:32;21297:60;;21353:1;21350;21343:12

Swarm Source

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