ETH Price: $2,380.54 (+1.21%)

Token

EREKTION (EREKT)
 

Overview

Max Total Supply

100,000,000 EREKT

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 EREKT

Value
$0.00
0xa31400f01998a57dbdb18cbe15a996c9cac76924
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:
Token

Compiler Version
v0.8.6+commit.11564f7e

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-08
*/

/** 
EREKTION
Telegram: https://t.me/EREKTIONETH
Website: https://erektion.co/
*/
pragma solidity ^0.8.6;
// SPDX-License-Identifier: MIT
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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        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;
    }
}

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; // msg.data is used to handle array, bytes, string 
    }
}

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed Owner, 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 IUniswapFactory {
    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 IUniswapPair {
    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 IUniswapRouter01 {
    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 IUniswapRouter02 is IUniswapRouter01 {
    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 Token is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isExcludedFromMaxTxAmount;
    mapping (address => bool) private _isExcludedFromMaxWalletAmount;
    
    mapping (address => mapping (address => uint256)) private _allowances;

    address[] private _excluded;
    
    
    address payable public _externalAddress  = payable(0xC07989B1aE13546FCF59aFA2Ad735539cA7f8CF8);
    address payable public _burnAddress      = payable(0x000000000000000000000000000000000000dEaD);

    //Minimum for max tx and max wallet to prevent contract lock
    //Percantages are based on scale of 1/1000 (5 =0.5% 10=1%)
    uint8 public minMxTxPercentage = 5;
    uint8 public minMxWalletPercentage = 10;
    
    string private _name    = "EREKTION";
    string private _symbol  = "EREKT";
    uint8 private _decimals = 9;
    uint256 public _maxTxAmount;
    uint256 public _maxWalletAmount;
    
    uint256 private constant MAX    = ~uint256(0);
    uint256 private _tTotal         = 100 * 10**6 * 10**_decimals;
    uint256 private _rTotal         = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    
    uint256 public _burnFee                 = 0;
    uint256 private _previousBurnFee        = _burnFee;

    uint256 public _reflectionFee           = 0;
    uint256 private _previousReflectionFee  = _reflectionFee;
    
    uint256 public _externalFee             = 20;
    uint256 private _previousExternalFee    = _externalFee;
    
    uint256 public _liquidityFee            = 10;
    uint256 private _previousLiquidityFee   = _liquidityFee;

    uint256 private _totalLiquidityFee      = _externalFee.add(_liquidityFee);
    uint256 private _previousTLiquidityFee  = _totalLiquidityFee;



    IUniswapRouter02 public UniswapRouter;
    address public UniswapPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled       = true;
    
    uint256 private numTokensSellToAddToLiquidity   = _tTotal.div(1000);
    

    event CEXWhitelisted(address indexed whitelistedAddress);
    event RemoveCEXWhitelist(address indexed includedAddress);
    event MinimumTokensBeforeSwapUpdated(uint256 MinimumTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqiudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor (uint8 setMxTx, uint8 setMxWallet) {
        _rOwned[_msgSender()] = _rTotal; 

        _maxTxAmount = _tTotal.mul(setMxTx).div(
            10**3
        );
        _maxWalletAmount = _tTotal.mul(setMxWallet).div(
            10**3
        );

        IUniswapRouter02 _UniswapRouter = IUniswapRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a Uniswap pair for this new token
        UniswapPair = IUniswapFactory(_UniswapRouter.factory())
            .createPair(address(this), _UniswapRouter.WETH());    
            
        UniswapRouter = _UniswapRouter;
        
        _isExcludedFromFee[owner()]             = true;
        _isExcludedFromFee[address(this)]       = true;
        _isExcludedFromFee[_externalAddress]    = true;
        
        _isExcludedFromMaxTxAmount[owner()]                 = true;
        _isExcludedFromMaxTxAmount[address(this)]           = true;
        _isExcludedFromMaxTxAmount[UniswapPair]             = true;
        _isExcludedFromMaxTxAmount[address(_UniswapRouter)] = true;
        _isExcludedFromMaxTxAmount[_burnAddress]            = true;
        
        _isExcludedFromMaxWalletAmount[owner()]                   = true;
        _isExcludedFromMaxWalletAmount[address(this)]             = true;
        _isExcludedFromMaxWalletAmount[UniswapPair]               = true;
        _isExcludedFromMaxWalletAmount[address(_UniswapRouter)]   = true;
        _isExcludedFromMaxWalletAmount[_burnAddress]              = true;
        
        _isExcluded[address(0)]     = true;
        _isExcluded[_burnAddress]   = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
         return true;
    }
    
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    
    function totalFeesCollected() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
    
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
    function excludeFromReward(address account) public onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    
    function _burn(address account, uint256 amount) internal {
        if(amount > 0)// No need to burn if collected burn fee is zero
        {
            require(account != address(0), "ERC20: burn from the zero address");

            //add the reflections of the token to the address(0) balance.
            //This reduces the supply of reflectedTokens
            //without double altering the reflection/token ratio.
            
            _tTotal = _tTotal.sub(amount);
            _rTotal = _rTotal.sub(amount.mul(_getRate()));
            
            emit Transfer(msg.sender, address(this), amount);
        }
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    //Exclude CEX wallets from max wallet and max tx limitations
    function CEXWalletWhitelist (address _address) public onlyOwner {
        _isExcludedFromMaxWalletAmount[_address] = true;
        emit CEXWhitelisted(_address);
    }
    function CEXTXWhitelist (address _address) public onlyOwner {
        _isExcludedFromMaxTxAmount[_address] = true;
        emit CEXWhitelisted(_address);
    }
    //Include CEX to max wallet and max tx limitations
    function RemoveCEXWalletWhitelist (address _address) public onlyOwner {
        _isExcludedFromMaxWalletAmount[_address] = false;
        emit RemoveCEXWhitelist(_address);
    }
    function RemoveCEXTXWhitelist (address _address) public onlyOwner {
	    _isExcludedFromMaxTxAmount[_address] = false;
        emit RemoveCEXWhitelist(_address);
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setBurnFeePercent(uint256 Fee) external onlyOwner() {
        _burnFee = Fee;
    }
    
    function setExternalFeePercent(uint256 Fee) external onlyOwner() {
        _externalFee = Fee;
        _totalLiquidityFee = _liquidityFee.add(_externalFee);
    }
    
    function setReflectFeePercent(uint256 Fee) external onlyOwner() {
        _reflectionFee = Fee;
    }
    
    function setLiquidityFeePercent(uint256 Fee) external onlyOwner() {
        _liquidityFee = Fee;
        _totalLiquidityFee = _liquidityFee.add(_externalFee);
    }
    

    function setMaxTx(uint256 maxTx) external onlyOwner() {
        require(maxTx >= minMxTxPercentage && maxTx <=1000,"err");
        _maxTxAmount = _tTotal.mul(maxTx).div(
            10**3
        );
    }

    function setMaxWallet(uint256 maxWallet) external onlyOwner() {
        require(maxWallet >= minMxWalletPercentage && maxWallet <=1000,"err");
        _maxWalletAmount = _tTotal.mul(maxWallet).div(
            10**3
        );
    }
    
    function setExternalAddress(address payable externalAddress) external onlyOwner() {
        _externalAddress = externalAddress;
    }


    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
	
    receive() external payable {}
    
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    
    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, bFee, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, bFee, tLiquidity);
    }
    
    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateReflectionFee(tAmount);
        uint256 bFee = calculateBurnFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(bFee);
        return (tTransferAmount, tFee, bFee, tLiquidity);
    }
    
    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 bFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rbFee = bFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rbFee);
        return (rAmount, rTransferAmount, rFee);
    }
    
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    
    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**3
        );
    }
    
    function calculateReflectionFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectionFee).div(
            10**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_totalLiquidityFee).div(
            10**3
        );
    }
    
    function removeAllFee() private {
        if(_totalLiquidityFee == 0 && _burnFee == 0 && _liquidityFee == 0
           && _externalFee == 0 && _reflectionFee == 0 ) return;
        
        _previousLiquidityFee   = _liquidityFee; 
        _previousBurnFee        = _burnFee;
        _previousExternalFee    = _externalFee;
        _previousReflectionFee  = _reflectionFee;
        _previousTLiquidityFee  = _totalLiquidityFee;
        
        _burnFee        = 0;
        _externalFee    = 0;
        _reflectionFee  = 0;
        _liquidityFee   = 0;
        _totalLiquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _liquidityFee       = _previousLiquidityFee;
        _burnFee            = _previousBurnFee;
        _externalFee        = _previousExternalFee;
        _reflectionFee      = _previousReflectionFee;
        _totalLiquidityFee  = _previousTLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
        /* Queries whether an address is whitelisted from the max wallet amount and gives a boolean return. */
    function isExcludedFromMaxWallet(address account) external view returns (bool) {
        return _isExcludedFromMaxWalletAmount[account];
    }
    
    /* Queries whether an address is whitelisted from the max Tx amount and gives a boolean return. */
    function isExcludedFromMaxTxAmount(address account) external view returns (bool) {
        return _isExcludedFromMaxTxAmount[account];
    }
    
    function setMinimumTokensSellToAddToLiquidity(uint256 MinimumTokensValue) public onlyOwner()
    {
        numTokensSellToAddToLiquidity = MinimumTokensValue.mul( 10**_decimals );
    }
    
    
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
	if(from == UniswapPair && from != owner() && to !=owner())
        {
            if(!_isExcludedFromMaxTxAmount[to] && !_isExcludedFromMaxWalletAmount[to]){
                require(amount <= _maxTxAmount, "Exceeds maximum TX amount");
                uint256 contractBalanceRecepient = balanceOf(to);
                require(contractBalanceRecepient + amount <= _maxWalletAmount, "Exceeds maximum wallet amount");   
            }
        }
        else if(!_isExcludedFromMaxTxAmount[from] && to == UniswapPair)
        {
            require(amount <= _maxTxAmount, "Exceeds maximum TX amount");
        }


        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswao pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        bool overMinimumTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinimumTokenBalance &&
            !inSwapAndLiquify &&
            from != UniswapPair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
        
    }
    
    function swapAndLiquify(uint256 tokenBalance) private lockTheSwap {
        // first split contract into  fee and liquidity fee
        uint256 liquidityAmount = tokenBalance;
        uint256 initialBalance = address(this).balance;


        if(_externalFee > 0)
        {
            uint256 externalAmount = tokenBalance.mul(_externalFee);
            externalAmount = externalAmount.div(_totalLiquidityFee);
            liquidityAmount = tokenBalance.sub(externalAmount);

            // send tokens to external
            swapTokensForEth(_externalAddress, externalAmount);
            initialBalance = address(this).balance;
        }
        
        if(_liquidityFee > 0)
        {
            // split the liquidity token balance into halves
            uint256 half = liquidityAmount.div(2);
            uint256 otherHalf = liquidityAmount.sub(half);

            // capture the contract's current ETH balance.
            // this is so that we can capture exactly the amount of ETH that the
            // swap creates, and not make the liquidity event include any ETH that
            // has been manually sent to the contract

            // swap half liquidity tokens for ETH
            swapTokensForEth(address(this), half);
            
            // how much ETH did we just swap into?
            uint256 newBalance = address(this).balance.sub(initialBalance);

            // add liquidity to Uniswap
            addLiquidity(owner(), otherHalf, newBalance);
            
            emit SwapAndLiquify(half, newBalance, otherHalf);
        }
    }
    function swapTokensForEth(address recipient,uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UniswapRouter.WETH();

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

        // make the swap
        UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            recipient,
            block.timestamp
        );
    }
    
    function addLiquidity(address recipient, uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(UniswapRouter), tokenAmount);

        // add the liquidity
        UniswapRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            recipient,
            block.timestamp
        );
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        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]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }
    
    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        _burn(sender, bFee);
        _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 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

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

        _burn(sender, bFee);
        _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 bFee, 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);

        _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function burnTokens(uint256 tokens) external {
        tokens = tokens.mul( 10**_decimals );
        require(msg.sender != address(0), "ERC20: burn from the zero address");
        require(tokens > 0, "Tokens value should be greater then Zero");
        require(tokens <= balanceOf(msg.sender), "Tokens value should be less then equal to your balance");
        
        uint256 rTokens = tokens.mul(_getRate());
        if(_isExcluded[msg.sender])
            _tOwned[msg.sender] = _tOwned[msg.sender].sub(tokens);
        _rOwned[msg.sender] = _rOwned[msg.sender].sub(rTokens);
        _tTotal = _tTotal.sub(tokens);
        _rTotal = _rTotal.sub(rTokens);

        emit Transfer(msg.sender, address(this), tokens);
    }
      function recoverETH() public onlyOwner()
    {
        address payable recipient = _msgSender();
        if(address(this).balance > 0)
            recipient.transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint8","name":"setMxTx","type":"uint8"},{"internalType":"uint8","name":"setMxWallet","type":"uint8"}],"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":"whitelistedAddress","type":"address"}],"name":"CEXWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"MinimumTokensBeforeSwap","type":"uint256"}],"name":"MinimumTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Owner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"includedAddress","type":"address"}],"name":"RemoveCEXWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqiudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"CEXTXWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"CEXWalletWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"RemoveCEXTXWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"RemoveCEXWalletWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_externalAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_externalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","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":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"includeInFee","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minMxTxPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minMxWalletPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"externalAddress","type":"address"}],"name":"setExternalAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setExternalFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MinimumTokensValue","type":"uint256"}],"name":"setMinimumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setReflectFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

