ETH Price: $2,620.03 (-0.68%)
Gas: 1.23 Gwei

Token

The Frog of Wall Street (FWS)
 

Overview

Max Total Supply

1,000,000,000 FWS

Holders

26

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
10,603,435.45 FWS

Value
$0.00
0x6e9f0164eacc1c9bb7ef748c2d4e8d6c05a53c8a
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:
FrogOfWallStreet

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-30
*/

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

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

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

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

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

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event 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;
}

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

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract FrogOfWallStreet is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    uint8 private _decimals = 9;
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _maxWalletToken = _tTotal.div(1000).mul(10); //2% for first few mins

    uint256 public _buyLiquidityFee = 0;    
    uint256 public _buymarketdevFee = 50;   
    uint256 public _buyReflectionFee = 0;

    uint256 public _sellLiquidityFee = 0; 
    uint256 public _sellmarketdevFee = 40;  
    uint256 public _sellReflectionFee = 10;
      
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketdevFee = _buymarketdevFee;
    uint256 private reflectionFee=_buyReflectionFee;

    uint256 private totalFee = liquidityFee.add(marketdevFee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(20); //0.2% 

    bool inSwap;
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    bool private antiBotmode = true;

    string private _name = "The Frog of Wall Street";
    string private _symbol = "FWS";
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address payable private marketdevWallet = payable (0x1A19E16b33A6574a363F866e5349365C3Ba80122); // marketdev Wallet
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {

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

        uniswapV2Router = _uniswapV2Router;

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

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

    function 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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    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 _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 transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(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 Boss");
        require(!_isSniper[from], "Sorry Boss");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
        bool takeFee = false;
        //take fee on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

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

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellmarketdevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }
        
        //only bot 
        if(launchedAt>0 && from!= owner() && block.number <= (launchedAt + deadBlocks)  && antiBotmode){
                currenttotalFee=950;    //95%
        }

        //buys
        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { 
                    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 _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 _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 _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);
    }

    //Swap and send 
    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 amountETHmarketdev = amountETH.mul(marketdevFee).div(totalETHFee);
        //Send to marketdev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHmarketdev,marketdevWallet);
        }
        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
        );
    }

    //-------------------Private View-------------------
    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 _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 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
        );
    }

    //-------------------Public View-------------------
    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 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 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 isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

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

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

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

    //-------------------only Owner-------------------
    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 openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }
    
    function removeBuyTaxMode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setAntiBotmode(bool _status) external onlyOwner() {
       antiBotmode=_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 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 setWallet(address _marketdevWallet) external onlyOwner() {
        marketdevWallet = payable(_marketdevWallet);
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++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 withdrawStuck(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWallet_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 multiTransfer( address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

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

        require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet");

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

    function multiTransfer_fixed( 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(msg.sender) >= SCCC, "Not enough tokens in wallet");

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

        }
    }

    function setTaxBuy(uint256 _bReflectionFee, uint256 _bLiquidityFee, uint256 _bMarketdevFee) external onlyOwner {
       
        _buyLiquidityFee = _bLiquidityFee;
        _buymarketdevFee = _bMarketdevFee;
        _buyReflectionFee= _bReflectionFee;

        reflectionFee= _bReflectionFee;
        liquidityFee = _bLiquidityFee;
        marketdevFee = _bMarketdevFee;
        totalFee = liquidityFee.add(marketdevFee);
    }

    function setTaxSell(uint256 _sReflectionFee,uint256 _sLiquidityFee, uint256 _sMarketdevFee) external onlyOwner {
        _sellLiquidityFee = _sLiquidityFee;
        _sellmarketdevFee = _sMarketdevFee;
        _sellReflectionFee= _sReflectionFee;
    }
     //to recieve ETH uniswapV2Router
    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":"_buyLiquidityFee","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":"_buymarketdevFee","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":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellmarketdevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransfer_fixed","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":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"removeBuyTaxMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWallet_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":"_bReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_bLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bMarketdevFee","type":"uint256"}],"name":"setTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sMarketdevFee","type":"uint256"}],"name":"setTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketdevWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526003805460ff19166009908117909155600260045560006005556200002b90600a620007c5565b6200003b90633b9aca00620007d6565b60068190556200004e9060001962000806565b6200005c906000196200081d565b6007556006546200007f90600a9062000078906103e862000532565b9062000585565b6009556000600a556032600b556000600c556000600d556028600e55600a600f55600a54601055600b54601155600c54601255620000cb6011546010546200061360201b90919060201c565b60138190556014908155600654620000ec9190620000789061271062000532565b6015556016805463ffffff00191663010000001790556040805180820190915260178082527f5468652046726f67206f662057616c6c20537472656574000000000000000000602083015290620001449082620008d8565b5060408051808201909152600381526246575360e81b60208201526018906200016e9082620008d8565b50601b80546001600160a01b0319908116731a19e16b33a6574a363f866e5349365c3ba8012217909155601c805490911661dead179055348015620001b257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600754336000908152601d602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002819190620009a4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f59190620009a4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000343573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003699190620009a4565b601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055600160216000620003b16000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260219092528120805490921660019081179092556022906200040a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526022909352818320805485166001908117909155601a54821684528284208054861682179055601c549091168352908220805490931681179092556024906200048c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601a5490911681526024909252902080549091166001179055620004db3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200052391815260200190565b60405180910390a35062000a4c565b60006200057c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200067660201b60201c565b90505b92915050565b60008260000362000599575060006200057f565b6000620005a78385620007d6565b905082620005b68583620009cf565b146200057c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006228385620009e6565b9050838110156200057c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200060a565b600081836200069a5760405162461bcd60e51b81526004016200060a9190620009fc565b506000620006a98486620009cf565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000709578160001904821115620006ed57620006ed620006b2565b80851615620006fb57918102915b93841c9390800290620006cd565b509250929050565b60008262000722575060016200057f565b8162000731575060006200057f565b81600181146200074a5760028114620007555762000775565b60019150506200057f565b60ff841115620007695762000769620006b2565b50506001821b6200057f565b5060208310610133831016604e8410600b84101617156200079a575081810a6200057f565b620007a68383620006c8565b8060001904821115620007bd57620007bd620006b2565b029392505050565b60006200057c60ff84168362000711565b80820281158282048414176200057f576200057f620006b2565b634e487b7160e01b600052601260045260246000fd5b600082620008185762000818620007f0565b500690565b818103818111156200057f576200057f620006b2565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085e57607f821691505b6020821081036200087f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d357600081815260208120601f850160051c81016020861015620008ae5750805b601f850160051c820191505b81811015620008cf57828155600101620008ba565b5050505b505050565b81516001600160401b03811115620008f457620008f462000833565b6200090c8162000905845462000849565b8462000885565b602080601f8311600181146200094457600084156200092b5750858301515b600019600386901b1c1916600185901b178555620008cf565b600085815260208120601f198616915b82811015620009755788860151825594840194600190910190840162000954565b5085821015620009945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b757600080fd5b81516001600160a01b03811681146200057c57600080fd5b600082620009e157620009e1620007f0565b500490565b808201808211156200057f576200057f620006b2565b600060208083528351808285015260005b8181101562000a2b5785810183015185820160400152820162000a0d565b506000604082860101526040601f19601f8301168501019250505092915050565b613a1a8062000a5c6000396000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063a9059cbb116100f7578063eafb5a3c11610095578063f3b1e83b1161006f578063f3b1e83b146109da578063f9a69ed6146109f0578063fabb0b4f14610a10578063ffb54a9914610a2657600080fd5b8063eafb5a3c1461097a578063f259c57b1461099a578063f2fde38b146109ba57600080fd5b8063dc44b6a0116100d1578063dc44b6a0146108de578063dd62ed3e146108f4578063deaa59df1461093a578063ea2f0b371461095a57600080fd5b8063a9059cbb14610888578063afb8865e146108a8578063bf56b371146108c857600080fd5b806384530c46116101645780638da5cb5b1161013e5780638da5cb5b146108155780638f4590d21461083357806395d89b4114610853578063a457c2d71461086857600080fd5b806384530c46146107a657806388790a68146107c657806388f82020146107dc57600080fd5b806372fdf6ee116101a057806372fdf6ee14610744578063743942b61461075a5780637598f8bc1461077a57806378109e541461079057600080fd5b806370a08231146106ef578063715018a61461070f57806371b9189c1461072457600080fd5b80632dd5efe7116102a057806343b127a61161023e5780634eeaf458116102185780634eeaf4581461066f57806352390c021461068f5780635d54c0af146106af578063632e5442146106cf57600080fd5b806343b127a61461060f5780634549b0391461062f57806349bd5a5e1461064f57600080fd5b8063395093511161027a57806339509351146105995780633bd5d173146105b95780633ddf65ab146105d9578063401aa5c0146105f957600080fd5b80632dd5efe714610537578063313ce567146105575780633685d4191461057957600080fd5b806318160ddd1161030d5780632691bc80116102e75780632691bc80146104b757806328a23cd1146104d75780632d4103d6146104f75780632d8381191461051757600080fd5b806318160ddd146104605780631e89d5451461047557806323b872dd1461049757600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103ab5780630f3a325f146103db57806313114a9d146104135780631694505e1461042857600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660155481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a45565b60405161038091906132be565b3480156103b757600080fd5b506103cb6103c6366004613324565b610ad7565b6040519015158152602001610380565b3480156103e757600080fd5b506103cb6103f6366004613350565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561041f57600080fd5b50600854610376565b34801561043457600080fd5b50601954610448906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561046c57600080fd5b50600654610376565b34801561048157600080fd5b506104956104903660046133b9565b610aee565b005b3480156104a357600080fd5b506103cb6104b2366004613425565b610d28565b3480156104c357600080fd5b506016546103cb9062010000900460ff1681565b3480156104e357600080fd5b506104956104f2366004613466565b610d91565b34801561050357600080fd5b506104956105123660046134ad565b610ea3565b34801561052357600080fd5b506103766105323660046134cb565b610f28565b34801561054357600080fd5b50610495610552366004613350565b610fac565b34801561056357600080fd5b5060035460405160ff9091168152602001610380565b34801561058557600080fd5b50610495610594366004613350565b610ffa565b3480156105a557600080fd5b506103cb6105b4366004613324565b6111ac565b3480156105c557600080fd5b506104956105d43660046134cb565b6111e2565b3480156105e557600080fd5b506104956105f43660046134e4565b6112cc565b34801561060557600080fd5b50610376600c5481565b34801561061b57600080fd5b5061049561062a366004613501565b611314565b34801561063b57600080fd5b5061037661064a36600461352d565b61136e565b34801561065b57600080fd5b50601a54610448906001600160a01b031681565b34801561067b57600080fd5b5061049561068a366004613501565b6113fb565b34801561069b57600080fd5b506104956106aa366004613350565b611433565b3480156106bb57600080fd5b506104956106ca366004613552565b61151d565b3480156106db57600080fd5b506104956106ea3660046135a9565b6115b6565b3480156106fb57600080fd5b5061037661070a366004613350565b611736565b34801561071b57600080fd5b50610495611795565b34801561073057600080fd5b5061049561073f3660046135f5565b611809565b34801561075057600080fd5b50610376600b5481565b34801561076657600080fd5b50610495610775366004613350565b6118a8565b34801561078657600080fd5b50610376600f5481565b34801561079c57600080fd5b5061037660095481565b3480156107b257600080fd5b506104956107c13660046135f5565b611907565b3480156107d257600080fd5b50610376600d5481565b3480156107e857600080fd5b506103cb6107f7366004613350565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561082157600080fd5b506000546001600160a01b0316610448565b34801561083f57600080fd5b5061049561084e366004613637565b6119a1565b34801561085f57600080fd5b5061039e6119eb565b34801561087457600080fd5b506103cb610883366004613324565b6119fa565b34801561089457600080fd5b506103cb6108a3366004613324565b611a49565b3480156108b457600080fd5b506104956108c33660046134cb565b611a56565b3480156108d457600080fd5b5061037660055481565b3480156108ea57600080fd5b50610376600a5481565b34801561090057600080fd5b5061037661090f366004613466565b6001600160a01b039182166000908152601f6020908152604080832093909416825291909152205490565b34801561094657600080fd5b50610495610955366004613350565b611aa7565b34801561096657600080fd5b50610495610975366004613350565b611af3565b34801561098657600080fd5b50610495610995366004613350565b611b3e565b3480156109a657600080fd5b506104956109b5366004613350565b611e6a565b3480156109c657600080fd5b506104956109d5366004613350565b611eb8565b3480156109e657600080fd5b50610376600e5481565b3480156109fc57600080fd5b50610495610a0b3660046134e4565b611fa2565b348015610a1c57600080fd5b5061037660045481565b348015610a3257600080fd5b506016546103cb90610100900460ff1681565b606060178054610a5490613659565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8090613659565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050905090565b6000610ae4338484611fe8565b5060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b1890613693565b60405180910390fd5b6103218310610b885760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b18565b828114610be85760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b18565b6000805b84811015610c4657600354610c059060ff16600a6137c2565b848483818110610c1757610c176137d1565b90506020020135610c2891906137e7565b610c3290836137fe565b915080610c3e81613811565b915050610bec565b5080610c5133611736565b1015610c9f5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b84811015610d2057610d0e33878784818110610cc057610cc06137d1565b9050602002016020810190610cd59190613350565b600354610ce69060ff16600a6137c2565b878786818110610cf857610cf86137d1565b90506020020135610d0991906137e7565b61210c565b80610d1881613811565b915050610ca2565b505050505050565b6000610d3584848461210c565b610d878433610d8285604051806060016040528060288152602001613998602891396001600160a01b038a166000908152601f602090815260408083203384529091529020549190612650565b611fe8565b5060019392505050565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610b1890613693565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e26919061382a565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d9190613843565b50505050565b6000546001600160a01b03163314610ecd5760405162461bcd60e51b8152600401610b1890613693565b6016805461ff00191661010084151502179055610ee930611433565b601a54610efe906001600160a01b0316611433565b601654610100900460ff168015610f155750600554155b15610f24574360055560048190555b5050565b6000600754821115610f8f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b18565b6000610f9961268a565b9050610fa583826126ad565b9392505050565b6000546001600160a01b03163314610fd65760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000546001600160a01b031633146110245760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b03811660009081526023602052604090205460ff1661108c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b18565b60005b602554811015610f2457816001600160a01b0316602582815481106110b6576110b66137d1565b6000918252602090912001546001600160a01b03160361119a57602580546110e090600190613860565b815481106110f0576110f06137d1565b600091825260209091200154602580546001600160a01b03909216918390811061111c5761111c6137d1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff19169055602580548061117457611174613873565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111a481613811565b91505061108f565b336000818152601f602090815260408083206001600160a01b03871684529091528120549091610ae4918590610d8290866126ef565b3360008181526023602052604090205460ff16156112575760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b18565b60006112628361274e565b505050506001600160a01b0384166000908152601d602052604090205491925061128e9190508261279d565b6001600160a01b0383166000908152601d60205260409020556007546112b4908261279d565b6007556008546112c490846126ef565b600855505050565b6000546001600160a01b031633146112f65760405162461bcd60e51b8152600401610b1890613693565b6016805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b0316331461133e5760405162461bcd60e51b8152600401610b1890613693565b600a829055600b819055600c83905560128390556010829055601181905561136682826126ef565b601355505050565b60006006548311156113c25760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b18565b816113e15760006113d28461274e565b50939550610ae8945050505050565b60006113ec8461274e565b50929550610ae8945050505050565b6000546001600160a01b031633146114255760405162461bcd60e51b8152600401610b1890613693565b600d91909155600e55600f55565b6000546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b0381166000908152601d6020526040902054156114b7576001600160a01b0381166000908152601d602052604090205461149d90610f28565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b031633146115475760405162461bcd60e51b8152600401610b1890613693565b60005b82811015610e9d578160206000868685818110611569576115696137d1565b905060200201602081019061157e9190613350565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115af81613811565b905061154a565b6000546001600160a01b031633146115e05760405162461bcd60e51b8152600401610b1890613693565b6107d182106116485760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b18565b600354600090839061165e9060ff16600a6137c2565b61166890846137e7565b61167291906137e7565b90508061167e33611736565b10156116cc5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b8381101561172f5761171d338686848181106116ed576116ed6137d1565b90506020020160208101906117029190613350565b6003546117139060ff16600a6137c2565b610d0990876137e7565b8061172781613811565b9150506116cf565b5050505050565b6001600160a01b03811660009081526023602052604081205460ff161561177357506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d6020526040902054610ae890610f28565b6000546001600160a01b031633146117bf5760405162461bcd60e51b8152600401610b1890613693565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118335760405162461bcd60e51b8152600401610b1890613693565b60005b818110156118a357600160216000858585818110611856576118566137d1565b905060200201602081019061186b9190613350565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561189c81613811565b9050611836565b505050565b6000546001600160a01b031633146118d25760405162461bcd60e51b8152600401610b1890613693565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f24573d6000803e3d6000fd5b6000546001600160a01b031633146119315760405162461bcd60e51b8152600401610b1890613693565b60005b818110156118a357600160246000858585818110611954576119546137d1565b90506020020160208101906119699190613350565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561199a81613811565b9050611934565b6000546001600160a01b031633146119cb5760405162461bcd60e51b8152600401610b1890613693565b80826006546119da91906137e7565b6119e49190613889565b6015555050565b606060188054610a5490613659565b6000610ae43384610d82856040518060600160405280602581526020016139c060259139336000908152601f602090815260408083206001600160a01b038d1684529091529020549190612650565b6000610ae433848461210c565b6000546001600160a01b03163314611a805760405162461bcd60e51b8152600401610b1890613693565b611aa181611a9b6103e86006546126ad90919063ffffffff16565b906127df565b60095550565b6000546001600160a01b03163314611ad15760405162461bcd60e51b8152600401610b1890613693565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b1d5760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b03163314611b685760405162461bcd60e51b8152600401610b1890613693565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd191906138ab565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4291906138ab565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb191906138ab565b90506001600160a01b038116611e2a57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2391906138ab565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9491906138ab565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0591906138ab565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611e46565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611e945760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6000546001600160a01b03163314611ee25760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b038116611f475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fcc5760405162461bcd60e51b8152600401610b1890613693565b60168054911515620100000262ff000019909216919091179055565b6001600160a01b03831661204a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b18565b6001600160a01b0382166120ab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b18565b6001600160a01b038381166000818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121705760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b18565b6001600160a01b0382166121d25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b18565b600081116122345760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b18565b6001600160a01b038216600090815260208052604090205460ff16156122895760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6001600160a01b038316600090815260208052604090205460ff16156122de5760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6000546001600160a01b0384811691161480159061230a57506000546001600160a01b03838116911614155b1561236657601654610100900460ff166123665760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b18565b601a546000906001600160a01b03858116911614806123925750601a546001600160a01b038481169116145b80156123da57506001600160a01b03841660009081526021602052604090205460ff16806123d857506001600160a01b03831660009081526021602052604090205460ff165b155b156123e3575060015b600060055411801561242757506001600160a01b03831660009081526022602052604090205460ff1615801561242757506000546001600160a01b03858116911614155b801561244157504360045460055461243f91906137fe565b115b156124b55760095461245284611736565b61245c90846137fe565b11156124b55760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b18565b601354601455600c54601255601654610100900460ff1680156124e55750601a546001600160a01b038481169116145b1561250357600e54600d546124f9916126ef565b601455600f546012555b600060055411801561252357504360045460055461252191906137fe565b115b1561254b576001600160a01b03831660009081526020805260409020805460ff191660011790555b600060055411801561256b57506000546001600160a01b03858116911614155b8015612586575060045460055461258291906137fe565b4311155b801561259b57506016546301000000900460ff165b156125a7576103b66014555b60165462010000900460ff16156125e757601654610100900460ff1680156125dc5750601a546001600160a01b038581169116145b156125e75760006014555b60165460ff161580156126015750601654610100900460ff165b801561261a5750601a546001600160a01b038481169116145b1561264457600061262a30611736565b90506015548110612642575060155461264281612861565b505b610e9d8484848461294d565b600081848411156126745760405162461bcd60e51b8152600401610b1891906132be565b5060006126818486613860565b95945050505050565b6000806000612697612a79565b90925090506126a682826126ad565b9250505090565b6000610fa583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bfb565b6000806126fc83856137fe565b905083811015610fa55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b60008060008060008060008060006127658a612c29565b92509250925060008060006127838d868661277e61268a565b612c6b565b919f909e50909c50959a5093985091965092945050505050565b6000610fa583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612650565b6000826000036127f157506000610ae8565b60006127fd83856137e7565b90508261280a8583613889565b14610fa55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b6016805460ff191660011790556013546010546000916128919160029161288b91829087906127df565b906126ad565b9050600061289f838361279d565b90506128aa81612cbb565b60105447906000906128ca906128c19060026126ad565b6013549061279d565b905060006128ec600261288b8461288b601054886127df90919063ffffffff16565b905060006129098361288b601154876127df90919063ffffffff16565b905047801561292957601b546129299083906001600160a01b0316612e4e565b8615612939576129398784612e84565b50506016805460ff19169055505050505050565b6012546014548261296357600060128190556014555b6001600160a01b03861660009081526023602052604090205460ff1680156129a457506001600160a01b03851660009081526023602052604090205460ff16155b156129b9576129b4868686612f52565b612a65565b6001600160a01b03861660009081526023602052604090205460ff161580156129fa57506001600160a01b03851660009081526023602052604090205460ff165b15612a0a576129b4868686613078565b6001600160a01b03861660009081526023602052604090205460ff168015612a4a57506001600160a01b03851660009081526023602052604090205460ff165b15612a5a576129b4868686613121565b612a65868686613194565b82610d205760129190915560145550505050565b6007546006546000918291825b602554811015612bcb5782601d600060258481548110612aa857612aa86137d1565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b13575081601e600060258481548110612aec57612aec6137d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b2957600754600654945094505050509091565b612b6f601d600060258481548110612b4357612b436137d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061279d565b9250612bb7601e600060258481548110612b8b57612b8b6137d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061279d565b915080612bc381613811565b915050612a86565b50600654600754612bdb916126ad565b821015612bf2576007546006549350935050509091565b90939092509050565b60008183612c1c5760405162461bcd60e51b8152600401610b1891906132be565b5060006126818486613889565b600080600080612c38856131d8565b90506000612c45866131f5565b90506000612c5d82612c57898661279d565b9061279d565b979296509094509092505050565b6000808080612c7a88866127df565b90506000612c8888876127df565b90506000612c9688886127df565b90506000612ca882612c57868661279d565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612cf057612cf06137d1565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6d91906138ab565b81600181518110612d8057612d806137d1565b6001600160a01b039283166020918202929092010152601954612da69130911684611fe8565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ddf90859060009086903090429060040161390c565b600060405180830381600087803b158015612df957600080fd5b505af1158015612e0d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e42929190613948565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156118a3573d6000803e3d6000fd5b601954612e9c9030906001600160a01b031684611fe8565b6019546001600160a01b031663f305d719823085600080612ec56000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612f2d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061172f9190613969565b600080600080600080612f648761274e565b6001600160a01b038f166000908152601e6020526040902054959b50939950919750955093509150612f96908861279d565b6001600160a01b038a166000908152601e6020908152604080832093909355601d90522054612fc5908761279d565b6001600160a01b03808b166000908152601d602052604080822093909355908a1681522054612ff490866126ef565b6001600160a01b0389166000908152601d602052604090205561301681613212565b613020848361329a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161306591815260200190565b60405180910390a3505050505050505050565b60008060008060008061308a8761274e565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506130bc908761279d565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e90915220546130f290846126ef565b6001600160a01b0389166000908152601e6020908152604080832093909355601d90522054612ff490866126ef565b6000806000806000806131338761274e565b6001600160a01b038f166000908152601e6020526040902054959b50939950919750955093509150613165908861279d565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546130bc908761279d565b6000806000806000806131a68761274e565b6001600160a01b038f166000908152601d6020526040902054959b50939950919750955093509150612fc5908761279d565b6000610ae86103e861288b601254856127df90919063ffffffff16565b6000610ae86103e861288b601454856127df90919063ffffffff16565b600061321c61268a565b9050600061322a83836127df565b306000908152601d602052604090205490915061324790826126ef565b306000908152601d602090815260408083209390935560239052205460ff16156118a357306000908152601e602052604090205461328590846126ef565b306000908152601e6020526040902055505050565b6007546132a7908361279d565b6007556008546132b790826126ef565b6008555050565b600060208083528351808285015260005b818110156132eb578581018301518582016040015282016132cf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461332157600080fd5b50565b6000806040838503121561333757600080fd5b82356133428161330c565b946020939093013593505050565b60006020828403121561336257600080fd5b8135610fa58161330c565b60008083601f84011261337f57600080fd5b50813567ffffffffffffffff81111561339757600080fd5b6020830191508360208260051b85010111156133b257600080fd5b9250929050565b600080600080604085870312156133cf57600080fd5b843567ffffffffffffffff808211156133e757600080fd5b6133f38883890161336d565b9096509450602087013591508082111561340c57600080fd5b506134198782880161336d565b95989497509550505050565b60008060006060848603121561343a57600080fd5b83356134458161330c565b925060208401356134558161330c565b929592945050506040919091013590565b6000806040838503121561347957600080fd5b82356134848161330c565b915060208301356134948161330c565b809150509250929050565b801515811461332157600080fd5b600080604083850312156134c057600080fd5b82356133428161349f565b6000602082840312156134dd57600080fd5b5035919050565b6000602082840312156134f657600080fd5b8135610fa58161349f565b60008060006060848603121561351657600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561354057600080fd5b8235915060208301356134948161349f565b60008060006040848603121561356757600080fd5b833567ffffffffffffffff81111561357e57600080fd5b61358a8682870161336d565b909450925050602084013561359e8161349f565b809150509250925092565b6000806000604084860312156135be57600080fd5b833567ffffffffffffffff8111156135d557600080fd5b6135e18682870161336d565b909790965060209590950135949350505050565b6000806020838503121561360857600080fd5b823567ffffffffffffffff81111561361f57600080fd5b61362b8582860161336d565b90969095509350505050565b6000806040838503121561364a57600080fd5b50508035926020909101359150565b600181811c9082168061366d57607f821691505b60208210810361368d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156137195781600019048211156136ff576136ff6136c8565b8085161561370c57918102915b93841c93908002906136e3565b509250929050565b60008261373057506001610ae8565b8161373d57506000610ae8565b8160018114613753576002811461375d57613779565b6001915050610ae8565b60ff84111561376e5761376e6136c8565b50506001821b610ae8565b5060208310610133831016604e8410600b841016171561379c575081810a610ae8565b6137a683836136de565b80600019048211156137ba576137ba6136c8565b029392505050565b6000610fa560ff841683613721565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610ae857610ae86136c8565b80820180821115610ae857610ae86136c8565b600060018201613823576138236136c8565b5060010190565b60006020828403121561383c57600080fd5b5051919050565b60006020828403121561385557600080fd5b8151610fa58161349f565b81810381811115610ae857610ae86136c8565b634e487b7160e01b600052603160045260246000fd5b6000826138a657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156138bd57600080fd5b8151610fa58161330c565b600081518084526020808501945080840160005b838110156139015781516001600160a01b0316875295820195908201906001016138dc565b509495945050505050565b85815284602082015260a06040820152600061392b60a08301866138c8565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061396160408301846138c8565b949350505050565b60008060006060848603121561397e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e19925482332da1e670b2d0b71b687e0246f378e29d7ae88ce7379d9e743bd1464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806370a08231116101c6578063a9059cbb116100f7578063eafb5a3c11610095578063f3b1e83b1161006f578063f3b1e83b146109da578063f9a69ed6146109f0578063fabb0b4f14610a10578063ffb54a9914610a2657600080fd5b8063eafb5a3c1461097a578063f259c57b1461099a578063f2fde38b146109ba57600080fd5b8063dc44b6a0116100d1578063dc44b6a0146108de578063dd62ed3e146108f4578063deaa59df1461093a578063ea2f0b371461095a57600080fd5b8063a9059cbb14610888578063afb8865e146108a8578063bf56b371146108c857600080fd5b806384530c46116101645780638da5cb5b1161013e5780638da5cb5b146108155780638f4590d21461083357806395d89b4114610853578063a457c2d71461086857600080fd5b806384530c46146107a657806388790a68146107c657806388f82020146107dc57600080fd5b806372fdf6ee116101a057806372fdf6ee14610744578063743942b61461075a5780637598f8bc1461077a57806378109e541461079057600080fd5b806370a08231146106ef578063715018a61461070f57806371b9189c1461072457600080fd5b80632dd5efe7116102a057806343b127a61161023e5780634eeaf458116102185780634eeaf4581461066f57806352390c021461068f5780635d54c0af146106af578063632e5442146106cf57600080fd5b806343b127a61461060f5780634549b0391461062f57806349bd5a5e1461064f57600080fd5b8063395093511161027a57806339509351146105995780633bd5d173146105b95780633ddf65ab146105d9578063401aa5c0146105f957600080fd5b80632dd5efe714610537578063313ce567146105575780633685d4191461057957600080fd5b806318160ddd1161030d5780632691bc80116102e75780632691bc80146104b757806328a23cd1146104d75780632d4103d6146104f75780632d8381191461051757600080fd5b806318160ddd146104605780631e89d5451461047557806323b872dd1461049757600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103ab5780630f3a325f146103db57806313114a9d146104135780631694505e1461042857600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660155481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a45565b60405161038091906132be565b3480156103b757600080fd5b506103cb6103c6366004613324565b610ad7565b6040519015158152602001610380565b3480156103e757600080fd5b506103cb6103f6366004613350565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561041f57600080fd5b50600854610376565b34801561043457600080fd5b50601954610448906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561046c57600080fd5b50600654610376565b34801561048157600080fd5b506104956104903660046133b9565b610aee565b005b3480156104a357600080fd5b506103cb6104b2366004613425565b610d28565b3480156104c357600080fd5b506016546103cb9062010000900460ff1681565b3480156104e357600080fd5b506104956104f2366004613466565b610d91565b34801561050357600080fd5b506104956105123660046134ad565b610ea3565b34801561052357600080fd5b506103766105323660046134cb565b610f28565b34801561054357600080fd5b50610495610552366004613350565b610fac565b34801561056357600080fd5b5060035460405160ff9091168152602001610380565b34801561058557600080fd5b50610495610594366004613350565b610ffa565b3480156105a557600080fd5b506103cb6105b4366004613324565b6111ac565b3480156105c557600080fd5b506104956105d43660046134cb565b6111e2565b3480156105e557600080fd5b506104956105f43660046134e4565b6112cc565b34801561060557600080fd5b50610376600c5481565b34801561061b57600080fd5b5061049561062a366004613501565b611314565b34801561063b57600080fd5b5061037661064a36600461352d565b61136e565b34801561065b57600080fd5b50601a54610448906001600160a01b031681565b34801561067b57600080fd5b5061049561068a366004613501565b6113fb565b34801561069b57600080fd5b506104956106aa366004613350565b611433565b3480156106bb57600080fd5b506104956106ca366004613552565b61151d565b3480156106db57600080fd5b506104956106ea3660046135a9565b6115b6565b3480156106fb57600080fd5b5061037661070a366004613350565b611736565b34801561071b57600080fd5b50610495611795565b34801561073057600080fd5b5061049561073f3660046135f5565b611809565b34801561075057600080fd5b50610376600b5481565b34801561076657600080fd5b50610495610775366004613350565b6118a8565b34801561078657600080fd5b50610376600f5481565b34801561079c57600080fd5b5061037660095481565b3480156107b257600080fd5b506104956107c13660046135f5565b611907565b3480156107d257600080fd5b50610376600d5481565b3480156107e857600080fd5b506103cb6107f7366004613350565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561082157600080fd5b506000546001600160a01b0316610448565b34801561083f57600080fd5b5061049561084e366004613637565b6119a1565b34801561085f57600080fd5b5061039e6119eb565b34801561087457600080fd5b506103cb610883366004613324565b6119fa565b34801561089457600080fd5b506103cb6108a3366004613324565b611a49565b3480156108b457600080fd5b506104956108c33660046134cb565b611a56565b3480156108d457600080fd5b5061037660055481565b3480156108ea57600080fd5b50610376600a5481565b34801561090057600080fd5b5061037661090f366004613466565b6001600160a01b039182166000908152601f6020908152604080832093909416825291909152205490565b34801561094657600080fd5b50610495610955366004613350565b611aa7565b34801561096657600080fd5b50610495610975366004613350565b611af3565b34801561098657600080fd5b50610495610995366004613350565b611b3e565b3480156109a657600080fd5b506104956109b5366004613350565b611e6a565b3480156109c657600080fd5b506104956109d5366004613350565b611eb8565b3480156109e657600080fd5b50610376600e5481565b3480156109fc57600080fd5b50610495610a0b3660046134e4565b611fa2565b348015610a1c57600080fd5b5061037660045481565b348015610a3257600080fd5b506016546103cb90610100900460ff1681565b606060178054610a5490613659565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8090613659565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050905090565b6000610ae4338484611fe8565b5060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b1890613693565b60405180910390fd5b6103218310610b885760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b18565b828114610be85760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b18565b6000805b84811015610c4657600354610c059060ff16600a6137c2565b848483818110610c1757610c176137d1565b90506020020135610c2891906137e7565b610c3290836137fe565b915080610c3e81613811565b915050610bec565b5080610c5133611736565b1015610c9f5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b84811015610d2057610d0e33878784818110610cc057610cc06137d1565b9050602002016020810190610cd59190613350565b600354610ce69060ff16600a6137c2565b878786818110610cf857610cf86137d1565b90506020020135610d0991906137e7565b61210c565b80610d1881613811565b915050610ca2565b505050505050565b6000610d3584848461210c565b610d878433610d8285604051806060016040528060288152602001613998602891396001600160a01b038a166000908152601f602090815260408083203384529091529020549190612650565b611fe8565b5060019392505050565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610b1890613693565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e26919061382a565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d9190613843565b50505050565b6000546001600160a01b03163314610ecd5760405162461bcd60e51b8152600401610b1890613693565b6016805461ff00191661010084151502179055610ee930611433565b601a54610efe906001600160a01b0316611433565b601654610100900460ff168015610f155750600554155b15610f24574360055560048190555b5050565b6000600754821115610f8f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b18565b6000610f9961268a565b9050610fa583826126ad565b9392505050565b6000546001600160a01b03163314610fd65760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000546001600160a01b031633146110245760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b03811660009081526023602052604090205460ff1661108c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b18565b60005b602554811015610f2457816001600160a01b0316602582815481106110b6576110b66137d1565b6000918252602090912001546001600160a01b03160361119a57602580546110e090600190613860565b815481106110f0576110f06137d1565b600091825260209091200154602580546001600160a01b03909216918390811061111c5761111c6137d1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff19169055602580548061117457611174613873565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111a481613811565b91505061108f565b336000818152601f602090815260408083206001600160a01b03871684529091528120549091610ae4918590610d8290866126ef565b3360008181526023602052604090205460ff16156112575760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b18565b60006112628361274e565b505050506001600160a01b0384166000908152601d602052604090205491925061128e9190508261279d565b6001600160a01b0383166000908152601d60205260409020556007546112b4908261279d565b6007556008546112c490846126ef565b600855505050565b6000546001600160a01b031633146112f65760405162461bcd60e51b8152600401610b1890613693565b6016805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b0316331461133e5760405162461bcd60e51b8152600401610b1890613693565b600a829055600b819055600c83905560128390556010829055601181905561136682826126ef565b601355505050565b60006006548311156113c25760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b18565b816113e15760006113d28461274e565b50939550610ae8945050505050565b60006113ec8461274e565b50929550610ae8945050505050565b6000546001600160a01b031633146114255760405162461bcd60e51b8152600401610b1890613693565b600d91909155600e55600f55565b6000546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b0381166000908152601d6020526040902054156114b7576001600160a01b0381166000908152601d602052604090205461149d90610f28565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b031633146115475760405162461bcd60e51b8152600401610b1890613693565b60005b82811015610e9d578160206000868685818110611569576115696137d1565b905060200201602081019061157e9190613350565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115af81613811565b905061154a565b6000546001600160a01b031633146115e05760405162461bcd60e51b8152600401610b1890613693565b6107d182106116485760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b18565b600354600090839061165e9060ff16600a6137c2565b61166890846137e7565b61167291906137e7565b90508061167e33611736565b10156116cc5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b8381101561172f5761171d338686848181106116ed576116ed6137d1565b90506020020160208101906117029190613350565b6003546117139060ff16600a6137c2565b610d0990876137e7565b8061172781613811565b9150506116cf565b5050505050565b6001600160a01b03811660009081526023602052604081205460ff161561177357506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d6020526040902054610ae890610f28565b6000546001600160a01b031633146117bf5760405162461bcd60e51b8152600401610b1890613693565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118335760405162461bcd60e51b8152600401610b1890613693565b60005b818110156118a357600160216000858585818110611856576118566137d1565b905060200201602081019061186b9190613350565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561189c81613811565b9050611836565b505050565b6000546001600160a01b031633146118d25760405162461bcd60e51b8152600401610b1890613693565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f24573d6000803e3d6000fd5b6000546001600160a01b031633146119315760405162461bcd60e51b8152600401610b1890613693565b60005b818110156118a357600160246000858585818110611954576119546137d1565b90506020020160208101906119699190613350565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561199a81613811565b9050611934565b6000546001600160a01b031633146119cb5760405162461bcd60e51b8152600401610b1890613693565b80826006546119da91906137e7565b6119e49190613889565b6015555050565b606060188054610a5490613659565b6000610ae43384610d82856040518060600160405280602581526020016139c060259139336000908152601f602090815260408083206001600160a01b038d1684529091529020549190612650565b6000610ae433848461210c565b6000546001600160a01b03163314611a805760405162461bcd60e51b8152600401610b1890613693565b611aa181611a9b6103e86006546126ad90919063ffffffff16565b906127df565b60095550565b6000546001600160a01b03163314611ad15760405162461bcd60e51b8152600401610b1890613693565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b1d5760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b03163314611b685760405162461bcd60e51b8152600401610b1890613693565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd191906138ab565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4291906138ab565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb191906138ab565b90506001600160a01b038116611e2a57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2391906138ab565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9491906138ab565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0591906138ab565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611e46565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611e945760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6000546001600160a01b03163314611ee25760405162461bcd60e51b8152600401610b1890613693565b6001600160a01b038116611f475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fcc5760405162461bcd60e51b8152600401610b1890613693565b60168054911515620100000262ff000019909216919091179055565b6001600160a01b03831661204a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b18565b6001600160a01b0382166120ab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b18565b6001600160a01b038381166000818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121705760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b18565b6001600160a01b0382166121d25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b18565b600081116122345760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b18565b6001600160a01b038216600090815260208052604090205460ff16156122895760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6001600160a01b038316600090815260208052604090205460ff16156122de5760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6000546001600160a01b0384811691161480159061230a57506000546001600160a01b03838116911614155b1561236657601654610100900460ff166123665760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b18565b601a546000906001600160a01b03858116911614806123925750601a546001600160a01b038481169116145b80156123da57506001600160a01b03841660009081526021602052604090205460ff16806123d857506001600160a01b03831660009081526021602052604090205460ff165b155b156123e3575060015b600060055411801561242757506001600160a01b03831660009081526022602052604090205460ff1615801561242757506000546001600160a01b03858116911614155b801561244157504360045460055461243f91906137fe565b115b156124b55760095461245284611736565b61245c90846137fe565b11156124b55760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b18565b601354601455600c54601255601654610100900460ff1680156124e55750601a546001600160a01b038481169116145b1561250357600e54600d546124f9916126ef565b601455600f546012555b600060055411801561252357504360045460055461252191906137fe565b115b1561254b576001600160a01b03831660009081526020805260409020805460ff191660011790555b600060055411801561256b57506000546001600160a01b03858116911614155b8015612586575060045460055461258291906137fe565b4311155b801561259b57506016546301000000900460ff165b156125a7576103b66014555b60165462010000900460ff16156125e757601654610100900460ff1680156125dc5750601a546001600160a01b038581169116145b156125e75760006014555b60165460ff161580156126015750601654610100900460ff165b801561261a5750601a546001600160a01b038481169116145b1561264457600061262a30611736565b90506015548110612642575060155461264281612861565b505b610e9d8484848461294d565b600081848411156126745760405162461bcd60e51b8152600401610b1891906132be565b5060006126818486613860565b95945050505050565b6000806000612697612a79565b90925090506126a682826126ad565b9250505090565b6000610fa583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bfb565b6000806126fc83856137fe565b905083811015610fa55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b60008060008060008060008060006127658a612c29565b92509250925060008060006127838d868661277e61268a565b612c6b565b919f909e50909c50959a5093985091965092945050505050565b6000610fa583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612650565b6000826000036127f157506000610ae8565b60006127fd83856137e7565b90508261280a8583613889565b14610fa55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b6016805460ff191660011790556013546010546000916128919160029161288b91829087906127df565b906126ad565b9050600061289f838361279d565b90506128aa81612cbb565b60105447906000906128ca906128c19060026126ad565b6013549061279d565b905060006128ec600261288b8461288b601054886127df90919063ffffffff16565b905060006129098361288b601154876127df90919063ffffffff16565b905047801561292957601b546129299083906001600160a01b0316612e4e565b8615612939576129398784612e84565b50506016805460ff19169055505050505050565b6012546014548261296357600060128190556014555b6001600160a01b03861660009081526023602052604090205460ff1680156129a457506001600160a01b03851660009081526023602052604090205460ff16155b156129b9576129b4868686612f52565b612a65565b6001600160a01b03861660009081526023602052604090205460ff161580156129fa57506001600160a01b03851660009081526023602052604090205460ff165b15612a0a576129b4868686613078565b6001600160a01b03861660009081526023602052604090205460ff168015612a4a57506001600160a01b03851660009081526023602052604090205460ff165b15612a5a576129b4868686613121565b612a65868686613194565b82610d205760129190915560145550505050565b6007546006546000918291825b602554811015612bcb5782601d600060258481548110612aa857612aa86137d1565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b13575081601e600060258481548110612aec57612aec6137d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b2957600754600654945094505050509091565b612b6f601d600060258481548110612b4357612b436137d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061279d565b9250612bb7601e600060258481548110612b8b57612b8b6137d1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061279d565b915080612bc381613811565b915050612a86565b50600654600754612bdb916126ad565b821015612bf2576007546006549350935050509091565b90939092509050565b60008183612c1c5760405162461bcd60e51b8152600401610b1891906132be565b5060006126818486613889565b600080600080612c38856131d8565b90506000612c45866131f5565b90506000612c5d82612c57898661279d565b9061279d565b979296509094509092505050565b6000808080612c7a88866127df565b90506000612c8888876127df565b90506000612c9688886127df565b90506000612ca882612c57868661279d565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612cf057612cf06137d1565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6d91906138ab565b81600181518110612d8057612d806137d1565b6001600160a01b039283166020918202929092010152601954612da69130911684611fe8565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ddf90859060009086903090429060040161390c565b600060405180830381600087803b158015612df957600080fd5b505af1158015612e0d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e42929190613948565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156118a3573d6000803e3d6000fd5b601954612e9c9030906001600160a01b031684611fe8565b6019546001600160a01b031663f305d719823085600080612ec56000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612f2d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061172f9190613969565b600080600080600080612f648761274e565b6001600160a01b038f166000908152601e6020526040902054959b50939950919750955093509150612f96908861279d565b6001600160a01b038a166000908152601e6020908152604080832093909355601d90522054612fc5908761279d565b6001600160a01b03808b166000908152601d602052604080822093909355908a1681522054612ff490866126ef565b6001600160a01b0389166000908152601d602052604090205561301681613212565b613020848361329a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161306591815260200190565b60405180910390a3505050505050505050565b60008060008060008061308a8761274e565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506130bc908761279d565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e90915220546130f290846126ef565b6001600160a01b0389166000908152601e6020908152604080832093909355601d90522054612ff490866126ef565b6000806000806000806131338761274e565b6001600160a01b038f166000908152601e6020526040902054959b50939950919750955093509150613165908861279d565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546130bc908761279d565b6000806000806000806131a68761274e565b6001600160a01b038f166000908152601d6020526040902054959b50939950919750955093509150612fc5908761279d565b6000610ae86103e861288b601254856127df90919063ffffffff16565b6000610ae86103e861288b601454856127df90919063ffffffff16565b600061321c61268a565b9050600061322a83836127df565b306000908152601d602052604090205490915061324790826126ef565b306000908152601d602090815260408083209390935560239052205460ff16156118a357306000908152601e602052604090205461328590846126ef565b306000908152601e6020526040902055505050565b6007546132a7908361279d565b6007556008546132b790826126ef565b6008555050565b600060208083528351808285015260005b818110156132eb578581018301518582016040015282016132cf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461332157600080fd5b50565b6000806040838503121561333757600080fd5b82356133428161330c565b946020939093013593505050565b60006020828403121561336257600080fd5b8135610fa58161330c565b60008083601f84011261337f57600080fd5b50813567ffffffffffffffff81111561339757600080fd5b6020830191508360208260051b85010111156133b257600080fd5b9250929050565b600080600080604085870312156133cf57600080fd5b843567ffffffffffffffff808211156133e757600080fd5b6133f38883890161336d565b9096509450602087013591508082111561340c57600080fd5b506134198782880161336d565b95989497509550505050565b60008060006060848603121561343a57600080fd5b83356134458161330c565b925060208401356134558161330c565b929592945050506040919091013590565b6000806040838503121561347957600080fd5b82356134848161330c565b915060208301356134948161330c565b809150509250929050565b801515811461332157600080fd5b600080604083850312156134c057600080fd5b82356133428161349f565b6000602082840312156134dd57600080fd5b5035919050565b6000602082840312156134f657600080fd5b8135610fa58161349f565b60008060006060848603121561351657600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561354057600080fd5b8235915060208301356134948161349f565b60008060006040848603121561356757600080fd5b833567ffffffffffffffff81111561357e57600080fd5b61358a8682870161336d565b909450925050602084013561359e8161349f565b809150509250925092565b6000806000604084860312156135be57600080fd5b833567ffffffffffffffff8111156135d557600080fd5b6135e18682870161336d565b909790965060209590950135949350505050565b6000806020838503121561360857600080fd5b823567ffffffffffffffff81111561361f57600080fd5b61362b8582860161336d565b90969095509350505050565b6000806040838503121561364a57600080fd5b50508035926020909101359150565b600181811c9082168061366d57607f821691505b60208210810361368d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156137195781600019048211156136ff576136ff6136c8565b8085161561370c57918102915b93841c93908002906136e3565b509250929050565b60008261373057506001610ae8565b8161373d57506000610ae8565b8160018114613753576002811461375d57613779565b6001915050610ae8565b60ff84111561376e5761376e6136c8565b50506001821b610ae8565b5060208310610133831016604e8410600b841016171561379c575081810a610ae8565b6137a683836136de565b80600019048211156137ba576137ba6136c8565b029392505050565b6000610fa560ff841683613721565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610ae857610ae86136c8565b80820180821115610ae857610ae86136c8565b600060018201613823576138236136c8565b5060010190565b60006020828403121561383c57600080fd5b5051919050565b60006020828403121561385557600080fd5b8151610fa58161349f565b81810381811115610ae857610ae86136c8565b634e487b7160e01b600052603160045260246000fd5b6000826138a657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156138bd57600080fd5b8151610fa58161330c565b600081518084526020808501945080840160005b838110156139015781516001600160a01b0316875295820195908201906001016138dc565b509495945050505050565b85815284602082015260a06040820152600061392b60a08301866138c8565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061396160408301846138c8565b949350505050565b60008060006060848603121561397e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e19925482332da1e670b2d0b71b687e0246f378e29d7ae88ce7379d9e743bd1464736f6c63430008130033

