ETH Price: $3,258.74 (-0.30%)
Gas: 1 Gwei

Token

Umbreum (UMBC)
 

Overview

Max Total Supply

50,000,000,000 UMBC

Holders

159

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Filtered by Token Holder
Uniswap V2: UMBC 3
Balance
0.00000225 UMBC

Value
$0.00
0x5c32ddfd62a71edd5f6a5c97b295cc01e69e9296
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:
Umbreum

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

Official Coin of Dark Nexus Metaverse $UMBC

Website: https://www.umbreum.io/
TG: https://t.me/UmbreumInviteLinkLive

*/

// 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 Umbreum is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private marketingWallet = payable(0x257b66471f024a11f49eaF595e5987352E657d3A); // Marketing Wallet
    address payable private crowdfundWallet = payable(0xaE1b53607b9CE7e0303FbaDFD8e763F2EE7D2CdE); // Crowd Fund Wallet
    address payable private devWallet = payable (0x91D1d148f703b941088AB51DFb3833b10D1e3A39); // 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;
    mapping (address => bool) internal authorizations;
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

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

    string private _name = "Umbreum";
    string private _symbol = "UMBC";

    //Below was originally _tTotal.div(1000).mul(5); //0.5%

    uint256 public _maxWalletToken = _tTotal.div(100).mul(3); //3%

    uint256 public _buyLiquidityFee = 20; //2%
    uint256 public _buyDevFee = 20;    //2%
    uint256 public _buyMarketingFee = 30;   //3%
    uint256 public _buyReflectionFee = 0;   //0%

    uint256 public _sellLiquidityFee = 20; //2%
    uint256 public _sellMarketingFee = 20;  //2%
    uint256 public _sellDevFee = 30;   //3%
    uint256 public _sellReflectionFee = 0;   //0%
    
    uint256 private crowdfundfee = 2;   //0% same for buys and sells
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketingFee = _buyMarketingFee;
    uint256 private devFee = _buyDevFee;
    uint256 private reflectionFee=_buyReflectionFee;


    uint256 private totalFee =
        liquidityFee.add(marketingFee).add(devFee).add(crowdfundfee);
    uint256 private currenttotalFee = totalFee;
    
    //Below was originally _tTotal.div(10000).mul(5); //0.05%

    uint256 public swapThreshold = _tTotal.div(10000).mul(1); //0.01%
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    
    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;
        authorizations[msg.sender] = 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 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[to], "Sorry Buddy, Get Rekt");
        require(!_isSniper[from], "Sorry Buddy, Get Rekt");
        
        if(!authorizations[from]){
            require(tradingOpen,"Trading not open yet");
        }

         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

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

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot - first 2 blocks
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }

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

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

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

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

        uint256 amountETH = address(this).balance;

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

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );
         uint256 amountETHcrowdfund = amountETH.mul(crowdfundfee).div(
            totalETHFee
        );
        //Send to marketing wallet and dev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHcrowdfund,crowdfundWallet);
            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) {
            if(!_isTrusted[addresses[i]]){
                _isSniper[addresses[i]] = status;
            }
        }
    }
    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
        
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

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

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

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

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

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

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

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

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

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

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

        reflectionFee= _reflectionFee;
        liquidityFee = _liquidityFee;
        devFee = _devFee;
        marketingFee = _marketingFee;
        crowdfundfee = _crowdfundfee;
        totalFee = liquidityFee.add(marketingFee).add(devFee).add(crowdfundfee);
        require(totalFee.add(_buyReflectionFee) <= 500, "Must keep taxes below 50%");
    }

     function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        _sellReflectionFee= _reflectionFee;
        require(_sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee).add(_sellReflectionFee).add(crowdfundfee) <= 500, "Must keep taxes below 50%");
    }
     //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":"adr","type":"address"}],"name":"authorize","outputs":[],"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":[{"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"},{"internalType":"uint256","name":"_crowdfundfee","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":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","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"}]