600980546001600160a01b03191673c07989b1ae13546fcf59afa2ad735539ca7f8cf8179055600a8054750a05000000000000000000000000000000000000dead6001600160b01b031990911617905560c0604052600860808190526722a922a5aa24a7a760c11b60a09081526200007b91600b9190620007ed565b506040805180820190915260058082526411549152d560da1b6020909201918252620000aa91600c91620007ed565b50600d805460ff19166009908117909155620000c890600a620009e0565b620000d8906305f5e10062000a9f565b6010819055620000eb9060001962000b18565b620000f99060001962000ac1565b601155600060135560135460145560006015556015546016556014601755601754601855600a601955601954601a55620001466019546017546200067060201b6200190b1790919060201c565b601b819055601c55601e8054600160a81b60ff60a81b1990911617905560105462000180906103e8620006e0602090811b6200196a17901c565b601f553480156200019057600080fd5b5060405162003cf038038062003cf0833981016040819052620001b391620008d5565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506011543360009081526001602090815260409091209190915560105462000246916103e891620002329160ff871690620019ac6200072a821b17901c565b620006e060201b6200196a1790919060201c565b600e81905550620002726103e8620002328360ff166010546200072a60201b620019ac1790919060201c565b600f819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002cb57600080fd5b505afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003069190620008aa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034f57600080fd5b505afa15801562000364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038a9190620008aa565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003d357600080fd5b505af1158015620003e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040e9190620008aa565b601e80546001600160a01b03199081166001600160a01b0393841617909155601d8054909116918316919091179055600160036000620004566000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526003909352818320805485166001908117909155600954909116835290822080549093168117909255600590620004c66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526005909352818320805485166001908117909155601e5482168452828420805486168217905585821684528284208054861682179055600a54909116835290822080549093168117909255600690620005586000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260068452828120805486166001908117909155601e5483168252838220805487168217905586831682528382208054871682179055600a805484168352848320805488168317905560049095527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec805487168217905593549091168152208054909216179055620006173390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6010546040516200065f91815260200190565b60405180910390a350505062000b5b565b6000806200067f838562000965565b905083811015620006d75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6000620006d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007b160201b60201c565b6000826200073b57506000620006da565b600062000749838562000a9f565b90508262000758858362000980565b14620006d75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401620006ce565b60008183620007d55760405162461bcd60e51b8152600401620006ce91906200090d565b506000620007e4848662000980565b95945050505050565b828054620007fb9062000adb565b90600052602060002090601f0160209004810192826200081f57600085556200086a565b82601f106200083a57805160ff19168380011785556200086a565b828001600101855582156200086a579182015b828111156200086a5782518255916020019190600101906200084d565b50620008789291506200087c565b5090565b5b808211156200087857600081556001016200087d565b805160ff81168114620008a557600080fd5b919050565b600060208284031215620008bd57600080fd5b81516001600160a01b0381168114620006d757600080fd5b60008060408385031215620008e957600080fd5b620008f48362000893565b9150620009046020840162000893565b90509250929050565b600060208083528351808285015260005b818110156200093c578581018301518582016040015282016200091e565b818111156200094f576000604083870101525b50601f01601f1916929092016040019392505050565b600082198211156200097b576200097b62000b2f565b500190565b60008262000992576200099262000b45565b500490565b600181815b80851115620009d8578160001904821115620009bc57620009bc62000b2f565b80851615620009ca57918102915b93841c93908002906200099c565b509250929050565b6000620006d760ff841683600082620009fc57506001620006da565b8162000a0b57506000620006da565b816001811462000a24576002811462000a2f5762000a4f565b6001915050620006da565b60ff84111562000a435762000a4362000b2f565b50506001821b620006da565b5060208310610133831016604e8410600b841016171562000a74575081810a620006da565b62000a80838362000997565b806000190482111562000a975762000a9762000b2f565b029392505050565b600081600019048311821515161562000abc5762000abc62000b2f565b500290565b60008282101562000ad65762000ad662000b2f565b500390565b600181811c9082168062000af057607f821691505b6020821081141562000b1257634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000b2a5762000b2a62000b45565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6131858062000b6b6000396000f3fe6080604052600436106103035760003560e01c80636dd3d39f11610190578063bc337182116100dc578063c7639d8011610095578063dc56f2b61161006f578063dc56f2b61461092d578063dd62ed3e1461094d578063ea2f0b3714610993578063f2fde38b146109b357600080fd5b8063c7639d80146108b4578063cea26958146108d4578063d3b64ecd146108f457600080fd5b8063bc337182146107fe578063bd3900c01461081e578063bd7778141461083e578063bfd5bf1c1461085e578063c0b0fda21461087e578063c49b9a801461089457600080fd5b80637b56d78d116101495780638ee88c53116101235780638ee88c531461078957806395d89b41146107a9578063a457c2d7146107be578063a9059cbb146107de57600080fd5b80637b56d78d146107355780637d1db4a5146107555780638da5cb5b1461076b57600080fd5b80636dd3d39f1461064e5780636fd36cd61461068757806370690b11146106a757806370a08231146106c8578063715018a6146106e857806378a63f34146106fd57600080fd5b80633bd5d1731161024f57806352390c021161020857806360c6d8ae116101e257806360c6d8ae146105ed5780636bc87c3a146106025780636c0a24eb146106185780636d1b229d1461062e57600080fd5b806352390c02146105745780635342acb4146105945780635d0044ca146105cd57600080fd5b80633bd5d173146104bd5780633f63a83c146104dd57806343743e42146104fd578063437823ec146105135780634549b039146105335780634a74bb021461055357600080fd5b806323b872dd116102bc5780633206b4aa116102965780633206b4aa14610446578063324f8dbf1461045c578063395093511461047d5780633bb48ff71461049d57600080fd5b806323b872dd146103e05780632d83811914610400578063313ce5671461042057600080fd5b80630614117a1461030f57806306fdde0314610326578063095ea7b314610351578063165360411461038157806318160ddd146103a1578063198f1d80146103c057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b506103246109d3565b005b34801561033257600080fd5b5061033b610a47565b6040516103489190612dd1565b60405180910390f35b34801561035d57600080fd5b5061037161036c366004612d17565b610ad9565b6040519015158152602001610348565b34801561038d57600080fd5b5061032461039c366004612d5e565b610af0565b3480156103ad57600080fd5b506010545b604051908152602001610348565b3480156103cc57600080fd5b506103246103db366004612c63565b610b3c565b3480156103ec57600080fd5b506103716103fb366004612cd6565b610baf565b34801561040c57600080fd5b506103b261041b366004612d5e565b610c18565b34801561042c57600080fd5b50600d5460ff165b60405160ff9091168152602001610348565b34801561045257600080fd5b506103b260155481565b34801561046857600080fd5b50600a5461043490600160a01b900460ff1681565b34801561048957600080fd5b50610371610498366004612d17565b610c9c565b3480156104a957600080fd5b506103246104b8366004612d5e565b610cd2565b3480156104c957600080fd5b506103246104d8366004612d5e565b610d01565b3480156104e957600080fd5b506103246104f8366004612c63565b610ded565b34801561050957600080fd5b506103b260175481565b34801561051f57600080fd5b5061032461052e366004612c63565b610e60565b34801561053f57600080fd5b506103b261054e366004612d77565b610eae565b34801561055f57600080fd5b50601e5461037190600160a81b900460ff1681565b34801561058057600080fd5b5061032461058f366004612c63565b610f3d565b3480156105a057600080fd5b506103716105af366004612c63565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156105d957600080fd5b506103246105e8366004612d5e565b611108565b3480156105f957600080fd5b506012546103b2565b34801561060e57600080fd5b506103b260195481565b34801561062457600080fd5b506103b2600f5481565b34801561063a57600080fd5b50610324610649366004612d5e565b6111a9565b34801561065a57600080fd5b50610371610669366004612c63565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561069357600080fd5b506103246106a2366004612c63565b611395565b3480156106b357600080fd5b50600a5461043490600160a81b900460ff1681565b3480156106d457600080fd5b506103b26106e3366004612c63565b6113e1565b3480156106f457600080fd5b50610324611440565b34801561070957600080fd5b50601e5461071d906001600160a01b031681565b6040516001600160a01b039091168152602001610348565b34801561074157600080fd5b50610324610750366004612c63565b6114b4565b34801561076157600080fd5b506103b2600e5481565b34801561077757600080fd5b506000546001600160a01b031661071d565b34801561079557600080fd5b506103246107a4366004612d5e565b61152a565b3480156107b557600080fd5b5061033b61156d565b3480156107ca57600080fd5b506103716107d9366004612d17565b61157c565b3480156107ea57600080fd5b506103716107f9366004612d17565b6115cb565b34801561080a57600080fd5b50610324610819366004612d5e565b6115d8565b34801561082a57600080fd5b50600a5461071d906001600160a01b031681565b34801561084a57600080fd5b50610324610859366004612c63565b611673565b34801561086a57600080fd5b5060095461071d906001600160a01b031681565b34801561088a57600080fd5b506103b260135481565b3480156108a057600080fd5b506103246108af366004612d43565b6116e9565b3480156108c057600080fd5b50601d5461071d906001600160a01b031681565b3480156108e057600080fd5b506103246108ef366004612d5e565b61176b565b34801561090057600080fd5b5061037161090f366004612c63565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561093957600080fd5b50610324610948366004612d5e565b61179a565b34801561095957600080fd5b506103b2610968366004612c9d565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561099f57600080fd5b506103246109ae366004612c63565b6117d6565b3480156109bf57600080fd5b506103246109ce366004612c63565b611821565b6000546001600160a01b03163314610a065760405162461bcd60e51b81526004016109fd90612e26565b60405180910390fd5b334715610a44576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610a42573d6000803e3d6000fd5b505b50565b6060600b8054610a569061306b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a829061306b565b8015610acf5780601f10610aa457610100808354040283529160200191610acf565b820191906000526020600020905b815481529060010190602001808311610ab257829003601f168201915b5050505050905090565b6000610ae6338484611a2b565b5060015b92915050565b6000546001600160a01b03163314610b1a5760405162461bcd60e51b81526004016109fd90612e26565b600d54610b3690610b2f9060ff16600a612f8a565b82906119ac565b601f5550565b6000546001600160a01b03163314610b665760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b038116600081815260066020526040808220805460ff19169055517f183b051729b03844aadf4263108abd7533fb914e6e4bbdad5f026ed9d5f9dbd69190a250565b6000610bbc848484611b4f565b610c0e8433610c0985604051806060016040528060288152602001613103602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611f29565b611a2b565b5060019392505050565b6000601154821115610c7f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109fd565b6000610c89611f63565b9050610c95838261196a565b9392505050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610ae6918590610c09908661190b565b6000546001600160a01b03163314610cfc5760405162461bcd60e51b81526004016109fd90612e26565b601555565b3360008181526004602052604090205460ff1615610d765760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109fd565b6000610d8183611f86565b5050506001600160a01b038616600090815260016020526040902054939450610daf93925084915050611fe1565b6001600160a01b038316600090815260016020526040902055601154610dd59082611fe1565b601155601254610de5908461190b565b601255505050565b6000546001600160a01b03163314610e175760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b038116600081815260056020526040808220805460ff19169055517f183b051729b03844aadf4263108abd7533fb914e6e4bbdad5f026ed9d5f9dbd69190a250565b6000546001600160a01b03163314610e8a5760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000601054831115610f025760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109fd565b81610f22576000610f1284611f86565b50949650610aea95505050505050565b6000610f2d84611f86565b50939650610aea95505050505050565b6000546001600160a01b03163314610f675760405162461bcd60e51b81526004016109fd90612e26565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610fdf5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b60648201526084016109fd565b6001600160a01b03811660009081526004602052604090205460ff16156110485760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109fd565b6001600160a01b038116600090815260016020526040902054156110a2576001600160a01b03811660009081526001602052604090205461108890610c18565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146111325760405162461bcd60e51b81526004016109fd90612e26565b600a54600160a81b900460ff16811080159061115057506103e88111155b6111825760405162461bcd60e51b815260206004820152600360248201526232b93960e91b60448201526064016109fd565b6111a36103e861119d836010546119ac90919063ffffffff16565b9061196a565b600f5550565b600d546111be90610b2f9060ff16600a612f8a565b9050336111dd5760405162461bcd60e51b81526004016109fd90612e5b565b6000811161123e5760405162461bcd60e51b815260206004820152602860248201527f546f6b656e732076616c75652073686f756c642062652067726561746572207460448201526768656e205a65726f60c01b60648201526084016109fd565b611247336113e1565b8111156112b55760405162461bcd60e51b815260206004820152603660248201527f546f6b656e732076616c75652073686f756c64206265206c657373207468656e60448201527520657175616c20746f20796f75722062616c616e636560501b60648201526084016109fd565b60006112c96112c2611f63565b83906119ac565b3360009081526004602052604090205490915060ff161561130f57336000908152600260205260409020546112fe9083611fe1565b336000908152600260205260409020555b336000908152600160205260409020546113299082611fe1565b336000908152600160205260409020556010546113469083611fe1565b6010556011546113569082611fe1565b601155604051828152309033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6000546001600160a01b031633146113bf5760405162461bcd60e51b81526004016109fd90612e26565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526004602052604081205460ff161561141e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610aea90610c18565b6000546001600160a01b0316331461146a5760405162461bcd60e51b81526004016109fd90612e26565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114de5760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b038116600081815260056020526040808220805460ff19166001179055517f6e5f1e611296b1feb2311cd113f0cc0f751d69aae3c82fc1bd4590728e1fcde59190a250565b6000546001600160a01b031633146115545760405162461bcd60e51b81526004016109fd90612e26565b601981905560175461156790829061190b565b601b5550565b6060600c8054610a569061306b565b6000610ae63384610c098560405180606001604052806025815260200161312b602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611f29565b6000610ae6338484611b4f565b6000546001600160a01b031633146116025760405162461bcd60e51b81526004016109fd90612e26565b600a54600160a01b900460ff16811080159061162057506103e88111155b6116525760405162461bcd60e51b815260206004820152600360248201526232b93960e91b60448201526064016109fd565b61166d6103e861119d836010546119ac90919063ffffffff16565b600e5550565b6000546001600160a01b0316331461169d5760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f6e5f1e611296b1feb2311cd113f0cc0f751d69aae3c82fc1bd4590728e1fcde59190a250565b6000546001600160a01b031633146117135760405162461bcd60e51b81526004016109fd90612e26565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061176090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117955760405162461bcd60e51b81526004016109fd90612e26565b601355565b6000546001600160a01b031633146117c45760405162461bcd60e51b81526004016109fd90612e26565b6017819055601954611567908261190b565b6000546001600160a01b031633146118005760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b0316331461184b5760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b0381166118b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806119188385612f0d565b905083811015610c955760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109fd565b6000610c9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612023565b6000826119bb57506000610aea565b60006119c78385613035565b9050826119d48583612f25565b14610c955760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109fd565b6001600160a01b038316611a8d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109fd565b6001600160a01b038216611aee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109fd565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bb35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109fd565b6001600160a01b038216611c155760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109fd565b60008111611c775760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109fd565b601e546001600160a01b038481169116148015611ca257506000546001600160a01b03848116911614155b8015611cbc57506000546001600160a01b03838116911614155b15611dc6576001600160a01b03821660009081526005602052604090205460ff16158015611d0357506001600160a01b03821660009081526006602052604090205460ff16155b15611dc157600e54811115611d565760405162461bcd60e51b8152602060048201526019602482015278115e18d959591cc81b585e1a5b5d5b48151608185b5bdd5b9d603a1b60448201526064016109fd565b6000611d61836113e1565b600f54909150611d718383612f0d565b1115611dbf5760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e7400000060448201526064016109fd565b505b611e4f565b6001600160a01b03831660009081526005602052604090205460ff16158015611dfc5750601e546001600160a01b038381169116145b15611e4f57600e54811115611e4f5760405162461bcd60e51b8152602060048201526019602482015278115e18d959591cc81b585e1a5b5d5b48151608185b5bdd5b9d603a1b60448201526064016109fd565b6000611e5a306113e1565b9050600e548110611e6a5750600e545b601f5481108015908190611e885750601e54600160a01b900460ff16155b8015611ea25750601e546001600160a01b03868116911614155b8015611eb75750601e54600160a81b900460ff165b15611eca57601f549150611eca82612051565b6001600160a01b03851660009081526003602052604090205460019060ff1680611f0c57506001600160a01b03851660009081526003602052604090205460ff165b15611f15575060005b611f2186868684612178565b505050505050565b60008184841115611f4d5760405162461bcd60e51b81526004016109fd9190612dd1565b506000611f5a8486613054565b95945050505050565b6000806000611f70612307565b9092509050611f7f828261196a565b9250505090565b6000806000806000806000806000806000611fa08c612489565b93509350935093506000806000611fc18f878688611fbc611f63565b6124de565b919f509d509b509599509397509195509350505050919395979092949650565b6000610c9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f29565b600081836120445760405162461bcd60e51b81526004016109fd9190612dd1565b506000611f5a8486612f25565b601e805460ff60a01b1916600160a01b17905560175481904790156120c8576000612087601754856119ac90919063ffffffff16565b905061209e601b548261196a90919063ffffffff16565b90506120aa8482611fe1565b6009549093506120c3906001600160a01b031682612540565b479150505b601954156121665760006120dd83600261196a565b905060006120eb8483611fe1565b90506120f73083612540565b60006121034785611fe1565b905061212161211a6000546001600160a01b031690565b83836126aa565b60408051848152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505b5050601e805460ff60a01b1916905550565b8061218557612185612764565b6001600160a01b03841660009081526004602052604090205460ff1680156121c657506001600160a01b03831660009081526004602052604090205460ff16155b156121db576121d68484846127d7565b6122d9565b6001600160a01b03841660009081526004602052604090205460ff1615801561221c57506001600160a01b03831660009081526004602052604090205460ff165b1561222c576121d684848461291e565b6001600160a01b03841660009081526004602052604090205460ff1615801561226e57506001600160a01b03831660009081526004602052604090205460ff16155b1561227e576121d68484846129dd565b6001600160a01b03841660009081526004602052604090205460ff1680156122be57506001600160a01b03831660009081526004602052604090205460ff165b156122ce576121d6848484612a37565b6122d98484846129dd565b8061230157612301601a54601955601454601355601854601755601654601555601c54601b55565b50505050565b6011546010546000918291825b60085481101561245957826001600060088481548110612336576123366130d7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123a1575081600260006008848154811061237a5761237a6130d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123b757601154601054945094505050509091565b6123fd60016000600884815481106123d1576123d16130d7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611fe1565b92506124456002600060088481548110612419576124196130d7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611fe1565b915080612451816130a6565b915050612314565b506010546011546124699161196a565b821015612480576011546010549350935050509091565b90939092509050565b600080600080600061249a86612ac0565b905060006124a787612add565b905060006124b488612afa565b905060006124ce836124c884818d89611fe1565b90611fe1565b9993985091965094509092505050565b60008080806124ed89866119ac565b905060006124fb89876119ac565b9050600061250988886119ac565b905060006125178a896119ac565b9050600061252b836124c884818989611fe1565b949d949c50929a509298505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612575576125756130d7565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156125c957600080fd5b505afa1580156125dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126019190612c80565b81600181518110612614576126146130d7565b6001600160a01b039283166020918202929092010152601d5461263a9130911684611a2b565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612673908590600090869089904290600401612e9c565b600060405180830381600087803b15801561268d57600080fd5b505af11580156126a1573d6000803e3d6000fd5b50505050505050565b601d546126c29030906001600160a01b031684611a2b565b601d5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0385811660848301524260a48301529091169063f305d71990839060c4016060604051808303818588803b15801561272b57600080fd5b505af115801561273f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f219190612da3565b601b541580156127745750601354155b80156127805750601954155b801561278c5750601754155b80156127985750601554155b1561279f57565b60198054601a55601380546014556017805460185560158054601655601b8054601c5560009384905591839055829055918190559055565b60008060008060008060006127eb88611f86565b965096509650965096509650965061283188600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611fe190919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546128609088611fe1565b6001600160a01b03808c1660009081526001602052604080822093909355908b168152205461288f908761190b565b6001600160a01b038a166000908152600160205260409020556128b28a83612b17565b6128bb81612ba1565b6128c58584612c2a565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161290a91815260200190565b60405180910390a350505050505050505050565b600080600080600080600061293288611f86565b965096509650965096509650965061297887600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611fe190919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c168152600290915220546129ae908561190b565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461288f908761190b565b60008060008060008060006129f188611f86565b965096509650965096509650965061286087600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611fe190919063ffffffff16565b6000806000806000806000612a4b88611f86565b9650965096509650965096509650612a9188600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611fe190919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546129789088611fe1565b6000610aea6103e861119d601554856119ac90919063ffffffff16565b6000610aea6103e861119d601354856119ac90919063ffffffff16565b6000610aea6103e861119d601b54856119ac90919063ffffffff16565b8015610a42576001600160a01b038216612b435760405162461bcd60e51b81526004016109fd90612e5b565b601054612b509082611fe1565b601055612b6a612b616112c2611f63565b60115490611fe1565b601155604051818152309033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611389565b6000612bab611f63565b90506000612bb983836119ac565b30600090815260016020526040902054909150612bd6908261190b565b3060009081526001602090815260408083209390935560049052205460ff1615612c255730600090815260026020526040902054612c14908461190b565b306000908152600260205260409020555b505050565b601154612c379083611fe1565b601155601254612c47908261190b565b6012555050565b80358015158114612c5e57600080fd5b919050565b600060208284031215612c7557600080fd5b8135610c95816130ed565b600060208284031215612c9257600080fd5b8151610c95816130ed565b60008060408385031215612cb057600080fd5b8235612cbb816130ed565b91506020830135612ccb816130ed565b809150509250929050565b600080600060608486031215612ceb57600080fd5b8335612cf6816130ed565b92506020840135612d06816130ed565b929592945050506040919091013590565b60008060408385031215612d2a57600080fd5b8235612d35816130ed565b946020939093013593505050565b600060208284031215612d5557600080fd5b610c9582612c4e565b600060208284031215612d7057600080fd5b5035919050565b60008060408385031215612d8a57600080fd5b82359150612d9a60208401612c4e565b90509250929050565b600080600060608486031215612db857600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612dfe57858101830151858201604001528201612de2565b81811115612e10576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612eec5784516001600160a01b031683529383019391830191600101612ec7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f2057612f206130c1565b500190565b600082612f4257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612f82578160001904821115612f6857612f686130c1565b80851615612f7557918102915b93841c9390800290612f4c565b509250929050565b6000610c9560ff841683600082612fa357506001610aea565b81612fb057506000610aea565b8160018114612fc65760028114612fd057612fec565b6001915050610aea565b60ff841115612fe157612fe16130c1565b50506001821b610aea565b5060208310610133831016604e8410600b841016171561300f575081810a610aea565b6130198383612f47565b806000190482111561302d5761302d6130c1565b029392505050565b600081600019048311821515161561304f5761304f6130c1565b500290565b600082821015613066576130666130c1565b500390565b600181811c9082168061307f57607f821691505b602082108114156130a057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156130ba576130ba6130c1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610a4457600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ba76a2d3f222b173701d60e322e282f26fa9b124d4d79d90fbd083333f38348264736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014

