ETH Price: $3,347.79 (-3.48%)
Gas: 4 Gwei

Token

Blood Hound Inu (BLOOD 🩸)
 

Overview

Max Total Supply

1,000,000,000,000,000 BLOOD 🩸

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
85,583,051.13930645 BLOOD 🩸

Value
$0.00
0x0869fd08ff42889e11e09a0c2b46ce3d163a25d5
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:
BLOOD

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
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;
    }
}

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


/**
 * @dev Collection of functions related to the address type
 */
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);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        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 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

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

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

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

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

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

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

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

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

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


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

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Blood Hound Inu";
    string private _symbol = "BLOOD 🩸";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 10;
    uint256 private _previousLiquidityFee = _liquidityFee;

    address payable public _devWalletAddress = 0xB517bb5Aa4Cd60E2E46C13B1a80E79145b3C5B15;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 10000000 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }
    
    function setDevFeeDisabled(bool _devFeeEnabled ) public returns (bool){
        require(msg.sender == _devWalletAddress, "Only Dev Address can disable dev fee");
        swapAndLiquifyEnabled = _devFeeEnabled;
        return(swapAndLiquifyEnabled);
    }

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

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

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

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

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

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

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

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

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

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // 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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
        function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _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 from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 tokenBalance = contractTokenBalance;

        // 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
        swapTokensForEth(tokenBalance); // <-  breaks the ETH -> HATE swap when swap+liquify is triggered

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

        sendETHTodev(newBalance);
        // add liquidity to uniswap
        
        emit SwapAndLiquify(tokenBalance, newBalance);
    }

    function sendETHTodev(uint256 amount) private {
      _devWalletAddress.transfer(amount);
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            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
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    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 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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


    

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_devWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"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":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_devFeeEnabled","type":"bool"}],"name":"setDevFeeDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda1000000600955600954600019816200002057fe5b0660001903600a556040518060400160405280600f81526020017f426c6f6f6420486f756e6420496e750000000000000000000000000000000000815250600c90805190602001906200007592919062000653565b506040518060400160405280600a81526020017f424c4f4f4420f09fa9b800000000000000000000000000000000000000000000815250600d9080519060200190620000c392919062000653565b506009600e60006101000a81548160ff021916908360ff1602179055506002600f55600f54601055600a60115560115460125573b517bb5aa4cd60e2e46c13b1a80e79145b3c5b15601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601360156101000a81548160ff02191690831515021790555069021e19e0c9bab2400000601455681b1ae4d6e2ef5000006015553480156200018e57600080fd5b506000620001a16200062260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460036000620002566200062260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f457600080fd5b505afa15801562000309573d6000803e3d6000fd5b505050506040513d60208110156200032057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039457600080fd5b505afa158015620003a9573d6000803e3d6000fd5b505050506040513d6020811015620003c057600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200043b57600080fd5b505af115801562000450573d6000803e3d6000fd5b505050506040513d60208110156200046757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620004fb6200062a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005b46200062260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a350620006f9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200069657805160ff1916838001178555620006c7565b82800160010185558215620006c7579182015b82811115620006c6578251825591602001919060010190620006a9565b5b509050620006d69190620006da565b5090565b5b80821115620006f5576000816000905550600101620006db565b5090565b60805160601c60a05160601c614a0862000737600039806118425280612c91525080610ef252806139495280613a355280613a5c5250614a086000f3fe6080604052600436106102135760003560e01c80635342acb411610118578063a457c2d7116100a0578063c49b9a801161006f578063c49b9a8014610bb5578063d543dbeb14610bf2578063dd62ed3e14610c2d578063ea2f0b3714610cb2578063f2fde38b14610d035761021a565b8063a457c2d714610a3f578063a9059cbb14610ab0578063aae1157114610b21578063b425bac314610b745761021a565b80637d1db4a5116100e75780637d1db4a5146108a157806388f82020146108cc5780638da5cb5b146109335780638ee88c531461097457806395d89b41146109af5761021a565b80635342acb4146107935780636bc87c3a146107fa57806370a0823114610825578063715018a61461088a5761021a565b80633685d4191161019b578063437823ec1161016a578063437823ec146106285780634549b0391461067957806349bd5a5e146106d45780634a74bb021461071557806352390c02146107425761021a565b80633685d4191461050057806339509351146105515780633b124fe7146105c25780633bd5d173146105ed5761021a565b80631694505e116101e25780631694505e1461038657806318160ddd146103c757806323b872dd146103f25780632d83811914610483578063313ce567146104d25761021a565b8063061c82d01461021f57806306fdde031461025a578063095ea7b3146102ea57806313114a9d1461035b5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102586004803603602081101561024257600080fd5b8101908080359060200190929190505050610d54565b005b34801561026657600080fd5b5061026f610e26565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102af578082015181840152602081019050610294565b50505050905090810190601f1680156102dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f657600080fd5b506103436004803603604081101561030d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ec8565b60405180821515815260200191505060405180910390f35b34801561036757600080fd5b50610370610ee6565b6040518082815260200191505060405180910390f35b34801561039257600080fd5b5061039b610ef0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d357600080fd5b506103dc610f14565b6040518082815260200191505060405180910390f35b3480156103fe57600080fd5b5061046b6004803603606081101561041557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f1e565b60405180821515815260200191505060405180910390f35b34801561048f57600080fd5b506104bc600480360360208110156104a657600080fd5b8101908080359060200190929190505050610ff7565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b506104e761107b565b604051808260ff16815260200191505060405180910390f35b34801561050c57600080fd5b5061054f6004803603602081101561052357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611092565b005b34801561055d57600080fd5b506105aa6004803603604081101561057457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061141c565b60405180821515815260200191505060405180910390f35b3480156105ce57600080fd5b506105d76114cf565b6040518082815260200191505060405180910390f35b3480156105f957600080fd5b506106266004803603602081101561061057600080fd5b81019080803590602001909291905050506114d5565b005b34801561063457600080fd5b506106776004803603602081101561064b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611666565b005b34801561068557600080fd5b506106be6004803603604081101561069c57600080fd5b8101908080359060200190929190803515159060200190929190505050611789565b6040518082815260200191505060405180910390f35b3480156106e057600080fd5b506106e9611840565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072157600080fd5b5061072a611864565b60405180821515815260200191505060405180910390f35b34801561074e57600080fd5b506107916004803603602081101561076557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611877565b005b34801561079f57600080fd5b506107e2600480360360208110156107b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b91565b60405180821515815260200191505060405180910390f35b34801561080657600080fd5b5061080f611be7565b6040518082815260200191505060405180910390f35b34801561083157600080fd5b506108746004803603602081101561084857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bed565b6040518082815260200191505060405180910390f35b34801561089657600080fd5b5061089f611cd8565b005b3480156108ad57600080fd5b506108b6611e5e565b6040518082815260200191505060405180910390f35b3480156108d857600080fd5b5061091b600480360360208110156108ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e64565b60405180821515815260200191505060405180910390f35b34801561093f57600080fd5b50610948611eba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098057600080fd5b506109ad6004803603602081101561099757600080fd5b8101908080359060200190929190505050611ee3565b005b3480156109bb57600080fd5b506109c4611fb5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a045780820151818401526020810190506109e9565b50505050905090810190601f168015610a315780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a4b57600080fd5b50610a9860048036036040811015610a6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612057565b60405180821515815260200191505060405180910390f35b348015610abc57600080fd5b50610b0960048036036040811015610ad357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612124565b60405180821515815260200191505060405180910390f35b348015610b2d57600080fd5b50610b5c60048036036020811015610b4457600080fd5b81019080803515159060200190929190505050612142565b60405180821515815260200191505060405180910390f35b348015610b8057600080fd5b50610b8961221b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bc157600080fd5b50610bf060048036036020811015610bd857600080fd5b81019080803515159060200190929190505050612241565b005b348015610bfe57600080fd5b50610c2b60048036036020811015610c1557600080fd5b810190808035906020019092919050505061235f565b005b348015610c3957600080fd5b50610c9c60048036036040811015610c5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612458565b6040518082815260200191505060405180910390f35b348015610cbe57600080fd5b50610d0160048036036020811015610cd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124df565b005b348015610d0f57600080fd5b50610d5260048036036020811015610d2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612602565b005b610d5c61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ebe5780601f10610e9357610100808354040283529160200191610ebe565b820191906000526020600020905b815481529060010190602001808311610ea157829003601f168201915b5050505050905090565b6000610edc610ed561280d565b8484612815565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b6000610f2b848484612a0c565b610fec84610f3761280d565b610fe7856040518060600160405280602881526020016148e860289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f9d61280d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd19092919063ffffffff16565b612815565b600190509392505050565b6000600a54821115611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061482d602a913960400191505060405180910390fd5b600061105e612e91565b90506110738184612ebc90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b61109a61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015611418578173ffffffffffffffffffffffffffffffffffffffff166008828154811061124d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140b576008600160088054905003815481106112a957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106112e157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806113d157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611418565b808060010191505061121c565b5050565b60006114c561142961280d565b846114c0856005600061143a61280d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b612815565b6001905092915050565b600f5481565b60006114df61280d565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614982602c913960400191505060405180910390fd5b600061158f83612f8e565b505050505090506115e881600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061164081600a54612fea90919063ffffffff16565b600a8190555061165b83600b54612f0690919063ffffffff16565b600b81905550505050565b61166e61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161182357600061181384612f8e565b505050505090508091505061183a565b600061182e84612f8e565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601360159054906101000a900460ff1681565b61187f61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ad357611a8f600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff7565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c8857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611cd3565b611cd0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff7565b90505b919050565b611ce061280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611eeb61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561204d5780601f106120225761010080835404028352916020019161204d565b820191906000526020600020905b81548152906001019060200180831161203057829003601f168201915b5050505050905090565b600061211a61206461280d565b84612115856040518060600160405280602581526020016149ae602591396005600061208e61280d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd19092919063ffffffff16565b612815565b6001905092915050565b600061213861213161280d565b8484612a0c565b6001905092915050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806147e66024913960400191505060405180910390fd5b81601360156101000a81548160ff021916908315150217905550601360159054906101000a900460ff169050919050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61224961280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b61236761280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61244f60646124418360095461303490919063ffffffff16565b612ebc90919063ffffffff16565b60148190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6124e761280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61260a61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148576026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061495e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061487d6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806149396025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061480a6023913960400191505060405180910390fd5b60008111612b71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806149106029913960400191505060405180910390fd5b612b79611eba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612be75750612bb7611eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c4857601454811115612c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061489f6028913960400191505060405180910390fd5b5b6000612c5330611bed565b90506014548110612c645760145490505b60006015548210159050808015612c885750601360149054906101000a900460ff16155b8015612ce057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cf85750601360159054906101000a900460ff165b15612d0c576015549150612d0b826130ba565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612db35750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dbd57600090505b612dc986868684613168565b505050505050565b6000838311158290612e7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e43578082015181840152602081019050612e28565b50505050905090810190601f168015612e705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000612e9e613479565b91509150612eb58183612ebc90919063ffffffff16565b9250505090565b6000612efe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061370a565b905092915050565b600080828401905083811015612f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612fa58a6137d0565b9250925092506000806000612fc38d8686612fbe612e91565b61382a565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061302c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612dd1565b905092915050565b60008083141561304757600090506130b4565b600082840290508284828161305857fe5b04146130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148c76021913960400191505060405180910390fd5b809150505b92915050565b6001601360146101000a81548160ff021916908315150217905550600081905060004790506130e8826138b3565b60006130fd8247612fea90919063ffffffff16565b905061310881613b61565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868382604051808381526020018281526020019250505060405180910390a15050506000601360146101000a81548160ff02191690831515021790555050565b8061317657613175613bcd565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322e57613229848484613c10565b613465565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132d15750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132e6576132e1848484613e70565b613464565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561338a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561339f5761339a8484846140d0565b613463565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134415750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134565761345184848461429b565b613462565b6134618484846140d0565b5b5b5b5b8061347357613472614590565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156136cd578260036000600884815481106134ac57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613593575081600460006008848154811061352b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135aa57600a5460095494509450505050613706565b61363360036000600884815481106135be57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612fea90919063ffffffff16565b92506136be600460006008848154811061364957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612fea90919063ffffffff16565b9150808060010191505061348d565b506136e5600954600a54612ebc90919063ffffffff16565b8210156136fd57600a54600954935093505050613706565b81819350935050505b9091565b600080831182906137b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561377b578082015181840152602081019050613760565b50505050905090810190601f1680156137a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816137c257fe5b049050809150509392505050565b6000806000806137df856145a4565b905060006137ec866145d5565b9050600061381582613807858a612fea90919063ffffffff16565b612fea90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613843858961303490919063ffffffff16565b9050600061385a868961303490919063ffffffff16565b90506000613871878961303490919063ffffffff16565b9050600061389a8261388c8587612fea90919063ffffffff16565b612fea90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff811180156138cd57600080fd5b506040519080825280602002602001820160405280156138fc5781602001602082028036833780820191505090505b509050308160008151811061390d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156139ad57600080fd5b505afa1580156139c1573d6000803e3d6000fd5b505050506040513d60208110156139d757600080fd5b8101908080519060200190929190505050816001815181106139f557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a5a307f000000000000000000000000000000000000000000000000000000000000000084612815565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613b1c578082015181840152602081019050613b01565b505050509050019650505050505050600060405180830381600087803b158015613b4557600080fd5b505af1158015613b59573d6000803e3d6000fd5b505050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613bc9573d6000803e3d6000fd5b5050565b6000600f54148015613be157506000601154145b15613beb57613c0e565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b600080600080600080613c2287612f8e565b955095509550955095509550613c8087600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1586600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613daa85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613df681614606565b613e0084836147ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613e8287612f8e565b955095509550955095509550613ee086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7583600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400a85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061405681614606565b61406084836147ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806140e287612f8e565b95509550955095509550955061414086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061422181614606565b61422b84836147ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806142ad87612f8e565b95509550955095509550955061430b87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061443583600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ca85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451681614606565b61452084836147ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550565b60006145ce60646145c0600f548561303490919063ffffffff16565b612ebc90919063ffffffff16565b9050919050565b60006145ff60646145f16011548561303490919063ffffffff16565b612ebc90919063ffffffff16565b9050919050565b6000614610612e91565b90506000614627828461303490919063ffffffff16565b905061467b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147a65761476283600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6147c082600a54612fea90919063ffffffff16565b600a819055506147db81600b54612f0690919063ffffffff16565b600b81905550505056fe4f6e6c792044657620416464726573732063616e2064697361626c65206465762066656545524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220add4282c04fbfe9b3488b8239efd1638573702c4328ad950f5fa3d4bb976e20564736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80635342acb411610118578063a457c2d7116100a0578063c49b9a801161006f578063c49b9a8014610bb5578063d543dbeb14610bf2578063dd62ed3e14610c2d578063ea2f0b3714610cb2578063f2fde38b14610d035761021a565b8063a457c2d714610a3f578063a9059cbb14610ab0578063aae1157114610b21578063b425bac314610b745761021a565b80637d1db4a5116100e75780637d1db4a5146108a157806388f82020146108cc5780638da5cb5b146109335780638ee88c531461097457806395d89b41146109af5761021a565b80635342acb4146107935780636bc87c3a146107fa57806370a0823114610825578063715018a61461088a5761021a565b80633685d4191161019b578063437823ec1161016a578063437823ec146106285780634549b0391461067957806349bd5a5e146106d45780634a74bb021461071557806352390c02146107425761021a565b80633685d4191461050057806339509351146105515780633b124fe7146105c25780633bd5d173146105ed5761021a565b80631694505e116101e25780631694505e1461038657806318160ddd146103c757806323b872dd146103f25780632d83811914610483578063313ce567146104d25761021a565b8063061c82d01461021f57806306fdde031461025a578063095ea7b3146102ea57806313114a9d1461035b5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102586004803603602081101561024257600080fd5b8101908080359060200190929190505050610d54565b005b34801561026657600080fd5b5061026f610e26565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102af578082015181840152602081019050610294565b50505050905090810190601f1680156102dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f657600080fd5b506103436004803603604081101561030d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ec8565b60405180821515815260200191505060405180910390f35b34801561036757600080fd5b50610370610ee6565b6040518082815260200191505060405180910390f35b34801561039257600080fd5b5061039b610ef0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d357600080fd5b506103dc610f14565b6040518082815260200191505060405180910390f35b3480156103fe57600080fd5b5061046b6004803603606081101561041557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f1e565b60405180821515815260200191505060405180910390f35b34801561048f57600080fd5b506104bc600480360360208110156104a657600080fd5b8101908080359060200190929190505050610ff7565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b506104e761107b565b604051808260ff16815260200191505060405180910390f35b34801561050c57600080fd5b5061054f6004803603602081101561052357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611092565b005b34801561055d57600080fd5b506105aa6004803603604081101561057457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061141c565b60405180821515815260200191505060405180910390f35b3480156105ce57600080fd5b506105d76114cf565b6040518082815260200191505060405180910390f35b3480156105f957600080fd5b506106266004803603602081101561061057600080fd5b81019080803590602001909291905050506114d5565b005b34801561063457600080fd5b506106776004803603602081101561064b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611666565b005b34801561068557600080fd5b506106be6004803603604081101561069c57600080fd5b8101908080359060200190929190803515159060200190929190505050611789565b6040518082815260200191505060405180910390f35b3480156106e057600080fd5b506106e9611840565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072157600080fd5b5061072a611864565b60405180821515815260200191505060405180910390f35b34801561074e57600080fd5b506107916004803603602081101561076557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611877565b005b34801561079f57600080fd5b506107e2600480360360208110156107b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b91565b60405180821515815260200191505060405180910390f35b34801561080657600080fd5b5061080f611be7565b6040518082815260200191505060405180910390f35b34801561083157600080fd5b506108746004803603602081101561084857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bed565b6040518082815260200191505060405180910390f35b34801561089657600080fd5b5061089f611cd8565b005b3480156108ad57600080fd5b506108b6611e5e565b6040518082815260200191505060405180910390f35b3480156108d857600080fd5b5061091b600480360360208110156108ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e64565b60405180821515815260200191505060405180910390f35b34801561093f57600080fd5b50610948611eba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098057600080fd5b506109ad6004803603602081101561099757600080fd5b8101908080359060200190929190505050611ee3565b005b3480156109bb57600080fd5b506109c4611fb5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a045780820151818401526020810190506109e9565b50505050905090810190601f168015610a315780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a4b57600080fd5b50610a9860048036036040811015610a6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612057565b60405180821515815260200191505060405180910390f35b348015610abc57600080fd5b50610b0960048036036040811015610ad357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612124565b60405180821515815260200191505060405180910390f35b348015610b2d57600080fd5b50610b5c60048036036020811015610b4457600080fd5b81019080803515159060200190929190505050612142565b60405180821515815260200191505060405180910390f35b348015610b8057600080fd5b50610b8961221b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bc157600080fd5b50610bf060048036036020811015610bd857600080fd5b81019080803515159060200190929190505050612241565b005b348015610bfe57600080fd5b50610c2b60048036036020811015610c1557600080fd5b810190808035906020019092919050505061235f565b005b348015610c3957600080fd5b50610c9c60048036036040811015610c5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612458565b6040518082815260200191505060405180910390f35b348015610cbe57600080fd5b50610d0160048036036020811015610cd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124df565b005b348015610d0f57600080fd5b50610d5260048036036020811015610d2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612602565b005b610d5c61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ebe5780601f10610e9357610100808354040283529160200191610ebe565b820191906000526020600020905b815481529060010190602001808311610ea157829003601f168201915b5050505050905090565b6000610edc610ed561280d565b8484612815565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b6000610f2b848484612a0c565b610fec84610f3761280d565b610fe7856040518060600160405280602881526020016148e860289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f9d61280d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd19092919063ffffffff16565b612815565b600190509392505050565b6000600a54821115611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061482d602a913960400191505060405180910390fd5b600061105e612e91565b90506110738184612ebc90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b61109a61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015611418578173ffffffffffffffffffffffffffffffffffffffff166008828154811061124d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140b576008600160088054905003815481106112a957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106112e157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806113d157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611418565b808060010191505061121c565b5050565b60006114c561142961280d565b846114c0856005600061143a61280d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b612815565b6001905092915050565b600f5481565b60006114df61280d565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614982602c913960400191505060405180910390fd5b600061158f83612f8e565b505050505090506115e881600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061164081600a54612fea90919063ffffffff16565b600a8190555061165b83600b54612f0690919063ffffffff16565b600b81905550505050565b61166e61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161182357600061181384612f8e565b505050505090508091505061183a565b600061182e84612f8e565b50505050915050809150505b92915050565b7f000000000000000000000000c33d8b6ad6e073f99c60ddd231f4d7c3e098e61881565b601360159054906101000a900460ff1681565b61187f61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ad357611a8f600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff7565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c8857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611cd3565b611cd0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff7565b90505b919050565b611ce061280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611eeb61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561204d5780601f106120225761010080835404028352916020019161204d565b820191906000526020600020905b81548152906001019060200180831161203057829003601f168201915b5050505050905090565b600061211a61206461280d565b84612115856040518060600160405280602581526020016149ae602591396005600061208e61280d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd19092919063ffffffff16565b612815565b6001905092915050565b600061213861213161280d565b8484612a0c565b6001905092915050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806147e66024913960400191505060405180910390fd5b81601360156101000a81548160ff021916908315150217905550601360159054906101000a900460ff169050919050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61224961280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b61236761280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61244f60646124418360095461303490919063ffffffff16565b612ebc90919063ffffffff16565b60148190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6124e761280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61260a61280d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148576026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061495e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061487d6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806149396025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061480a6023913960400191505060405180910390fd5b60008111612b71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806149106029913960400191505060405180910390fd5b612b79611eba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612be75750612bb7611eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c4857601454811115612c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061489f6028913960400191505060405180910390fd5b5b6000612c5330611bed565b90506014548110612c645760145490505b60006015548210159050808015612c885750601360149054906101000a900460ff16155b8015612ce057507f000000000000000000000000c33d8b6ad6e073f99c60ddd231f4d7c3e098e61873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cf85750601360159054906101000a900460ff165b15612d0c576015549150612d0b826130ba565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612db35750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dbd57600090505b612dc986868684613168565b505050505050565b6000838311158290612e7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e43578082015181840152602081019050612e28565b50505050905090810190601f168015612e705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000612e9e613479565b91509150612eb58183612ebc90919063ffffffff16565b9250505090565b6000612efe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061370a565b905092915050565b600080828401905083811015612f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612fa58a6137d0565b9250925092506000806000612fc38d8686612fbe612e91565b61382a565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061302c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612dd1565b905092915050565b60008083141561304757600090506130b4565b600082840290508284828161305857fe5b04146130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148c76021913960400191505060405180910390fd5b809150505b92915050565b6001601360146101000a81548160ff021916908315150217905550600081905060004790506130e8826138b3565b60006130fd8247612fea90919063ffffffff16565b905061310881613b61565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868382604051808381526020018281526020019250505060405180910390a15050506000601360146101000a81548160ff02191690831515021790555050565b8061317657613175613bcd565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322e57613229848484613c10565b613465565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132d15750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132e6576132e1848484613e70565b613464565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561338a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561339f5761339a8484846140d0565b613463565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134415750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134565761345184848461429b565b613462565b6134618484846140d0565b5b5b5b5b8061347357613472614590565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156136cd578260036000600884815481106134ac57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613593575081600460006008848154811061352b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135aa57600a5460095494509450505050613706565b61363360036000600884815481106135be57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612fea90919063ffffffff16565b92506136be600460006008848154811061364957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612fea90919063ffffffff16565b9150808060010191505061348d565b506136e5600954600a54612ebc90919063ffffffff16565b8210156136fd57600a54600954935093505050613706565b81819350935050505b9091565b600080831182906137b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561377b578082015181840152602081019050613760565b50505050905090810190601f1680156137a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816137c257fe5b049050809150509392505050565b6000806000806137df856145a4565b905060006137ec866145d5565b9050600061381582613807858a612fea90919063ffffffff16565b612fea90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613843858961303490919063ffffffff16565b9050600061385a868961303490919063ffffffff16565b90506000613871878961303490919063ffffffff16565b9050600061389a8261388c8587612fea90919063ffffffff16565b612fea90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff811180156138cd57600080fd5b506040519080825280602002602001820160405280156138fc5781602001602082028036833780820191505090505b509050308160008151811061390d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156139ad57600080fd5b505afa1580156139c1573d6000803e3d6000fd5b505050506040513d60208110156139d757600080fd5b8101908080519060200190929190505050816001815181106139f557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a5a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612815565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613b1c578082015181840152602081019050613b01565b505050509050019650505050505050600060405180830381600087803b158015613b4557600080fd5b505af1158015613b59573d6000803e3d6000fd5b505050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613bc9573d6000803e3d6000fd5b5050565b6000600f54148015613be157506000601154145b15613beb57613c0e565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b600080600080600080613c2287612f8e565b955095509550955095509550613c8087600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1586600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613daa85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613df681614606565b613e0084836147ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613e8287612f8e565b955095509550955095509550613ee086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7583600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400a85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061405681614606565b61406084836147ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806140e287612f8e565b95509550955095509550955061414086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061422181614606565b61422b84836147ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806142ad87612f8e565b95509550955095509550955061430b87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fea90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061443583600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ca85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451681614606565b61452084836147ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550565b60006145ce60646145c0600f548561303490919063ffffffff16565b612ebc90919063ffffffff16565b9050919050565b60006145ff60646145f16011548561303490919063ffffffff16565b612ebc90919063ffffffff16565b9050919050565b6000614610612e91565b90506000614627828461303490919063ffffffff16565b905061467b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147a65761476283600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0690919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6147c082600a54612fea90919063ffffffff16565b600a819055506147db81600b54612f0690919063ffffffff16565b600b81905550505056fe4f6e6c792044657620416464726573732063616e2064697361626c65206465762066656545524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220add4282c04fbfe9b3488b8239efd1638573702c4328ad950f5fa3d4bb976e20564736f6c634300060c0033

Deployed Bytecode Sourcemap

24859:18733:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32652:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27317:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28499:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29620:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25919:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27864:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28668:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30544:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27503:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31260:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28989:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25640:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29715:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32407:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30100:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25977:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26056:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30805:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36549:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25723:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27967:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16208:148;;;;;;;;;;;;;:::i;:::-;;26109:54;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29492:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15565:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32762:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27408:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29215:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28173:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27598:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25825:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33065:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32895:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28348:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32530:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16511:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32652:98;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32736:6:::1;32726:7;:16;;;;32652:98:::0;:::o;27317:83::-;27354:13;27387:5;27380:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27317:83;:::o;28499:161::-;28574:4;28591:39;28600:12;:10;:12::i;:::-;28614:7;28623:6;28591:8;:39::i;:::-;28648:4;28641:11;;28499:161;;;;:::o;29620:87::-;29662:7;29689:10;;29682:17;;29620:87;:::o;25919:51::-;;;:::o;27864:95::-;27917:7;27944;;27937:14;;27864:95;:::o;28668:313::-;28766:4;28783:36;28793:6;28801:9;28812:6;28783:9;:36::i;:::-;28830:121;28839:6;28847:12;:10;:12::i;:::-;28861:89;28899:6;28861:89;;;;;;;;;;;;;;;;;:11;:19;28873:6;28861:19;;;;;;;;;;;;;;;:33;28881:12;:10;:12::i;:::-;28861:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28830:8;:121::i;:::-;28969:4;28962:11;;28668:313;;;;;:::o;30544:253::-;30610:7;30649;;30638;:18;;30630:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30714:19;30737:10;:8;:10::i;:::-;30714:33;;30765:24;30777:11;30765:7;:11;;:24;;;;:::i;:::-;30758:31;;;30544:253;;;:::o;27503:83::-;27544:5;27569:9;;;;;;;;;;;27562:16;;27503:83;:::o;31260:479::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31342:11:::1;:20;31354:7;31342:20;;;;;;;;;;;;;;;;;;;;;;;;;31334:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31410:9;31405:327;31429:9;:16;;;;31425:1;:20;31405:327;;;31487:7;31471:23;;:9;31481:1;31471:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;31467:254;;;31530:9;31559:1;31540:9;:16;;;;:20;31530:31;;;;;;;;;;;;;;;;;;;;;;;;;31515:9;31525:1;31515:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31599:1;31580:7;:16;31588:7;31580:16;;;;;;;;;;;;;;;:20;;;;31642:5;31619:11;:20;31631:7;31619:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31666:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31700:5;;31467:254;31447:3;;;;;;;31405:327;;;;31260:479:::0;:::o;28989:218::-;29077:4;29094:83;29103:12;:10;:12::i;:::-;29117:7;29126:50;29165:10;29126:11;:25;29138:12;:10;:12::i;:::-;29126:25;;;;;;;;;;;;;;;:34;29152:7;29126:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29094:8;:83::i;:::-;29195:4;29188:11;;28989:218;;;;:::o;25640:26::-;;;;:::o;29715:377::-;29767:14;29784:12;:10;:12::i;:::-;29767:29;;29816:11;:19;29828:6;29816:19;;;;;;;;;;;;;;;;;;;;;;;;;29815:20;29807:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29896:15;29920:19;29931:7;29920:10;:19::i;:::-;29895:44;;;;;;;29968:28;29988:7;29968;:15;29976:6;29968:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29950:7;:15;29958:6;29950:15;;;;;;;;;;;;;;;:46;;;;30017:20;30029:7;30017;;:11;;:20;;;;:::i;:::-;30007:7;:30;;;;30061:23;30076:7;30061:10;;:14;;:23;;;;:::i;:::-;30048:10;:36;;;;29715:377;;;:::o;32407:111::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32506:4:::1;32476:18;:27;32495:7;32476:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32407:111:::0;:::o;30100:436::-;30190:7;30229;;30218;:18;;30210:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30288:17;30283:246;;30323:15;30347:19;30358:7;30347:10;:19::i;:::-;30322:44;;;;;;;30388:7;30381:14;;;;;30283:246;30430:23;30461:19;30472:7;30461:10;:19::i;:::-;30428:52;;;;;;;30502:15;30495:22;;;30100:436;;;;;:::o;25977:38::-;;;:::o;26056:40::-;;;;;;;;;;;;;:::o;30805:447::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31002:11:::1;:20;31014:7;31002:20;;;;;;;;;;;;;;;;;;;;;;;;;31001:21;30993:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31087:1;31068:7;:16;31076:7;31068:16;;;;;;;;;;;;;;;;:20;31065:108;;;31124:37;31144:7;:16;31152:7;31144:16;;;;;;;;;;;;;;;;31124:19;:37::i;:::-;31105:7;:16;31113:7;31105:16;;;;;;;;;;;;;;;:56;;;;31065:108;31206:4;31183:11;:20;31195:7;31183:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31221:9;31236:7;31221:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30805:447:::0;:::o;36549:123::-;36613:4;36637:18;:27;36656:7;36637:27;;;;;;;;;;;;;;;;;;;;;;;;;36630:34;;36549:123;;;:::o;25723:33::-;;;;:::o;27967:198::-;28033:7;28057:11;:20;28069:7;28057:20;;;;;;;;;;;;;;;;;;;;;;;;;28053:49;;;28086:7;:16;28094:7;28086:16;;;;;;;;;;;;;;;;28079:23;;;;28053:49;28120:37;28140:7;:16;28148:7;28140:16;;;;;;;;;;;;;;;;28120:19;:37::i;:::-;28113:44;;27967:198;;;;:::o;16208:148::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16315:1:::1;16278:40;;16299:6;::::0;::::1;;;;;;;;16278:40;;;;;;;;;;;;16346:1;16329:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16208:148::o:0;26109:54::-;;;;:::o;29492:120::-;29560:4;29584:11;:20;29596:7;29584:20;;;;;;;;;;;;;;;;;;;;;;;;;29577:27;;29492:120;;;:::o;15565:79::-;15603:7;15630:6;;;;;;;;;;;15623:13;;15565:79;:::o;32762:122::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32864:12:::1;32848:13;:28;;;;32762:122:::0;:::o;27408:87::-;27447:13;27480:7;27473:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27408:87;:::o;29215:269::-;29308:4;29325:129;29334:12;:10;:12::i;:::-;29348:7;29357:96;29396:15;29357:96;;;;;;;;;;;;;;;;;:11;:25;29369:12;:10;:12::i;:::-;29357:25;;;;;;;;;;;;;;;:34;29383:7;29357:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29325:8;:129::i;:::-;29472:4;29465:11;;29215:269;;;;:::o;28173:167::-;28251:4;28268:42;28278:12;:10;:12::i;:::-;28292:9;28303:6;28268:9;:42::i;:::-;28328:4;28321:11;;28173:167;;;;:::o;27598:258::-;27663:4;27701:17;;;;;;;;;;;27687:31;;:10;:31;;;27679:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27794:14;27770:21;;:38;;;;;;;;;;;;;;;;;;27826:21;;;;;;;;;;;27819:29;;27598:258;;;:::o;25825:85::-;;;;;;;;;;;;;:::o;33065:171::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33166:8:::1;33142:21;;:32;;;;;;;;;;;;;;;;;;33190:38;33219:8;33190:38;;;;;;;;;;;;;;;;;;;;33065:171:::0;:::o;32895:162::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32989:60:::1;33033:5;32989:25;33001:12;32989:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;32974:12;:75;;;;32895:162:::0;:::o;28348:143::-;28429:7;28456:11;:18;28468:5;28456:18;;;;;;;;;;;;;;;:27;28475:7;28456:27;;;;;;;;;;;;;;;;28449:34;;28348:143;;;;:::o;32530:110::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32627:5:::1;32597:18;:27;32616:7;32597:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32530:110:::0;:::o;16511:244::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16620:1:::1;16600:22;;:8;:22;;;;16592:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16710:8;16681:38;;16702:6;::::0;::::1;;;;;;;;16681:38;;;;;;;;;;;;16739:8;16730:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16511:244:::0;:::o;7973:106::-;8026:15;8061:10;8054:17;;7973:106;:::o;36680:337::-;36790:1;36773:19;;:5;:19;;;;36765:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36871:1;36852:21;;:7;:21;;;;36844:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36955:6;36925:11;:18;36937:5;36925:18;;;;;;;;;;;;;;;:27;36944:7;36925:27;;;;;;;;;;;;;;;:36;;;;36993:7;36977:32;;36986:5;36977:32;;;37002:6;36977:32;;;;;;;;;;;;;;;;;;36680:337;;;:::o;37025:1813::-;37163:1;37147:18;;:4;:18;;;;37139:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37240:1;37226:16;;:2;:16;;;;37218:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37310:1;37301:6;:10;37293:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37379:7;:5;:7::i;:::-;37371:15;;:4;:15;;;;:32;;;;;37396:7;:5;:7::i;:::-;37390:13;;:2;:13;;;;37371:32;37368:125;;;37436:12;;37426:6;:22;;37418:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37368:125;37788:28;37819:24;37837:4;37819:9;:24::i;:::-;37788:55;;37891:12;;37867:20;:36;37864:112;;37952:12;;37929:35;;37864:112;37996:24;38047:29;;38023:20;:53;;37996:80;;38105:19;:53;;;;;38142:16;;;;;;;;;;;38141:17;38105:53;:91;;;;;38183:13;38175:21;;:4;:21;;;;38105:91;:129;;;;;38213:21;;;;;;;;;;;38105:129;38087:318;;;38284:29;;38261:52;;38357:36;38372:20;38357:14;:36::i;:::-;38087:318;38486:12;38501:4;38486:19;;38613:18;:24;38632:4;38613:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;38641:18;:22;38660:2;38641:22;;;;;;;;;;;;;;;;;;;;;;;;;38613:50;38610:96;;;38689:5;38679:15;;38610:96;38792:38;38807:4;38812:2;38815:6;38822:7;38792:14;:38::i;:::-;37025:1813;;;;;;:::o;4383:192::-;4469:7;4502:1;4497;:6;;4505:12;4489:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4529:9;4545:1;4541;:5;4529:17;;4566:1;4559:8;;;4383:192;;;;;:::o;34699:163::-;34740:7;34761:15;34778;34797:19;:17;:19::i;:::-;34760:56;;;;34834:20;34846:7;34834;:11;;:20;;;;:::i;:::-;34827:27;;;;34699:163;:::o;5781:132::-;5839:7;5866:39;5870:1;5873;5866:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5859:46;;5781:132;;;;:::o;3480:181::-;3538:7;3558:9;3574:1;3570;:5;3558:17;;3599:1;3594;:6;;3586:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3652:1;3645:8;;;3480:181;;;;:::o;33497:419::-;33556:7;33565;33574;33583;33592;33601;33622:23;33647:12;33661:18;33683:20;33695:7;33683:11;:20::i;:::-;33621:82;;;;;;33715:15;33732:23;33757:12;33773:50;33785:7;33794:4;33800:10;33812;:8;:10::i;:::-;33773:11;:50::i;:::-;33714:109;;;;;;33842:7;33851:15;33868:4;33874:15;33891:4;33897:10;33834:74;;;;;;;;;;;;;;;;;;33497:419;;;;;;;:::o;3944:136::-;4002:7;4029:43;4033:1;4036;4029:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4022:50;;3944:136;;;;:::o;4834:471::-;4892:7;5142:1;5137;:6;5133:47;;;5167:1;5160:8;;;;5133:47;5192:9;5208:1;5204;:5;5192:17;;5237:1;5232;5228;:5;;;;;;:10;5220:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5296:1;5289:8;;;4834:471;;;;;:::o;38846:915::-;26529:4;26510:16;;:23;;;;;;;;;;;;;;;;;;38982:20:::1;39005;38982:43;;39303:22;39328:21;39303:46;;39394:30;39411:12;39394:16;:30::i;:::-;39551:18;39572:41;39598:14;39572:21;:25;;:41;;;;:::i;:::-;39551:62;;39626:24;39639:10;39626:12;:24::i;:::-;39713:40;39728:12;39742:10;39713:40;;;;;;;;;;;;;;;;;;;;;;;;26544:1;;;26575:5:::0;26556:16;;:24;;;;;;;;;;;;;;;;;;38846:915;:::o;41065:834::-;41176:7;41172:40;;41198:14;:12;:14::i;:::-;41172:40;41237:11;:19;41249:6;41237:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41261:11;:22;41273:9;41261:22;;;;;;;;;;;;;;;;;;;;;;;;;41260:23;41237:46;41233:597;;;41300:48;41322:6;41330:9;41341:6;41300:21;:48::i;:::-;41233:597;;;41371:11;:19;41383:6;41371:19;;;;;;;;;;;;;;;;;;;;;;;;;41370:20;:46;;;;;41394:11;:22;41406:9;41394:22;;;;;;;;;;;;;;;;;;;;;;;;;41370:46;41366:464;;;41433:46;41453:6;41461:9;41472:6;41433:19;:46::i;:::-;41366:464;;;41502:11;:19;41514:6;41502:19;;;;;;;;;;;;;;;;;;;;;;;;;41501:20;:47;;;;;41526:11;:22;41538:9;41526:22;;;;;;;;;;;;;;;;;;;;;;;;;41525:23;41501:47;41497:333;;;41565:44;41583:6;41591:9;41602:6;41565:17;:44::i;:::-;41497:333;;;41631:11;:19;41643:6;41631:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41654:11;:22;41666:9;41654:22;;;;;;;;;;;;;;;;;;;;;;;;;41631:45;41627:203;;;41693:48;41715:6;41723:9;41734:6;41693:21;:48::i;:::-;41627:203;;;41774:44;41792:6;41800:9;41811:6;41774:17;:44::i;:::-;41627:203;41497:333;41366:464;41233:597;41854:7;41850:41;;41876:15;:13;:15::i;:::-;41850:41;41065:834;;;;:::o;34870:561::-;34920:7;34929;34949:15;34967:7;;34949:25;;34985:15;35003:7;;34985:25;;35032:9;35027:289;35051:9;:16;;;;35047:1;:20;35027:289;;;35117:7;35093;:21;35101:9;35111:1;35101:12;;;;;;;;;;;;;;;;;;;;;;;;;35093:21;;;;;;;;;;;;;;;;:31;:66;;;;35152:7;35128;:21;35136:9;35146:1;35136:12;;;;;;;;;;;;;;;;;;;;;;;;;35128:21;;;;;;;;;;;;;;;;:31;35093:66;35089:97;;;35169:7;;35178;;35161:25;;;;;;;;;35089:97;35211:34;35223:7;:21;35231:9;35241:1;35231:12;;;;;;;;;;;;;;;;;;;;;;;;;35223:21;;;;;;;;;;;;;;;;35211:7;:11;;:34;;;;:::i;:::-;35201:44;;35270:34;35282:7;:21;35290:9;35300:1;35290:12;;;;;;;;;;;;;;;;;;;;;;;;;35282:21;;;;;;;;;;;;;;;;35270:7;:11;;:34;;;;:::i;:::-;35260:44;;35069:3;;;;;;;35027:289;;;;35340:20;35352:7;;35340;;:11;;:20;;;;:::i;:::-;35330:7;:30;35326:61;;;35370:7;;35379;;35362:25;;;;;;;;35326:61;35406:7;35415;35398:25;;;;;;34870:561;;;:::o;6409:278::-;6495:7;6527:1;6523;:5;6530:12;6515:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6554:9;6570:1;6566;:5;;;;;;6554:17;;6678:1;6671:8;;;6409:278;;;;;:::o;33924:330::-;33984:7;33993;34002;34022:12;34037:24;34053:7;34037:15;:24::i;:::-;34022:39;;34072:18;34093:30;34115:7;34093:21;:30::i;:::-;34072:51;;34134:23;34160:33;34182:10;34160:17;34172:4;34160:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34134:59;;34212:15;34229:4;34235:10;34204:42;;;;;;;;;33924:330;;;;;:::o;34262:429::-;34377:7;34386;34395;34415:15;34433:24;34445:11;34433:7;:11;;:24;;;;:::i;:::-;34415:42;;34468:12;34483:21;34492:11;34483:4;:8;;:21;;;;:::i;:::-;34468:36;;34515:18;34536:27;34551:11;34536:10;:14;;:27;;;;:::i;:::-;34515:48;;34574:23;34600:33;34622:10;34600:17;34612:4;34600:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34574:59;;34652:7;34661:15;34678:4;34644:39;;;;;;;;;;34262:429;;;;;;;;:::o;39874:589::-;40000:21;40038:1;40024:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40000:40;;40069:4;40051;40056:1;40051:7;;;;;;;;;;;;;:23;;;;;;;;;;;40095:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40085:4;40090:1;40085:7;;;;;;;;;;;;;:32;;;;;;;;;;;40130:62;40147:4;40162:15;40180:11;40130:8;:62::i;:::-;40231:15;:66;;;40312:11;40338:1;40382:4;40409;40429:15;40231:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39874:589;;:::o;39769:97::-;39824:17;;;;;;;;;;;:26;;:34;39851:6;39824:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39769:97;:::o;36150:250::-;36207:1;36196:7;;:12;:34;;;;;36229:1;36212:13;;:18;36196:34;36193:46;;;36232:7;;36193:46;36277:7;;36259:15;:25;;;;36319:13;;36295:21;:37;;;;36363:1;36353:7;:11;;;;36391:1;36375:13;:17;;;;36150:250;:::o;43011:566::-;43114:15;43131:23;43156:12;43170:23;43195:12;43209:18;43231:19;43242:7;43231:10;:19::i;:::-;43113:137;;;;;;;;;;;;43279:28;43299:7;43279;:15;43287:6;43279:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43261:7;:15;43269:6;43261:15;;;;;;;;;;;;;;;:46;;;;43336:28;43356:7;43336;:15;43344:6;43336:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43318:7;:15;43326:6;43318:15;;;;;;;;;;;;;;;:46;;;;43396:39;43419:15;43396:7;:18;43404:9;43396:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43375:7;:18;43383:9;43375:18;;;;;;;;;;;;;;;:60;;;;43449:26;43464:10;43449:14;:26::i;:::-;43486:23;43498:4;43504;43486:11;:23::i;:::-;43542:9;43525:44;;43534:6;43525:44;;;43553:15;43525:44;;;;;;;;;;;;;;;;;;43011:566;;;;;;;;;:::o;42417:586::-;42518:15;42535:23;42560:12;42574:23;42599:12;42613:18;42635:19;42646:7;42635:10;:19::i;:::-;42517:137;;;;;;;;;;;;42683:28;42703:7;42683;:15;42691:6;42683:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42665:7;:15;42673:6;42665:15;;;;;;;;;;;;;;;:46;;;;42743:39;42766:15;42743:7;:18;42751:9;42743:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42722:7;:18;42730:9;42722:18;;;;;;;;;;;;;;;:60;;;;42814:39;42837:15;42814:7;:18;42822:9;42814:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42793:7;:18;42801:9;42793:18;;;;;;;;;;;;;;;:60;;;;42875:26;42890:10;42875:14;:26::i;:::-;42912:23;42924:4;42930;42912:11;:23::i;:::-;42968:9;42951:44;;42960:6;42951:44;;;42979:15;42951:44;;;;;;;;;;;;;;;;;;42417:586;;;;;;;;;:::o;41907:502::-;42006:15;42023:23;42048:12;42062:23;42087:12;42101:18;42123:19;42134:7;42123:10;:19::i;:::-;42005:137;;;;;;;;;;;;42171:28;42191:7;42171;:15;42179:6;42171:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42153:7;:15;42161:6;42153:15;;;;;;;;;;;;;;;:46;;;;42231:39;42254:15;42231:7;:18;42239:9;42231:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42210:7;:18;42218:9;42210:18;;;;;;;;;;;;;;;:60;;;;42281:26;42296:10;42281:14;:26::i;:::-;42318:23;42330:4;42336;42318:11;:23::i;:::-;42374:9;42357:44;;42366:6;42357:44;;;42385:15;42357:44;;;;;;;;;;;;;;;;;;41907:502;;;;;;;;;:::o;31749:642::-;31852:15;31869:23;31894:12;31908:23;31933:12;31947:18;31969:19;31980:7;31969:10;:19::i;:::-;31851:137;;;;;;;;;;;;32017:28;32037:7;32017;:15;32025:6;32017:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31999:7;:15;32007:6;31999:15;;;;;;;;;;;;;;;:46;;;;32074:28;32094:7;32074;:15;32082:6;32074:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32056:7;:15;32064:6;32056:15;;;;;;;;;;;;;;;:46;;;;32134:39;32157:15;32134:7;:18;32142:9;32134:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32113:7;:18;32121:9;32113:18;;;;;;;;;;;;;;;:60;;;;32205:39;32228:15;32205:7;:18;32213:9;32205:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32184:7;:18;32192:9;32184:18;;;;;;;;;;;;;;;:60;;;;32263:26;32278:10;32263:14;:26::i;:::-;32300:23;32312:4;32318;32300:11;:23::i;:::-;32356:9;32339:44;;32348:6;32339:44;;;32367:15;32339:44;;;;;;;;;;;;;;;;;;31749:642;;;;;;;;;:::o;36412:125::-;36466:15;;36456:7;:25;;;;36508:21;;36492:13;:37;;;;36412:125::o;35810:154::-;35874:7;35901:55;35940:5;35901:20;35913:7;;35901;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35894:62;;35810:154;;;:::o;35972:166::-;36042:7;36069:61;36114:5;36069:26;36081:13;;36069:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;36062:68;;35972:166;;;:::o;35443:355::-;35506:19;35529:10;:8;:10::i;:::-;35506:33;;35550:18;35571:27;35586:11;35571:10;:14;;:27;;;;:::i;:::-;35550:48;;35634:38;35661:10;35634:7;:22;35650:4;35634:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35609:7;:22;35625:4;35609:22;;;;;;;;;;;;;;;:63;;;;35686:11;:26;35706:4;35686:26;;;;;;;;;;;;;;;;;;;;;;;;;35683:107;;;35752:38;35779:10;35752:7;:22;35768:4;35752:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35727:7;:22;35743:4;35727:22;;;;;;;;;;;;;;;:63;;;;35683:107;35443:355;;;:::o;33342:147::-;33420:17;33432:4;33420:7;;:11;;:17;;;;:::i;:::-;33410:7;:27;;;;33461:20;33476:4;33461:10;;:14;;:20;;;;:::i;:::-;33448:10;:33;;;;33342:147;;:::o

Swarm Source

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