6080604052600380546001600160a01b031990811673257b66471f024a11f49eaf595e5987352e657d3a1790915560048054821673ae1b53607b9ce7e0303fbadfd8e763f2ee7d2cde179055600580549091167391d1d148f703b941088ab51dfb3833b10d1e3a391790556002600a9081556000600b55601280547408000000000000000000000000000000000000dead6001600160a81b03199091161790819055620000b891600160a01b90910460ff169062000936565b620000c990640ba43b7400620009f5565b6013819055620000dc9060001962000a6e565b620000ea9060001962000a17565b60145560408051808201909152600780825266556d627265756d60c81b60209092019182526200011d9160169162000796565b5060408051808201909152600480825263554d424360e01b60209092019182526200014b9160179162000796565b506200018360036200016f60646013546200061960201b620020b61790919060201c565b6200066c60201b620020f81790919060201c565b60185560146019556014601a55601e601b556000601c556014601d556014601e55601e601f5560006020556002602155601954602255601b54602355601a54602455601c546025556200020b602154620001f7602454620001f7602354602254620006f760201b620021771790919060201c565b620006f760201b620021771790919060201c565b6026556026546027556200023860016200016f6127106013546200061960201b620020b61790919060201c565b602855602a805461ffff60a81b191690553480156200025657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506014543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620002fa57600080fd5b505afa1580156200030f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033591906200083c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037e57600080fd5b505afa15801562000393573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b991906200083c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200040257600080fd5b505af115801562000417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043d91906200083c565b602a80546001600160a01b03199081166001600160a01b0393841617909155602980549091169183169190911790556001600c6000620004856000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d90620004de6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155602a54821684528284208054861682179055601254909116835290822080549093168117909255600f90620005606000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055602a549091168152600f83528181208054851660019081179091553382526011909352208054909216179055620005c23390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6013546040516200060a91815260200190565b60405180910390a35062000ab1565b60006200066383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200075a60201b60201c565b90505b92915050565b6000826200067d5750600062000666565b60006200068b8385620009f5565b9050826200069a8583620008d6565b14620006635760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620007068385620008bb565b905083811015620006635760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006ee565b600081836200077e5760405162461bcd60e51b8152600401620006ee919062000865565b5060006200078d8486620008d6565b95945050505050565b828054620007a49062000a31565b90600052602060002090601f016020900481019282620007c8576000855562000813565b82601f10620007e357805160ff191683800117855562000813565b8280016001018555821562000813579182015b8281111562000813578251825591602001919060010190620007f6565b506200082192915062000825565b5090565b5b8082111562000821576000815560010162000826565b6000602082840312156200084e578081fd5b81516001600160a01b038116811462000663578182fd5b6000602080835283518082850152825b81811015620008935785810183015185820160400152820162000875565b81811115620008a55783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620008d157620008d162000a85565b500190565b600082620008e857620008e862000a9b565b500490565b600181815b808511156200092e57816000190482111562000912576200091262000a85565b808516156200092057918102915b93841c9390800290620008f2565b509250929050565b60006200066360ff841683600082620009525750600162000666565b81620009615750600062000666565b81600181146200097a57600281146200098557620009a5565b600191505062000666565b60ff84111562000999576200099962000a85565b50506001821b62000666565b5060208310610133831016604e8410600b8410161715620009ca575081810a62000666565b620009d68383620008ed565b8060001904821115620009ed57620009ed62000a85565b029392505050565b600081600019048311821515161562000a125762000a1262000a85565b500290565b60008282101562000a2c5762000a2c62000a85565b500390565b600181811c9082168062000a4657607f821691505b6020821081141562000a6857634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a805762000a8062000a9b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613b418062000ac16000396000f3fe60806040526004361061037a5760003560e01c806371b9189c116101d1578063b6a5d7de11610102578063dd62ed3e116100a0578063f259c57b1161006f578063f259c57b14610a2e578063f2fde38b14610a4e578063fabb0b4f14610a6e578063ffb54a9914610a8457600080fd5b8063dd62ed3e14610988578063ea2f0b37146109ce578063eafb5a3c146109ee578063f0b37c0414610a0e57600080fd5b8063c8607952116100dc578063c860795214610926578063c9cf77891461093c578063d3f6a15714610952578063dc44b6a01461097257600080fd5b8063b6a5d7de146108da578063bf56b371146108fa578063c5d241891461091057600080fd5b80638da5cb5b1161016f578063a1ac727f11610149578063a1ac727f1461085a578063a3b84b6b1461087a578063a457c2d71461089a578063a9059cbb146108ba57600080fd5b80638da5cb5b146108075780638f4590d21461082557806395d89b411461084557600080fd5b806378109e54116101ab57806378109e541461078257806384530c461461079857806388790a68146107b857806388f82020146107ce57600080fd5b806371b9189c1461072c578063743942b61461074c5780637598f8bc1461076c57600080fd5b8063313ce567116102ab5780634b01547f11610249578063620158521161022357806362015852146106c15780636ce37fa0146106d757806370a08231146106f7578063715018a61461071757600080fd5b80634b01547f1461066157806352390c02146106815780635d54c0af146106a157600080fd5b80633bd5d173116102855780633bd5d173146105eb578063401aa5c01461060b5780634549b0391461062157806349bd5a5e1461064157600080fd5b8063313ce5671461057f5780633685d419146105ab57806339509351146105cb57600080fd5b806318160ddd116103185780632691bc80116102f25780632691bc80146104fe5780632d4103d61461051f5780632d8381191461053f5780632dd5efe71461055f57600080fd5b806318160ddd146104a957806323b872dd146104be57806325b86edf146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60285481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610aa5565b6040516103a691906137eb565b3480156103dd57600080fd5b506103f16103ec36600461369b565b610b37565b005b3480156103ff57600080fd5b5061041361040e366004613574565b610b91565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e36600461346a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060155461039c565b34801561047d57600080fd5b50602954610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060135461039c565b3480156104ca57600080fd5b506104136104d93660046134da565b610ba8565b3480156104ea57600080fd5b506103f16104f9366004613689565b610c11565b34801561050a57600080fd5b50602a5461041390600160b01b900460ff1681565b34801561052b57600080fd5b506103f161053a36600461366c565b610d41565b34801561054b57600080fd5b5061039c61055a36600461369b565b610dcc565b34801561056b57600080fd5b506103f161057a36600461346a565b610e50565b34801561058b57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105b757600080fd5b506103f16105c636600461346a565b610e9e565b3480156105d757600080fd5b506104136105e6366004613574565b611089565b3480156105f757600080fd5b506103f161060636600461369b565b6110bf565b34801561061757600080fd5b5061039c601c5481565b34801561062d57600080fd5b5061039c61063c3660046136cb565b6111a9565b34801561064d57600080fd5b50602a54610491906001600160a01b031681565b34801561066d57600080fd5b506103f161067c366004613634565b611236565b34801561068d57600080fd5b506103f161069c36600461346a565b61127e565b3480156106ad57600080fd5b506103f16106bc3660046135df565b611368565b3480156106cd57600080fd5b5061039c601a5481565b3480156106e357600080fd5b506103f16106f236600461373d565b61146a565b34801561070357600080fd5b5061039c61071236600461346a565b611511565b34801561072357600080fd5b506103f1611570565b34801561073857600080fd5b506103f161074736600461359f565b6115e4565b34801561075857600080fd5b506103f161076736600461346a565b611691565b34801561077857600080fd5b5061039c60205481565b34801561078e57600080fd5b5061039c60185481565b3480156107a457600080fd5b506103f16107b336600461359f565b6116f0565b3480156107c457600080fd5b5061039c601d5481565b3480156107da57600080fd5b506104136107e936600461346a565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561081357600080fd5b506000546001600160a01b0316610491565b34801561083157600080fd5b506103f16108403660046136ef565b611798565b34801561085157600080fd5b506103c46117e2565b34801561086657600080fd5b506103f161087536600461351a565b6117f1565b34801561088657600080fd5b506103f161089536600461376e565b611993565b3480156108a657600080fd5b506104136108b5366004613574565b611a60565b3480156108c657600080fd5b506104136108d5366004613574565b611aaf565b3480156108e657600080fd5b506103f16108f536600461346a565b611abc565b34801561090657600080fd5b5061039c600b5481565b34801561091c57600080fd5b5061039c601b5481565b34801561093257600080fd5b5061039c601e5481565b34801561094857600080fd5b5061039c601f5481565b34801561095e57600080fd5b506103f161096d3660046134a2565b611b0a565b34801561097e57600080fd5b5061039c60195481565b34801561099457600080fd5b5061039c6109a33660046134a2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109da57600080fd5b506103f16109e936600461346a565b611b62565b3480156109fa57600080fd5b506103f1610a0936600461346a565b611bad565b348015610a1a57600080fd5b506103f1610a2936600461346a565b611f33565b348015610a3a57600080fd5b506103f1610a4936600461346a565b611f7e565b348015610a5a57600080fd5b506103f1610a6936600461346a565b611fcc565b348015610a7a57600080fd5b5061039c600a5481565b348015610a9057600080fd5b50602a5461041390600160a81b900460ff1681565b606060168054610ab490613a2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613a2c565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b619061383e565b60405180910390fd5b610b8b81610b856103e86013546120b690919063ffffffff16565b906120f8565b60185550565b6000610b9e3384846121d6565b5060015b92915050565b6000610bb58484846122fa565b610c078433610c0285604051806060016040528060288152602001613abf602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906127f0565b6121d6565b5060019392505050565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b8152600401610b619061383e565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb591906136b3565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3b9190613650565b50505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610b619061383e565b602a805460ff60a81b1916600160a81b84151502179055610d8b3061127e565b602a54610da0906001600160a01b031661127e565b602a54600160a81b900460ff168015610db95750600b54155b15610dc85743600b55600a8190555b5050565b6000601454821115610e335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b6000610e3d61282a565b9050610e4983826120b6565b9392505050565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610ec85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b0381166000908152600e602052604090205460ff16610f305760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b60005b601054811015610dc857816001600160a01b031660108281548110610f6857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156110775760108054610f9390600190613a15565b81548110610fb157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b039092169183908110610feb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff19169055601080548061105157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061108181613a67565b915050610f33565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b9e918590610c029086612177565b336000818152600e602052604090205460ff16156111345760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b61565b600061113f8361284d565b505050506001600160a01b03841660009081526006602052604090205491925061116b9190508261289c565b6001600160a01b038316600090815260066020526040902055601454611191908261289c565b6014556015546111a19084612177565b601555505050565b60006013548311156111fd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b8161121c57600061120d8461284d565b50939550610ba2945050505050565b60006112278461284d565b50929550610ba2945050505050565b6000546001600160a01b031633146112605760405162461bcd60e51b8152600401610b619061383e565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112a85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03811660009081526006602052604090205415611302576001600160a01b0381166000908152600660205260409020546112e890610dcc565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146113925760405162461bcd60e51b8152600401610b619061383e565b60005b82811015610d3b57600f60008585848181106113c157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113d6919061346a565b6001600160a01b0316815260208101919091526040016000205460ff1661145a57816009600086868581811061141c57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611431919061346a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b61146381613a67565b9050611395565b6000546001600160a01b031633146114945760405162461bcd60e51b8152600401610b619061383e565b601d839055601e829055601f81905560208490556021546101f4906114c7906114c1878186818a8a612177565b90612177565b1115610d3b5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b6001600160a01b0381166000908152600e602052604081205460ff161561154e57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610ba290610dcc565b6000546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610b619061383e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610b619061383e565b60005b8181101561168c576001600c600085858581811061163f57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611654919061346a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561168581613a67565b9050611611565b505050565b6000546001600160a01b031633146116bb5760405162461bcd60e51b8152600401610b619061383e565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dc8573d6000803e3d6000fd5b6000546001600160a01b0316331461171a5760405162461bcd60e51b8152600401610b619061383e565b60005b8181101561168c576001600f600085858581811061174b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611760919061346a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561179181613a67565b905061171d565b6000546001600160a01b031633146117c25760405162461bcd60e51b8152600401610b619061383e565b80826013546117d191906139f6565b6117db91906138e8565b6028555050565b606060178054610ab490613a2c565b6000546001600160a01b0316331461181b5760405162461bcd60e51b8152600401610b619061383e565b6107d182106118835760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b61565b60125460009083906118a090600160a01b900460ff16600a61394b565b6118aa90846139f6565b6118b491906139f6565b9050806118c086611511565b101561190e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b61565b60005b8381101561198b576119798686868481811061193d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611952919061346a565b60125461196a90600160a01b900460ff16600a61394b565b61197490876139f6565b6122fa565b8061198381613a67565b915050611911565b505050505050565b6000546001600160a01b031633146119bd5760405162461bcd60e51b8152600401610b619061383e565b6019849055601b839055601a829055601c859055602585905560228490556024829055602383905560218190556119fa816114c184818888612177565b6026819055601c546101f491611a0f91612177565b1115611a595760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b5050505050565b6000610b9e3384610c0285604051806060016040528060258152602001613ae7602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906127f0565b6000610b9e3384846122fa565b6000546001600160a01b03163314611ae65760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611b345760405162461bcd60e51b8152600401610b619061383e565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b8c5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611bd75760405162461bcd60e51b8152600401610b619061383e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1757600080fd5b505afa158015611c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4f9190613486565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf9190613486565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d1557600080fd5b505afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190613486565b90506001600160a01b038116611ef357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9657600080fd5b505afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190613486565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1657600080fd5b505afa158015611e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4e9190613486565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ece9190613486565b602a80546001600160a01b0319166001600160a01b0392909216919091179055611f0f565b602a80546001600160a01b0319166001600160a01b0383161790555b50602980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611f5d5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b03163314611fa85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611ff65760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03811661205b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128de565b60008261210757506000610ba2565b600061211383856139f6565b90508261212085836138e8565b14610e495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b61565b60008061218483856138d0565b905083811015610e495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b61565b6001600160a01b0383166122385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b0382166122995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661235e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b61565b6001600160a01b0382166123c05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b61565b600081116124225760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b61565b6001600160a01b03821660009081526009602052604090205460ff16156124835760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526009602052604090205460ff16156124e45760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526011602052604090205460ff1661255457602a54600160a81b900460ff166125545760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b61565b602a546000906001600160a01b03858116911614806125805750602a546001600160a01b038481169116145b80156125c857506001600160a01b0384166000908152600c602052604090205460ff16806125c657506001600160a01b0383166000908152600c602052604090205460ff165b155b156125d1575060015b6000600b5411801561262057506001600160a01b0383166000908152600d602052604090205460ff1615801561262057506001600160a01b03841660009081526011602052604090205460ff16155b156126945760185461263184611511565b61263b90846138d0565b11156126945760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b61565b602654602755601c54602555602a54600160a81b900460ff1680156126c65750602a546001600160a01b038481169116145b156126f2576126e8601f546114c1601e54601d5461217790919063ffffffff16565b6027556020546025555b6000600b54118015612712575043600a54600b5461271091906138d0565b115b1561273b576001600160a01b0383166000908152600960205260409020805460ff191660011790555b602a54600160b01b900460ff161561277e57602a54600160a81b900460ff1680156127735750602a546001600160a01b038581169116145b1561277e5760006027555b602a54600160a01b900460ff161580156127a15750602a54600160a81b900460ff165b80156127ba5750602a546001600160a01b038481169116145b156127e45760006127ca30611511565b905060285481106127e257506028546127e28161290c565b505b610d3b84848484612a6b565b600081848411156128145760405162461bcd60e51b8152600401610b6191906137eb565b5060006128218486613a15565b95945050505050565b6000806000612837612b97565b909250905061284682826120b6565b9250505090565b60008060008060008060008060006128648a612d51565b92509250925060008060006128828d868661287d61282a565b612d93565b919f909e50909c50959a5093985091965092945050505050565b6000610e4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127f0565b600081836128ff5760405162461bcd60e51b8152600401610b6191906137eb565b50600061282184866138e8565b602a805460ff60a01b1916600160a01b1790556026546022546000916129429160029161293c91829087906120f8565b906120b6565b90506000612950838361289c565b905061295b81612de3565b602254479060009061297b906129729060026120b6565b6026549061289c565b9050600061299d600261293c8461293c602254886120f890919063ffffffff16565b905060006129ba8361293c602454876120f890919063ffffffff16565b905060006129d78461293c602354886120f890919063ffffffff16565b905060006129f48561293c602154896120f890919063ffffffff16565b9050478015612a4257600354612a149084906001600160a01b0316612fa1565b600454612a2b9083906001600160a01b0316612fa1565b600554612a429085906001600160a01b0316612fa1565b8815612a5257612a528986612fd7565b5050602a805460ff60a01b191690555050505050505050565b60255460275482612a8157600060258190556027555b6001600160a01b0386166000908152600e602052604090205460ff168015612ac257506001600160a01b0385166000908152600e602052604090205460ff16155b15612ad757612ad28686866130b4565b612b83565b6001600160a01b0386166000908152600e602052604090205460ff16158015612b1857506001600160a01b0385166000908152600e602052604090205460ff165b15612b2857612ad28686866131da565b6001600160a01b0386166000908152600e602052604090205460ff168015612b6857506001600160a01b0385166000908152600e602052604090205460ff165b15612b7857612ad2868686613283565b612b838686866132f6565b8261198b5760259190915560275550505050565b6014546013546000918291825b601054811015612d2157826006600060108481548110612bd457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c4d5750816007600060108481548110612c2657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c6357601454601354945094505050509091565b612cb76006600060108481548110612c8b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061289c565b9250612d0d6007600060108481548110612ce157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061289c565b915080612d1981613a67565b915050612ba4565b50601354601454612d31916120b6565b821015612d48576014546013549350935050509091565b90939092509050565b600080600080612d608561333a565b90506000612d6d86613357565b90506000612d8582612d7f898661289c565b9061289c565b979296509094509092505050565b6000808080612da288866120f8565b90506000612db088876120f8565b90506000612dbe88886120f8565b90506000612dd082612d7f868661289c565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612e7a57600080fd5b505afa158015612e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb29190613486565b81600181518110612ed357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602954612ef991309116846121d6565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f32908590600090869030904290600401613894565b600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f95929190613873565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561168c573d6000803e3d6000fd5b602954612fef9030906001600160a01b0316846121d6565b6029546001600160a01b031663f305d7198230856000806130186000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561307b57600080fd5b505af115801561308f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a599190613710565b6000806000806000806130c68761284d565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506130f8908861289c565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613127908761289c565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546131569086612177565b6001600160a01b03891660009081526006602052604090205561317881613374565b61318284836133fc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516131c791815260200190565b60405180910390a3505050505050505050565b6000806000806000806131ec8761284d565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061321e908761289c565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546132549084612177565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546131569086612177565b6000806000806000806132958761284d565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506132c7908861289c565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461321e908761289c565b6000806000806000806133088761284d565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613127908761289c565b6000610ba26103e861293c602554856120f890919063ffffffff16565b6000610ba26103e861293c602754856120f890919063ffffffff16565b600061337e61282a565b9050600061338c83836120f8565b306000908152600660205260409020549091506133a99082612177565b30600090815260066020908152604080832093909355600e9052205460ff161561168c57306000908152600760205260409020546133e79084612177565b30600090815260076020526040902055505050565b601454613409908361289c565b6014556015546134199082612177565b6015555050565b60008083601f840112613431578182fd5b50813567ffffffffffffffff811115613448578182fd5b6020830191508360208260051b850101111561346357600080fd5b9250929050565b60006020828403121561347b578081fd5b8135610e4981613a98565b600060208284031215613497578081fd5b8151610e4981613a98565b600080604083850312156134b4578081fd5b82356134bf81613a98565b915060208301356134cf81613a98565b809150509250929050565b6000806000606084860312156134ee578081fd5b83356134f981613a98565b9250602084013561350981613a98565b929592945050506040919091013590565b6000806000806060858703121561352f578081fd5b843561353a81613a98565b9350602085013567ffffffffffffffff811115613555578182fd5b61356187828801613420565b9598909750949560400135949350505050565b60008060408385031215613586578182fd5b823561359181613a98565b946020939093013593505050565b600080602083850312156135b1578182fd5b823567ffffffffffffffff8111156135c7578283fd5b6135d385828601613420565b90969095509350505050565b6000806000604084860312156135f3578283fd5b833567ffffffffffffffff811115613609578384fd5b61361586828701613420565b909450925050602084013561362981613ab0565b809150509250925092565b600060208284031215613645578081fd5b8135610e4981613ab0565b600060208284031215613661578081fd5b8151610e4981613ab0565b6000806040838503121561367e578182fd5b823561359181613ab0565b600080604083850312156134b4578182fd5b6000602082840312156136ac578081fd5b5035919050565b6000602082840312156136c4578081fd5b5051919050565b600080604083850312156136dd578182fd5b8235915060208301356134cf81613ab0565b60008060408385031215613701578182fd5b50508035926020909101359150565b600080600060608486031215613724578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613752578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613785578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b838110156137e05781516001600160a01b0316875295820195908201906001016137bb565b509495945050505050565b6000602080835283518082850152825b81811015613817578581018301518582016040015282016137fb565b818111156138285783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061388c60408301846137a8565b949350505050565b85815284602082015260a0604082015260006138b360a08301866137a8565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156138e3576138e3613a82565b500190565b60008261390357634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561394357816000190482111561392957613929613a82565b8085161561393657918102915b93841c939080029061390d565b509250929050565b6000610e4960ff84168360008261396457506001610ba2565b8161397157506000610ba2565b81600181146139875760028114613991576139ad565b6001915050610ba2565b60ff8411156139a2576139a2613a82565b50506001821b610ba2565b5060208310610133831016604e8410600b84101617156139d0575081810a610ba2565b6139da8383613908565b80600019048211156139ee576139ee613a82565b029392505050565b6000816000190483118215151615613a1057613a10613a82565b500290565b600082821015613a2757613a27613a82565b500390565b600181811c90821680613a4057607f821691505b60208210811415613a6157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613a7b57613a7b613a82565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114613aad57600080fd5b50565b8015158114613aad57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aff2dc1dfbb5139d301686eafb81ad42b0a9bf088f073b84906776edbc944eee64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c806371b9189c116101d1578063b6a5d7de11610102578063dd62ed3e116100a0578063f259c57b1161006f578063f259c57b14610a2e578063f2fde38b14610a4e578063fabb0b4f14610a6e578063ffb54a9914610a8457600080fd5b8063dd62ed3e14610988578063ea2f0b37146109ce578063eafb5a3c146109ee578063f0b37c0414610a0e57600080fd5b8063c8607952116100dc578063c860795214610926578063c9cf77891461093c578063d3f6a15714610952578063dc44b6a01461097257600080fd5b8063b6a5d7de146108da578063bf56b371146108fa578063c5d241891461091057600080fd5b80638da5cb5b1161016f578063a1ac727f11610149578063a1ac727f1461085a578063a3b84b6b1461087a578063a457c2d71461089a578063a9059cbb146108ba57600080fd5b80638da5cb5b146108075780638f4590d21461082557806395d89b411461084557600080fd5b806378109e54116101ab57806378109e541461078257806384530c461461079857806388790a68146107b857806388f82020146107ce57600080fd5b806371b9189c1461072c578063743942b61461074c5780637598f8bc1461076c57600080fd5b8063313ce567116102ab5780634b01547f11610249578063620158521161022357806362015852146106c15780636ce37fa0146106d757806370a08231146106f7578063715018a61461071757600080fd5b80634b01547f1461066157806352390c02146106815780635d54c0af146106a157600080fd5b80633bd5d173116102855780633bd5d173146105eb578063401aa5c01461060b5780634549b0391461062157806349bd5a5e1461064157600080fd5b8063313ce5671461057f5780633685d419146105ab57806339509351146105cb57600080fd5b806318160ddd116103185780632691bc80116102f25780632691bc80146104fe5780632d4103d61461051f5780632d8381191461053f5780632dd5efe71461055f57600080fd5b806318160ddd146104a957806323b872dd146104be57806325b86edf146104de57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630f3a325f1461042357806313114a9d1461045c5780631694505e1461047157600080fd5b80630445b6671461038657806306fdde03146103af57806309302dc6146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60285481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610aa5565b6040516103a691906137eb565b3480156103dd57600080fd5b506103f16103ec36600461369b565b610b37565b005b3480156103ff57600080fd5b5061041361040e366004613574565b610b91565b60405190151581526020016103a6565b34801561042f57600080fd5b5061041361043e36600461346a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561046857600080fd5b5060155461039c565b34801561047d57600080fd5b50602954610491906001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b3480156104b557600080fd5b5060135461039c565b3480156104ca57600080fd5b506104136104d93660046134da565b610ba8565b3480156104ea57600080fd5b506103f16104f9366004613689565b610c11565b34801561050a57600080fd5b50602a5461041390600160b01b900460ff1681565b34801561052b57600080fd5b506103f161053a36600461366c565b610d41565b34801561054b57600080fd5b5061039c61055a36600461369b565b610dcc565b34801561056b57600080fd5b506103f161057a36600461346a565b610e50565b34801561058b57600080fd5b50601254600160a01b900460ff1660405160ff90911681526020016103a6565b3480156105b757600080fd5b506103f16105c636600461346a565b610e9e565b3480156105d757600080fd5b506104136105e6366004613574565b611089565b3480156105f757600080fd5b506103f161060636600461369b565b6110bf565b34801561061757600080fd5b5061039c601c5481565b34801561062d57600080fd5b5061039c61063c3660046136cb565b6111a9565b34801561064d57600080fd5b50602a54610491906001600160a01b031681565b34801561066d57600080fd5b506103f161067c366004613634565b611236565b34801561068d57600080fd5b506103f161069c36600461346a565b61127e565b3480156106ad57600080fd5b506103f16106bc3660046135df565b611368565b3480156106cd57600080fd5b5061039c601a5481565b3480156106e357600080fd5b506103f16106f236600461373d565b61146a565b34801561070357600080fd5b5061039c61071236600461346a565b611511565b34801561072357600080fd5b506103f1611570565b34801561073857600080fd5b506103f161074736600461359f565b6115e4565b34801561075857600080fd5b506103f161076736600461346a565b611691565b34801561077857600080fd5b5061039c60205481565b34801561078e57600080fd5b5061039c60185481565b3480156107a457600080fd5b506103f16107b336600461359f565b6116f0565b3480156107c457600080fd5b5061039c601d5481565b3480156107da57600080fd5b506104136107e936600461346a565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561081357600080fd5b506000546001600160a01b0316610491565b34801561083157600080fd5b506103f16108403660046136ef565b611798565b34801561085157600080fd5b506103c46117e2565b34801561086657600080fd5b506103f161087536600461351a565b6117f1565b34801561088657600080fd5b506103f161089536600461376e565b611993565b3480156108a657600080fd5b506104136108b5366004613574565b611a60565b3480156108c657600080fd5b506104136108d5366004613574565b611aaf565b3480156108e657600080fd5b506103f16108f536600461346a565b611abc565b34801561090657600080fd5b5061039c600b5481565b34801561091c57600080fd5b5061039c601b5481565b34801561093257600080fd5b5061039c601e5481565b34801561094857600080fd5b5061039c601f5481565b34801561095e57600080fd5b506103f161096d3660046134a2565b611b0a565b34801561097e57600080fd5b5061039c60195481565b34801561099457600080fd5b5061039c6109a33660046134a2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109da57600080fd5b506103f16109e936600461346a565b611b62565b3480156109fa57600080fd5b506103f1610a0936600461346a565b611bad565b348015610a1a57600080fd5b506103f1610a2936600461346a565b611f33565b348015610a3a57600080fd5b506103f1610a4936600461346a565b611f7e565b348015610a5a57600080fd5b506103f1610a6936600461346a565b611fcc565b348015610a7a57600080fd5b5061039c600a5481565b348015610a9057600080fd5b50602a5461041390600160a81b900460ff1681565b606060168054610ab490613a2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090613a2c565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b8152600401610b619061383e565b60405180910390fd5b610b8b81610b856103e86013546120b690919063ffffffff16565b906120f8565b60185550565b6000610b9e3384846121d6565b5060015b92915050565b6000610bb58484846122fa565b610c078433610c0285604051806060016040528060288152602001613abf602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906127f0565b6121d6565b5060019392505050565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b8152600401610b619061383e565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb591906136b3565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3b9190613650565b50505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610b619061383e565b602a805460ff60a81b1916600160a81b84151502179055610d8b3061127e565b602a54610da0906001600160a01b031661127e565b602a54600160a81b900460ff168015610db95750600b54155b15610dc85743600b55600a8190555b5050565b6000601454821115610e335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b61565b6000610e3d61282a565b9050610e4983826120b6565b9392505050565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610ec85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b0381166000908152600e602052604090205460ff16610f305760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b61565b60005b601054811015610dc857816001600160a01b031660108281548110610f6857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156110775760108054610f9390600190613a15565b81548110610fb157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b039092169183908110610feb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff19169055601080548061105157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061108181613a67565b915050610f33565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b9e918590610c029086612177565b336000818152600e602052604090205460ff16156111345760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b61565b600061113f8361284d565b505050506001600160a01b03841660009081526006602052604090205491925061116b9190508261289c565b6001600160a01b038316600090815260066020526040902055601454611191908261289c565b6014556015546111a19084612177565b601555505050565b60006013548311156111fd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b61565b8161121c57600061120d8461284d565b50939550610ba2945050505050565b60006112278461284d565b50929550610ba2945050505050565b6000546001600160a01b031633146112605760405162461bcd60e51b8152600401610b619061383e565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112a85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03811660009081526006602052604090205415611302576001600160a01b0381166000908152600660205260409020546112e890610dcc565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146113925760405162461bcd60e51b8152600401610b619061383e565b60005b82811015610d3b57600f60008585848181106113c157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113d6919061346a565b6001600160a01b0316815260208101919091526040016000205460ff1661145a57816009600086868581811061141c57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611431919061346a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b61146381613a67565b9050611395565b6000546001600160a01b031633146114945760405162461bcd60e51b8152600401610b619061383e565b601d839055601e829055601f81905560208490556021546101f4906114c7906114c1878186818a8a612177565b90612177565b1115610d3b5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b6001600160a01b0381166000908152600e602052604081205460ff161561154e57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610ba290610dcc565b6000546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610b619061383e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610b619061383e565b60005b8181101561168c576001600c600085858581811061163f57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611654919061346a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561168581613a67565b9050611611565b505050565b6000546001600160a01b031633146116bb5760405162461bcd60e51b8152600401610b619061383e565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dc8573d6000803e3d6000fd5b6000546001600160a01b0316331461171a5760405162461bcd60e51b8152600401610b619061383e565b60005b8181101561168c576001600f600085858581811061174b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611760919061346a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561179181613a67565b905061171d565b6000546001600160a01b031633146117c25760405162461bcd60e51b8152600401610b619061383e565b80826013546117d191906139f6565b6117db91906138e8565b6028555050565b606060178054610ab490613a2c565b6000546001600160a01b0316331461181b5760405162461bcd60e51b8152600401610b619061383e565b6107d182106118835760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b61565b60125460009083906118a090600160a01b900460ff16600a61394b565b6118aa90846139f6565b6118b491906139f6565b9050806118c086611511565b101561190e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b61565b60005b8381101561198b576119798686868481811061193d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611952919061346a565b60125461196a90600160a01b900460ff16600a61394b565b61197490876139f6565b6122fa565b8061198381613a67565b915050611911565b505050505050565b6000546001600160a01b031633146119bd5760405162461bcd60e51b8152600401610b619061383e565b6019849055601b839055601a829055601c859055602585905560228490556024829055602383905560218190556119fa816114c184818888612177565b6026819055601c546101f491611a0f91612177565b1115611a595760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610b61565b5050505050565b6000610b9e3384610c0285604051806060016040528060258152602001613ae7602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906127f0565b6000610b9e3384846122fa565b6000546001600160a01b03163314611ae65760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b03163314611b345760405162461bcd60e51b8152600401610b619061383e565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611b8c5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611bd75760405162461bcd60e51b8152600401610b619061383e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c1757600080fd5b505afa158015611c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4f9190613486565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf9190613486565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d1557600080fd5b505afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190613486565b90506001600160a01b038116611ef357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9657600080fd5b505afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190613486565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1657600080fd5b505afa158015611e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4e9190613486565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ece9190613486565b602a80546001600160a01b0319166001600160a01b0392909216919091179055611f0f565b602a80546001600160a01b0319166001600160a01b0383161790555b50602980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611f5d5760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b03163314611fa85760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611ff65760405162461bcd60e51b8152600401610b619061383e565b6001600160a01b03811661205b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b61565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128de565b60008261210757506000610ba2565b600061211383856139f6565b90508261212085836138e8565b14610e495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b61565b60008061218483856138d0565b905083811015610e495760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b61565b6001600160a01b0383166122385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b61565b6001600160a01b0382166122995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b61565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661235e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b61565b6001600160a01b0382166123c05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b61565b600081116124225760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b61565b6001600160a01b03821660009081526009602052604090205460ff16156124835760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526009602052604090205460ff16156124e45760405162461bcd60e51b815260206004820152601560248201527414dbdc9c9e48109d59191e4b0811d95d0814995add605a1b6044820152606401610b61565b6001600160a01b03831660009081526011602052604090205460ff1661255457602a54600160a81b900460ff166125545760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b61565b602a546000906001600160a01b03858116911614806125805750602a546001600160a01b038481169116145b80156125c857506001600160a01b0384166000908152600c602052604090205460ff16806125c657506001600160a01b0383166000908152600c602052604090205460ff165b155b156125d1575060015b6000600b5411801561262057506001600160a01b0383166000908152600d602052604090205460ff1615801561262057506001600160a01b03841660009081526011602052604090205460ff16155b156126945760185461263184611511565b61263b90846138d0565b11156126945760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b61565b602654602755601c54602555602a54600160a81b900460ff1680156126c65750602a546001600160a01b038481169116145b156126f2576126e8601f546114c1601e54601d5461217790919063ffffffff16565b6027556020546025555b6000600b54118015612712575043600a54600b5461271091906138d0565b115b1561273b576001600160a01b0383166000908152600960205260409020805460ff191660011790555b602a54600160b01b900460ff161561277e57602a54600160a81b900460ff1680156127735750602a546001600160a01b038581169116145b1561277e5760006027555b602a54600160a01b900460ff161580156127a15750602a54600160a81b900460ff165b80156127ba5750602a546001600160a01b038481169116145b156127e45760006127ca30611511565b905060285481106127e257506028546127e28161290c565b505b610d3b84848484612a6b565b600081848411156128145760405162461bcd60e51b8152600401610b6191906137eb565b5060006128218486613a15565b95945050505050565b6000806000612837612b97565b909250905061284682826120b6565b9250505090565b60008060008060008060008060006128648a612d51565b92509250925060008060006128828d868661287d61282a565b612d93565b919f909e50909c50959a5093985091965092945050505050565b6000610e4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127f0565b600081836128ff5760405162461bcd60e51b8152600401610b6191906137eb565b50600061282184866138e8565b602a805460ff60a01b1916600160a01b1790556026546022546000916129429160029161293c91829087906120f8565b906120b6565b90506000612950838361289c565b905061295b81612de3565b602254479060009061297b906129729060026120b6565b6026549061289c565b9050600061299d600261293c8461293c602254886120f890919063ffffffff16565b905060006129ba8361293c602454876120f890919063ffffffff16565b905060006129d78461293c602354886120f890919063ffffffff16565b905060006129f48561293c602154896120f890919063ffffffff16565b9050478015612a4257600354612a149084906001600160a01b0316612fa1565b600454612a2b9083906001600160a01b0316612fa1565b600554612a429085906001600160a01b0316612fa1565b8815612a5257612a528986612fd7565b5050602a805460ff60a01b191690555050505050505050565b60255460275482612a8157600060258190556027555b6001600160a01b0386166000908152600e602052604090205460ff168015612ac257506001600160a01b0385166000908152600e602052604090205460ff16155b15612ad757612ad28686866130b4565b612b83565b6001600160a01b0386166000908152600e602052604090205460ff16158015612b1857506001600160a01b0385166000908152600e602052604090205460ff165b15612b2857612ad28686866131da565b6001600160a01b0386166000908152600e602052604090205460ff168015612b6857506001600160a01b0385166000908152600e602052604090205460ff165b15612b7857612ad2868686613283565b612b838686866132f6565b8261198b5760259190915560275550505050565b6014546013546000918291825b601054811015612d2157826006600060108481548110612bd457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c4d5750816007600060108481548110612c2657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c6357601454601354945094505050509091565b612cb76006600060108481548110612c8b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061289c565b9250612d0d6007600060108481548110612ce157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061289c565b915080612d1981613a67565b915050612ba4565b50601354601454612d31916120b6565b821015612d48576014546013549350935050509091565b90939092509050565b600080600080612d608561333a565b90506000612d6d86613357565b90506000612d8582612d7f898661289c565b9061289c565b979296509094509092505050565b6000808080612da288866120f8565b90506000612db088876120f8565b90506000612dbe88886120f8565b90506000612dd082612d7f868661289c565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612e7a57600080fd5b505afa158015612e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb29190613486565b81600181518110612ed357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602954612ef991309116846121d6565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f32908590600090869030904290600401613894565b600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f95929190613873565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561168c573d6000803e3d6000fd5b602954612fef9030906001600160a01b0316846121d6565b6029546001600160a01b031663f305d7198230856000806130186000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561307b57600080fd5b505af115801561308f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a599190613710565b6000806000806000806130c68761284d565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506130f8908861289c565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613127908761289c565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546131569086612177565b6001600160a01b03891660009081526006602052604090205561317881613374565b61318284836133fc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516131c791815260200190565b60405180910390a3505050505050505050565b6000806000806000806131ec8761284d565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061321e908761289c565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546132549084612177565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546131569086612177565b6000806000806000806132958761284d565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506132c7908861289c565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461321e908761289c565b6000806000806000806133088761284d565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613127908761289c565b6000610ba26103e861293c602554856120f890919063ffffffff16565b6000610ba26103e861293c602754856120f890919063ffffffff16565b600061337e61282a565b9050600061338c83836120f8565b306000908152600660205260409020549091506133a99082612177565b30600090815260066020908152604080832093909355600e9052205460ff161561168c57306000908152600760205260409020546133e79084612177565b30600090815260076020526040902055505050565b601454613409908361289c565b6014556015546134199082612177565b6015555050565b60008083601f840112613431578182fd5b50813567ffffffffffffffff811115613448578182fd5b6020830191508360208260051b850101111561346357600080fd5b9250929050565b60006020828403121561347b578081fd5b8135610e4981613a98565b600060208284031215613497578081fd5b8151610e4981613a98565b600080604083850312156134b4578081fd5b82356134bf81613a98565b915060208301356134cf81613a98565b809150509250929050565b6000806000606084860312156134ee578081fd5b83356134f981613a98565b9250602084013561350981613a98565b929592945050506040919091013590565b6000806000806060858703121561352f578081fd5b843561353a81613a98565b9350602085013567ffffffffffffffff811115613555578182fd5b61356187828801613420565b9598909750949560400135949350505050565b60008060408385031215613586578182fd5b823561359181613a98565b946020939093013593505050565b600080602083850312156135b1578182fd5b823567ffffffffffffffff8111156135c7578283fd5b6135d385828601613420565b90969095509350505050565b6000806000604084860312156135f3578283fd5b833567ffffffffffffffff811115613609578384fd5b61361586828701613420565b909450925050602084013561362981613ab0565b809150509250925092565b600060208284031215613645578081fd5b8135610e4981613ab0565b600060208284031215613661578081fd5b8151610e4981613ab0565b6000806040838503121561367e578182fd5b823561359181613ab0565b600080604083850312156134b4578182fd5b6000602082840312156136ac578081fd5b5035919050565b6000602082840312156136c4578081fd5b5051919050565b600080604083850312156136dd578182fd5b8235915060208301356134cf81613ab0565b60008060408385031215613701578182fd5b50508035926020909101359150565b600080600060608486031215613724578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613752578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613785578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b838110156137e05781516001600160a01b0316875295820195908201906001016137bb565b509495945050505050565b6000602080835283518082850152825b81811015613817578581018301518582016040015282016137fb565b818111156138285783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061388c60408301846137a8565b949350505050565b85815284602082015260a0604082015260006138b360a08301866137a8565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156138e3576138e3613a82565b500190565b60008261390357634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561394357816000190482111561392957613929613a82565b8085161561393657918102915b93841c939080029061390d565b509250929050565b6000610e4960ff84168360008261396457506001610ba2565b8161397157506000610ba2565b81600181146139875760028114613991576139ad565b6001915050610ba2565b60ff8411156139a2576139a2613a82565b50506001821b610ba2565b5060208310610133831016604e8410600b84101617156139d0575081810a610ba2565b6139da8383613908565b80600019048211156139ee576139ee613a82565b029392505050565b6000816000190483118215151615613a1057613a10613a82565b500290565b600082821015613a2757613a27613a82565b500390565b600181811c90821680613a4057607f821691505b60208210811415613a6157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613a7b57613a7b613a82565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114613aad57600080fd5b50565b8015158114613aad57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aff2dc1dfbb5139d301686eafb81ad42b0a9bf088f073b84906776edbc944eee64736f6c63430008040033