Deployed Bytecode

0x6080604052600436106103035760003560e01c80636dd3d39f11610190578063bc337182116100dc578063c7639d8011610095578063dc56f2b61161006f578063dc56f2b61461092d578063dd62ed3e1461094d578063ea2f0b3714610993578063f2fde38b146109b357600080fd5b8063c7639d80146108b4578063cea26958146108d4578063d3b64ecd146108f457600080fd5b8063bc337182146107fe578063bd3900c01461081e578063bd7778141461083e578063bfd5bf1c1461085e578063c0b0fda21461087e578063c49b9a801461089457600080fd5b80637b56d78d116101495780638ee88c53116101235780638ee88c531461078957806395d89b41146107a9578063a457c2d7146107be578063a9059cbb146107de57600080fd5b80637b56d78d146107355780637d1db4a5146107555780638da5cb5b1461076b57600080fd5b80636dd3d39f1461064e5780636fd36cd61461068757806370690b11146106a757806370a08231146106c8578063715018a6146106e857806378a63f34146106fd57600080fd5b80633bd5d1731161024f57806352390c021161020857806360c6d8ae116101e257806360c6d8ae146105ed5780636bc87c3a146106025780636c0a24eb146106185780636d1b229d1461062e57600080fd5b806352390c02146105745780635342acb4146105945780635d0044ca146105cd57600080fd5b80633bd5d173146104bd5780633f63a83c146104dd57806343743e42146104fd578063437823ec146105135780634549b039146105335780634a74bb021461055357600080fd5b806323b872dd116102bc5780633206b4aa116102965780633206b4aa14610446578063324f8dbf1461045c578063395093511461047d5780633bb48ff71461049d57600080fd5b806323b872dd146103e05780632d83811914610400578063313ce5671461042057600080fd5b80630614117a1461030f57806306fdde0314610326578063095ea7b314610351578063165360411461038157806318160ddd146103a1578063198f1d80146103c057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b506103246109d3565b005b34801561033257600080fd5b5061033b610a47565b6040516103489190612dd1565b60405180910390f35b34801561035d57600080fd5b5061037161036c366004612d17565b610ad9565b6040519015158152602001610348565b34801561038d57600080fd5b5061032461039c366004612d5e565b610af0565b3480156103ad57600080fd5b506010545b604051908152602001610348565b3480156103cc57600080fd5b506103246103db366004612c63565b610b3c565b3480156103ec57600080fd5b506103716103fb366004612cd6565b610baf565b34801561040c57600080fd5b506103b261041b366004612d5e565b610c18565b34801561042c57600080fd5b50600d5460ff165b60405160ff9091168152602001610348565b34801561045257600080fd5b506103b260155481565b34801561046857600080fd5b50600a5461043490600160a01b900460ff1681565b34801561048957600080fd5b50610371610498366004612d17565b610c9c565b3480156104a957600080fd5b506103246104b8366004612d5e565b610cd2565b3480156104c957600080fd5b506103246104d8366004612d5e565b610d01565b3480156104e957600080fd5b506103246104f8366004612c63565b610ded565b34801561050957600080fd5b506103b260175481565b34801561051f57600080fd5b5061032461052e366004612c63565b610e60565b34801561053f57600080fd5b506103b261054e366004612d77565b610eae565b34801561055f57600080fd5b50601e5461037190600160a81b900460ff1681565b34801561058057600080fd5b5061032461058f366004612c63565b610f3d565b3480156105a057600080fd5b506103716105af366004612c63565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156105d957600080fd5b506103246105e8366004612d5e565b611108565b3480156105f957600080fd5b506012546103b2565b34801561060e57600080fd5b506103b260195481565b34801561062457600080fd5b506103b2600f5481565b34801561063a57600080fd5b50610324610649366004612d5e565b6111a9565b34801561065a57600080fd5b50610371610669366004612c63565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561069357600080fd5b506103246106a2366004612c63565b611395565b3480156106b357600080fd5b50600a5461043490600160a81b900460ff1681565b3480156106d457600080fd5b506103b26106e3366004612c63565b6113e1565b3480156106f457600080fd5b50610324611440565b34801561070957600080fd5b50601e5461071d906001600160a01b031681565b6040516001600160a01b039091168152602001610348565b34801561074157600080fd5b50610324610750366004612c63565b6114b4565b34801561076157600080fd5b506103b2600e5481565b34801561077757600080fd5b506000546001600160a01b031661071d565b34801561079557600080fd5b506103246107a4366004612d5e565b61152a565b3480156107b557600080fd5b5061033b61156d565b3480156107ca57600080fd5b506103716107d9366004612d17565b61157c565b3480156107ea57600080fd5b506103716107f9366004612d17565b6115cb565b34801561080a57600080fd5b50610324610819366004612d5e565b6115d8565b34801561082a57600080fd5b50600a5461071d906001600160a01b031681565b34801561084a57600080fd5b50610324610859366004612c63565b611673565b34801561086a57600080fd5b5060095461071d906001600160a01b031681565b34801561088a57600080fd5b506103b260135481565b3480156108a057600080fd5b506103246108af366004612d43565b6116e9565b3480156108c057600080fd5b50601d5461071d906001600160a01b031681565b3480156108e057600080fd5b506103246108ef366004612d5e565b61176b565b34801561090057600080fd5b5061037161090f366004612c63565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561093957600080fd5b50610324610948366004612d5e565b61179a565b34801561095957600080fd5b506103b2610968366004612c9d565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561099f57600080fd5b506103246109ae366004612c63565b6117d6565b3480156109bf57600080fd5b506103246109ce366004612c63565b611821565b6000546001600160a01b03163314610a065760405162461bcd60e51b81526004016109fd90612e26565b60405180910390fd5b334715610a44576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610a42573d6000803e3d6000fd5b505b50565b6060600b8054610a569061306b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a829061306b565b8015610acf5780601f10610aa457610100808354040283529160200191610acf565b820191906000526020600020905b815481529060010190602001808311610ab257829003601f168201915b5050505050905090565b6000610ae6338484611a2b565b5060015b92915050565b6000546001600160a01b03163314610b1a5760405162461bcd60e51b81526004016109fd90612e26565b600d54610b3690610b2f9060ff16600a612f8a565b82906119ac565b601f5550565b6000546001600160a01b03163314610b665760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b038116600081815260066020526040808220805460ff19169055517f183b051729b03844aadf4263108abd7533fb914e6e4bbdad5f026ed9d5f9dbd69190a250565b6000610bbc848484611b4f565b610c0e8433610c0985604051806060016040528060288152602001613103602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611f29565b611a2b565b5060019392505050565b6000601154821115610c7f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109fd565b6000610c89611f63565b9050610c95838261196a565b9392505050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610ae6918590610c09908661190b565b6000546001600160a01b03163314610cfc5760405162461bcd60e51b81526004016109fd90612e26565b601555565b3360008181526004602052604090205460ff1615610d765760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109fd565b6000610d8183611f86565b5050506001600160a01b038616600090815260016020526040902054939450610daf93925084915050611fe1565b6001600160a01b038316600090815260016020526040902055601154610dd59082611fe1565b601155601254610de5908461190b565b601255505050565b6000546001600160a01b03163314610e175760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b038116600081815260056020526040808220805460ff19169055517f183b051729b03844aadf4263108abd7533fb914e6e4bbdad5f026ed9d5f9dbd69190a250565b6000546001600160a01b03163314610e8a5760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000601054831115610f025760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109fd565b81610f22576000610f1284611f86565b50949650610aea95505050505050565b6000610f2d84611f86565b50939650610aea95505050505050565b6000546001600160a01b03163314610f675760405162461bcd60e51b81526004016109fd90612e26565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610fdf5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b60648201526084016109fd565b6001600160a01b03811660009081526004602052604090205460ff16156110485760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109fd565b6001600160a01b038116600090815260016020526040902054156110a2576001600160a01b03811660009081526001602052604090205461108890610c18565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146111325760405162461bcd60e51b81526004016109fd90612e26565b600a54600160a81b900460ff16811080159061115057506103e88111155b6111825760405162461bcd60e51b815260206004820152600360248201526232b93960e91b60448201526064016109fd565b6111a36103e861119d836010546119ac90919063ffffffff16565b9061196a565b600f5550565b600d546111be90610b2f9060ff16600a612f8a565b9050336111dd5760405162461bcd60e51b81526004016109fd90612e5b565b6000811161123e5760405162461bcd60e51b815260206004820152602860248201527f546f6b656e732076616c75652073686f756c642062652067726561746572207460448201526768656e205a65726f60c01b60648201526084016109fd565b611247336113e1565b8111156112b55760405162461bcd60e51b815260206004820152603660248201527f546f6b656e732076616c75652073686f756c64206265206c657373207468656e60448201527520657175616c20746f20796f75722062616c616e636560501b60648201526084016109fd565b60006112c96112c2611f63565b83906119ac565b3360009081526004602052604090205490915060ff161561130f57336000908152600260205260409020546112fe9083611fe1565b336000908152600260205260409020555b336000908152600160205260409020546113299082611fe1565b336000908152600160205260409020556010546113469083611fe1565b6010556011546113569082611fe1565b601155604051828152309033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6000546001600160a01b031633146113bf5760405162461bcd60e51b81526004016109fd90612e26565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526004602052604081205460ff161561141e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610aea90610c18565b6000546001600160a01b0316331461146a5760405162461bcd60e51b81526004016109fd90612e26565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114de5760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b038116600081815260056020526040808220805460ff19166001179055517f6e5f1e611296b1feb2311cd113f0cc0f751d69aae3c82fc1bd4590728e1fcde59190a250565b6000546001600160a01b031633146115545760405162461bcd60e51b81526004016109fd90612e26565b601981905560175461156790829061190b565b601b5550565b6060600c8054610a569061306b565b6000610ae63384610c098560405180606001604052806025815260200161312b602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611f29565b6000610ae6338484611b4f565b6000546001600160a01b031633146116025760405162461bcd60e51b81526004016109fd90612e26565b600a54600160a01b900460ff16811080159061162057506103e88111155b6116525760405162461bcd60e51b815260206004820152600360248201526232b93960e91b60448201526064016109fd565b61166d6103e861119d836010546119ac90919063ffffffff16565b600e5550565b6000546001600160a01b0316331461169d5760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f6e5f1e611296b1feb2311cd113f0cc0f751d69aae3c82fc1bd4590728e1fcde59190a250565b6000546001600160a01b031633146117135760405162461bcd60e51b81526004016109fd90612e26565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061176090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117955760405162461bcd60e51b81526004016109fd90612e26565b601355565b6000546001600160a01b031633146117c45760405162461bcd60e51b81526004016109fd90612e26565b6017819055601954611567908261190b565b6000546001600160a01b031633146118005760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b0316331461184b5760405162461bcd60e51b81526004016109fd90612e26565b6001600160a01b0381166118b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806119188385612f0d565b905083811015610c955760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109fd565b6000610c9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612023565b6000826119bb57506000610aea565b60006119c78385613035565b9050826119d48583612f25565b14610c955760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109fd565b6001600160a01b038316611a8d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109fd565b6001600160a01b038216611aee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109fd565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bb35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109fd565b6001600160a01b038216611c155760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109fd565b60008111611c775760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109fd565b601e546001600160a01b038481169116148015611ca257506000546001600160a01b03848116911614155b8015611cbc57506000546001600160a01b03838116911614155b15611dc6576001600160a01b03821660009081526005602052604090205460ff16158015611d0357506001600160a01b03821660009081526006602052604090205460ff16155b15611dc157600e54811115611d565760405162461bcd60e51b8152602060048201526019602482015278115e18d959591cc81b585e1a5b5d5b48151608185b5bdd5b9d603a1b60448201526064016109fd565b6000611d61836113e1565b600f54909150611d718383612f0d565b1115611dbf5760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e7400000060448201526064016109fd565b505b611e4f565b6001600160a01b03831660009081526005602052604090205460ff16158015611dfc5750601e546001600160a01b038381169116145b15611e4f57600e54811115611e4f5760405162461bcd60e51b8152602060048201526019602482015278115e18d959591cc81b585e1a5b5d5b48151608185b5bdd5b9d603a1b60448201526064016109fd565b6000611e5a306113e1565b9050600e548110611e6a5750600e545b601f5481108015908190611e885750601e54600160a01b900460ff16155b8015611ea25750601e546001600160a01b03868116911614155b8015611eb75750601e54600160a81b900460ff165b15611eca57601f549150611eca82612051565b6001600160a01b03851660009081526003602052604090205460019060ff1680611f0c57506001600160a01b03851660009081526003602052604090205460ff165b15611f15575060005b611f2186868684612178565b505050505050565b60008184841115611f4d5760405162461bcd60e51b81526004016109fd9190612dd1565b506000611f5a8486613054565b95945050505050565b6000806000611f70612307565b9092509050611f7f828261196a565b9250505090565b6000806000806000806000806000806000611fa08c612489565b93509350935093506000806000611fc18f878688611fbc611f63565b6124de565b919f509d509b509599509397509195509350505050919395979092949650565b6000610c9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f29565b600081836120445760405162461bcd60e51b81526004016109fd9190612dd1565b506000611f5a8486612f25565b601e805460ff60a01b1916600160a01b17905560175481904790156120c8576000612087601754856119ac90919063ffffffff16565b905061209e601b548261196a90919063ffffffff16565b90506120aa8482611fe1565b6009549093506120c3906001600160a01b031682612540565b479150505b601954156121665760006120dd83600261196a565b905060006120eb8483611fe1565b90506120f73083612540565b60006121034785611fe1565b905061212161211a6000546001600160a01b031690565b83836126aa565b60408051848152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505b5050601e805460ff60a01b1916905550565b8061218557612185612764565b6001600160a01b03841660009081526004602052604090205460ff1680156121c657506001600160a01b03831660009081526004602052604090205460ff16155b156121db576121d68484846127d7565b6122d9565b6001600160a01b03841660009081526004602052604090205460ff1615801561221c57506001600160a01b03831660009081526004602052604090205460ff165b1561222c576121d684848461291e565b6001600160a01b03841660009081526004602052604090205460ff1615801561226e57506001600160a01b03831660009081526004602052604090205460ff16155b1561227e576121d68484846129dd565b6001600160a01b03841660009081526004602052604090205460ff1680156122be57506001600160a01b03831660009081526004602052604090205460ff165b156122ce576121d6848484612a37565b6122d98484846129dd565b8061230157612301601a54601955601454601355601854601755601654601555601c54601b55565b50505050565b6011546010546000918291825b60085481101561245957826001600060088481548110612336576123366130d7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123a1575081600260006008848154811061237a5761237a6130d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123b757601154601054945094505050509091565b6123fd60016000600884815481106123d1576123d16130d7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611fe1565b92506124456002600060088481548110612419576124196130d7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611fe1565b915080612451816130a6565b915050612314565b506010546011546124699161196a565b821015612480576011546010549350935050509091565b90939092509050565b600080600080600061249a86612ac0565b905060006124a787612add565b905060006124b488612afa565b905060006124ce836124c884818d89611fe1565b90611fe1565b9993985091965094509092505050565b60008080806124ed89866119ac565b905060006124fb89876119ac565b9050600061250988886119ac565b905060006125178a896119ac565b9050600061252b836124c884818989611fe1565b949d949c50929a509298505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612575576125756130d7565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156125c957600080fd5b505afa1580156125dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126019190612c80565b81600181518110612614576126146130d7565b6001600160a01b039283166020918202929092010152601d5461263a9130911684611a2b565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612673908590600090869089904290600401612e9c565b600060405180830381600087803b15801561268d57600080fd5b505af11580156126a1573d6000803e3d6000fd5b50505050505050565b601d546126c29030906001600160a01b031684611a2b565b601d5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0385811660848301524260a48301529091169063f305d71990839060c4016060604051808303818588803b15801561272b57600080fd5b505af115801561273f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f219190612da3565b601b541580156127745750601354155b80156127805750601954155b801561278c5750601754155b80156127985750601554155b1561279f57565b60198054601a55601380546014556017805460185560158054601655601b8054601c5560009384905591839055829055918190559055565b60008060008060008060006127eb88611f86565b965096509650965096509650965061283188600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611fe190919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546128609088611fe1565b6001600160a01b03808c1660009081526001602052604080822093909355908b168152205461288f908761190b565b6001600160a01b038a166000908152600160205260409020556128b28a83612b17565b6128bb81612ba1565b6128c58584612c2a565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161290a91815260200190565b60405180910390a350505050505050505050565b600080600080600080600061293288611f86565b965096509650965096509650965061297887600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611fe190919063ffffffff16565b6001600160a01b03808c16600090815260016020908152604080832094909455918c168152600290915220546129ae908561190b565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461288f908761190b565b60008060008060008060006129f188611f86565b965096509650965096509650965061286087600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611fe190919063ffffffff16565b6000806000806000806000612a4b88611f86565b9650965096509650965096509650612a9188600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611fe190919063ffffffff16565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546129789088611fe1565b6000610aea6103e861119d601554856119ac90919063ffffffff16565b6000610aea6103e861119d601354856119ac90919063ffffffff16565b6000610aea6103e861119d601b54856119ac90919063ffffffff16565b8015610a42576001600160a01b038216612b435760405162461bcd60e51b81526004016109fd90612e5b565b601054612b509082611fe1565b601055612b6a612b616112c2611f63565b60115490611fe1565b601155604051818152309033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611389565b6000612bab611f63565b90506000612bb983836119ac565b30600090815260016020526040902054909150612bd6908261190b565b3060009081526001602090815260408083209390935560049052205460ff1615612c255730600090815260026020526040902054612c14908461190b565b306000908152600260205260409020555b505050565b601154612c379083611fe1565b601155601254612c47908261190b565b6012555050565b80358015158114612c5e57600080fd5b919050565b600060208284031215612c7557600080fd5b8135610c95816130ed565b600060208284031215612c9257600080fd5b8151610c95816130ed565b60008060408385031215612cb057600080fd5b8235612cbb816130ed565b91506020830135612ccb816130ed565b809150509250929050565b600080600060608486031215612ceb57600080fd5b8335612cf6816130ed565b92506020840135612d06816130ed565b929592945050506040919091013590565b60008060408385031215612d2a57600080fd5b8235612d35816130ed565b946020939093013593505050565b600060208284031215612d5557600080fd5b610c9582612c4e565b600060208284031215612d7057600080fd5b5035919050565b60008060408385031215612d8a57600080fd5b82359150612d9a60208401612c4e565b90509250929050565b600080600060608486031215612db857600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612dfe57858101830151858201604001528201612de2565b81811115612e10576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612eec5784516001600160a01b031683529383019391830191600101612ec7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f2057612f206130c1565b500190565b600082612f4257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612f82578160001904821115612f6857612f686130c1565b80851615612f7557918102915b93841c9390800290612f4c565b509250929050565b6000610c9560ff841683600082612fa357506001610aea565b81612fb057506000610aea565b8160018114612fc65760028114612fd057612fec565b6001915050610aea565b60ff841115612fe157612fe16130c1565b50506001821b610aea565b5060208310610133831016604e8410600b841016171561300f575081810a610aea565b6130198383612f47565b806000190482111561302d5761302d6130c1565b029392505050565b600081600019048311821515161561304f5761304f6130c1565b500290565b600082821015613066576130666130c1565b500390565b600181811c9082168061307f57607f821691505b602082108114156130a057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156130ba576130ba6130c1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610a4457600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ba76a2d3f222b173701d60e322e282f26fa9b124d4d79d90fbd083333f38348264736f6c63430008060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014