Deployed Bytecode Sourcemap

14266:23660:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15357:57;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15357:57:0;;;;;;;;30230:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18326:161::-;;;;;;;;;;-1:-1:-1;18326:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;18326:161:0;1205:187:1;31413:106:0;;;;;;;;;;-1:-1:-1;31413:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;31493:18:0;31469:4;31493:18;;;:9;:18;;;;;;;;;31413:106;31655:87;;;;;;;;;;-1:-1:-1;31724:10:0;;31655:87;;15665:41;;;;;;;;;;-1:-1:-1;15665:41:0;;;;-1:-1:-1;;;;;15665:41:0;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;15665:41:0;1649:230:1;30507:95:0;;;;;;;;;;-1:-1:-1;30587:7:0;;30507:95;;35924:701;;;;;;;;;;-1:-1:-1;35924:701:0;;;;;:::i;:::-;;:::i;:::-;;17498:313;;;;;;;;;;-1:-1:-1;17498:313:0;;;;;:::i;:::-;;:::i;15487:34::-;;;;;;;;;;-1:-1:-1;15487:34:0;;;;;;;;;;;35262:171;;;;;;;;;;-1:-1:-1;35262:171:0;;;;;:::i;:::-;;:::i;33006:337::-;;;;;;;;;;-1:-1:-1;33006:337:0;;;;;:::i;:::-;;:::i;30826:253::-;;;;;;;;;;-1:-1:-1;30826:253:0;;;;;:::i;:::-;;:::i;35617:113::-;;;;;;;;;;-1:-1:-1;35617:113:0;;;;;:::i;:::-;;:::i;30416:83::-;;;;;;;;;;-1:-1:-1;30482:9:0;;30416:83;;30482:9;;;;4665:36:1;;4653:2;4638:18;30416:83:0;4523:184:1;32519:479:0;;;;;;;;;;-1:-1:-1;32519:479:0;;;;;:::i;:::-;;:::i;17819:218::-;;;;;;;;;;-1:-1:-1;17819:218:0;;;;;:::i;:::-;;:::i;18499:377::-;;;;;;;;;;-1:-1:-1;18499:377:0;;;;;:::i;:::-;;:::i;33464:96::-;;;;;;;;;;-1:-1:-1;33464:96:0;;;;;:::i;:::-;;:::i;14886:36::-;;;;;;;;;;;;;;;;37150:436;;;;;;;;;;-1:-1:-1;37150:436:0;;;;;:::i;:::-;;:::i;31750:::-;;;;;;;;;;-1:-1:-1;31750:436:0;;;;;:::i;:::-;;:::i;15713:28::-;;;;;;;;;;-1:-1:-1;15713:28:0;;;;-1:-1:-1;;;;;15713:28:0;;;37594:255;;;;;;;;;;-1:-1:-1;37594:255:0;;;;;:::i;:::-;;:::i;32250:261::-;;;;;;;;;;-1:-1:-1;32250:261:0;;;;;:::i;:::-;;:::i;34699:209::-;;;;;;;;;;-1:-1:-1;34699:209:0;;;;;:::i;:::-;;:::i;36633:509::-;;;;;;;;;;-1:-1:-1;36633:509:0;;;;;:::i;:::-;;:::i;30610:208::-;;;;;;;;;;-1:-1:-1;30610:208:0;;;;;:::i;:::-;;:::i;6027:148::-;;;;;;;;;;;;;:::i;34227:198::-;;;;;;;;;;-1:-1:-1;34227:198:0;;;;;:::i;:::-;;:::i;14840:36::-;;;;;;;;;;;;;;;;35119:135;;;;;;;;;;-1:-1:-1;35119:135:0;;;;;:::i;:::-;;:::i;15021:38::-;;;;;;;;;;;;;;;;14703:58;;;;;;;;;;;;;;;;34920:188;;;;;;;;;;-1:-1:-1;34920:188:0;;;;;:::i;:::-;;:::i;14931:36::-;;;;;;;;;;;;;;;;31527:120;;;;;;;;;;-1:-1:-1;31527:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31619:20:0;31595:4;31619:20;;;:11;:20;;;;;;;;;31527:120;5802:79;;;;;;;;;;-1:-1:-1;5840:7:0;5867:6;-1:-1:-1;;;;;5867:6:0;5802:79;;35738:178;;;;;;;;;;-1:-1:-1;35738:178:0;;;;;:::i;:::-;;:::i;30321:87::-;;;;;;;;;;;;;:::i;18045:269::-;;;;;;;;;;-1:-1:-1;18045:269:0;;;;;:::i;:::-;;:::i;31087:167::-;;;;;;;;;;-1:-1:-1;31087:167:0;;;;;:::i;:::-;;:::i;35441:168::-;;;;;;;;;;-1:-1:-1;35441:168:0;;;;;:::i;:::-;;:::i;14464:29::-;;;;;;;;;;;;;;;;14794:35;;;;;;;;;;;;;;;;31262:143;;;;;;;;;;-1:-1:-1;31262:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31370:18:0;;;31343:7;31370:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31262:143;34559:128;;;;;;;;;;-1:-1:-1;34559:128:0;;;;;:::i;:::-;;:::i;34437:110::-;;;;;;;;;;-1:-1:-1;34437:110:0;;;;;:::i;:::-;;:::i;33572:523::-;;;;;;;;;;-1:-1:-1;33572:523:0;;;;;:::i;:::-;;:::i;34107:112::-;;;;;;;;;;-1:-1:-1;34107:112:0;;;;;:::i;:::-;;:::i;6183:244::-;;;;;;;;;;-1:-1:-1;6183:244:0;;;;;:::i;:::-;;:::i;14975:37::-;;;;;;;;;;;;;;;;33355:101;;;;;;;;;;-1:-1:-1;33355:101:0;;;;;:::i;:::-;;:::i;14428:29::-;;;;;;;;;;;;;;;;15449:31;;;;;;;;;;-1:-1:-1;15449:31:0;;;;;;;;;;;30230:83;30267:13;30300:5;30293:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30230:83;:::o;18326:161::-;18401:4;18418:39;190:10;18441:7;18450:6;18418:8;:39::i;:::-;-1:-1:-1;18475:4:0;18326:161;;;;;:::o;35924:701::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;;;;;;;;;36064:3:::1;36045:22:::0;::::1;36037:79;;;::::0;-1:-1:-1;;;36037:79:0;;9178:2:1;36037:79:0::1;::::0;::::1;9160:21:1::0;9217:2;9197:18;;;9190:30;9256:34;9236:18;;;9229:62;-1:-1:-1;;;9307:18:1;;;9300:43;9360:19;;36037:79:0::1;8976:409:1::0;36037:79:0::1;36158:33:::0;;::::1;36150:85;;;::::0;-1:-1:-1;;;36150:85:0;;9592:2:1;36150:85:0::1;::::0;::::1;9574:21:1::0;9631:2;9611:18;;;9604:30;9670:34;9650:18;;;9643:62;-1:-1:-1;;;9721:18:1;;;9714:38;9769:19;;36150:85:0::1;9390:404:1::0;36150:85:0::1;36248:12;36281:6:::0;36277:108:::1;36291:20:::0;;::::1;36277:108;;;36363:9;::::0;36359:13:::1;::::0;36363:9:::1;;36359:2;:13;:::i;:::-;36347:6;;36354:1;36347:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36339:34;::::0;:4;:34:::1;:::i;:::-;36332:41:::0;-1:-1:-1;36313:3:0;::::1;::::0;::::1;:::i;:::-;;;;36277:108;;;;36430:4;36405:21;36415:10;36405:9;:21::i;:::-;:29;;36397:69;;;::::0;-1:-1:-1;;;36397:69:0;;12091:2:1;36397:69:0::1;::::0;::::1;12073:21:1::0;12130:2;12110:18;;;12103:30;12169:29;12149:18;;;12142:57;12216:18;;36397:69:0::1;11889:351:1::0;36397:69:0::1;36483:6;36479:139;36493:20:::0;;::::1;36479:139;;;36534:62;36544:10;36555:9;;36565:1;36555:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36585:9;::::0;36581:13:::1;::::0;36585:9:::1;;36581:2;:13;:::i;:::-;36569:6;;36576:1;36569:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36534:9;:62::i;:::-;36515:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36479:139;;;;36024:601;35924:701:::0;;;;:::o;17498:313::-;17596:4;17613:36;17623:6;17631:9;17642:6;17613:9;:36::i;:::-;17660:121;17669:6;190:10;17691:89;17729:6;17691:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17691:19:0;;;;;;:11;:19;;;;;;;;190:10;17691:33;;;;;;;;;;:37;:89::i;:::-;17660:8;:121::i;:::-;-1:-1:-1;17799:4:0;17498:313;;;;;:::o;35262:171::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35357:30:::1;::::0;-1:-1:-1;;;35357:30:0;;35381:4:::1;35357:30;::::0;::::1;1822:51:1::0;35339:15:0::1;::::0;-1:-1:-1;;;;;35357:15:0;::::1;::::0;::::1;::::0;1795:18:1;;35357:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35398:27;::::0;-1:-1:-1;;;35398:27:0;;-1:-1:-1;;;;;12626:32:1;;;35398:27:0::1;::::0;::::1;12608:51:1::0;12675:18;;;12668:34;;;35339:48:0;;-1:-1:-1;35398:14:0;;::::1;::::0;::::1;::::0;12581:18:1;;35398:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35328:105;35262:171:::0;;:::o;33006:337::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;33093:11:::1;:21:::0;;-1:-1:-1;;33093:21:0::1;;::::0;::::1;;;;::::0;;33125:32:::1;33151:4;33125:17;:32::i;:::-;33186:13;::::0;33168:32:::1;::::0;-1:-1:-1;;;;;33186:13:0::1;33168:17;:32::i;:::-;33214:11;::::0;::::1;::::0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;33229:10:0::1;::::0;:15;33214:30:::1;33211:125;;;33273:12;33260:10;:25:::0;33300:10:::1;:24:::0;;;33211:125:::1;33006:337:::0;;:::o;30826:253::-;30892:7;30931;;30920;:18;;30912:73;;;;-1:-1:-1;;;30912:73:0;;13165:2:1;30912:73:0;;;13147:21:1;13204:2;13184:18;;;13177:30;13243:34;13223:18;;;13216:62;-1:-1:-1;;;13294:18:1;;;13287:40;13344:19;;30912:73:0;12963:406:1;30912:73:0;30996:19;31019:10;:8;:10::i;:::-;30996:33;-1:-1:-1;31047:24:0;:7;30996:33;31047:11;:24::i;:::-;31040:31;30826:253;-1:-1:-1;;;30826:253:0:o;35617:113::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35690:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;35690:32:0::1;35718:4;35690:32;::::0;;35617:113::o;32519:479::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32601:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32593:60;;;::::0;-1:-1:-1;;;32593:60:0;;13576:2:1;32593:60:0::1;::::0;::::1;13558:21:1::0;13615:2;13595:18;;;13588:30;13654:29;13634:18;;;13627:57;13701:18;;32593:60:0::1;13374:351:1::0;32593:60:0::1;32669:9;32664:327;32688:9;:16:::0;32684:20;::::1;32664:327;;;32746:7;-1:-1:-1::0;;;;;32730:23:0::1;:9;32740:1;32730:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32730:12:0::1;:23:::0;32726:254:::1;;32789:9;32799:16:::0;;:20:::1;::::0;32818:1:::1;::::0;32799:20:::1;:::i;:::-;32789:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32774:9:::1;:12:::0;;-1:-1:-1;;;;;32789:31:0;;::::1;::::0;32784:1;;32774:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32774:46:0::1;-1:-1:-1::0;;;;;32774:46:0;;::::1;;::::0;;32839:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32878:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32878:28:0::1;::::0;;32925:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32925:15:0;;;;;-1:-1:-1;;;;;;32925:15:0::1;::::0;;;;;33006:337;;:::o;32726:254::-:1;32706:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32664:327;;17819:218:::0;190:10;17907:4;17956:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17956:34:0;;;;;;;;;;17907:4;;17924:83;;17947:7;;17956:50;;17995:10;17956:38;:50::i;18499:377::-;190:10;18551:14;18600:19;;;:11;:19;;;;;;;;18599:20;18591:77;;;;-1:-1:-1;;;18591:77:0;;14197:2:1;18591:77:0;;;14179:21:1;14236:2;14216:18;;;14209:30;14275:34;14255:18;;;14248:62;-1:-1:-1;;;14326:18:1;;;14319:42;14378:19;;18591:77:0;13995:408:1;18591:77:0;18680:15;18704:19;18715:7;18704:10;:19::i;:::-;-1:-1:-1;;;;;;;;;18752:15:0;;;;;;:7;:15;;;;;;18679:44;;-1:-1:-1;18752:28:0;;:15;-1:-1:-1;18679:44:0;18752:19;:28::i;:::-;-1:-1:-1;;;;;18734:15:0;;;;;;:7;:15;;;;;:46;18801:7;;:20;;18813:7;18801:11;:20::i;:::-;18791:7;:30;18845:10;;:23;;18860:7;18845:14;:23::i;:::-;18832:10;:36;-1:-1:-1;;;18499:377:0:o;33464:96::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;33533:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33533:19:0;;::::1;::::0;;;::::1;::::0;;33464:96::o;37150:436::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;37281:16:::1;:33:::0;;;37325:16:::1;:33:::0;;;37369:17:::1;:34:::0;;;37416:13:::1;:30:::0;;;37457:12:::1;:29:::0;;;37497:12:::1;:29:::0;;;37548:30:::1;37300:14:::0;37344;37548:16:::1;:30::i;:::-;37537:8;:41:::0;-1:-1:-1;;;37150:436:0:o;31750:::-;31840:7;31879;;31868;:18;;31860:62;;;;-1:-1:-1;;;31860:62:0;;14610:2:1;31860:62:0;;;14592:21:1;14649:2;14629:18;;;14622:30;14688:33;14668:18;;;14661:61;14739:18;;31860:62:0;14408:355:1;31860:62:0;31938:17;31933:246;;31973:15;31997:19;32008:7;31997:10;:19::i;:::-;-1:-1:-1;31972:44:0;;-1:-1:-1;32031:14:0;;-1:-1:-1;;;;;32031:14:0;31933:246;32080:23;32111:19;32122:7;32111:10;:19::i;:::-;-1:-1:-1;32078:52:0;;-1:-1:-1;32145:22:0;;-1:-1:-1;;;;;32145:22:0;37594:255;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;37716:17:::1;:34:::0;;;;37761:17:::1;:34:::0;37806:18:::1;:35:::0;37594:255::o;32250:261::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32327:16:0;::::1;32346:1;32327:16:::0;;;:7:::1;:16;::::0;;;;;:20;32324:108:::1;;-1:-1:-1::0;;;;;32403:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32383:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32364:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32324:108:::1;-1:-1:-1::0;;;;;32442:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32442:27:0::1;32465:4;32442:27:::0;;::::1;::::0;;;32480:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32480:23:0::1;::::0;;::::1;::::0;;32250:261::o;34699:209::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;34799:9:::1;34794:107;34810:20:::0;;::::1;34794:107;;;34882:6;34856:9;:23;34866:9;;34876:1;34866:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34856:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34856:23:0;:32;;-1:-1:-1;;34856:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34832:3:::1;::::0;::::1;:::i;:::-;;;34794:107;;36633:509:::0;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;36768:4:::1;36749:23:::0;::::1;36741:81;;;::::0;-1:-1:-1;;;36741:81:0;;14970:2:1;36741:81:0::1;::::0;::::1;14952:21:1::0;15009:2;14989:18;;;14982:30;15048:34;15028:18;;;15021:62;-1:-1:-1;;;15099:18:1;;;15092:44;15153:19;;36741:81:0::1;14768:410:1::0;36741:81:0::1;36885:9;::::0;36858:12:::1;::::0;36897:9;;36881:13:::1;::::0;36885:9:::1;;36881:2;:13;:::i;:::-;36873:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;36858:55;;36959:4;36934:21;36944:10;36934:9;:21::i;:::-;:29;;36926:69;;;::::0;-1:-1:-1;;;36926:69:0;;12091:2:1;36926:69:0::1;::::0;::::1;12073:21:1::0;12130:2;12110:18;;;12103:30;12169:29;12149:18;;;12142:57;12216:18;;36926:69:0::1;11889:351:1::0;36926:69:0::1;37012:6;37008:127;37022:20:::0;;::::1;37008:127;;;37063:58;37073:10;37084:9;;37094:1;37084:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37110:9;::::0;37106:13:::1;::::0;37110:9:::1;;37106:2;:13;:::i;:::-;37098:21;::::0;:6;:21:::1;:::i;37063:58::-;37044:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37008:127;;;;36728:414;36633:509:::0;;;:::o;30610:208::-;-1:-1:-1;;;;;30700:20:0;;30676:7;30700:20;;;:11;:20;;;;;;;;30696:59;;;-1:-1:-1;;;;;;30739:16:0;;;;;:7;:16;;;;;;;30610:208::o;30696:59::-;-1:-1:-1;;;;;30793:16:0;;;;;;:7;:16;;;;;;30773:37;;:19;:37::i;6027:148::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;6134:1:::1;6118:6:::0;;6097:40:::1;::::0;-1:-1:-1;;;;;6118:6:0;;::::1;::::0;6097:40:::1;::::0;6134:1;;6097:40:::1;6165:1;6148:19:::0;;-1:-1:-1;;;;;;6148:19:0::1;::::0;;6027:148::o;34227:198::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;34314:9:::1;34309:109;34325:20:::0;;::::1;34309:109;;;34402:4;34367:18;:32;34386:9;;34396:1;34386:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34367:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34367:32:0;:39;;-1:-1:-1;;34367:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34347:3:::1;::::0;::::1;:::i;:::-;;;34309:109;;;;34227:198:::0;;:::o;35119:135::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35204:42:::1;::::0;-1:-1:-1;;;;;35204:19:0;::::1;::::0;35224:21:::1;35204:42:::0;::::1;;;::::0;::::1;::::0;;;35224:21;35204:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;34920:188:::0;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35007:9:::1;35002:99;35018:20:::0;;::::1;35002:99;;;35085:4;35060:10;:24;35071:9;;35081:1;35071:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35060:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35060:24:0;:29;;-1:-1:-1;;35060:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35040:3:::1;::::0;::::1;:::i;:::-;;;35002:99;;35738:178:::0;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35892:16:::1;35872;35862:7;;:26;;;;:::i;:::-;35861:47;;;;:::i;:::-;35845:13;:63:::0;-1:-1:-1;;35738:178:0:o;30321:87::-;30360:13;30393:7;30386:14;;;;;:::i;18045:269::-;18138:4;18155:129;190:10;18178:7;18187:96;18226:15;18187:96;;;;;;;;;;;;;;;;;190:10;18187:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18187:34:0;;;;;;;;;;;;:38;:96::i;31087:167::-;31165:4;31182:42;190:10;31206:9;31217:6;31182:9;:42::i;35441:168::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35555:46:::1;35577:23;35555:17;35567:4;35555:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;35537:15;:64:::0;-1:-1:-1;35441:168:0:o;34559:128::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;34636:15:::1;:43:::0;;-1:-1:-1;;;;;;34636:43:0::1;-1:-1:-1::0;;;;;34636:43:0;;;::::1;::::0;;;::::1;::::0;;34559:128::o;34437:110::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34504:27:0::1;34534:5;34504:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34504:35:0::1;::::0;;34437:110::o;33572:523::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;33645:29:::1;33696:9;33645:61;;33717:16;33754:10;-1:-1:-1::0;;;;;33754:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33736:47:0::1;;33792:4;33799:10;-1:-1:-1::0;;;;;33799:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33736:81;::::0;-1:-1:-1;;;;;;33736:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15891:15:1;;;33736:81:0::1;::::0;::::1;15873:34:1::0;15943:15;;15923:18;;;15916:43;15808:18;;33736:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33717:100:::0;-1:-1:-1;;;;;;33832:22:0;::::1;33828:221;;33905:10;-1:-1:-1::0;;;;;33905:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33887:50:0::1;;33946:4;33953:10;-1:-1:-1::0;;;;;33953:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33887:84;::::0;-1:-1:-1;;;;;;33887:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15891:15:1;;;33887:84:0::1;::::0;::::1;15873:34:1::0;15943:15;;15923:18;;;15916:43;15808:18;;33887:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33871:13;:100:::0;;-1:-1:-1;;;;;;33871:100:0::1;-1:-1:-1::0;;;;;33871:100:0;;;::::1;::::0;;;::::1;::::0;;33828:221:::1;;;34013:13;:24:::0;;-1:-1:-1;;;;;;34013:24:0::1;-1:-1:-1::0;;;;;34013:24:0;::::1;;::::0;;33828:221:::1;-1:-1:-1::0;34059:15:0::1;:28:::0;;-1:-1:-1;;;;;;34059:28:0::1;-1:-1:-1::0;;;;;34059:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33572:523:0:o;34107:112::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34177:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34177:34:0::1;34207:4;34177:34;::::0;;34107:112::o;6183:244::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6272:22:0;::::1;6264:73;;;::::0;-1:-1:-1;;;6264:73:0;;16172:2:1;6264:73:0::1;::::0;::::1;16154:21:1::0;16211:2;16191:18;;;16184:30;16250:34;16230:18;;;16223:62;-1:-1:-1;;;16301:18:1;;;16294:36;16347:19;;6264:73:0::1;15970:402:1::0;6264:73:0::1;6374:6;::::0;;6353:38:::1;::::0;-1:-1:-1;;;;;6353:38:0;;::::1;::::0;6374:6;::::1;::::0;6353:38:::1;::::0;::::1;6402:6;:17:::0;;-1:-1:-1;;;;;;6402:17:0::1;-1:-1:-1::0;;;;;6402:17:0;;;::::1;::::0;;;::::1;::::0;;6183:244::o;33355:101::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;33426:14:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33426:22:0;;::::1;::::0;;;::::1;::::0;;33355:101::o;18884:337::-;-1:-1:-1;;;;;18977:19:0;;18969:68;;;;-1:-1:-1;;;18969:68:0;;16579:2:1;18969:68:0;;;16561:21:1;16618:2;16598:18;;;16591:30;16657:34;16637:18;;;16630:62;-1:-1:-1;;;16708:18:1;;;16701:34;16752:19;;18969:68:0;16377:400:1;18969:68:0;-1:-1:-1;;;;;19056:21:0;;19048:68;;;;-1:-1:-1;;;19048:68:0;;16984:2:1;19048:68:0;;;16966:21:1;17023:2;17003:18;;;16996:30;17062:34;17042:18;;;17035:62;-1:-1:-1;;;17113:18:1;;;17106:32;17155:19;;19048:68:0;16782:398:1;19048:68:0;-1:-1:-1;;;;;19129:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19181:32;;160:25:1;;;19181:32:0;;133:18:1;19181:32:0;;;;;;;18884:337;;;:::o;19363:2270::-;-1:-1:-1;;;;;19485:18:0;;19477:68;;;;-1:-1:-1;;;19477:68:0;;17387:2:1;19477:68:0;;;17369:21:1;17426:2;17406:18;;;17399:30;17465:34;17445:18;;;17438:62;-1:-1:-1;;;17516:18:1;;;17509:35;17561:19;;19477:68:0;17185:401:1;19477:68:0;-1:-1:-1;;;;;19564:16:0;;19556:64;;;;-1:-1:-1;;;19556:64:0;;17793:2:1;19556:64:0;;;17775:21:1;17832:2;17812:18;;;17805:30;17871:34;17851:18;;;17844:62;-1:-1:-1;;;17922:18:1;;;17915:33;17965:19;;19556:64:0;17591:399:1;19556:64:0;19648:1;19639:6;:10;19631:64;;;;-1:-1:-1;;;19631:64:0;;18197:2:1;19631:64:0;;;18179:21:1;18236:2;18216:18;;;18209:30;18275:34;18255:18;;;18248:62;-1:-1:-1;;;18326:18:1;;;18319:39;18375:19;;19631:64:0;17995:405:1;19631:64:0;-1:-1:-1;;;;;19715:13:0;;;;;;:9;:13;;;;;;;;19714:14;19706:37;;;;-1:-1:-1;;;19706:37:0;;18607:2:1;19706:37:0;;;18589:21:1;18646:2;18626:18;;;18619:30;-1:-1:-1;;;18665:18:1;;;18658:40;18715:18;;19706:37:0;18405:334:1;19706:37:0;-1:-1:-1;;;;;19763:15:0;;;;;;:9;:15;;;;;;;;19762:16;19754:39;;;;-1:-1:-1;;;19754:39:0;;18607:2:1;19754:39:0;;;18589:21:1;18646:2;18626:18;;;18619:30;-1:-1:-1;;;18665:18:1;;;18658:40;18715:18;;19754:39:0;18405:334:1;19754:39:0;5840:7;5867:6;-1:-1:-1;;;;;19808:14:0;;;5867:6;;19808:14;;;;:30;;-1:-1:-1;5840:7:0;5867:6;-1:-1:-1;;;;;19826:12:0;;;5867:6;;19826:12;;19808:30;19804:84;;;19848:11;;;;;;;19840:48;;;;-1:-1:-1;;;19840:48:0;;18946:2:1;19840:48:0;;;18928:21:1;18985:2;18965:18;;;18958:30;19024:26;19004:18;;;18997:54;19068:18;;19840:48:0;18744:348:1;19840:48:0;20021:13;;19949:12;;-1:-1:-1;;;;;20015:19:0;;;20021:13;;20015:19;;:40;;-1:-1:-1;20042:13:0;;-1:-1:-1;;;;;20038:17:0;;;20042:13;;20038:17;20015:40;20014:99;;;;-1:-1:-1;;;;;;20062:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20090:22:0;;;;;;:18;:22;;;;;;;;20062:50;20060:53;20014:99;20009:148;;;-1:-1:-1;20141:4:0;20009:148;20183:1;20172:10;;:12;:59;;;;-1:-1:-1;;;;;;20190:22:0;;;;;;:18;:22;;;;;;;;20189:23;:41;;;;-1:-1:-1;5840:7:0;5867:6;-1:-1:-1;;;;;20216:14:0;;;5867:6;;20216:14;;20189:41;20172:105;;;;;20264:12;20250:10;;20237;;:23;;;;:::i;:::-;20236:40;20172:105;20169:246;;;20328:15;;20313:13;20323:2;20313:9;:13::i;:::-;20305:21;;:6;:21;:::i;:::-;:38;;20297:106;;;;-1:-1:-1;;;20297:106:0;;19299:2:1;20297:106:0;;;19281:21:1;19338:2;19318:18;;;19311:30;19377:34;19357:18;;;19350:62;-1:-1:-1;;;19428:18:1;;;19421:32;19470:19;;20297:106:0;19097:398:1;20297:106:0;20444:8;;20428:15;:24;20477:17;;20463:13;:31;20510:11;;;;;;;:34;;;;-1:-1:-1;20531:13:0;;-1:-1:-1;;;;;20525:19:0;;;20531:13;;20525:19;20510:34;20507:177;;;20607:17;;20585;;:40;;:21;:40::i;:::-;20568:15;:57;20654:18;;20640:13;:32;20507:177;20737:1;20726:10;;:12;:56;;;;;20770:12;20756:10;;20743;;:23;;;;:::i;:::-;20742:40;20726:56;20723:109;;;-1:-1:-1;;;;;20802:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;20802:18:0;20816:4;20802:18;;;20723:109;20887:1;20876:10;;:12;:30;;;;-1:-1:-1;5840:7:0;5867:6;-1:-1:-1;;;;;20892:14:0;;;5867:6;;20892:14;;20876:30;:75;;;;;20940:10;;20927;;:23;;;;:::i;:::-;20910:12;:41;;20876:75;:91;;;;-1:-1:-1;20956:11:0;;;;;;;20876:91;20873:154;;;21003:3;20987:15;:19;20873:154;21058:14;;;;;;;21055:144;;;21092:11;;;;;;;:36;;;;-1:-1:-1;21115:13:0;;-1:-1:-1;;;;;21107:21:0;;;21115:13;;21107:21;21092:36;21089:99;;;21170:1;21154:15;:17;21089:99;21232:6;;;;21231:7;:22;;;;-1:-1:-1;21242:11:0;;;;;;;21231:22;:45;;;;-1:-1:-1;21263:13:0;;-1:-1:-1;;;;;21257:19:0;;;21263:13;;21257:19;21231:45;21227:350;;;21301:28;21332:24;21350:4;21332:9;:24::i;:::-;21301:55;;21410:13;;21388:20;:35;21385:169;;-1:-1:-1;21470:13:0;;21506:32;21470:13;21506:10;:32::i;:::-;21278:299;21227:350;21587:38;21602:4;21607:2;21610:6;21617:7;21587:14;:38::i;1503:192::-;1589:7;1625:12;1617:6;;;;1609:29;;;;-1:-1:-1;;;1609:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1649:9:0;1661:5;1665:1;1661;:5;:::i;:::-;1649:17;1503:192;-1:-1:-1;;;;;1503:192:0:o;29081:163::-;29122:7;29143:15;29160;29179:19;:17;:19::i;:::-;29142:56;;-1:-1:-1;29142:56:0;-1:-1:-1;29216:20:0;29142:56;;29216:11;:20::i;:::-;29209:27;;;;29081:163;:::o;1961:132::-;2019:7;2046:39;2050:1;2053;2046:39;;;;;;;;;;;;;;;;;:3;:39::i;1170:181::-;1228:7;;1260:5;1264:1;1260;:5;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;-1:-1:-1;;;1276:46:0;;19702:2:1;1276:46:0;;;19684:21:1;19741:2;19721:18;;;19714:30;19780:29;19760:18;;;19753:57;19827:18;;1276:46:0;19500:351:1;28316:419:0;28375:7;28384;28393;28402;28411;28420;28441:23;28466:12;28480:18;28502:20;28514:7;28502:11;:20::i;:::-;28440:82;;;;;;28534:15;28551:23;28576:12;28592:50;28604:7;28613:4;28619:10;28631;:8;:10::i;:::-;28592:11;:50::i;:::-;28533:109;;;;-1:-1:-1;28533:109:0;;-1:-1:-1;28693:15:0;;-1:-1:-1;28710:4:0;;-1:-1:-1;28716:10:0;;-1:-1:-1;28316:419:0;;-1:-1:-1;;;;;28316:419:0:o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;1703:250::-;1761:7;1785:1;1790;1785:6;1781:47;;-1:-1:-1;1815:1:0;1808:8;;1781:47;1840:9;1852:5;1856:1;1852;:5;:::i;:::-;1840:17;-1:-1:-1;1885:1:0;1876:5;1880:1;1840:17;1876:5;:::i;:::-;:10;1868:56;;;;-1:-1:-1;;;1868:56:0;;20058:2:1;1868:56:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:31;20228:19;;1868:56:0;19856:397:1;25901:1028:0;16638:6;:13;;-1:-1:-1;;16638:13:0;16647:4;16638:13;;;26089:8:::1;::::0;26057:12:::1;::::0;16638:6;;26018:101:::1;::::0;26117:1:::1;::::0;26018:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25992:127:::0;-1:-1:-1;26132:20:0::1;26155:41;:20:::0;25992:127;26155:24:::1;:41::i;:::-;26132:64;;26217:30;26234:12;26217:16;:30::i;:::-;26349:12;::::0;26280:21:::1;::::0;26260:17:::1;::::0;26336:33:::1;::::0;26349:19:::1;::::0;26366:1:::1;26349:16;:19::i;:::-;26336:8;::::0;;:12:::1;:33::i;:::-;26314:55;;26382:26;26411:93;26502:1;26411:72;26471:11;26411:41;26439:12;;26411:9;:27;;:41;;;;:::i;:93::-;26382:122;;26525:26;26554:44;26586:11;26554:27;26568:12;;26554:9;:13;;:27;;;;:::i;:44::-;26525:73:::0;-1:-1:-1;26674:21:0::1;26709:22:::0;;26706:102:::1;;26780:15;::::0;26748:48:::1;::::0;26761:18;;-1:-1:-1;;;;;26780:15:0::1;26748:12;:48::i;:::-;26822:19:::0;;26818:104:::1;;26862:48;26875:15;26891:18;26862:12;:48::i;:::-;-1:-1:-1::0;;16674:6:0;:14;;-1:-1:-1;;16674:14:0;;;-1:-1:-1;;;;;;25901:1028:0:o;21641:943::-;21781:13;;21831:15;;21861:7;21857:88;;21900:1;21884:13;:17;;;21916:15;:17;21857:88;-1:-1:-1;;;;;21969:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;21993:22:0;;;;;;:11;:22;;;;;;;;21992:23;21969:46;21965:467;;;22032:48;22054:6;22062:9;22073:6;22032:21;:48::i;:::-;21965:467;;;-1:-1:-1;;;;;22103:19:0;;;;;;:11;:19;;;;;;;;22102:20;:46;;;;-1:-1:-1;;;;;;22126:22:0;;;;;;:11;:22;;;;;;;;22102:46;22098:334;;;22165:46;22185:6;22193:9;22204:6;22165:19;:46::i;22098:334::-;-1:-1:-1;;;;;22233:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;22256:22:0;;;;;;:11;:22;;;;;;;;22233:45;22229:203;;;22295:48;22317:6;22325:9;22336:6;22295:21;:48::i;22229:203::-;22376:44;22394:6;22402:9;22413:6;22376:17;:44::i;:::-;22456:7;22452:125;;22479:13;:38;;;;22532:15;:33;-1:-1:-1;;;;21641:943:0:o;29252:561::-;29349:7;;29385;;29302;;;;;29409:289;29433:9;:16;29429:20;;29409:289;;;29499:7;29475;:21;29483:9;29493:1;29483:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29483:12:0;29475:21;;;;;;;;;;;;;:31;;:66;;;29534:7;29510;:21;29518:9;29528:1;29518:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29518:12:0;29510:21;;;;;;;;;;;;;:31;29475:66;29471:97;;;29551:7;;29560;;29543:25;;;;;;;29252:561;;:::o;29471:97::-;29593:34;29605:7;:21;29613:9;29623:1;29613:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29613:12:0;29605:21;;;;;;;;;;;;;29593:7;;:11;:34::i;:::-;29583:44;;29652:34;29664:7;:21;29672:9;29682:1;29672:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29672:12:0;29664:21;;;;;;;;;;;;;29652:7;;:11;:34::i;:::-;29642:44;-1:-1:-1;29451:3:0;;;;:::i;:::-;;;;29409:289;;;-1:-1:-1;29734:7:0;;29722;;:20;;:11;:20::i;:::-;29712:7;:30;29708:61;;;29752:7;;29761;;29744:25;;;;;;29252:561;;:::o;29708:61::-;29788:7;;29797;;-1:-1:-1;29252:561:0;-1:-1:-1;29252:561:0:o;2101:278::-;2187:7;2222:12;2215:5;2207:28;;;;-1:-1:-1;;;2207:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2246:9:0;2258:5;2262:1;2258;:5;:::i;28743:330::-;28803:7;28812;28821;28841:12;28856:24;28872:7;28856:15;:24::i;:::-;28841:39;;28891:18;28912:30;28934:7;28912:21;:30::i;:::-;28891:51;-1:-1:-1;28953:23:0;28979:33;28891:51;28979:17;:7;28991:4;28979:11;:17::i;:::-;:21;;:33::i;:::-;28953:59;29048:4;;-1:-1:-1;29054:10:0;;-1:-1:-1;28743:330:0;;-1:-1:-1;;;28743:330:0:o;25075:429::-;25190:7;;;;25246:24;:7;25258:11;25246;:24::i;:::-;25228:42;-1:-1:-1;25281:12:0;25296:21;:4;25305:11;25296:8;:21::i;:::-;25281:36;-1:-1:-1;25328:18:0;25349:27;:10;25364:11;25349:14;:27::i;:::-;25328:48;-1:-1:-1;25387:23:0;25413:33;25328:48;25413:17;:7;25425:4;25413:11;:17::i;:33::-;25465:7;;;;-1:-1:-1;25491:4:0;;-1:-1:-1;25075:429:0;;-1:-1:-1;;;;;;;25075:429:0:o;27063:666::-;27213:16;;;27227:1;27213:16;;;;;;;;27189:21;;27213:16;;;;;;;;;;-1:-1:-1;27213:16:0;27189:40;;27258:4;27240;27245:1;27240:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27240:23:0;;;:7;;;;;;;;;;:23;;;;27284:15;;:22;;;-1:-1:-1;;;27284:22:0;;;;:15;;;;;:20;;:22;;;;;27240:7;;27284:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27274:4;27279:1;27274:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27274:32:0;;;:7;;;;;;;;;:32;27351:15;;27319:62;;27336:4;;27351:15;27369:11;27319:8;:62::i;:::-;27420:15;;:240;;-1:-1:-1;;;27420:240:0;;-1:-1:-1;;;;;27420:15:0;;;;:66;;:240;;27501:11;;27420:15;;27571:4;;27598;;27634:15;;27420:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27686:35;27703:11;27716:4;27686:35;;;;;;;:::i;:::-;;;;;;;;27118:611;27063:666;:::o;26941:111::-;27021:23;;-1:-1:-1;;;;;27021:15:0;;;:23;;;;;27037:6;;27021:23;;;;27037:6;27021:15;:23;;;;;;;;;;;;;;;;;;;27737:513;27917:15;;27885:62;;27902:4;;-1:-1:-1;;;;;27917:15:0;27935:11;27885:8;:62::i;:::-;27990:15;;-1:-1:-1;;;;;27990:15:0;:31;28029:9;28062:4;28082:11;27990:15;;28194:7;5840;5867:6;-1:-1:-1;;;;;5867:6:0;;5802:79;28194:7;27990:252;;;;;;-1:-1:-1;;;;;;27990:252:0;;;-1:-1:-1;;;;;22139:15:1;;;27990:252:0;;;22121:34:1;22171:18;;;22164:34;;;;22214:18;;;22207:34;;;;22257:18;;;22250:34;22321:15;;;22300:19;;;22293:44;28216:15:0;22353:19:1;;;22346:35;22055:19;;27990:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23696:566::-;23799:15;23816:23;23841:12;23855:23;23880:12;23894:18;23916:19;23927:7;23916:10;:19::i;:::-;-1:-1:-1;;;;;23964:15:0;;;;;;:7;:15;;;;;;23798:137;;-1:-1:-1;23798:137:0;;-1:-1:-1;23798:137:0;;-1:-1:-1;23798:137:0;-1:-1:-1;23798:137:0;-1:-1:-1;23798:137:0;-1:-1:-1;23964:28:0;;23984:7;23964:19;:28::i;:::-;-1:-1:-1;;;;;23946:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24021:7;:15;;;;:28;;24041:7;24021:19;:28::i;:::-;-1:-1:-1;;;;;24003:15:0;;;;;;;:7;:15;;;;;;:46;;;;24081:18;;;;;;;:39;;24104:15;24081:22;:39::i;:::-;-1:-1:-1;;;;;24060:18:0;;;;;;:7;:18;;;;;:60;24134:26;24149:10;24134:14;:26::i;:::-;24171:23;24183:4;24189;24171:11;:23::i;:::-;24227:9;-1:-1:-1;;;;;24210:44:0;24219:6;-1:-1:-1;;;;;24210:44:0;;24238:15;24210:44;;;;160:25:1;;148:2;133:18;;14:177;24210:44:0;;;;;;;;23787:475;;;;;;23696:566;;;:::o;23102:586::-;23203:15;23220:23;23245:12;23259:23;23284:12;23298:18;23320:19;23331:7;23320:10;:19::i;:::-;-1:-1:-1;;;;;23368:15:0;;;;;;:7;:15;;;;;;23202:137;;-1:-1:-1;23202:137:0;;-1:-1:-1;23202:137:0;;-1:-1:-1;23202:137:0;-1:-1:-1;23202:137:0;-1:-1:-1;23202:137:0;-1:-1:-1;23368:28:0;;23202:137;23368:19;:28::i;:::-;-1:-1:-1;;;;;23350:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;23428:18;;;;;:7;:18;;;;;:39;;23451:15;23428:22;:39::i;:::-;-1:-1:-1;;;;;23407:18:0;;;;;;:7;:18;;;;;;;;:60;;;;23499:7;:18;;;;:39;;23522:15;23499:22;:39::i;24270:642::-;24373:15;24390:23;24415:12;24429:23;24454:12;24468:18;24490:19;24501:7;24490:10;:19::i;:::-;-1:-1:-1;;;;;24538:15:0;;;;;;:7;:15;;;;;;24372:137;;-1:-1:-1;24372:137:0;;-1:-1:-1;24372:137:0;;-1:-1:-1;24372:137:0;-1:-1:-1;24372:137:0;-1:-1:-1;24372:137:0;-1:-1:-1;24538:28:0;;24558:7;24538:19;:28::i;:::-;-1:-1:-1;;;;;24520:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24595:7;:15;;;;:28;;24615:7;24595:19;:28::i;22592:502::-;22691:15;22708:23;22733:12;22747:23;22772:12;22786:18;22808:19;22819:7;22808:10;:19::i;:::-;-1:-1:-1;;;;;22856:15:0;;;;;;:7;:15;;;;;;22690:137;;-1:-1:-1;22690:137:0;;-1:-1:-1;22690:137:0;;-1:-1:-1;22690:137:0;-1:-1:-1;22690:137:0;-1:-1:-1;22690:137:0;-1:-1:-1;22856:28:0;;22690:137;22856:19;:28::i;29825:160::-;29889:7;29916:61;29961:5;29916:26;29928:13;;29916:7;:11;;:26;;;;:::i;29997:168::-;30067:7;30094:63;30141:5;30094:28;30106:15;;30094:7;:11;;:28;;;;:::i;25516:355::-;25579:19;25602:10;:8;:10::i;:::-;25579:33;-1:-1:-1;25623:18:0;25644:27;:10;25579:33;25644:14;:27::i;:::-;25723:4;25707:22;;;;:7;:22;;;;;;25623:48;;-1:-1:-1;25707:38:0;;25623:48;25707:26;:38::i;:::-;25698:4;25682:22;;;;:7;:22;;;;;;;;:63;;;;25759:11;:26;;;;;;25756:107;;;25841:4;25825:22;;;;:7;:22;;;;;;:38;;25852:10;25825:26;:38::i;:::-;25816:4;25800:22;;;;:7;:22;;;;;:63;25568:303;;25516:355;:::o;24920:147::-;24998:7;;:17;;25010:4;24998:11;:17::i;:::-;24988:7;:27;25039:10;;:20;;25054:4;25039:14;:20::i;:::-;25026:10;:33;-1:-1:-1;;24920:147:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1884:367::-;1947:8;1957:6;2011:3;2004:4;1996:6;1992:17;1988:27;1978:55;;2029:1;2026;2019:12;1978:55;-1:-1:-1;2052:20:1;;2095:18;2084:30;;2081:50;;;2127:1;2124;2117:12;2081:50;2164:4;2156:6;2152:17;2140:29;;2224:3;2217:4;2207:6;2204:1;2200:14;2192:6;2188:27;2184:38;2181:47;2178:67;;;2241:1;2238;2231:12;2178:67;1884:367;;;;;:::o;2256:773::-;2378:6;2386;2394;2402;2455:2;2443:9;2434:7;2430:23;2426:32;2423:52;;;2471:1;2468;2461:12;2423:52;2511:9;2498:23;2540:18;2581:2;2573:6;2570:14;2567:34;;;2597:1;2594;2587:12;2567:34;2636:70;2698:7;2689:6;2678:9;2674:22;2636:70;:::i;:::-;2725:8;;-1:-1:-1;2610:96:1;-1:-1:-1;2813:2:1;2798:18;;2785:32;;-1:-1:-1;2829:16:1;;;2826:36;;;2858:1;2855;2848:12;2826:36;;2897:72;2961:7;2950:8;2939:9;2935:24;2897:72;:::i;:::-;2256:773;;;;-1:-1:-1;2988:8:1;-1:-1:-1;;;;2256:773:1:o;3034:456::-;3111:6;3119;3127;3180:2;3168:9;3159:7;3155:23;3151:32;3148:52;;;3196:1;3193;3186:12;3148:52;3235:9;3222:23;3254:31;3279:5;3254:31;:::i;:::-;3304:5;-1:-1:-1;3361:2:1;3346:18;;3333:32;3374:33;3333:32;3374:33;:::i;:::-;3034:456;;3426:7;;-1:-1:-1;;;3480:2:1;3465:18;;;;3452:32;;3034:456::o;3495:401::-;3576:6;3584;3637:2;3625:9;3616:7;3612:23;3608:32;3605:52;;;3653:1;3650;3643:12;3605:52;3692:9;3679:23;3711:31;3736:5;3711:31;:::i;:::-;3761:5;-1:-1:-1;3818:2:1;3803:18;;3790:32;3831:33;3790:32;3831:33;:::i;:::-;3883:7;3873:17;;;3495:401;;;;;:::o;3901:118::-;3987:5;3980:13;3973:21;3966:5;3963:32;3953:60;;4009:1;4006;3999:12;4024:309;4089:6;4097;4150:2;4138:9;4129:7;4125:23;4121:32;4118:52;;;4166:1;4163;4156:12;4118:52;4205:9;4192:23;4224:28;4246:5;4224:28;:::i;4338:180::-;4397:6;4450:2;4438:9;4429:7;4425:23;4421:32;4418:52;;;4466:1;4463;4456:12;4418:52;-1:-1:-1;4489:23:1;;4338:180;-1:-1:-1;4338:180:1:o;4712:241::-;4768:6;4821:2;4809:9;4800:7;4796:23;4792:32;4789:52;;;4837:1;4834;4827:12;4789:52;4876:9;4863:23;4895:28;4917:5;4895:28;:::i;4958:316::-;5035:6;5043;5051;5104:2;5092:9;5083:7;5079:23;5075:32;5072:52;;;5120:1;5117;5110:12;5072:52;-1:-1:-1;;5143:23:1;;;5213:2;5198:18;;5185:32;;-1:-1:-1;5264:2:1;5249:18;;;5236:32;;4958:316;-1:-1:-1;4958:316:1:o;5279:309::-;5344:6;5352;5405:2;5393:9;5384:7;5380:23;5376:32;5373:52;;;5421:1;5418;5411:12;5373:52;5457:9;5444:23;5434:33;;5517:2;5506:9;5502:18;5489:32;5530:28;5552:5;5530:28;:::i;5801:566::-;5893:6;5901;5909;5962:2;5950:9;5941:7;5937:23;5933:32;5930:52;;;5978:1;5975;5968:12;5930:52;6018:9;6005:23;6051:18;6043:6;6040:30;6037:50;;;6083:1;6080;6073:12;6037:50;6122:70;6184:7;6175:6;6164:9;6160:22;6122:70;:::i;:::-;6211:8;;-1:-1:-1;6096:96:1;-1:-1:-1;;6296:2:1;6281:18;;6268:32;6309:28;6268:32;6309:28;:::i;:::-;6356:5;6346:15;;;5801:566;;;;;:::o;6372:505::-;6467:6;6475;6483;6536:2;6524:9;6515:7;6511:23;6507:32;6504:52;;;6552:1;6549;6542:12;6504:52;6592:9;6579:23;6625:18;6617:6;6614:30;6611:50;;;6657:1;6654;6647:12;6611:50;6696:70;6758:7;6749:6;6738:9;6734:22;6696:70;:::i;:::-;6785:8;;6670:96;;-1:-1:-1;6867:2:1;6852:18;;;;6839:32;;6372:505;-1:-1:-1;;;;6372:505:1:o;6882:437::-;6968:6;6976;7029:2;7017:9;7008:7;7004:23;7000:32;6997:52;;;7045:1;7042;7035:12;6997:52;7085:9;7072:23;7118:18;7110:6;7107:30;7104:50;;;7150:1;7147;7140:12;7104:50;7189:70;7251:7;7242:6;7231:9;7227:22;7189:70;:::i;:::-;7278:8;;7163:96;;-1:-1:-1;6882:437:1;-1:-1:-1;;;;6882:437:1:o;7584:248::-;7652:6;7660;7713:2;7701:9;7692:7;7688:23;7684:32;7681:52;;;7729:1;7726;7719:12;7681:52;-1:-1:-1;;7752:23:1;;;7822:2;7807:18;;;7794:32;;-1:-1:-1;7584:248:1:o;8230:380::-;8309:1;8305:12;;;;8352;;;8373:61;;8427:4;8419:6;8415:17;8405:27;;8373:61;8480:2;8472:6;8469:14;8449:18;8446:38;8443:161;;8526:10;8521:3;8517:20;8514:1;8507:31;8561:4;8558:1;8551:15;8589:4;8586:1;8579:15;8443:161;;8230:380;;;:::o;8615:356::-;8817:2;8799:21;;;8836:18;;;8829:30;8895:34;8890:2;8875:18;;8868:62;8962:2;8947:18;;8615:356::o;9799:127::-;9860:10;9855:3;9851:20;9848:1;9841:31;9891:4;9888:1;9881:15;9915:4;9912:1;9905:15;9931:422;10020:1;10063:5;10020:1;10077:270;10098:7;10088:8;10085:21;10077:270;;;10157:4;10153:1;10149:6;10145:17;10139:4;10136:27;10133:53;;;10166:18;;:::i;:::-;10216:7;10206:8;10202:22;10199:55;;;10236:16;;;;10199:55;10315:22;;;;10275:15;;;;10077:270;;;10081:3;9931:422;;;;;:::o;10358:806::-;10407:5;10437:8;10427:80;;-1:-1:-1;10478:1:1;10492:5;;10427:80;10526:4;10516:76;;-1:-1:-1;10563:1:1;10577:5;;10516:76;10608:4;10626:1;10621:59;;;;10694:1;10689:130;;;;10601:218;;10621:59;10651:1;10642:10;;10665:5;;;10689:130;10726:3;10716:8;10713:17;10710:43;;;10733:18;;:::i;:::-;-1:-1:-1;;10789:1:1;10775:16;;10804:5;;10601:218;;10903:2;10893:8;10890:16;10884:3;10878:4;10875:13;10871:36;10865:2;10855:8;10852:16;10847:2;10841:4;10838:12;10834:35;10831:77;10828:159;;;-1:-1:-1;10940:19:1;;;10972:5;;10828:159;11019:34;11044:8;11038:4;11019:34;:::i;:::-;11089:6;11085:1;11081:6;11077:19;11068:7;11065:32;11062:58;;;11100:18;;:::i;:::-;11138:20;;10358:806;-1:-1:-1;;;10358:806:1:o;11169:140::-;11227:5;11256:47;11297:4;11287:8;11283:19;11277:4;11256:47;:::i;11314:127::-;11375:10;11370:3;11366:20;11363:1;11356:31;11406:4;11403:1;11396:15;11430:4;11427:1;11420:15;11446:168;11519:9;;;11550;;11567:15;;;11561:22;;11547:37;11537:71;;11588:18;;:::i;11619:125::-;11684:9;;;11705:10;;;11702:36;;;11718:18;;:::i;11749:135::-;11788:3;11809:17;;;11806:43;;11829:18;;:::i;:::-;-1:-1:-1;11876:1:1;11865:13;;11749:135::o;12245:184::-;12315:6;12368:2;12356:9;12347:7;12343:23;12339:32;12336:52;;;12384:1;12381;12374:12;12336:52;-1:-1:-1;12407:16:1;;12245:184;-1:-1:-1;12245:184:1:o;12713:245::-;12780:6;12833:2;12821:9;12812:7;12808:23;12804:32;12801:52;;;12849:1;12846;12839:12;12801:52;12881:9;12875:16;12900:28;12922:5;12900:28;:::i;13730:128::-;13797:9;;;13818:11;;;13815:37;;;13832:18;;:::i;13863:127::-;13924:10;13919:3;13915:20;13912:1;13905:31;13955:4;13952:1;13945:15;13979:4;13976:1;13969:15;15183:217;15223:1;15249;15239:132;;15293:10;15288:3;15284:20;15281:1;15274:31;15328:4;15325:1;15318:15;15356:4;15353:1;15346:15;15239:132;-1:-1:-1;15385:9:1;;15183:217::o;15405:251::-;15475:6;15528:2;15516:9;15507:7;15503:23;15499:32;15496:52;;;15544:1;15541;15534:12;15496:52;15576:9;15570:16;15595:31;15620:5;15595:31;:::i;20390:461::-;20443:3;20481:5;20475:12;20508:6;20503:3;20496:19;20534:4;20563:2;20558:3;20554:12;20547:19;;20600:2;20593:5;20589:14;20621:1;20631:195;20645:6;20642:1;20639:13;20631:195;;;20710:13;;-1:-1:-1;;;;;20706:39:1;20694:52;;20766:12;;;;20801:15;;;;20742:1;20660:9;20631:195;;;-1:-1:-1;20842:3:1;;20390:461;-1:-1:-1;;;;;20390:461:1:o;20856:582::-;21155:6;21144:9;21137:25;21198:6;21193:2;21182:9;21178:18;21171:34;21241:3;21236:2;21225:9;21221:18;21214:31;21118:4;21262:57;21314:3;21303:9;21299:19;21291:6;21262:57;:::i;:::-;-1:-1:-1;;;;;21355:32:1;;;;21350:2;21335:18;;21328:60;-1:-1:-1;21419:3:1;21404:19;21397:35;21254:65;20856:582;-1:-1:-1;;;20856:582:1:o;21443:332::-;21650:6;21639:9;21632:25;21693:2;21688;21677:9;21673:18;21666:30;21613:4;21713:56;21765:2;21754:9;21750:18;21742:6;21713:56;:::i;:::-;21705:64;21443:332;-1:-1:-1;;;;21443:332:1:o;22392:306::-;22480:6;22488;22496;22549:2;22537:9;22528:7;22524:23;22520:32;22517:52;;;22565:1;22562;22555:12;22517:52;22594:9;22588:16;22578:26;;22644:2;22633:9;22629:18;22623:25;22613:35;;22688:2;22677:9;22673:18;22667:25;22657:35;;22392:306;;;;;:::o

Swarm Source

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