Deployed Bytecode Sourcemap

14535:24297:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17053:56;;;;;;;;;;;;;;;;;;;17939:25:1;;;17927:2;17912:18;17053:56:0;;;;;;;;19457:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36392:175::-;;;;;;;;;;-1:-1:-1;36392:175:0;;;;;:::i;:::-;;:::i;:::-;;20369:161;;;;;;;;;;-1:-1:-1;20369:161:0;;;;;:::i;:::-;;:::i;:::-;;;9602:14:1;;9595:22;9577:41;;9565:2;9550:18;20369:161:0;9532:92:1;35463:106:0;;;;;;;;;;-1:-1:-1;35463:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35543:18:0;35519:4;35543:18;;;:9;:18;;;;;;;;;35463:106;21490:87;;;;;;;;;;-1:-1:-1;21559:10:0;;21490:87;;17129:41;;;;;;;;;;-1:-1:-1;17129:41:0;;;;-1:-1:-1;;;;;17129:41:0;;;;;;-1:-1:-1;;;;;8193:32:1;;;8175:51;;8163:2;8148:18;17129:41:0;8130:102:1;19734:95:0;;;;;;;;;;-1:-1:-1;19814:7:0;;19734:95;;20538:313;;;;;;;;;;-1:-1:-1;20538:313:0;;;;;:::i;:::-;;:::i;36207:177::-;;;;;;;;;;-1:-1:-1;36207:177:0;;;;;:::i;:::-;;:::i;17280:34::-;;;;;;;;;;-1:-1:-1;17280:34:0;;;;-1:-1:-1;;;17280:34:0;;;;;;18461:337;;;;;;;;;;-1:-1:-1;18461:337:0;;;;;:::i;:::-;;:::i;22422:253::-;;;;;;;;;;-1:-1:-1;22422:253:0;;;;;:::i;:::-;;:::i;36575:113::-;;;;;;;;;;-1:-1:-1;36575:113:0;;;;;:::i;:::-;;:::i;19643:83::-;;;;;;;;;;-1:-1:-1;19709:9:0;;-1:-1:-1;;;19709:9:0;;;;19643:83;;19071:4:1;19059:17;;;19041:36;;19029:2;19014:18;19643:83:0;18996:87:1;22954:479:0;;;;;;;;;;-1:-1:-1;22954:479:0;;;;;:::i;:::-;;:::i;20859:218::-;;;;;;;;;;-1:-1:-1;20859:218:0;;;;;:::i;:::-;;:::i;21589:377::-;;;;;;;;;;-1:-1:-1;21589:377:0;;;;;:::i;:::-;;:::i;16299:36::-;;;;;;;;;;;;;;;;21978:436;;;;;;;;;;-1:-1:-1;21978:436:0;;;;;:::i;:::-;;:::i;17177:28::-;;;;;;;;;;-1:-1:-1;17177:28:0;;;;-1:-1:-1;;;;;17177:28:0;;;18812:102;;;;;;;;;;-1:-1:-1;18812:102:0;;;;;:::i;:::-;;:::i;22683:263::-;;;;;;;;;;-1:-1:-1;22683:263:0;;;;;:::i;:::-;;:::i;35581:267::-;;;;;;;;;;-1:-1:-1;35581:267:0;;;;;:::i;:::-;;:::i;16204:30::-;;;;;;;;;;;;;;;;38283:454;;;;;;;;;;-1:-1:-1;38283:454:0;;;;;:::i;:::-;;:::i;19837:198::-;;;;;;;;;;-1:-1:-1;19837:198:0;;;;;:::i;:::-;;:::i;6166:148::-;;;;;;;;;;;;;:::i;34787:198::-;;;;;;;;;;-1:-1:-1;34787:198:0;;;;;:::i;:::-;;:::i;36064:135::-;;;;;;;;;;-1:-1:-1;36064:135:0;;;;;:::i;:::-;;:::i;16495:37::-;;;;;;;;;;;;;;;;16086:56;;;;;;;;;;;;;;;;35860:188;;;;;;;;;;-1:-1:-1;35860:188:0;;;;;:::i;:::-;;:::i;16351:37::-;;;;;;;;;;;;;;;;21362:120;;;;;;;;;;-1:-1:-1;21362:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21454:20:0;21430:4;21454:20;;;:11;:20;;;;;;;;;21362:120;5941:79;;;;;;;;;;-1:-1:-1;5979:7:0;6006:6;-1:-1:-1;;;;;6006:6:0;5941:79;;36696:178;;;;;;;;;;-1:-1:-1;36696:178:0;;;;;:::i;:::-;;:::i;19548:87::-;;;;;;;;;;;;;:::i;36882:496::-;;;;;;;;;;-1:-1:-1;36882:496:0;;;;;:::i;:::-;;:::i;37386:681::-;;;;;;;;;;-1:-1:-1;37386:681:0;;;;;:::i;:::-;;:::i;21085:269::-;;;;;;;;;;-1:-1:-1;21085:269:0;;;;;:::i;:::-;;:::i;20043:167::-;;;;;;;;;;-1:-1:-1;20043:167:0;;;;;:::i;:::-;;:::i;38076:94::-;;;;;;;;;;-1:-1:-1;38076:94:0;;;;;:::i;:::-;;:::i;15278:29::-;;;;;;;;;;;;;;;;16249:36;;;;;;;;;;;;;;;;16400:37;;;;;;;;;;;;;;;;16450:31;;;;;;;;;;;;;;;;35125:190;;;;;;;;;;-1:-1:-1;35125:190:0;;;;;:::i;:::-;;:::i;16156:36::-;;;;;;;;;;;;;;;;20218:143;;;;;;;;;;-1:-1:-1;20218:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20326:18:0;;;20299:7;20326:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20218:143;35003:110;;;;;;;;;;-1:-1:-1;35003:110:0;;;;;:::i;:::-;;:::i;18926:523::-;;;;;;;;;;-1:-1:-1;18926:523:0;;;;;:::i;:::-;;:::i;38178:97::-;;;;;;;;;;-1:-1:-1;38178:97:0;;;;;:::i;:::-;;:::i;34667:112::-;;;;;;;;;;-1:-1:-1;34667:112:0;;;;;:::i;:::-;;:::i;6322:244::-;;;;;;;;;;-1:-1:-1;6322:244:0;;;;;:::i;:::-;;:::i;15242:29::-;;;;;;;;;;;;;;;;17242:31;;;;;;;;;;-1:-1:-1;17242:31:0;;;;-1:-1:-1;;;17242:31:0;;;;;;19457:83;19494:13;19527:5;19520:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19457:83;:::o;36392:175::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;;;;;;;;;36513:46:::1;36535:23;36513:17;36525:4;36513:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;36495:15;:64:::0;-1:-1:-1;36392:175:0:o;20369:161::-;20444:4;20461:39;325:10;20484:7;20493:6;20461:8;:39::i;:::-;-1:-1:-1;20518:4:0;20369:161;;;;;:::o;20538:313::-;20636:4;20653:36;20663:6;20671:9;20682:6;20653:9;:36::i;:::-;20700:121;20709:6;325:10;20731:89;20769:6;20731:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20731:19:0;;;;;;:11;:19;;;;;;;;325:10;20731:33;;;;;;;;;;:37;:89::i;:::-;20700:8;:121::i;:::-;-1:-1:-1;20839:4:0;20538:313;;;;;:::o;36207:177::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;36308:30:::1;::::0;-1:-1:-1;;;36308:30:0;;36332:4:::1;36308:30;::::0;::::1;8175:51:1::0;36290:15:0::1;::::0;-1:-1:-1;;;;;36308:15:0;::::1;::::0;::::1;::::0;8148:18:1;;36308:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36349:27;::::0;-1:-1:-1;;;36349:27:0;;-1:-1:-1;;;;;8738:32:1;;;36349:27:0::1;::::0;::::1;8720:51:1::0;8787:18;;;8780:34;;;36290:48:0;;-1:-1:-1;36349:14:0;;::::1;::::0;::::1;::::0;8693:18:1;;36349:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6145:1;36207:177:::0;;:::o;18461:337::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;18548:11:::1;:21:::0;;-1:-1:-1;;;;18548:21:0::1;-1:-1:-1::0;;;18548:21:0;::::1;;;;::::0;;18580:32:::1;18606:4;18580:17;:32::i;:::-;18641:13;::::0;18623:32:::1;::::0;-1:-1:-1;;;;;18641:13:0::1;18623:17;:32::i;:::-;18669:11;::::0;-1:-1:-1;;;18669:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;18684:10:0::1;::::0;:15;18669:30:::1;18666:125;;;18728:12;18715:10;:25:::0;18755:10:::1;:24:::0;;;18666:125:::1;18461:337:::0;;:::o;22422:253::-;22488:7;22527;;22516;:18;;22508:73;;;;-1:-1:-1;;;22508:73:0;;11078:2:1;22508:73:0;;;11060:21:1;11117:2;11097:18;;;11090:30;11156:34;11136:18;;;11129:62;-1:-1:-1;;;11207:18:1;;;11200:40;11257:19;;22508:73:0;11050:232:1;22508:73:0;22592:19;22615:10;:8;:10::i;:::-;22592:33;-1:-1:-1;22643:24:0;:7;22592:33;22643:11;:24::i;:::-;22636:31;22422:253;-1:-1:-1;;;22422:253:0:o;36575:113::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36648:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;36648:32:0::1;36676:4;36648:32;::::0;;36575:113::o;22954:479::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23036:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23028:60;;;::::0;-1:-1:-1;;;23028:60:0;;12655:2:1;23028:60:0::1;::::0;::::1;12637:21:1::0;12694:2;12674:18;;;12667:30;12733:29;12713:18;;;12706:57;12780:18;;23028:60:0::1;12627:177:1::0;23028:60:0::1;23104:9;23099:327;23123:9;:16:::0;23119:20;::::1;23099:327;;;23181:7;-1:-1:-1::0;;;;;23165:23:0::1;:9;23175:1;23165:12;;;;;;-1:-1:-1::0;;;23165:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23165:12:0::1;:23;23161:254;;;23224:9;23234:16:::0;;:20:::1;::::0;23253:1:::1;::::0;23234:20:::1;:::i;:::-;23224:31;;;;;;-1:-1:-1::0;;;23224:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23209:9:::1;:12:::0;;-1:-1:-1;;;;;23224:31:0;;::::1;::::0;23219:1;;23209:12;::::1;;;-1:-1:-1::0;;;23209:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23209:46:0::1;-1:-1:-1::0;;;;;23209:46:0;;::::1;;::::0;;23274:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23313:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23313:28:0::1;::::0;;23360:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23360:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23360:15:0;;;;;-1:-1:-1;;;;;;23360:15:0::1;::::0;;;;;18461:337;;:::o;23161:254::-:1;23141:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23099:327;;20859:218:::0;325:10;20947:4;20996:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20996:34:0;;;;;;;;;;20947:4;;20964:83;;20987:7;;20996:50;;21035:10;20996:38;:50::i;21589:377::-;325:10;21641:14;21690:19;;;:11;:19;;;;;;;;21689:20;21681:77;;;;-1:-1:-1;;;21681:77:0;;17582:2:1;21681:77:0;;;17564:21:1;17621:2;17601:18;;;17594:30;17660:34;17640:18;;;17633:62;-1:-1:-1;;;17711:18:1;;;17704:42;17763:19;;21681:77:0;17554:234:1;21681:77:0;21770:15;21794:19;21805:7;21794:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21842:15:0;;;;;;:7;:15;;;;;;21769:44;;-1:-1:-1;21842:28:0;;:15;-1:-1:-1;21769:44:0;21842:19;:28::i;:::-;-1:-1:-1;;;;;21824:15:0;;;;;;:7;:15;;;;;:46;21891:7;;:20;;21903:7;21891:11;:20::i;:::-;21881:7;:30;21935:10;;:23;;21950:7;21935:14;:23::i;:::-;21922:10;:36;-1:-1:-1;;;21589:377:0:o;21978:436::-;22068:7;22107;;22096;:18;;22088:62;;;;-1:-1:-1;;;22088:62:0;;14071:2:1;22088:62:0;;;14053:21:1;14110:2;14090:18;;;14083:30;14149:33;14129:18;;;14122:61;14200:18;;22088:62:0;14043:181:1;22088:62:0;22166:17;22161:246;;22201:15;22225:19;22236:7;22225:10;:19::i;:::-;-1:-1:-1;22200:44:0;;-1:-1:-1;22259:14:0;;-1:-1:-1;;;;;22259:14:0;22161:246;22308:23;22339:19;22350:7;22339:10;:19::i;:::-;-1:-1:-1;22306:52:0;;-1:-1:-1;22373:22:0;;-1:-1:-1;;;;;22373:22:0;18812:102;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;18884:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;18884:22:0::1;-1:-1:-1::0;;;;18884:22:0;;::::1;::::0;;;::::1;::::0;;18812:102::o;22683:263::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22762:16:0;::::1;22781:1;22762:16:::0;;;:7:::1;:16;::::0;;;;;:20;22759:108:::1;;-1:-1:-1::0;;;;;22838:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22818:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22799:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22759:108:::1;-1:-1:-1::0;;;;;22877:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22877:27:0::1;22900:4;22877:27:::0;;::::1;::::0;;;22915:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22915:23:0::1;::::0;;::::1;::::0;;22683:263::o;35581:267::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;35681:9:::1;35676:165;35692:20:::0;;::::1;35676:165;;;35738:10;:24;35749:9;;35759:1;35749:12;;;;;-1:-1:-1::0;;;35749:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35738:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35738:24:0;;::::1;;35734:96;;35808:6;35782:9;:23;35792:9;;35802:1;35792:12;;;;;-1:-1:-1::0;;;35792:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35782:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35782:23:0;:32;;-1:-1:-1;;35782:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35734:96:::1;35714:3;::::0;::::1;:::i;:::-;;;35676:165;;38283:454:::0;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;38420:17:::1;:33:::0;;;38464:17:::1;:33:::0;;;38508:11:::1;:21:::0;;;38540:18:::1;:34:::0;;;38679:12:::1;::::0;38696:3:::1;::::0;38593:99:::1;::::0;:81:::1;38560:14:::0;38593:81;38522:7;38593:81;38440:13;38484;38593:21:::1;:40::i;:::-;:44:::0;::::1;:57::i;:99::-;:106;;38585:144;;;::::0;-1:-1:-1;;;38585:144:0;;13011:2:1;38585:144:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;-1:-1:-1;;;13069:18:1;;;13062:55;13134:18;;38585:144:0::1;12983:175:1::0;19837:198:0;-1:-1:-1;;;;;19927:20:0;;19903:7;19927:20;;;:11;:20;;;;;;;;19923:49;;;-1:-1:-1;;;;;;19956:16:0;;;;;:7;:16;;;;;;;19837:198::o;19923:49::-;-1:-1:-1;;;;;20010:16:0;;;;;;:7;:16;;;;;;19990:37;;:19;:37::i;6166:148::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;6273:1:::1;6257:6:::0;;6236:40:::1;::::0;-1:-1:-1;;;;;6257:6:0;;::::1;::::0;6236:40:::1;::::0;6273:1;;6236:40:::1;6304:1;6287:19:::0;;-1:-1:-1;;;;;;6287:19:0::1;::::0;;6166:148::o;34787:198::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;34874:9:::1;34869:109;34885:20:::0;;::::1;34869:109;;;34962:4;34927:18;:32;34946:9;;34956:1;34946:12;;;;;-1:-1:-1::0;;;34946:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34927:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34927:32:0;:39;;-1:-1:-1;;34927:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34907:3:::1;::::0;::::1;:::i;:::-;;;34869:109;;;;34787:198:::0;;:::o;36064:135::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;36149:42:::1;::::0;-1:-1:-1;;;;;36149:19:0;::::1;::::0;36169:21:::1;36149:42:::0;::::1;;;::::0;::::1;::::0;;;36169:21;36149:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;35860:188:::0;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;35947:9:::1;35942:99;35958:20:::0;;::::1;35942:99;;;36025:4;36000:10;:24;36011:9;;36021:1;36011:12;;;;;-1:-1:-1::0;;;36011:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36000:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36000:24:0;:29;;-1:-1:-1;;36000:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35980:3:::1;::::0;::::1;:::i;:::-;;;35942:99;;36696:178:::0;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;36850:16:::1;36830;36820:7;;:26;;;;:::i;:::-;36819:47;;;;:::i;:::-;36803:13;:63:::0;-1:-1:-1;;36696:178:0:o;19548:87::-;19587:13;19620:7;19613:14;;;;;:::i;36882:496::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;37018:4:::1;36999:23:::0;::::1;36991:81;;;::::0;-1:-1:-1;;;36991:81:0;;14780:2:1;36991:81:0::1;::::0;::::1;14762:21:1::0;14819:2;14799:18;;;14792:30;14858:34;14838:18;;;14831:62;-1:-1:-1;;;14909:18:1;;;14902:44;14963:19;;36991:81:0::1;14752:236:1::0;36991:81:0::1;37135:9;::::0;37108:12:::1;::::0;37147:9;;37131:13:::1;::::0;-1:-1:-1;;;37135:9:0;::::1;;;37131:2;:13;:::i;:::-;37123:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;37108:55;;37203:4;37184:15;37194:4;37184:9;:15::i;:::-;:23;;37176:63;;;::::0;-1:-1:-1;;;37176:63:0;;13715:2:1;37176:63:0::1;::::0;::::1;13697:21:1::0;13754:2;13734:18;;;13727:30;13793:29;13773:18;;;13766:57;13840:18;;37176:63:0::1;13687:177:1::0;37176:63:0::1;37256:6;37252:119;37266:20:::0;;::::1;37252:119;;;37307:52;37317:4;37322:9;;37332:1;37322:12;;;;;-1:-1:-1::0;;;37322:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37348:9;::::0;37344:13:::1;::::0;-1:-1:-1;;;37348:9:0;::::1;;;37344:2;:13;:::i;:::-;37336:21;::::0;:6;:21:::1;:::i;:::-;37307:9;:52::i;:::-;37288:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37252:119;;;;6145:1;36882:496:::0;;;;:::o;37386:681::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;37554:16:::1;:32:::0;;;37597:16:::1;:32:::0;;;37640:10:::1;:20:::0;;;37671:17:::1;:33:::0;;;37717:13:::1;:29:::0;;;37757:12:::1;:28:::0;;;37796:6:::1;:16:::0;;;37823:12:::1;:28:::0;;;37862:12:::1;:28:::0;;;37912:60:::1;37877:13:::0;37912:42:::1;37653:7:::0;37912:42;37573:13;37616;37912:16:::1;:30::i;:60::-;37901:8;:71:::0;;;38004:17:::1;::::0;38026:3:::1;::::0;37991:31:::1;::::0;:12:::1;:31::i;:::-;:38;;37983:76;;;::::0;-1:-1:-1;;;37983:76:0;;13011:2:1;37983:76:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;-1:-1:-1;;;13069:18:1;;;13062:55;13134:18;;37983:76:0::1;12983:175:1::0;37983:76:0::1;37386:681:::0;;;;;:::o;21085:269::-;21178:4;21195:129;325:10;21218:7;21227:96;21266:15;21227:96;;;;;;;;;;;;;;;;;325:10;21227:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21227:34:0;;;;;;;;;;;;:38;:96::i;20043:167::-;20121:4;20138:42;325:10;20162:9;20173:6;20138:9;:42::i;38076:94::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38136:19:0::1;;::::0;;;:14:::1;:19;::::0;;;;:26;;-1:-1:-1;;38136:26:0::1;38158:4;38136:26;::::0;;38076:94::o;35125:190::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;35222:15:::1;:43:::0;;-1:-1:-1;;;;;35222:43:0;;::::1;-1:-1:-1::0;;;;;;35222:43:0;;::::1;;::::0;;;35276:9:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;35125:190::o;35003:110::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35070:27:0::1;35100:5;35070:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35070:35:0::1;::::0;;35003:110::o;18926:523::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;18999:29:::1;19050:9;18999:61;;19071:16;19108:10;-1:-1:-1::0;;;;;19108:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19090:47:0::1;;19146:4;19153:10;-1:-1:-1::0;;;;;19153:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19090:81;::::0;-1:-1:-1;;;;;;19090:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;19090:81:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;19090:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19071:100:::0;-1:-1:-1;;;;;;19186:22:0;::::1;19182:221;;19259:10;-1:-1:-1::0;;;;;19259:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19241:50:0::1;;19300:4;19307:10;-1:-1:-1::0;;;;;19307:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19241:84;::::0;-1:-1:-1;;;;;;19241:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;19241:84:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;19241:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19225:13;:100:::0;;-1:-1:-1;;;;;;19225:100:0::1;-1:-1:-1::0;;;;;19225:100:0;;;::::1;::::0;;;::::1;::::0;;19182:221:::1;;;19367:13;:24:::0;;-1:-1:-1;;;;;;19367:24:0::1;-1:-1:-1::0;;;;;19367:24:0;::::1;;::::0;;19182:221:::1;-1:-1:-1::0;19413:15:0::1;:28:::0;;-1:-1:-1;;;;;;19413:28:0::1;-1:-1:-1::0;;;;;19413:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18926:523:0:o;38178:97::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38240:19:0::1;38262:5;38240:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;38240:27:0::1;::::0;;38178:97::o;34667:112::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34737:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34737:34:0::1;34767:4;34737:34;::::0;;34667:112::o;6322:244::-;6075:6;;-1:-1:-1;;;;;6075:6:0;325:10;6075:22;6067:67;;;;-1:-1:-1;;;6067:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6411:22:0;::::1;6403:73;;;::::0;-1:-1:-1;;;6403:73:0;;11489:2:1;6403:73:0::1;::::0;::::1;11471:21:1::0;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;-1:-1:-1;;;11618:18:1;;;11611:36;11664:19;;6403:73:0::1;11461:228:1::0;6403:73:0::1;6513:6;::::0;;6492:38:::1;::::0;-1:-1:-1;;;;;6492:38:0;;::::1;::::0;6513:6;::::1;::::0;6492:38:::1;::::0;::::1;6541:6;:17:::0;;-1:-1:-1;;;;;;6541:17:0::1;-1:-1:-1::0;;;;;6541:17:0;;;::::1;::::0;;;::::1;::::0;;6322:244::o;2100:132::-;2158:7;2185:39;2189:1;2192;2185:39;;;;;;;;;;;;;;;;;:3;:39::i;1840:250::-;1898:7;1922:6;1918:47;;-1:-1:-1;1952:1:0;1945:8;;1918:47;1977:9;1989:5;1993:1;1989;:5;:::i;:::-;1977:17;-1:-1:-1;2022:1:0;2013:5;2017:1;1977:17;2013:5;:::i;:::-;:10;2005:56;;;;-1:-1:-1;;;2005:56:0;;15195:2:1;2005:56:0;;;15177:21:1;15234:2;15214:18;;;15207:30;15273:34;15253:18;;;15246:62;-1:-1:-1;;;15324:18:1;;;15317:31;15365:19;;2005:56:0;15167:223:1;1307:181:0;1365:7;;1397:5;1401:1;1397;:5;:::i;:::-;1385:17;;1426:1;1421;:6;;1413:46;;;;-1:-1:-1;;;1413:46:0;;12299:2:1;1413:46:0;;;12281:21:1;12338:2;12318:18;;;12311:30;12377:29;12357:18;;;12350:57;12424:18;;1413:46:0;12271:177:1;23441:337:0;-1:-1:-1;;;;;23534:19:0;;23526:68;;;;-1:-1:-1;;;23526:68:0;;17177:2:1;23526:68:0;;;17159:21:1;17216:2;17196:18;;;17189:30;17255:34;17235:18;;;17228:62;-1:-1:-1;;;17306:18:1;;;17299:34;17350:19;;23526:68:0;17149:226:1;23526:68:0;-1:-1:-1;;;;;23613:21:0;;23605:68;;;;-1:-1:-1;;;23605:68:0;;11896:2:1;23605:68:0;;;11878:21:1;11935:2;11915:18;;;11908:30;11974:34;11954:18;;;11947:62;-1:-1:-1;;;12025:18:1;;;12018:32;12067:19;;23605:68:0;11868:224:1;23605:68:0;-1:-1:-1;;;;;23686:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23738:32;;17939:25:1;;;23738:32:0;;17912:18:1;23738:32:0;;;;;;;23441:337;;;:::o;23786:2059::-;-1:-1:-1;;;;;23908:18:0;;23900:68;;;;-1:-1:-1;;;23900:68:0;;16368:2:1;23900:68:0;;;16350:21:1;16407:2;16387:18;;;16380:30;16446:34;16426:18;;;16419:62;-1:-1:-1;;;16497:18:1;;;16490:35;16542:19;;23900:68:0;16340:227:1;23900:68:0;-1:-1:-1;;;;;23987:16:0;;23979:64;;;;-1:-1:-1;;;23979:64:0;;10674:2:1;23979:64:0;;;10656:21:1;10713:2;10693:18;;;10686:30;10752:34;10732:18;;;10725:62;-1:-1:-1;;;10803:18:1;;;10796:33;10846:19;;23979:64:0;10646:225:1;23979:64:0;24071:1;24062:6;:10;24054:64;;;;-1:-1:-1;;;24054:64:0;;15958:2:1;24054:64:0;;;15940:21:1;15997:2;15977:18;;;15970:30;16036:34;16016:18;;;16009:62;-1:-1:-1;;;16087:18:1;;;16080:39;16136:19;;24054:64:0;15930:231:1;24054:64:0;-1:-1:-1;;;;;24138:13:0;;;;;;:9;:13;;;;;;;;24137:14;24129:48;;;;-1:-1:-1;;;24129:48:0;;13365:2:1;24129:48:0;;;13347:21:1;13404:2;13384:18;;;13377:30;-1:-1:-1;;;13423:18:1;;;13416:51;13484:18;;24129:48:0;13337:171:1;24129:48:0;-1:-1:-1;;;;;24197:15:0;;;;;;:9;:15;;;;;;;;24196:16;24188:50;;;;-1:-1:-1;;;24188:50:0;;13365:2:1;24188:50:0;;;13347:21:1;13404:2;13384:18;;;13377:30;-1:-1:-1;;;13423:18:1;;;13416:51;13484:18;;24188:50:0;13337:171:1;24188:50:0;-1:-1:-1;;;;;24263:20:0;;;;;;:14;:20;;;;;;;;24259:95;;24307:11;;-1:-1:-1;;;24307:11:0;;;;24299:43;;;;-1:-1:-1;;;24299:43:0;;14431:2:1;24299:43:0;;;14413:21:1;14470:2;14450:18;;;14443:30;-1:-1:-1;;;14489:18:1;;;14482:50;14549:18;;24299:43:0;14403:170:1;24299:43:0;24444:13;;24367:12;;-1:-1:-1;;;;;24438:19:0;;;24444:13;;24438:19;;:40;;-1:-1:-1;24465:13:0;;-1:-1:-1;;;;;24461:17:0;;;24465:13;;24461:17;24438:40;24437:99;;;;-1:-1:-1;;;;;;24485:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24513:22:0;;;;;;:18;:22;;;;;;;;24485:50;24483:53;24437:99;24432:148;;;-1:-1:-1;24564:4:0;24432:148;24606:1;24595:10;;:12;:66;;;;-1:-1:-1;;;;;;24613:22:0;;;;;;:18;:22;;;;;;;;24612:23;:48;;;;-1:-1:-1;;;;;;24640:20:0;;;;;;:14;:20;;;;;;;;24639:21;24612:48;24592:207;;;24712:15;;24697:13;24707:2;24697:9;:13::i;:::-;24689:21;;:6;:21;:::i;:::-;:38;;24681:106;;;;-1:-1:-1;;;24681:106:0;;16774:2:1;24681:106:0;;;16756:21:1;16813:2;16793:18;;;16786:30;16852:34;16832:18;;;16825:62;-1:-1:-1;;;16903:18:1;;;16896:32;16945:19;;24681:106:0;16746:224:1;24681:106:0;24827:8;;24811:15;:24;24860:17;;24846:13;:31;24893:11;;-1:-1:-1;;;24893:11:0;;;;:34;;;;-1:-1:-1;24914:13:0;;-1:-1:-1;;;;;24908:19:0;;;24914:13;;24908:19;24893:34;24890:194;;;24968:57;25013:11;;24968:40;24990:17;;24968;;:21;;:40;;;;:::i;:57::-;24951:15;:74;25054:18;;25040:13;:32;24890:194;25154:1;25143:10;;:12;:56;;;;;25187:12;25173:10;;25160;;:23;;;;:::i;:::-;25159:40;25143:56;25140:109;;;-1:-1:-1;;;;;25219:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;25219:18:0;25233:4;25219:18;;;25140:109;25264:14;;-1:-1:-1;;;25264:14:0;;;;25261:150;;;25298:11;;-1:-1:-1;;;25298:11:0;;;;:36;;;;-1:-1:-1;25321:13:0;;-1:-1:-1;;;;;25313:21:0;;;25321:13;;25313:21;25298:36;25295:105;;;25382:1;25366:15;:17;25295:105;25444:6;;-1:-1:-1;;;25444:6:0;;;;25443:7;:22;;;;-1:-1:-1;25454:11:0;;-1:-1:-1;;;25454:11:0;;;;25443:22;:45;;;;-1:-1:-1;25475:13:0;;-1:-1:-1;;;;;25469:19:0;;;25475:13;;25469:19;25443:45;25439:350;;;25513:28;25544:24;25562:4;25544:9;:24::i;:::-;25513:55;;25622:13;;25600:20;:35;25597:169;;-1:-1:-1;25682:13:0;;25718:32;25682:13;25718:10;:32::i;:::-;25439:350;;25799:38;25814:4;25819:2;25822:6;25829:7;25799:14;:38::i;1640:192::-;1726:7;1762:12;1754:6;;;;1746:29;;;;-1:-1:-1;;;1746:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1786:9:0;1798:5;1802:1;1798;:5;:::i;:::-;1786:17;1640:192;-1:-1:-1;;;;;1640:192:0:o;33204:163::-;33245:7;33266:15;33283;33302:19;:17;:19::i;:::-;33265:56;;-1:-1:-1;33265:56:0;-1:-1:-1;33339:20:0;33265:56;;33339:11;:20::i;:::-;33332:27;;;;33204:163;:::o;32002:419::-;32061:7;32070;32079;32088;32097;32106;32127:23;32152:12;32166:18;32188:20;32200:7;32188:11;:20::i;:::-;32126:82;;;;;;32220:15;32237:23;32262:12;32278:50;32290:7;32299:4;32305:10;32317;:8;:10::i;:::-;32278:11;:50::i;:::-;32219:109;;;;-1:-1:-1;32219:109:0;;-1:-1:-1;32379:15:0;;-1:-1:-1;32396:4:0;;-1:-1:-1;32402:10:0;;-1:-1:-1;32002:419:0;;-1:-1:-1;;;;;32002:419:0:o;1496:136::-;1554:7;1581:43;1585:1;1588;1581:43;;;;;;;;;;;;;;;;;:3;:43::i;2240:278::-;2326:7;2361:12;2354:5;2346:28;;;;-1:-1:-1;;;2346:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2385:9:0;2397:5;2401:1;2397;:5;:::i;25853:1372::-;17547:6;:13;;-1:-1:-1;;;;17547:13:0;-1:-1:-1;;;17547:13:0;;;26051:8:::1;::::0;26019:12:::1;::::0;17547:13;;25980:101:::1;::::0;26079:1:::1;::::0;25980:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25954:127:::0;-1:-1:-1;26094:20:0::1;26117:41;:20:::0;25954:127;26117:24:::1;:41::i;:::-;26094:64;;26179:30;26196:12;26179:16;:30::i;:::-;26311:12;::::0;26242:21:::1;::::0;26222:17:::1;::::0;26298:33:::1;::::0;26311:19:::1;::::0;26328:1:::1;26311:16;:19::i;:::-;26298:8;::::0;;:12:::1;:33::i;:::-;26276:55;;26344:26;26373:93;26464:1;26373:72;26433:11;26373:41;26401:12;;26373:9;:27;;:41;;;;:::i;:93::-;26344:122;;26487:20;26510:38;26536:11;26510:21;26524:6;;26510:9;:13;;:21;;;;:::i;:38::-;26487:61;;26559:26;26588:68;26634:11;26588:27;26602:12;;26588:9;:13;;:27;;;;:::i;:68::-;26559:97;;26668:26;26697:68;26743:11;26697:27;26711:12;;26697:9;:13;;:27;;;;:::i;:68::-;26668:97:::0;-1:-1:-1;26856:21:0::1;26891:22:::0;;26888:216:::1;;26962:15;::::0;26930:48:::1;::::0;26943:18;;-1:-1:-1;;;;;26962:15:0::1;26930:12;:48::i;:::-;27025:15;::::0;26993:48:::1;::::0;27006:18;;-1:-1:-1;;;;;27025:15:0::1;26993:12;:48::i;:::-;27082:9;::::0;27056:36:::1;::::0;27069:12;;-1:-1:-1;;;;;27082:9:0::1;27056:12;:36::i;:::-;27118:19:::0;;27114:104:::1;;27158:48;27171:15;27187:18;27158:12;:48::i;:::-;-1:-1:-1::0;;17583:6:0;:14;;-1:-1:-1;;;;17583:14:0;;;-1:-1:-1;;;;;;;;25853:1372:0:o;28568:943::-;28708:13;;28758:15;;28788:7;28784:88;;28827:1;28811:13;:17;;;28843:15;:17;28784:88;-1:-1:-1;;;;;28896:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28920:22:0;;;;;;:11;:22;;;;;;;;28919:23;28896:46;28892:467;;;28959:48;28981:6;28989:9;29000:6;28959:21;:48::i;:::-;28892:467;;;-1:-1:-1;;;;;29030:19:0;;;;;;:11;:19;;;;;;;;29029:20;:46;;;;-1:-1:-1;;;;;;29053:22:0;;;;;;:11;:22;;;;;;;;29029:46;29025:334;;;29092:46;29112:6;29120:9;29131:6;29092:19;:46::i;29025:334::-;-1:-1:-1;;;;;29160:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29183:22:0;;;;;;:11;:22;;;;;;;;29160:45;29156:203;;;29222:48;29244:6;29252:9;29263:6;29222:21;:48::i;29156:203::-;29303:44;29321:6;29329:9;29340:6;29303:17;:44::i;:::-;29383:7;29379:125;;29406:13;:38;;;;29459:15;:33;-1:-1:-1;;;;28568:943:0:o;33375:561::-;33472:7;;33508;;33425;;;;;33532:289;33556:9;:16;33552:20;;33532:289;;;33622:7;33598;:21;33606:9;33616:1;33606:12;;;;;;-1:-1:-1;;;33606:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33606:12:0;33598:21;;;;;;;;;;;;;:31;;:66;;;33657:7;33633;:21;33641:9;33651:1;33641:12;;;;;;-1:-1:-1;;;33641:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33641:12:0;33633:21;;;;;;;;;;;;;:31;33598:66;33594:97;;;33674:7;;33683;;33666:25;;;;;;;33375:561;;:::o;33594:97::-;33716:34;33728:7;:21;33736:9;33746:1;33736:12;;;;;;-1:-1:-1;;;33736:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33736:12:0;33728:21;;;;;;;;;;;;;33716:7;;:11;:34::i;:::-;33706:44;;33775:34;33787:7;:21;33795:9;33805:1;33795:12;;;;;;-1:-1:-1;;;33795:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33795:12:0;33787:21;;;;;;;;;;;;;33775:7;;:11;:34::i;:::-;33765:44;-1:-1:-1;33574:3:0;;;;:::i;:::-;;;;33532:289;;;-1:-1:-1;33857:7:0;;33845;;:20;;:11;:20::i;:::-;33835:7;:30;33831:61;;;33875:7;;33884;;33867:25;;;;;;33375:561;;:::o;33831:61::-;33911:7;;33920;;-1:-1:-1;33375:561:0;-1:-1:-1;33375:561:0:o;32429:330::-;32489:7;32498;32507;32527:12;32542:24;32558:7;32542:15;:24::i;:::-;32527:39;;32577:18;32598:30;32620:7;32598:21;:30::i;:::-;32577:51;-1:-1:-1;32639:23:0;32665:33;32577:51;32665:17;:7;32677:4;32665:11;:17::i;:::-;:21;;:33::i;:::-;32639:59;32734:4;;-1:-1:-1;32740:10:0;;-1:-1:-1;32429:330:0;;-1:-1:-1;;;32429:330:0:o;32767:429::-;32882:7;;;;32938:24;:7;32950:11;32938;:24::i;:::-;32920:42;-1:-1:-1;32973:12:0;32988:21;:4;32997:11;32988:8;:21::i;:::-;32973:36;-1:-1:-1;33020:18:0;33041:27;:10;33056:11;33041:14;:27::i;:::-;33020:48;-1:-1:-1;33079:23:0;33105:33;33020:48;33105:17;:7;33117:4;33105:11;:17::i;:33::-;33157:7;;;;-1:-1:-1;33183:4:0;;-1:-1:-1;32767:429:0;;-1:-1:-1;;;;;;;32767:429:0:o;27367:666::-;27517:16;;;27531:1;27517:16;;;;;;;;27493:21;;27517:16;;;;;;;;;;-1:-1:-1;27517:16:0;27493:40;;27562:4;27544;27549:1;27544:7;;;;;;-1:-1:-1;;;27544:7:0;;;;;;;;;-1:-1:-1;;;;;27544:23:0;;;:7;;;;;;;;;;:23;;;;27588:15;;:22;;;-1:-1:-1;;;27588:22:0;;;;:15;;;;;:20;;:22;;;;;27544:7;;27588:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27578:4;27583:1;27578:7;;;;;;-1:-1:-1;;;27578:7:0;;;;;;;;;-1:-1:-1;;;;;27578:32:0;;;:7;;;;;;;;;:32;27655:15;;27623:62;;27640:4;;27655:15;27673:11;27623:8;:62::i;:::-;27724:15;;:240;;-1:-1:-1;;;27724:240:0;;-1:-1:-1;;;;;27724:15:0;;;;:66;;:240;;27805:11;;27724:15;;27875:4;;27902;;27938:15;;27724:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27990:35;28007:11;28020:4;27990:35;;;;;;;:::i;:::-;;;;;;;;27367:666;;:::o;27237:111::-;27317:23;;-1:-1:-1;;;;;27317:15:0;;;:23;;;;;27333:6;;27317:23;;;;27333:6;27317:15;:23;;;;;;;;;;;;;;;;;;;28047:513;28227:15;;28195:62;;28212:4;;-1:-1:-1;;;;;28227:15:0;28245:11;28195:8;:62::i;:::-;28300:15;;-1:-1:-1;;;;;28300:15:0;:31;28339:9;28372:4;28392:11;28300:15;;28504:7;5979;6006:6;-1:-1:-1;;;;;6006:6:0;;5941:79;28504:7;28300:252;;;;;;-1:-1:-1;;;;;;28300:252:0;;;-1:-1:-1;;;;;9184:15:1;;;28300:252:0;;;9166:34:1;9216:18;;;9209:34;;;;9259:18;;;9252:34;;;;9302:18;;;9295:34;9366:15;;;9345:19;;;9338:44;28526:15:0;9398:19:1;;;9391:35;9100:19;;28300:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30623:566::-;30726:15;30743:23;30768:12;30782:23;30807:12;30821:18;30843:19;30854:7;30843:10;:19::i;:::-;-1:-1:-1;;;;;30891:15:0;;;;;;:7;:15;;;;;;30725:137;;-1:-1:-1;30725:137:0;;-1:-1:-1;30725:137:0;;-1:-1:-1;30725:137:0;-1:-1:-1;30725:137:0;-1:-1:-1;30725:137:0;-1:-1:-1;30891:28:0;;30911:7;30891:19;:28::i;:::-;-1:-1:-1;;;;;30873:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30948:7;:15;;;;:28;;30968:7;30948:19;:28::i;:::-;-1:-1:-1;;;;;30930:15:0;;;;;;;:7;:15;;;;;;:46;;;;31008:18;;;;;;;:39;;31031:15;31008:22;:39::i;:::-;-1:-1:-1;;;;;30987:18:0;;;;;;:7;:18;;;;;:60;31061:26;31076:10;31061:14;:26::i;:::-;31098:23;31110:4;31116;31098:11;:23::i;:::-;31154:9;-1:-1:-1;;;;;31137:44:0;31146:6;-1:-1:-1;;;;;31137:44:0;;31165:15;31137:44;;;;17939:25:1;;17927:2;17912:18;;17894:76;31137:44:0;;;;;;;;30623:566;;;;;;;;;:::o;30029:586::-;30130:15;30147:23;30172:12;30186:23;30211:12;30225:18;30247:19;30258:7;30247:10;:19::i;:::-;-1:-1:-1;;;;;30295:15:0;;;;;;:7;:15;;;;;;30129:137;;-1:-1:-1;30129:137:0;;-1:-1:-1;30129:137:0;;-1:-1:-1;30129:137:0;-1:-1:-1;30129:137:0;-1:-1:-1;30129:137:0;-1:-1:-1;30295:28:0;;30129:137;30295:19;:28::i;:::-;-1:-1:-1;;;;;30277:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30355:18;;;;;:7;:18;;;;;:39;;30378:15;30355:22;:39::i;:::-;-1:-1:-1;;;;;30334:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30426:7;:18;;;;:39;;30449:15;30426:22;:39::i;31197:642::-;31300:15;31317:23;31342:12;31356:23;31381:12;31395:18;31417:19;31428:7;31417:10;:19::i;:::-;-1:-1:-1;;;;;31465:15:0;;;;;;:7;:15;;;;;;31299:137;;-1:-1:-1;31299:137:0;;-1:-1:-1;31299:137:0;;-1:-1:-1;31299:137:0;-1:-1:-1;31299:137:0;-1:-1:-1;31299:137:0;-1:-1:-1;31465:28:0;;31485:7;31465:19;:28::i;:::-;-1:-1:-1;;;;;31447:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31522:7;:15;;;;:28;;31542:7;31522:19;:28::i;29519:502::-;29618:15;29635:23;29660:12;29674:23;29699:12;29713:18;29735:19;29746:7;29735:10;:19::i;:::-;-1:-1:-1;;;;;29783:15:0;;;;;;:7;:15;;;;;;29617:137;;-1:-1:-1;29617:137:0;;-1:-1:-1;29617:137:0;;-1:-1:-1;29617:137:0;-1:-1:-1;29617:137:0;-1:-1:-1;29617:137:0;-1:-1:-1;29783:28:0;;29617:137;29783:19;:28::i;34315:160::-;34379:7;34406:61;34451:5;34406:26;34418:13;;34406:7;:11;;:26;;;;:::i;34487:168::-;34557:7;34584:63;34631:5;34584:28;34596:15;;34584:7;:11;;:28;;;;:::i;33948:355::-;34011:19;34034:10;:8;:10::i;:::-;34011:33;-1:-1:-1;34055:18:0;34076:27;:10;34011:33;34076:14;:27::i;:::-;34155:4;34139:22;;;;:7;:22;;;;;;34055:48;;-1:-1:-1;34139:38:0;;34055:48;34139:26;:38::i;:::-;34130:4;34114:22;;;;:7;:22;;;;;;;;:63;;;;34191:11;:26;;;;;;34188:107;;;34273:4;34257:22;;;;:7;:22;;;;;;:38;;34284:10;34257:26;:38::i;:::-;34248:4;34232:22;;;;:7;:22;;;;;:63;33948:355;;;:::o;31847:147::-;31925:7;;:17;;31937:4;31925:11;:17::i;:::-;31915:7;:27;31966:10;;:20;;31981:4;31966:14;:20::i;:::-;31953:10;:33;-1:-1:-1;;31847:147:0:o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:660::-;2190:6;2198;2206;2214;2267:2;2255:9;2246:7;2242:23;2238:32;2235:2;;;2288:6;2280;2273:22;2235:2;2332:9;2319:23;2351:31;2376:5;2351:31;:::i;:::-;2401:5;-1:-1:-1;2457:2:1;2442:18;;2429:32;2484:18;2473:30;;2470:2;;;2521:6;2513;2506:22;2470:2;2565:70;2627:7;2618:6;2607:9;2603:22;2565:70;:::i;:::-;2225:521;;2654:8;;-1:-1:-1;2539:96:1;;2736:2;2721:18;2708:32;;2225:521;-1:-1:-1;;;;2225:521:1:o;2751:325::-;2819:6;2827;2880:2;2868:9;2859:7;2855:23;2851:32;2848:2;;;2901:6;2893;2886:22;2848:2;2945:9;2932:23;2964:31;2989:5;2964:31;:::i;:::-;3014:5;3066:2;3051:18;;;;3038:32;;-1:-1:-1;;;2838:238:1:o;3081:457::-;3167:6;3175;3228:2;3216:9;3207:7;3203:23;3199:32;3196:2;;;3249:6;3241;3234:22;3196:2;3294:9;3281:23;3327:18;3319:6;3316:30;3313:2;;;3364:6;3356;3349:22;3313:2;3408:70;3470:7;3461:6;3450:9;3446:22;3408:70;:::i;:::-;3497:8;;3382:96;;-1:-1:-1;3186:352:1;-1:-1:-1;;;;3186:352:1:o;3543:586::-;3635:6;3643;3651;3704:2;3692:9;3683:7;3679:23;3675:32;3672:2;;;3725:6;3717;3710:22;3672:2;3770:9;3757:23;3803:18;3795:6;3792:30;3789:2;;;3840:6;3832;3825:22;3789:2;3884:70;3946:7;3937:6;3926:9;3922:22;3884:70;:::i;:::-;3973:8;;-1:-1:-1;3858:96:1;-1:-1:-1;;4058:2:1;4043:18;;4030:32;4071:28;4030:32;4071:28;:::i;:::-;4118:5;4108:15;;;3662:467;;;;;:::o;4134:251::-;4190:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:2;;;4264:6;4256;4249:22;4211:2;4308:9;4295:23;4327:28;4349:5;4327:28;:::i;4390:255::-;4457:6;4510:2;4498:9;4489:7;4485:23;4481:32;4478:2;;;4531:6;4523;4516:22;4478:2;4568:9;4562:16;4587:28;4609:5;4587:28;:::i;4650:319::-;4715:6;4723;4776:2;4764:9;4755:7;4751:23;4747:32;4744:2;;;4797:6;4789;4782:22;4744:2;4841:9;4828:23;4860:28;4882:5;4860:28;:::i;4974:411::-;5055:6;5063;5116:2;5104:9;5095:7;5091:23;5087:32;5084:2;;;5137:6;5129;5122:22;5390:190;5449:6;5502:2;5490:9;5481:7;5477:23;5473:32;5470:2;;;5523:6;5515;5508:22;5470:2;-1:-1:-1;5551:23:1;;5460:120;-1:-1:-1;5460:120:1:o;5585:194::-;5655:6;5708:2;5696:9;5687:7;5683:23;5679:32;5676:2;;;5729:6;5721;5714:22;5676:2;-1:-1:-1;5757:16:1;;5666:113;-1:-1:-1;5666:113:1:o;5784:319::-;5849:6;5857;5910:2;5898:9;5889:7;5885:23;5881:32;5878:2;;;5931:6;5923;5916:22;5878:2;5972:9;5959:23;5949:33;;6032:2;6021:9;6017:18;6004:32;6045:28;6067:5;6045:28;:::i;6108:258::-;6176:6;6184;6237:2;6225:9;6216:7;6212:23;6208:32;6205:2;;;6258:6;6250;6243:22;6205:2;-1:-1:-1;;6286:23:1;;;6356:2;6341:18;;;6328:32;;-1:-1:-1;6195:171:1:o;6371:316::-;6459:6;6467;6475;6528:2;6516:9;6507:7;6503:23;6499:32;6496:2;;;6549:6;6541;6534:22;6496:2;6583:9;6577:16;6567:26;;6633:2;6622:9;6618:18;6612:25;6602:35;;6677:2;6666:9;6662:18;6656:25;6646:35;;6486:201;;;;;:::o;6692:395::-;6778:6;6786;6794;6802;6855:3;6843:9;6834:7;6830:23;6826:33;6823:2;;;6877:6;6869;6862:22;6823:2;-1:-1:-1;;6905:23:1;;;6975:2;6960:18;;6947:32;;-1:-1:-1;7026:2:1;7011:18;;6998:32;;7077:2;7062:18;7049:32;;-1:-1:-1;6813:274:1;-1:-1:-1;6813:274:1:o;7092:464::-;7187:6;7195;7203;7211;7219;7272:3;7260:9;7251:7;7247:23;7243:33;7240:2;;;7294:6;7286;7279:22;7240:2;-1:-1:-1;;7322:23:1;;;7392:2;7377:18;;7364:32;;-1:-1:-1;7443:2:1;7428:18;;7415:32;;7494:2;7479:18;;7466:32;;-1:-1:-1;7545:3:1;7530:19;7517:33;;-1:-1:-1;7230:326:1;-1:-1:-1;7230:326:1:o;7561:463::-;7614:3;7652:5;7646:12;7679:6;7674:3;7667:19;7705:4;7734:2;7729:3;7725:12;7718:19;;7771:2;7764:5;7760:14;7792:3;7804:195;7818:6;7815:1;7812:13;7804:195;;;7883:13;;-1:-1:-1;;;;;7879:39:1;7867:52;;7939:12;;;;7974:15;;;;7915:1;7833:9;7804:195;;;-1:-1:-1;8015:3:1;;7622:402;-1:-1:-1;;;;;7622:402:1:o;9864:603::-;9976:4;10005:2;10034;10023:9;10016:21;10066:6;10060:13;10109:6;10104:2;10093:9;10089:18;10082:34;10134:4;10147:140;10161:6;10158:1;10155:13;10147:140;;;10256:14;;;10252:23;;10246:30;10222:17;;;10241:2;10218:26;10211:66;10176:10;;10147:140;;;10305:6;10302:1;10299:13;10296:2;;;10375:4;10370:2;10361:6;10350:9;10346:22;10342:31;10335:45;10296:2;-1:-1:-1;10451:2:1;10430:15;-1:-1:-1;;10426:29:1;10411:45;;;;10458:2;10407:54;;9985:482;-1:-1:-1;;;9985:482:1:o;15395:356::-;15597:2;15579:21;;;15616:18;;;15609:30;15675:34;15670:2;15655:18;;15648:62;15742:2;15727:18;;15569:182::o;17975:332::-;18182:6;18171:9;18164:25;18225:2;18220;18209:9;18205:18;18198:30;18145:4;18245:56;18297:2;18286:9;18282:18;18274:6;18245:56;:::i;:::-;18237:64;18154:153;-1:-1:-1;;;;18154:153:1:o;18312:582::-;18611:6;18600:9;18593:25;18654:6;18649:2;18638:9;18634:18;18627:34;18697:3;18692:2;18681:9;18677:18;18670:31;18574:4;18718:57;18770:3;18759:9;18755:19;18747:6;18718:57;:::i;:::-;-1:-1:-1;;;;;18811:32:1;;;;18806:2;18791:18;;18784:60;-1:-1:-1;18875:3:1;18860:19;18853:35;18710:65;18583:311;-1:-1:-1;;;18583:311:1:o;19088:128::-;19128:3;19159:1;19155:6;19152:1;19149:13;19146:2;;;19165:18;;:::i;:::-;-1:-1:-1;19201:9:1;;19136:80::o;19221:217::-;19261:1;19287;19277:2;;-1:-1:-1;;;19312:31:1;;19366:4;19363:1;19356:15;19394:4;19319:1;19384:15;19277:2;-1:-1:-1;19423:9:1;;19267:171::o;19443:422::-;19532:1;19575:5;19532:1;19589:270;19610:7;19600:8;19597:21;19589:270;;;19669:4;19665:1;19661:6;19657:17;19651:4;19648:27;19645:2;;;19678:18;;:::i;:::-;19728:7;19718:8;19714:22;19711:2;;;19748:16;;;;19711:2;19827:22;;;;19787:15;;;;19589:270;;;19593:3;19507:358;;;;;:::o;19870:140::-;19928:5;19957:47;19998:4;19988:8;19984:19;19978:4;20064:5;20094:8;20084:2;;-1:-1:-1;20135:1:1;20149:5;;20084:2;20183:4;20173:2;;-1:-1:-1;20220:1:1;20234:5;;20173:2;20265:4;20283:1;20278:59;;;;20351:1;20346:130;;;;20258:218;;20278:59;20308:1;20299:10;;20322:5;;;20346:130;20383:3;20373:8;20370:17;20367:2;;;20390:18;;:::i;:::-;-1:-1:-1;;20446:1:1;20432:16;;20461:5;;20258:218;;20560:2;20550:8;20547:16;20541:3;20535:4;20532:13;20528:36;20522:2;20512:8;20509:16;20504:2;20498:4;20495:12;20491:35;20488:77;20485:2;;;-1:-1:-1;20597:19:1;;;20629:5;;20485:2;20676:34;20701:8;20695:4;20676:34;:::i;:::-;20746:6;20742:1;20738:6;20734:19;20725:7;20722:32;20719:2;;;20757:18;;:::i;:::-;20795:20;;20074:747;-1:-1:-1;;;20074:747:1:o;20826:168::-;20866:7;20932:1;20928;20924:6;20920:14;20917:1;20914:21;20909:1;20902:9;20895:17;20891:45;20888:2;;;20939:18;;:::i;:::-;-1:-1:-1;20979:9:1;;20878:116::o;20999:125::-;21039:4;21067:1;21064;21061:8;21058:2;;;21072:18;;:::i;:::-;-1:-1:-1;21109:9:1;;21048:76::o;21129:380::-;21208:1;21204:12;;;;21251;;;21272:2;;21326:4;21318:6;21314:17;21304:27;;21272:2;21379;21371:6;21368:14;21348:18;21345:38;21342:2;;;21425:10;21420:3;21416:20;21413:1;21406:31;21460:4;21457:1;21450:15;21488:4;21485:1;21478:15;21342:2;;21184:325;;;:::o;21514:135::-;21553:3;-1:-1:-1;;21574:17:1;;21571:2;;;21594:18;;:::i;:::-;-1:-1:-1;21641:1:1;21630:13;;21561:88::o;21654:127::-;21715:10;21710:3;21706:20;21703:1;21696:31;21746:4;21743:1;21736:15;21770:4;21767:1;21760:15;21786:131;-1:-1:-1;;;;;21861:31:1;;21851:42;;21841:2;;21907:1;21904;21897:12;21841:2;21831:86;:::o;21922:118::-;22008:5;22001:13;21994:21;21987:5;21984:32;21974:2;;22030:1;22027;22020:12

Swarm Source

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