-----Decoded View---------------
Arg [0] : setMxTx (uint8): 20
Arg [1] : setMxWallet (uint8): 20

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000014


Deployed Bytecode Sourcemap

14887:26035:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40719:200;;;;;;;;;;;;;:::i;:::-;;19433:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20349:161;;;;;;;;;;-1:-1:-1;20349:161:0;;;;;:::i;:::-;;:::i;:::-;;;4264:14:1;;4257:22;4239:41;;4227:2;4212:18;20349:161:0;4194:92:1;30982:188:0;;;;;;;;;;-1:-1:-1;30982:188:0;;;;;:::i;:::-;;:::i;19710:95::-;;;;;;;;;;-1:-1:-1;19790:7:0;;19710:95;;;13046:25:1;;;13034:2;13019:18;19710:95:0;13001:76:1;24267:181:0;;;;;;;;;;-1:-1:-1;24267:181:0;;;;;:::i;:::-;;:::i;20522:314::-;;;;;;;;;;-1:-1:-1;20522:314:0;;;;;:::i;:::-;;:::i;22313:253::-;;;;;;;;;;-1:-1:-1;22313:253:0;;;;;:::i;:::-;;:::i;19619:83::-;;;;;;;;;;-1:-1:-1;19685:9:0;;;;19619:83;;;14563:4:1;14551:17;;;14533:36;;14521:2;14506:18;19619:83:0;14488:87:1;16443:43:0;;;;;;;;;;;;;;;;15823:34;;;;;;;;;;-1:-1:-1;15823:34:0;;;;-1:-1:-1;;;15823:34:0;;;;;;20848:218;;;;;;;;;;-1:-1:-1;20848:218:0;;;;;:::i;:::-;;:::i;25041:103::-;;;;;;;;;;-1:-1:-1;25041:103:0;;;;;:::i;:::-;;:::i;21473:378::-;;;;;;;;;;-1:-1:-1;21473:378:0;;;;;:::i;:::-;;:::i;24454:170::-;;;;;;;;;;-1:-1:-1;24454:170:0;;;;;:::i;:::-;;:::i;16562:44::-;;;;;;;;;;;;;;;;23678:111;;;;;;;;;;-1:-1:-1;23678:111:0;;;;;:::i;:::-;;:::i;21863:438::-;;;;;;;;;;-1:-1:-1;21863:438:0;;;;;:::i;:::-;;:::i;17055:46::-;;;;;;;;;;-1:-1:-1;17055:46:0;;;;-1:-1:-1;;;17055:46:0;;;;;;22572:444;;;;;;;;;;-1:-1:-1;22572:444:0;;;;;:::i;:::-;;:::i;30321:123::-;;;;;;;;;;-1:-1:-1;30321:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;30409:27:0;30385:4;30409:27;;;:18;:27;;;;;;;;;30321:123;25554:237;;;;;;;;;;-1:-1:-1;25554:237:0;;;;;:::i;:::-;;:::i;21365:96::-;;;;;;;;;;-1:-1:-1;21443:10:0;;21365:96;;16680:44;;;;;;;;;;;;;;;;16067:31;;;;;;;;;;;;;;;;39974:737;;;;;;;;;;-1:-1:-1;39974:737:0;;;;;:::i;:::-;;:::i;30568:144::-;;;;;;;;;;-1:-1:-1;30568:144:0;;;;;:::i;:::-;-1:-1:-1;;;;;30665:39:0;30641:4;30665:39;;;:30;:39;;;;;;;;;30568:144;25803:135;;;;;;;;;;-1:-1:-1;25803:135:0;;;;;:::i;:::-;;:::i;15864:39::-;;;;;;;;;;-1:-1:-1;15864:39:0;;;;-1:-1:-1;;;15864:39:0;;;;;;19813:198;;;;;;;;;;-1:-1:-1;19813:198:0;;;;;:::i;:::-;;:::i;6632:148::-;;;;;;;;;;;;;:::i;16992:26::-;;;;;;;;;;-1:-1:-1;16992:26:0;;;;-1:-1:-1;;;;;16992:26:0;;;;;;-1:-1:-1;;;;;3219:32:1;;;3201:51;;3189:2;3174:18;16992:26:0;3156:102:1;24043:162:0;;;;;;;;;;-1:-1:-1;24043:162:0;;;;;:::i;:::-;;:::i;16033:27::-;;;;;;;;;;;;;;;;6410:79;;;;;;;;;;-1:-1:-1;6448:7:0;6475:6;-1:-1:-1;;;;;6475:6:0;6410:79;;25156:167;;;;;;;;;;-1:-1:-1;25156:167:0;;;;;:::i;:::-;;:::i;19524:87::-;;;;;;;;;;;;;:::i;21078:269::-;;;;;;;;;;-1:-1:-1;21078:269:0;;;;;:::i;:::-;;:::i;20019:167::-;;;;;;;;;;-1:-1:-1;20019:167:0;;;;;:::i;:::-;;:::i;25337:209::-;;;;;;;;;;-1:-1:-1;25337:209:0;;;;;:::i;:::-;;:::i;15590:94::-;;;;;;;;;;-1:-1:-1;15590:94:0;;;;-1:-1:-1;;;;;15590:94:0;;;23867:170;;;;;;;;;;-1:-1:-1;23867:170:0;;;;;:::i;:::-;;:::i;15489:94::-;;;;;;;;;;-1:-1:-1;15489:94:0;;;;-1:-1:-1;;;;;15489:94:0;;;16334:43;;;;;;;;;;;;;;;;25948:171;;;;;;;;;;-1:-1:-1;25948:171:0;;;;;:::i;:::-;;:::i;16948:37::-;;;;;;;;;;-1:-1:-1;16948:37:0;;;;-1:-1:-1;;;;;16948:37:0;;;24758:94;;;;;;;;;;-1:-1:-1;24758:94:0;;;;;:::i;:::-;;:::i;30828:142::-;;;;;;;;;;-1:-1:-1;30828:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;30927:35:0;30903:4;30927:35;;;:26;:35;;;;;;;;;30828:142;24864:165;;;;;;;;;;-1:-1:-1;24864:165:0;;;;;:::i;:::-;;:::i;20194:143::-;;;;;;;;;;-1:-1:-1;20194:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20302:18:0;;;20275:7;20302:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20194:143;24636:110;;;;;;;;;;-1:-1:-1;24636:110:0;;;;;:::i;:::-;;:::i;6792:244::-;;;;;;;;;;-1:-1:-1;6792:244:0;;;;;:::i;:::-;;:::i;40719:200::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;;;;;;;;;2761:10;40830:21:::1;:25:::0;40827:84:::1;;40870:41;::::0;-1:-1:-1;;;;;40870:18:0;::::1;::::0;40889:21:::1;40870:41:::0;::::1;;;::::0;::::1;::::0;;;40889:21;40870:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40827:84;40765:154;40719:200::o:0;19433:83::-;19470:13;19503:5;19496:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19433:83;:::o;20349:161::-;20424:4;20441:39;2761:10;20464:7;20473:6;20441:8;:39::i;:::-;-1:-1:-1;20498:4:0;20349:161;;;;;:::o;30982:188::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;31151:9:::1;::::0;31123:39:::1;::::0;31147:13:::1;::::0;31151:9:::1;;31147:2;:13;:::i;:::-;31123:18:::0;;:22:::1;:39::i;:::-;31091:29;:71:::0;-1:-1:-1;30982:188:0:o;24267:181::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24348:40:0;::::1;24391:5;24348:40:::0;;;:30:::1;:40;::::0;;;;;:48;;-1:-1:-1;;24348:48:0::1;::::0;;24412:28;::::1;::::0;24391:5;24412:28:::1;24267:181:::0;:::o;20522:314::-;20620:4;20637:36;20647:6;20655:9;20666:6;20637:9;:36::i;:::-;20684:121;20693:6;2761:10;20715:89;20753:6;20715:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20715:19:0;;;;;;:11;:19;;;;;;;;2761:10;20715:33;;;;;;;;;;:37;:89::i;:::-;20684:8;:121::i;:::-;-1:-1:-1;20824:4:0;20522:314;;;;;:::o;22313:253::-;22379:7;22418;;22407;:18;;22399:73;;;;-1:-1:-1;;;22399:73:0;;5732:2:1;22399:73:0;;;5714:21:1;5771:2;5751:18;;;5744:30;5810:34;5790:18;;;5783:62;-1:-1:-1;;;5861:18:1;;;5854:40;5911:19;;22399:73:0;5704:232:1;22399:73:0;22483:19;22506:10;:8;:10::i;:::-;22483:33;-1:-1:-1;22534:24:0;:7;22483:33;22534:11;:24::i;:::-;22527:31;22313:253;-1:-1:-1;;;22313:253:0:o;20848:218::-;2761:10;20936:4;20985:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20985:34:0;;;;;;;;;;20936:4;;20953:83;;20976:7;;20985:50;;21024:10;20985:38;:50::i;25041:103::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;25116:14:::1;:20:::0;25041:103::o;21473:378::-;2761:10;21525:14;21574:19;;;:11;:19;;;;;;;;21573:20;21565:77;;;;-1:-1:-1;;;21565:77:0;;12689:2:1;21565:77:0;;;12671:21:1;12728:2;12708:18;;;12701:30;12767:34;12747:18;;;12740:62;-1:-1:-1;;;12818:18:1;;;12811:42;12870:19;;21565:77:0;12661:234:1;21565:77:0;21654:15;21679:19;21690:7;21679:10;:19::i;:::-;-1:-1:-1;;;;;;;;21727:15:0;;;;;;:7;:15;;;;;;21653:45;;-1:-1:-1;21727:28:0;;:15;-1:-1:-1;21653:45:0;;-1:-1:-1;;21727:19:0;:28::i;:::-;-1:-1:-1;;;;;21709:15:0;;;;;;:7;:15;;;;;:46;21776:7;;:20;;21788:7;21776:11;:20::i;:::-;21766:7;:30;21820:10;;:23;;21835:7;21820:14;:23::i;:::-;21807:10;:36;-1:-1:-1;;;21473:378:0:o;24454:170::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24528:36:0;::::1;24567:5;24528:36:::0;;;:26:::1;:36;::::0;;;;;:44;;-1:-1:-1;;24528:44:0::1;::::0;;24588:28;::::1;::::0;24567:5;24588:28:::1;24454:170:::0;:::o;23678:111::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23747:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;23747:34:0::1;23777:4;23747:34;::::0;;23678:111::o;21863:438::-;21953:7;21992;;21981;:18;;21973:62;;;;-1:-1:-1;;;21973:62:0;;7665:2:1;21973:62:0;;;7647:21:1;7704:2;7684:18;;;7677:30;7743:33;7723:18;;;7716:61;7794:18;;21973:62:0;7637:181:1;21973:62:0;22051:17;22046:248;;22086:15;22111:19;22122:7;22111:10;:19::i;:::-;-1:-1:-1;22085:45:0;;-1:-1:-1;22145:14:0;;-1:-1:-1;;;;;;22145:14:0;22046:248;22194:23;22226:19;22237:7;22226:10;:19::i;:::-;-1:-1:-1;22192:53:0;;-1:-1:-1;22260:22:0;;-1:-1:-1;;;;;;22260:22:0;22572:444;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;22665:42:::1;-1:-1:-1::0;;;;;22654:53:0;::::1;;;22646:100;;;::::0;-1:-1:-1;;;22646:100:0;;12286:2:1;22646:100:0::1;::::0;::::1;12268:21:1::0;12325:2;12305:18;;;12298:30;12364:34;12344:18;;;12337:62;-1:-1:-1;;;12415:18:1;;;12408:32;12457:19;;22646:100:0::1;12258:224:1::0;22646:100:0::1;-1:-1:-1::0;;;;;22766:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22765:21;22757:61;;;::::0;-1:-1:-1;;;22757:61:0;;7309:2:1;22757:61:0::1;::::0;::::1;7291:21:1::0;7348:2;7328:18;;;7321:30;7387:29;7367:18;;;7360:57;7434:18;;22757:61:0::1;7281:177:1::0;22757:61:0::1;-1:-1:-1::0;;;;;22832:16:0;::::1;22851:1;22832:16:::0;;;:7:::1;:16;::::0;;;;;:20;22829:108:::1;;-1:-1:-1::0;;;;;22908:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22888:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22869:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22829:108:::1;-1:-1:-1::0;;;;;22947:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22947:27:0::1;22970:4;22947:27:::0;;::::1;::::0;;;22985:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22985:23:0::1;::::0;;::::1;::::0;;22572:444::o;25554:237::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;25648:21:::1;::::0;-1:-1:-1;;;25648:21:0;::::1;;;25635:34:::0;::::1;::::0;::::1;::::0;:54:::1;;;25685:4;25673:9;:16;;25635:54;25627:69;;;::::0;-1:-1:-1;;;25627:69:0;;11955:2:1;25627:69:0::1;::::0;::::1;11937:21:1::0;11994:1;11974:18;;;11967:29;-1:-1:-1;;;12012:18:1;;;12005:33;12055:18;;25627:69:0::1;11927:152:1::0;25627:69:0::1;25726:57;25767:5;25726:22;25738:9;25726:7;;:11;;:22;;;;:::i;:::-;:26:::0;::::1;:57::i;:::-;25707:16;:76:::0;-1:-1:-1;25554:237:0:o;39974:737::-;40055:9;;40039:27;;40051:13;;40055:9;;40051:2;:13;:::i;40039:27::-;40030:36;-1:-1:-1;40085:10:0;40077:70;;;;-1:-1:-1;;;40077:70:0;;;;;;;:::i;:::-;40175:1;40166:6;:10;40158:63;;;;-1:-1:-1;;;40158:63:0;;8025:2:1;40158:63:0;;;8007:21:1;8064:2;8044:18;;;8037:30;8103:34;8083:18;;;8076:62;-1:-1:-1;;;8154:18:1;;;8147:38;8202:19;;40158:63:0;7997:230:1;40158:63:0;40250:21;40260:10;40250:9;:21::i;:::-;40240:6;:31;;40232:98;;;;-1:-1:-1;;;40232:98:0;;8788:2:1;40232:98:0;;;8770:21:1;8827:2;8807:18;;;8800:30;8866:34;8846:18;;;8839:62;-1:-1:-1;;;8917:18:1;;;8910:52;8979:19;;40232:98:0;8760:244:1;40232:98:0;40351:15;40369:22;40380:10;:8;:10::i;:::-;40369:6;;:10;:22::i;:::-;40417:10;40405:23;;;;:11;:23;;;;;;40351:40;;-1:-1:-1;40405:23:0;;40402:94;;;40473:10;40465:19;;;;:7;:19;;;;;;:31;;40489:6;40465:23;:31::i;:::-;40451:10;40443:19;;;;:7;:19;;;;;:53;40402:94;40537:10;40529:19;;;;:7;:19;;;;;;:32;;40553:7;40529:23;:32::i;:::-;40515:10;40507:19;;;;:7;:19;;;;;:54;40582:7;;:19;;40594:6;40582:11;:19::i;:::-;40572:7;:29;40622:7;;:20;;40634:7;40622:11;:20::i;:::-;40612:7;:30;40660:43;;13046:25:1;;;40689:4:0;;40669:10;;40660:43;;13034:2:1;13019:18;40660:43:0;;;;;;;;40019:692;39974:737;:::o;25803:135::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;25896:16:::1;:34:::0;;-1:-1:-1;;;;;;25896:34:0::1;-1:-1:-1::0;;;;;25896:34:0;;;::::1;::::0;;;::::1;::::0;;25803:135::o;19813:198::-;-1:-1:-1;;;;;19903:20:0;;19879:7;19903:20;;;:11;:20;;;;;;;;19899:49;;;-1:-1:-1;;;;;;19932:16:0;;;;;:7;:16;;;;;;;19813:198::o;19899:49::-;-1:-1:-1;;;;;19986:16:0;;;;;;:7;:16;;;;;;19966:37;;:19;:37::i;6632:148::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;6739:1:::1;6723:6:::0;;6702:40:::1;::::0;-1:-1:-1;;;;;6723:6:0;;::::1;::::0;6702:40:::1;::::0;6739:1;;6702:40:::1;6770:1;6753:19:::0;;-1:-1:-1;;;;;;6753:19:0::1;::::0;;6632:148::o;24043:162::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24114:36:0;::::1;;::::0;;;:26:::1;:36;::::0;;;;;:43;;-1:-1:-1;;24114:43:0::1;24153:4;24114:43;::::0;;24173:24;::::1;::::0;24114:36;24173:24:::1;24043:162:::0;:::o;25156:167::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;25233:13:::1;:19:::0;;;25302:12:::1;::::0;25284:31:::1;::::0;25249:3;;25284:17:::1;:31::i;:::-;25263:18;:52:::0;-1:-1:-1;25156:167:0:o;19524:87::-;19563:13;19596:7;19589:14;;;;;:::i;21078:269::-;21171:4;21188:129;2761:10;21211:7;21220:96;21259:15;21220:96;;;;;;;;;;;;;;;;;2761:10;21220:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21220:34:0;;;;;;;;;;;;:38;:96::i;20019:167::-;20097:4;20114:42;2761:10;20138:9;20149:6;20114:9;:42::i;25337:209::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;25419:17:::1;::::0;-1:-1:-1;;;25419:17:0;::::1;;;25410:26:::0;::::1;::::0;::::1;::::0;:42:::1;;;25448:4;25440:5;:12;;25410:42;25402:57;;;::::0;-1:-1:-1;;;25402:57:0;;11955:2:1;25402:57:0::1;::::0;::::1;11937:21:1::0;11994:1;11974:18;;;11967:29;-1:-1:-1;;;12012:18:1;;;12005:33;12055:18;;25402:57:0::1;11927:152:1::0;25402:57:0::1;25485:53;25522:5;25485:18;25497:5;25485:7;;:11;;:18;;;;:::i;:53::-;25470:12;:68:::0;-1:-1:-1;25337:209:0:o;23867:170::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23942:40:0;::::1;;::::0;;;:30:::1;:40;::::0;;;;;:47;;-1:-1:-1;;23942:47:0::1;23985:4;23942:47;::::0;;24005:24;::::1;::::0;23942:40;24005:24:::1;23867:170:::0;:::o;25948:171::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;26025:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;26025:32:0::1;-1:-1:-1::0;;;;26025:32:0;;::::1;;::::0;;26073:38:::1;::::0;::::1;::::0;::::1;::::0;26049:8;4264:14:1;4257:22;4239:41;;4227:2;4212:18;;4194:92;26073:38:0::1;;;;;;;;25948:171:::0;:::o;24758:94::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;24830:8:::1;:14:::0;24758:94::o;24864:165::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;24940:12:::1;:18:::0;;;24990:13:::1;::::0;:31:::1;::::0;24955:3;24990:17:::1;:31::i;24636:110::-:0;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24703:27:0::1;24733:5;24703:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;24703:35:0::1;::::0;;24636:110::o;6792:244::-;6541:6;;-1:-1:-1;;;;;6541:6:0;2761:10;6541:22;6533:67;;;;-1:-1:-1;;;6533:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6881:22:0;::::1;6873:73;;;::::0;-1:-1:-1;;;6873:73:0;;6143:2:1;6873:73:0::1;::::0;::::1;6125:21:1::0;6182:2;6162:18;;;6155:30;6221:34;6201:18;;;6194:62;-1:-1:-1;;;6272:18:1;;;6265:36;6318:19;;6873:73:0::1;6115:228:1::0;6873:73:0::1;6983:6;::::0;;6962:38:::1;::::0;-1:-1:-1;;;;;6962:38:0;;::::1;::::0;6983:6;::::1;::::0;6962:38:::1;::::0;::::1;7011:6;:17:::0;;-1:-1:-1;;;;;;7011:17:0::1;-1:-1:-1::0;;;;;7011:17:0;;;::::1;::::0;;;::::1;::::0;;6792:244::o;855:181::-;913:7;;945:5;949:1;945;:5;:::i;:::-;933:17;;974:1;969;:6;;961:46;;;;-1:-1:-1;;;961:46:0;;6953:2:1;961:46:0;;;6935:21:1;6992:2;6972:18;;;6965:30;7031:29;7011:18;;;7004:57;7078:18;;961:46:0;6925:177:1;1883:132:0;1941:7;1968:39;1972:1;1975;1968:39;;;;;;;;;;;;;;;;;:3;:39::i;1400:471::-;1458:7;1703:6;1699:47;;-1:-1:-1;1733:1:0;1726:8;;1699:47;1758:9;1770:5;1774:1;1770;:5;:::i;:::-;1758:17;-1:-1:-1;1803:1:0;1794:5;1798:1;1758:17;1794:5;:::i;:::-;:10;1786:56;;;;-1:-1:-1;;;1786:56:0;;9211:2:1;1786:56:0;;;9193:21:1;9250:2;9230:18;;;9223:30;9289:34;9269:18;;;9262:62;-1:-1:-1;;;9340:18:1;;;9333:31;9381:19;;1786:56:0;9183:223:1;31188:337:0;-1:-1:-1;;;;;31281:19:0;;31273:68;;;;-1:-1:-1;;;31273:68:0;;11550:2:1;31273:68:0;;;11532:21:1;11589:2;11569:18;;;11562:30;11628:34;11608:18;;;11601:62;-1:-1:-1;;;11679:18:1;;;11672:34;11723:19;;31273:68:0;11522:226:1;31273:68:0;-1:-1:-1;;;;;31360:21:0;;31352:68;;;;-1:-1:-1;;;31352:68:0;;6550:2:1;31352:68:0;;;6532:21:1;6589:2;6569:18;;;6562:30;6628:34;6608:18;;;6601:62;-1:-1:-1;;;6679:18:1;;;6672:32;6721:19;;31352:68:0;6522:224:1;31352:68:0;-1:-1:-1;;;;;31433:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31485:32;;13046:25:1;;;31485:32:0;;13019:18:1;31485:32:0;;;;;;;31188:337;;;:::o;31537:2307::-;-1:-1:-1;;;;;31669:18:0;;31661:68;;;;-1:-1:-1;;;31661:68:0;;11144:2:1;31661:68:0;;;11126:21:1;11183:2;11163:18;;;11156:30;11222:34;11202:18;;;11195:62;-1:-1:-1;;;11273:18:1;;;11266:35;11318:19;;31661:68:0;11116:227:1;31661:68:0;-1:-1:-1;;;;;31748:16:0;;31740:64;;;;-1:-1:-1;;;31740:64:0;;5328:2:1;31740:64:0;;;5310:21:1;5367:2;5347:18;;;5340:30;5406:34;5386:18;;;5379:62;-1:-1:-1;;;5457:18:1;;;5450:33;5500:19;;31740:64:0;5300:225:1;31740:64:0;31832:1;31823:6;:10;31815:64;;;;-1:-1:-1;;;31815:64:0;;10332:2:1;31815:64:0;;;10314:21:1;10371:2;10351:18;;;10344:30;10410:34;10390:18;;;10383:62;-1:-1:-1;;;10461:18:1;;;10454:39;10510:19;;31815:64:0;10304:231:1;31815:64:0;31894:11;;-1:-1:-1;;;;;31886:19:0;;;31894:11;;31886:19;:38;;;;-1:-1:-1;6448:7:0;6475:6;-1:-1:-1;;;;;31909:15:0;;;6475:6;;31909:15;;31886:38;:54;;;;-1:-1:-1;6448:7:0;6475:6;-1:-1:-1;;;;;31928:12:0;;;6475:6;;31928:12;;31886:54;31883:617;;;-1:-1:-1;;;;;31970:30:0;;;;;;:26;:30;;;;;;;;31969:31;:70;;;;-1:-1:-1;;;;;;32005:34:0;;;;;;:30;:34;;;;;;;;32004:35;31969:70;31966:353;;;32077:12;;32067:6;:22;;32059:60;;;;-1:-1:-1;;;32059:60:0;;8434:2:1;32059:60:0;;;8416:21:1;8473:2;8453:18;;;8446:30;-1:-1:-1;;;8492:18:1;;;8485:55;8557:18;;32059:60:0;8406:175:1;32059:60:0;32138:32;32173:13;32183:2;32173:9;:13::i;:::-;32250:16;;32138:48;;-1:-1:-1;32213:33:0;32240:6;32138:48;32213:33;:::i;:::-;:53;;32205:95;;;;-1:-1:-1;;;32205:95:0;;9974:2:1;32205:95:0;;;9956:21:1;10013:2;9993:18;;;9986:30;10052:31;10032:18;;;10025:59;10101:18;;32205:95:0;9946:179:1;32205:95:0;32040:279;31966:353;31883:617;;;-1:-1:-1;;;;;32349:32:0;;;;;;:26;:32;;;;;;;;32348:33;:54;;;;-1:-1:-1;32391:11:0;;-1:-1:-1;;;;;32385:17:0;;;32391:11;;32385:17;32348:54;32345:155;;;32446:12;;32436:6;:22;;32428:60;;;;-1:-1:-1;;;32428:60:0;;8434:2:1;32428:60:0;;;8416:21:1;8473:2;8453:18;;;8446:30;-1:-1:-1;;;8492:18:1;;;8485:55;8557:18;;32428:60:0;8406:175:1;32428:60:0;32796:28;32827:24;32845:4;32827:9;:24::i;:::-;32796:55;;32891:12;;32867:20;:36;32864:112;;-1:-1:-1;32952:12:0;;32864:112;33041:29;;33017:53;;;;;;;33099:57;;-1:-1:-1;33140:16:0;;-1:-1:-1;;;33140:16:0;;;;33139:17;33099:57;:93;;;;-1:-1:-1;33181:11:0;;-1:-1:-1;;;;;33173:19:0;;;33181:11;;33173:19;;33099:93;:131;;;;-1:-1:-1;33209:21:0;;-1:-1:-1;;;33209:21:0;;;;33099:131;33081:320;;;33280:29;;33257:52;;33353:36;33368:20;33353:14;:36::i;:::-;-1:-1:-1;;;;;33609:24:0;;33482:12;33609:24;;;:18;:24;;;;;;33497:4;;33609:24;;;:50;;-1:-1:-1;;;;;;33637:22:0;;;;;;:18;:22;;;;;;;;33609:50;33606:96;;;-1:-1:-1;33685:5:0;33606:96;33788:38;33803:4;33808:2;33811:6;33818:7;33788:14;:38::i;:::-;31640:2204;;;31537:2307;;;:::o;1196:192::-;1282:7;1318:12;1310:6;;;;1302:29;;;;-1:-1:-1;;;1302:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1342:9:0;1354:5;1358:1;1354;:5;:::i;:::-;1342:17;1196:192;-1:-1:-1;;;;;1196:192:0:o;27739:163::-;27780:7;27801:15;27818;27837:19;:17;:19::i;:::-;27800:56;;-1:-1:-1;27800:56:0;-1:-1:-1;27874:20:0;27800:56;;27874:11;:20::i;:::-;27867:27;;;;27739:163;:::o;26334:454::-;26393:7;26402;26411;26420;26429;26438;26447;26468:23;26493:12;26507;26521:18;26543:20;26555:7;26543:11;:20::i;:::-;26467:96;;;;;;;;26575:15;26592:23;26617:12;26633:56;26645:7;26654:4;26660:10;26672:4;26678:10;:8;:10::i;:::-;26633:11;:56::i;:::-;26574:115;;-1:-1:-1;26574:115:0;-1:-1:-1;26574:115:0;-1:-1:-1;26740:15:0;;-1:-1:-1;26757:4:0;;-1:-1:-1;26763:4:0;;-1:-1:-1;26769:10:0;-1:-1:-1;;;;26334:454:0;;;;;;;;;:::o;1048:136::-;1106:7;1133:43;1137:1;1140;1133:43;;;;;;;;;;;;;;;;;:3;:43::i;2027:278::-;2113:7;2148:12;2141:5;2133:28;;;;-1:-1:-1;;;2133:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2172:9:0;2184:5;2188:1;2184;:5;:::i;33856:1609::-;17626:16;:23;;-1:-1:-1;;;;17626:23:0;-1:-1:-1;;;17626:23:0;;;34107:12:::1;::::0;34020;;34068:21:::1;::::0;34107:16;34104:407:::1;;34149:22;34174:30;34191:12;;34174;:16;;:30;;;;:::i;:::-;34149:55;;34236:38;34255:18;;34236:14;:18;;:38;;;;:::i;:::-;34219:55:::0;-1:-1:-1;34307:32:0::1;:12:::0;34219:55;34307:16:::1;:32::i;:::-;34413:16;::::0;34289:50;;-1:-1:-1;34396:50:0::1;::::0;-1:-1:-1;;;;;34413:16:0::1;34431:14:::0;34396:16:::1;:50::i;:::-;34478:21;34461:38;;34134:377;34104:407;34534:13;::::0;:17;34531:927:::1;;34639:12;34654:22;:15:::0;34674:1:::1;34654:19;:22::i;:::-;34639:37:::0;-1:-1:-1;34691:17:0::1;34711:25;:15:::0;34639:37;34711:19:::1;:25::i;:::-;34691:45;;35087:37;35112:4;35119;35087:16;:37::i;:::-;35205:18;35226:41;:21;35252:14:::0;35226:25:::1;:41::i;:::-;35205:62;;35325:44;35338:7;6448::::0;6475:6;-1:-1:-1;;;;;6475:6:0;;6410:79;35338:7:::1;35347:9;35358:10;35325:12;:44::i;:::-;35403:43;::::0;;14269:25:1;;;14325:2;14310:18;;14303:34;;;14353:18;;;14346:34;;;35403:43:0::1;::::0;14257:2:1;14242:18;35403:43:0::1;;;;;;;34562:896;;;34531:927;-1:-1:-1::0;;17672:16:0;:24;;-1:-1:-1;;;;17672:24:0;;;-1:-1:-1;33856:1609:0:o;36622:834::-;36733:7;36729:40;;36755:14;:12;:14::i;:::-;-1:-1:-1;;;;;36794:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;36818:22:0;;;;;;:11;:22;;;;;;;;36817:23;36794:46;36790:597;;;36857:48;36879:6;36887:9;36898:6;36857:21;:48::i;:::-;36790:597;;;-1:-1:-1;;;;;36928:19:0;;;;;;:11;:19;;;;;;;;36927:20;:46;;;;-1:-1:-1;;;;;;36951:22:0;;;;;;:11;:22;;;;;;;;36927:46;36923:464;;;36990:46;37010:6;37018:9;37029:6;36990:19;:46::i;36923:464::-;-1:-1:-1;;;;;37059:19:0;;;;;;:11;:19;;;;;;;;37058:20;:47;;;;-1:-1:-1;;;;;;37083:22:0;;;;;;:11;:22;;;;;;;;37082:23;37058:47;37054:333;;;37122:44;37140:6;37148:9;37159:6;37122:17;:44::i;37054:333::-;-1:-1:-1;;;;;37188:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;37211:22:0;;;;;;:11;:22;;;;;;;;37188:45;37184:203;;;37250:48;37272:6;37280:9;37291:6;37250:21;:48::i;37184:203::-;37331:44;37349:6;37357:9;37368:6;37331:17;:44::i;:::-;37411:7;37407:41;;37433:15;30068:21;;30046:13;:43;30122:16;;30100:8;:38;30171:20;;30149:12;:42;30224:22;;30202:14;:44;30279:22;;30257:18;:44;30002:307;37433:15;36622:834;;;;:::o;27914:561::-;28011:7;;28047;;27964;;;;;28071:289;28095:9;:16;28091:20;;28071:289;;;28161:7;28137;:21;28145:9;28155:1;28145:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28145:12:0;28137:21;;;;;;;;;;;;;:31;;:66;;;28196:7;28172;:21;28180:9;28190:1;28180:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28180:12:0;28172:21;;;;;;;;;;;;;:31;28137:66;28133:97;;;28213:7;;28222;;28205:25;;;;;;;27914:561;;:::o;28133:97::-;28255:34;28267:7;:21;28275:9;28285:1;28275:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28275:12:0;28267:21;;;;;;;;;;;;;28255:7;;:11;:34::i;:::-;28245:44;;28314:34;28326:7;:21;28334:9;28344:1;28334:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28334:12:0;28326:21;;;;;;;;;;;;;28314:7;;:11;:34::i;:::-;28304:44;-1:-1:-1;28113:3:0;;;;:::i;:::-;;;;28071:289;;;-1:-1:-1;28396:7:0;;28384;;:20;;:11;:20::i;:::-;28374:7;:30;28370:61;;;28414:7;;28423;;28406:25;;;;;;27914:561;;:::o;28370:61::-;28450:7;;28459;;-1:-1:-1;27914:561:0;-1:-1:-1;27914:561:0:o;26800:413::-;26860:7;26869;26878;26887;26907:12;26922:31;26945:7;26922:22;:31::i;:::-;26907:46;;26964:12;26979:25;26996:7;26979:16;:25::i;:::-;26964:40;;27015:18;27036:30;27058:7;27036:21;:30::i;:::-;27015:51;-1:-1:-1;27077:23:0;27103:43;27141:4;27103:33;27015:51;27103:33;:7;27115:4;27103:11;:17::i;:::-;:21;;:33::i;:43::-;27077:69;27182:4;;-1:-1:-1;27188:4:0;;-1:-1:-1;27188:4:0;-1:-1:-1;26800:413:0;;-1:-1:-1;;;26800:413:0:o;27225:502::-;27354:7;;;;27410:24;:7;27422:11;27410;:24::i;:::-;27392:42;-1:-1:-1;27445:12:0;27460:21;:4;27469:11;27460:8;:21::i;:::-;27445:36;-1:-1:-1;27492:13:0;27508:21;:4;27517:11;27508:8;:21::i;:::-;27492:37;-1:-1:-1;27540:18:0;27561:27;:10;27576:11;27561:14;:27::i;:::-;27540:48;-1:-1:-1;27599:23:0;27625:44;27663:5;27625:33;27540:48;27625:33;:7;27637:4;27625:11;:17::i;:44::-;27688:7;;;;-1:-1:-1;27714:4:0;;-1:-1:-1;27225:502:0;;-1:-1:-1;;;;;;;;;27225:502:0:o;35471:597::-;35639:16;;;35653:1;35639:16;;;;;;;;35615:21;;35639:16;;;;;;;;;;-1:-1:-1;35639:16:0;35615:40;;35684:4;35666;35671:1;35666:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35666:23:0;;;:7;;;;;;;;;;:23;;;;35710:13;;:20;;;-1:-1:-1;;;35710:20:0;;;;:13;;;;;:18;;:20;;;;;35666:7;;35710:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35700:4;35705:1;35700:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35700:30:0;;;:7;;;;;;;;;:30;35775:13;;35743:60;;35760:4;;35775:13;35791:11;35743:8;:60::i;:::-;35842:13;;:218;;-1:-1:-1;;;35842:218:0;;-1:-1:-1;;;;;35842:13:0;;;;:64;;:218;;35921:11;;35842:13;;35991:4;;36010:9;;36034:15;;35842:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35544:524;35471:597;;:::o;36080:530::-;36279:13;;36247:60;;36264:4;;-1:-1:-1;;;;;36279:13:0;36295:11;36247:8;:60::i;:::-;36350:13;;:252;;-1:-1:-1;;;36350:252:0;;36420:4;36350:252;;;3828:34:1;3878:18;;;3871:34;;;36350:13:0;3921:18:1;;;3914:34;;;3964:18;;;3957:34;-1:-1:-1;;;;;4028:15:1;;;4007:19;;;4000:44;36576:15:0;4060:19:1;;;4053:35;36350:13:0;;;;:29;;36387:9;;3762:19:1;;36350:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29385:605::-;29431:18;;:23;:40;;;;-1:-1:-1;29458:8:0;;:13;29431:40;:62;;;;-1:-1:-1;29475:13:0;;:18;29431:62;:95;;;;-1:-1:-1;29509:12:0;;:17;29431:95;:118;;;;-1:-1:-1;29530:14:0;;:19;29431:118;29428:131;;;29385:605::o;29428:131::-;29605:13;;;29579:21;:39;29656:8;;;29630:16;:34;29701:12;;;29675:20;:38;29750:14;;;29724:22;:40;29801:18;;;29775:22;:44;-1:-1:-1;29840:19:0;;;;29870;;;;29900;;;29930;;;;29960:22;;29385:605::o;37468:609::-;37571:15;37588:23;37613:12;37627:23;37652:12;37666;37680:18;37702:19;37713:7;37702:10;:19::i;:::-;37570:151;;;;;;;;;;;;;;37750:28;37770:7;37750;:15;37758:6;-1:-1:-1;;;;;37750:15:0;-1:-1:-1;;;;;37750:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;37732:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37807:7;:15;;;;:28;;37827:7;37807:19;:28::i;:::-;-1:-1:-1;;;;;37789:15:0;;;;;;;:7;:15;;;;;;:46;;;;37867:18;;;;;;;:39;;37890:15;37867:22;:39::i;:::-;-1:-1:-1;;;;;37846:18:0;;;;;;:7;:18;;;;;:60;37919:19;37925:6;37933:4;37919:5;:19::i;:::-;37949:26;37964:10;37949:14;:26::i;:::-;37986:23;37998:4;38004;37986:11;:23::i;:::-;38042:9;-1:-1:-1;;;;;38025:44:0;38034:6;-1:-1:-1;;;;;38025:44:0;;38053:15;38025:44;;;;13046:25:1;;13034:2;13019:18;;13001:76;38025:44:0;;;;;;;;37559:518;;;;;;;37468:609;;;:::o;38089:621::-;38190:15;38207:23;38232:12;38246:23;38271:12;38285;38299:18;38321:19;38332:7;38321:10;:19::i;:::-;38189:151;;;;;;;;;;;;;;38369:28;38389:7;38369;:15;38377:6;-1:-1:-1;;;;;38369:15:0;-1:-1:-1;;;;;38369:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38351:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;38429:18;;;;;:7;:18;;;;;:39;;38452:15;38429:22;:39::i;:::-;-1:-1:-1;;;;;38408:18:0;;;;;;:7;:18;;;;;;;;:60;;;;38500:7;:18;;;;:39;;38523:15;38500:22;:39::i;38722:548::-;38821:15;38838:23;38863:12;38877:23;38902:12;38916;38930:18;38952:19;38963:7;38952:10;:19::i;:::-;38820:151;;;;;;;;;;;;;;39000:28;39020:7;39000;:15;39008:6;-1:-1:-1;;;;;39000:15:0;-1:-1:-1;;;;;39000:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;39282:680::-;39385:15;39402:23;39427:12;39441:23;39466:12;39480;39494:18;39516:19;39527:7;39516:10;:19::i;:::-;39384:151;;;;;;;;;;;;;;39564:28;39584:7;39564;:15;39572:6;-1:-1:-1;;;;;39564:15:0;-1:-1:-1;;;;;39564:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;39546:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39621:7;:15;;;;:28;;39641:7;39621:19;:28::i;29022:168::-;29093:7;29120:62;29166:5;29120:27;29132:14;;29120:7;:11;;:27;;;;:::i;28854:156::-;28919:7;28946:56;28986:5;28946:21;28958:8;;28946:7;:11;;:21;;;;:::i;29202:171::-;29272:7;29299:66;29349:5;29299:31;29311:18;;29299:7;:11;;:31;;;;:::i;23028:638::-;23099:10;;23096:563;;-1:-1:-1;;;;;23191:21:0;;23183:67;;;;-1:-1:-1;;;23183:67:0;;;;;;;:::i;:::-;23491:7;;:19;;23503:6;23491:11;:19::i;:::-;23481:7;:29;23535:35;23547:22;23558:10;:8;:10::i;23547:22::-;23535:7;;;:11;:35::i;:::-;23525:7;:45;23604:43;;13046:25:1;;;23633:4:0;;23613:10;;23604:43;;13034:2:1;13019:18;23604:43:0;13001:76:1;28487:355:0;28550:19;28573:10;:8;:10::i;:::-;28550:33;-1:-1:-1;28594:18:0;28615:27;:10;28550:33;28615:14;:27::i;:::-;28694:4;28678:22;;;;:7;:22;;;;;;28594:48;;-1:-1:-1;28678:38:0;;28594:48;28678:26;:38::i;:::-;28669:4;28653:22;;;;:7;:22;;;;;;;;:63;;;;28730:11;:26;;;;;;28727:107;;;28812:4;28796:22;;;;:7;:22;;;;;;:38;;28823:10;28796:26;:38::i;:::-;28787:4;28771:22;;;;:7;:22;;;;;:63;28727:107;28539:303;;28487:355;:::o;26175:147::-;26253:7;;:17;;26265:4;26253:11;:17::i;:::-;26243:7;:27;26294:10;;:20;;26309:4;26294:14;:20::i;:::-;26281:10;:33;-1:-1:-1;;26175:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;947:388::-;1015:6;1023;1076:2;1064:9;1055:7;1051:23;1047:32;1044:2;;;1092:1;1089;1082:12;1044:2;1131:9;1118:23;1150:31;1175:5;1150:31;:::i;:::-;1200:5;-1:-1:-1;1257:2:1;1242:18;;1229:32;1270:33;1229:32;1270:33;:::i;:::-;1322:7;1312:17;;;1034:301;;;;;:::o;1340:456::-;1417:6;1425;1433;1486:2;1474:9;1465:7;1461:23;1457:32;1454:2;;;1502:1;1499;1492:12;1454:2;1541:9;1528:23;1560:31;1585:5;1560:31;:::i;:::-;1610:5;-1:-1:-1;1667:2:1;1652:18;;1639:32;1680:33;1639:32;1680:33;:::i;:::-;1444:352;;1732:7;;-1:-1:-1;;;1786:2:1;1771:18;;;;1758:32;;1444:352::o;1801:315::-;1869:6;1877;1930:2;1918:9;1909:7;1905:23;1901:32;1898:2;;;1946:1;1943;1936:12;1898:2;1985:9;1972:23;2004:31;2029:5;2004:31;:::i;:::-;2054:5;2106:2;2091:18;;;;2078:32;;-1:-1:-1;;;1888:228:1:o;2121:180::-;2177:6;2230:2;2218:9;2209:7;2205:23;2201:32;2198:2;;;2246:1;2243;2236:12;2198:2;2269:26;2285:9;2269:26;:::i;2306:180::-;2365:6;2418:2;2406:9;2397:7;2393:23;2389:32;2386:2;;;2434:1;2431;2424:12;2386:2;-1:-1:-1;2457:23:1;;2376:110;-1:-1:-1;2376:110:1:o;2491:248::-;2556:6;2564;2617:2;2605:9;2596:7;2592:23;2588:32;2585:2;;;2633:1;2630;2623:12;2585:2;2669:9;2656:23;2646:33;;2698:35;2729:2;2718:9;2714:18;2698:35;:::i;:::-;2688:45;;2575:164;;;;;:::o;2744:306::-;2832:6;2840;2848;2901:2;2889:9;2880:7;2876:23;2872:32;2869:2;;;2917:1;2914;2907:12;2869:2;2946:9;2940:16;2930:26;;2996:2;2985:9;2981:18;2975:25;2965:35;;3040:2;3029:9;3025:18;3019:25;3009:35;;2859:191;;;;;:::o;4524:597::-;4636:4;4665:2;4694;4683:9;4676:21;4726:6;4720:13;4769:6;4764:2;4753:9;4749:18;4742:34;4794:1;4804:140;4818:6;4815:1;4812:13;4804:140;;;4913:14;;;4909:23;;4903:30;4879:17;;;4898:2;4875:26;4868:66;4833:10;;4804:140;;;4962:6;4959:1;4956:13;4953:2;;;5032:1;5027:2;5018:6;5007:9;5003:22;4999:31;4992:42;4953:2;-1:-1:-1;5105:2:1;5084:15;-1:-1:-1;;5080:29:1;5065:45;;;;5112:2;5061:54;;4645:476;-1:-1:-1;;;4645:476:1:o;9411:356::-;9613:2;9595:21;;;9632:18;;;9625:30;9691:34;9686:2;9671:18;;9664:62;9758:2;9743:18;;9585:182::o;10540:397::-;10742:2;10724:21;;;10781:2;10761:18;;;10754:30;10820:34;10815:2;10800:18;;10793:62;-1:-1:-1;;;10886:2:1;10871:18;;10864:31;10927:3;10912:19;;10714:223::o;13082:980::-;13344:4;13392:3;13381:9;13377:19;13423:6;13412:9;13405:25;13449:2;13487:6;13482:2;13471:9;13467:18;13460:34;13530:3;13525:2;13514:9;13510:18;13503:31;13554:6;13589;13583:13;13620:6;13612;13605:22;13658:3;13647:9;13643:19;13636:26;;13697:2;13689:6;13685:15;13671:29;;13718:1;13728:195;13742:6;13739:1;13736:13;13728:195;;;13807:13;;-1:-1:-1;;;;;13803:39:1;13791:52;;13898:15;;;;13863:12;;;;13839:1;13757:9;13728:195;;;-1:-1:-1;;;;;;;13979:32:1;;;;13974:2;13959:18;;13952:60;-1:-1:-1;;;14043:3:1;14028:19;14021:35;13940:3;13353:709;-1:-1:-1;;;13353:709:1:o;14580:128::-;14620:3;14651:1;14647:6;14644:1;14641:13;14638:2;;;14657:18;;:::i;:::-;-1:-1:-1;14693:9:1;;14628:80::o;14713:217::-;14753:1;14779;14769:2;;14823:10;14818:3;14814:20;14811:1;14804:31;14858:4;14855:1;14848:15;14886:4;14883:1;14876:15;14769:2;-1:-1:-1;14915:9:1;;14759:171::o;14935:422::-;15024:1;15067:5;15024:1;15081:270;15102:7;15092:8;15089:21;15081:270;;;15161:4;15157:1;15153:6;15149:17;15143:4;15140:27;15137:2;;;15170:18;;:::i;:::-;15220:7;15210:8;15206:22;15203:2;;;15240:16;;;;15203:2;15319:22;;;;15279:15;;;;15081:270;;;15085:3;14999:358;;;;;:::o;15362:140::-;15420:5;15449:47;15490:4;15480:8;15476:19;15470:4;15556:5;15586:8;15576:2;;-1:-1:-1;15627:1:1;15641:5;;15576:2;15675:4;15665:2;;-1:-1:-1;15712:1:1;15726:5;;15665:2;15757:4;15775:1;15770:59;;;;15843:1;15838:130;;;;15750:218;;15770:59;15800:1;15791:10;;15814:5;;;15838:130;15875:3;15865:8;15862:17;15859:2;;;15882:18;;:::i;:::-;-1:-1:-1;;15938:1:1;15924:16;;15953:5;;15750:218;;16052:2;16042:8;16039:16;16033:3;16027:4;16024:13;16020:36;16014:2;16004:8;16001:16;15996:2;15990:4;15987:12;15983:35;15980:77;15977:2;;;-1:-1:-1;16089:19:1;;;16121:5;;15977:2;16168:34;16193:8;16187:4;16168:34;:::i;:::-;16238:6;16234:1;16230:6;16226:19;16217:7;16214:32;16211:2;;;16249:18;;:::i;:::-;16287:20;;15566:747;-1:-1:-1;;;15566:747:1:o;16318:168::-;16358:7;16424:1;16420;16416:6;16412:14;16409:1;16406:21;16401:1;16394:9;16387:17;16383:45;16380:2;;;16431:18;;:::i;:::-;-1:-1:-1;16471:9:1;;16370:116::o;16491:125::-;16531:4;16559:1;16556;16553:8;16550:2;;;16564:18;;:::i;:::-;-1:-1:-1;16601:9:1;;16540:76::o;16621:380::-;16700:1;16696:12;;;;16743;;;16764:2;;16818:4;16810:6;16806:17;16796:27;;16764:2;16871;16863:6;16860:14;16840:18;16837:38;16834:2;;;16917:10;16912:3;16908:20;16905:1;16898:31;16952:4;16949:1;16942:15;16980:4;16977:1;16970:15;16834:2;;16676:325;;;:::o;17006:135::-;17045:3;-1:-1:-1;;17066:17:1;;17063:2;;;17086:18;;:::i;:::-;-1:-1:-1;17133:1:1;17122:13;;17053:88::o;17146:127::-;17207:10;17202:3;17198:20;17195:1;17188:31;17238:4;17235:1;17228:15;17262:4;17259:1;17252:15;17278:127;17339:10;17334:3;17330:20;17327:1;17320:31;17370:4;17367:1;17360:15;17394:4;17391:1;17384:15;17542:131;-1:-1:-1;;;;;17617:31:1;;17607:42;;17597:2;;17663:1;17660;17653:12

Swarm Source

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