ETH Price: $3,593.74 (-2.48%)

Token

SaveTheMoon.io (MOONs)
 

Overview

Max Total Supply

6,500,000,000,000 MOONs

Holders

61 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
coski.eth
Balance
18,966,556.843526123917408637 MOONs

Value
$0.00
0x3839717ca64d5367032190232885d2db773d3102
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Save the Moon is built off a simple idea contribute to Luna Classic. As long-term $LUNC holders, they are built off a very simple idea to Save the Moon, they need to control and bring its token economy back to a more sustainable model.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SaveTheMoon

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-21
*/

pragma solidity ^0.8.0;

// 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 payable(msg.sender);
    }

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

/**
 * @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() {
        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;
    }
}

interface IUniswapV2Router02 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function WETH() external pure returns (address);
}

library UniswapV2Library {
    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(bytes32 initCodeHash, address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint160(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                initCodeHash // init code hash
            )))));
    }
}

/// @notice based on https://github.com/Uniswap/uniswap-v3-periphery/blob/v1.0.0/contracts/libraries/PoolAddress.sol
/// @notice changed compiler version and lib name.

/// @title Provides functions for deriving a pool address from the factory, tokens, and the fee
library UniswapV3Library {
    bytes32 internal constant POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;

    /// @notice The identifying key of the pool
    struct PoolKey {
        address token0;
        address token1;
        uint24 fee;
    }

    /// @notice Returns PoolKey: the ordered tokens with the matched fee levels
    /// @param tokenA The first token of a pool, unsorted
    /// @param tokenB The second token of a pool, unsorted
    /// @param fee The fee level of the pool
    /// @return Poolkey The pool details with ordered token0 and token1 assignments
    function getPoolKey(
        address tokenA,
        address tokenB,
        uint24 fee
    ) internal pure returns (PoolKey memory) {
        if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);
        return PoolKey({token0: tokenA, token1: tokenB, fee: fee});
    }

    /// @notice Deterministically computes the pool address given the factory and PoolKey
    /// @param factory The Uniswap V3 factory contract address
    /// @param key The PoolKey
    /// @return pool The contract address of the V3 pool
    function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {
        require(key.token0 < key.token1);
        pool = address(
            uint160(
                uint256(
                    keccak256(
                        abi.encodePacked(
                            hex'ff',
                            factory,
                            keccak256(abi.encode(key.token0, key.token1, key.fee)),
                            POOL_INIT_CODE_HASH
                        )
                    )
                )
            )
        );
    }
}

interface IPLPS {
    function LiquidityProtection_beforeTokenTransfer(
        address _pool, address _from, address _to, uint _amount) external;
    function LiquidityProtection_beforeTokenTransfer_extra(
        address _pool, address _from, address _to, uint _amount) external;
    function isBlocked(address _pool, address _who) external view returns(bool);
    function unblock(address _pool, address _who) external;
}

abstract contract UsingLiquidityProtectionService {
    bool private unProtected = false;
    bool private unProtectedExtra = false;
    IPLPS private plps;
    uint64 internal constant HUNDRED_PERCENT = 1e18;
    bytes32 internal constant UNISWAP = 0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f;
    bytes32 internal constant PANCAKESWAP = 0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5;
    bytes32 internal constant QUICKSWAP = 0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f;

    enum UniswapVersion {
        V2,
        V3
    }

    enum UniswapV3Fees {
        _005, // 0.05%
        _03, // 0.3%
        _1 // 1%
    }

    modifier onlyProtectionAdmin() {
        protectionAdminCheck();
        _;
    }

    constructor (address _plps) {
        plps = IPLPS(_plps);
    }

    function LiquidityProtection_setLiquidityProtectionService(IPLPS _plps) external onlyProtectionAdmin() {
        require(token_balanceOf(getLiquidityPool()) == 0, 'UsingLiquidityProtectionService: liquidity already added');
        plps = _plps;
    }

    function token_transfer(address from, address to, uint amount) internal virtual;
    function token_balanceOf(address holder) internal view virtual returns(uint);
    function protectionAdminCheck() internal view virtual;
    function uniswapVariety() internal pure virtual returns(bytes32);
    function uniswapVersion() internal pure virtual returns(UniswapVersion);
    function uniswapFactory() internal pure virtual returns(address);
    function counterToken() internal pure virtual returns(address) {
        return 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH
    }
    function uniswapV3Fee() internal pure virtual returns(UniswapV3Fees) {
        return UniswapV3Fees._03;
    }
    function protectionChecker() internal view virtual returns(bool) {
        return ProtectionSwitch_manual();
    }
    function protectionCheckerExtra() internal view virtual returns(bool) {
        return ProtectionSwitch_manual_extra();
    }

    function lps() private view returns(IPLPS) {
        return plps;
    }

    function LiquidityProtection_beforeTokenTransfer(address _from, address _to, uint _amount) internal virtual {
        if (protectionChecker()) {
            if (not(unProtected)) {
                lps().LiquidityProtection_beforeTokenTransfer(getLiquidityPool(), _from, _to, _amount);
            }
            if (not(unProtectedExtra)) {
                lps().LiquidityProtection_beforeTokenTransfer_extra(getLiquidityPool(), _from, _to, _amount);
            }
        } else if (protectionCheckerExtra() && not(unProtectedExtra)) {
            lps().LiquidityProtection_beforeTokenTransfer_extra(getLiquidityPool(), _from, _to, _amount);
        }
    }

    function revokeBlocked(address[] calldata _holders, address _revokeTo) external onlyProtectionAdmin() {
        require(protectionChecker(), 'UsingLiquidityProtectionService: protection removed');
        bool unProtectedOld = unProtected;
        bool unProtectedExtraOld = unProtectedExtra;
        unProtected = true;
        unProtectedExtra = true;
        address pool = getLiquidityPool();
        for (uint i = 0; i < _holders.length; i++) {
            address holder = _holders[i];
            if (lps().isBlocked(pool, holder)) {
                token_transfer(holder, _revokeTo, token_balanceOf(holder));
            }
        }
        unProtected = unProtectedOld;
        unProtectedExtra = unProtectedExtraOld;
    }

    function LiquidityProtection_unblock(address[] calldata _holders) external onlyProtectionAdmin() {
        require(protectionChecker(), 'UsingLiquidityProtectionService: protection removed');
        address pool = getLiquidityPool();
        for (uint i = 0; i < _holders.length; i++) {
            lps().unblock(pool, _holders[i]);
        }
    }

    function disableProtection() external onlyProtectionAdmin() {
        unProtected = true;
    }

    function disableProtectionExtra() external onlyProtectionAdmin() {
        unProtectedExtra = true;
    }

    function isProtected() public view returns(bool) {
        return not(unProtected);
    }

    function isProtectedExtra() public view returns(bool) {
        return not(unProtectedExtra);
    }

    function ProtectionSwitch_manual() internal view returns(bool) {
        return isProtected();
    }

    function ProtectionSwitch_manual_extra() internal view returns(bool) {
        return isProtectedExtra();
    }

    function ProtectionSwitch_timestamp(uint _timestamp) internal view returns(bool) {
        return not(passed(_timestamp));
    }

    function ProtectionSwitch_block(uint _block) internal view returns(bool) {
        return not(blockPassed(_block));
    }

    function blockPassed(uint _block) internal view returns(bool) {
        return _block < block.number;
    }

    function passed(uint _timestamp) internal view returns(bool) {
        return _timestamp < block.timestamp;
    }

    function not(bool _condition) internal pure returns(bool) {
        return !_condition;
    }

    function feeToUint24(UniswapV3Fees _fee) internal pure returns(uint24) {
        if (_fee == UniswapV3Fees._03) return 3000;
        if (_fee == UniswapV3Fees._005) return 500;
        return 10000;
    }

    function getLiquidityPool() public view returns(address) {
        if (uniswapVersion() == UniswapVersion.V2) {
            return UniswapV2Library.pairFor(uniswapVariety(), uniswapFactory(), address(this), counterToken());
        }
        require(uniswapVariety() == UNISWAP, 'LiquidityProtection: uniswapVariety() can only be UNISWAP for V3.');
        return UniswapV3Library.computeAddress(uniswapFactory(),
            UniswapV3Library.getPoolKey(address(this), counterToken(), feeToUint24(uniswapV3Fee())));
    }
}

contract SaveTheMoon is Context, IERC20, Ownable, UsingLiquidityProtectionService(0x78e8a72Bcf5a78EA5294cBDAF05CD51e7E1D70D0) {
    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) public _isExcludedFromFee;

    mapping(address => bool) public ammPairs;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 6500000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    address public immutable WETH;
    uint256 private _tFeeTotal;

    string private _name = "SaveTheMoon.io";
    string private _symbol = "MOONs";
    uint8 private _decimals = 18;

    uint256 public LunaOrBurn = 2;
    uint256 public previousLunaOrBurn = LunaOrBurn;

    uint256 public reflectionFee = 2;
    uint256 public previousReflectionFee = reflectionFee;

    bool public isTaxEnabled;

    uint256 public totalLunaConverted;

    address public bridgingAddress;
    IERC20 public constant LUNA = IERC20(0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9);

    IUniswapV2Router02 public immutable uniswapV2Router;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public numTokensSellToBurnLuna = 500000 * 10**18;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 lunaReceived);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(address _bridgingAddress) {
        _rOwned[_msgSender()] = _rTotal;
        bridgingAddress = _bridgingAddress;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        WETH = _uniswapV2Router.WETH();

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

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

    function flipTaxEnable() public onlyOwner {
        isTaxEnabled = !isTaxEnabled;
    }

    function setNumOfTokensToLuna(uint256 newLimit) public onlyOwner {
        numTokensSellToBurnLuna = newLimit;
    }

    function setBridgingAddres(address newAddress) public onlyOwner {
        bridgingAddress = newAddress;
    }

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

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

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

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

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

    function manageAmmPairs(address addr, bool isAdd) public onlyOwner {
        ammPairs[addr] = isAdd;
    }

    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 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(!_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 included");
        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,
        bool isSell
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLunaOrBurn
        ) = _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);
        _reflectFee(rFee, tFee);
        if (isSell) {
            _takeBurnFee(tLunaOrBurn);
        } else {
            _takeLuna(tLunaOrBurn);
        }
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function enableOrDisableTax(bool isEnabled) external onlyOwner {
        if (isEnabled) {
            restoreAllFee();
        } else {
            removeAllFee();
        }
    }

    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 tLunaOrBurn
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLunaOrBurn,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLunaOrBurn
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tLunaOrBurn = calculateLunaOrBurn(tAmount);
        uint256 tFee = calculateReflectionFee(tAmount);

        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLunaOrBurn);
        return (tTransferAmount, tFee, tLunaOrBurn);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLunaOrBurn,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLunaOrBurn = tLunaOrBurn.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLunaOrBurn);
        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 _takeLuna(uint256 tLunaOrBurn) private {
        uint256 currentRate = _getRate();
        uint256 rLunaOrBurn = tLunaOrBurn.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLunaOrBurn);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLunaOrBurn);
    }

    function _takeBurnFee(uint256 tBurn) private {
        uint256 currentRate = _getRate();
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[0x000000000000000000000000000000000000dEaD] = _rOwned[
            0x000000000000000000000000000000000000dEaD
        ].add(rBurn);
        if (_isExcluded[0x000000000000000000000000000000000000dEaD])
            _tOwned[0x000000000000000000000000000000000000dEaD] = _tOwned[
                0x000000000000000000000000000000000000dEaD
            ].add(tBurn);
    }

    function calculateLunaOrBurn(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(LunaOrBurn).div(10**2);
    }

    function calculateReflectionFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(reflectionFee).div(10**2);
    }

    function removeAllFee() private {
        if (LunaOrBurn == 0 && reflectionFee == 0) return;

        previousLunaOrBurn = LunaOrBurn;
        previousReflectionFee = reflectionFee;
        LunaOrBurn = 0;
        reflectionFee = 0;
    }

    function restoreAllFee() private {
        LunaOrBurn = previousLunaOrBurn;
        reflectionFee = previousReflectionFee;
    }

    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");
        LiquidityProtection_beforeTokenTransfer(from, to, amount);

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToBurnLuna;
        if (overMinTokenBalance && !inSwapAndLiquify && swapAndLiquifyEnabled) {
            contractTokenBalance = numTokensSellToBurnLuna;
            swapAndLiquify(contractTokenBalance);
        }
        //indicates if fee should be deducted from transfer
        bool takeFee = (ammPairs[from] || ammPairs[to]) && isTaxEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        _tokenTransfer(from, to, amount, takeFee, ammPairs[to]);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 initialBalance = LUNA.balanceOf(address(this));
        swapTokensForLuna(contractTokenBalance);
        uint256 newBalance = LUNA.balanceOf(address(this)).sub(initialBalance);
        LUNA.transfer(bridgingAddress, newBalance);
        totalLunaConverted += newBalance;
        emit SwapAndLiquify(contractTokenBalance, newBalance);
    }

    function swapTokensForLuna(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = WETH;
        path[2] = address(LUNA);

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee,
        bool isSell
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount, isSell);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount, isSell);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount, isSell);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount, isSell);
        } else {
            _transferStandard(sender, recipient, amount, isSell);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount,
        bool isSell
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLunaOrBurn
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if (isSell) {
            _takeBurnFee(tLunaOrBurn);
        } else {
            _takeLuna(tLunaOrBurn);
        }

        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount,
        bool isSell
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLunaOrBurn
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if (isSell) {
            _takeBurnFee(tLunaOrBurn);
        } else {
            _takeLuna(tLunaOrBurn);
        }
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount,
        bool isSell
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLunaOrBurn
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if (isSell) {
            _takeBurnFee(tLunaOrBurn);
        } else {
            _takeLuna(tLunaOrBurn);
        }
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function token_transfer(address _from, address _to, uint _amount) internal override {
        _transfer(_from, _to, _amount); // Expose low-level token transfer function.
    }
    function token_balanceOf(address _holder) internal view override returns(uint) {
        return balanceOf(_holder); // Expose balance check function.
    }
    function protectionAdminCheck() internal view override onlyOwner {} // Must revert to deny access.
    function uniswapVariety() internal pure override returns(bytes32) {
        return UNISWAP; // UNISWAP / PANCAKESWAP / QUICKSWAP / SUSHISWAP.
    }
    function uniswapVersion() internal pure override returns(UniswapVersion) {
        return UniswapVersion.V2; // V2 or V3.
    }
    function uniswapFactory() internal pure override returns(address) {
        return 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; // UniswapFactory
    }
    // All the following overrides are optional, if you want to modify default behavior.

    // How the protection gets disabled.
    function protectionChecker() internal view override returns(bool) {
        return ProtectionSwitch_timestamp(1661039999); // Switch off protection on Saturday, August 20, 2022 11:59:59 PM GMT.
        // return ProtectionSwitch_block(13000000); // Switch off protection on block 13000000.
        // return ProtectionSwitch_manual(); // Switch off protection by calling disableProtection(); from owner. Default.
    }

    // This token will be pooled in pair with:
    function counterToken() internal pure override returns(address) {
        return 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_bridgingAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lunaReceived","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":"LUNA","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPLPS","name":"_plps","type":"address"}],"name":"LiquidityProtection_setLiquidityProtectionService","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"}],"name":"LiquidityProtection_unblock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LunaOrBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bridgingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtectionExtra","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"enableOrDisableTax","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":[],"name":"flipTaxEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLiquidityPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"isProtected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isProtectedExtra","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isAdd","type":"bool"}],"name":"manageAmmPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToBurnLuna","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousLunaOrBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"},{"internalType":"address","name":"_revokeTo","type":"address"}],"name":"revokeBlocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setBridgingAddres","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumOfTokensToLuna","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLunaConverted","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":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526003805461ffff191690556c520aa1fb49c9f80a72a0000000600b819055620000309060001962000318565b6200003e906000196200033b565b600c5560408051808201909152600e8082526d536176655468654d6f6f6e2e696f60901b60208301529062000074908262000406565b506040805180820190915260058152644d4f4f4e7360d81b6020820152600f90620000a0908262000406565b506010805460ff19166012908117909155600260118190559081905560138190556014556017805460ff60a81b1916600160a81b1790556969e10de76676d0800000601855348015620000f257600080fd5b5060405162003803380380620038038339810160408190526200011591620004d2565b600080546001600160a01b0319163390811782556040517378e8a72bcf5a78ea5294cbdaf05cd51e7e1d70d09282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600380546001600160a01b03909216620100000262010000600160b01b0319909216919091179055600c5460046000620001a13390565b6001600160a01b039081168252602080830193909352604091820160002093909355601780546001600160a01b03191693851693909317909255737a250d5630b4cf539739df2c5dacb4c659f2488d60a081905282516315ab88c960e31b815292519092839263ad5c4648926004808401938290030181865afa1580156200022d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002539190620004d2565b6001600160a01b0316608052600160076000620002786000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526007909252902080549091166001179055620002c03390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200030891815260200190565b60405180910390a3505062000504565b6000826200033657634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200035c57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200038c57607f821691505b602082108103620003ad57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200040157600081815260208120601f850160051c81016020861015620003dc5750805b601f850160051c820191505b81811015620003fd57828155600101620003e8565b5050505b505050565b81516001600160401b0381111562000422576200042262000361565b6200043a8162000433845462000377565b84620003b3565b602080601f831160018114620004725760008415620004595750858301515b600019600386901b1c1916600185901b178555620003fd565b600085815260208120601f198616915b82811015620004a35788860151825594840194600190910190840162000482565b5085821015620004c25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620004e557600080fd5b81516001600160a01b0381168114620004fd57600080fd5b9392505050565b60805160a0516132c46200053f600039600081816103970152818161267b01526126b70152600081816107f701526125db01526132c46000f3fe6080604052600436106102e85760003560e01c80637aae744c11610190578063ad5c4648116100dc578063dd62ed3e11610095578063ea0b0fa11161006f578063ea0b0fa114610923578063ea2f0b3714610943578063f0f292e614610963578063f2fde38b1461097957600080fd5b8063dd62ed3e146108a3578063dec4e1e9146108e9578063e6c1909b1461090957600080fd5b8063ad5c4648146107e5578063aed2cd6114610819578063c49b9a8014610841578063cf92181314610861578063d0411f2314610877578063d31b06a21461088d57600080fd5b80638b77a6be1161014957806395ddbe891161012357806395ddbe8914610760578063a457c2d714610775578063a72905a214610795578063a9059cbb146107c557600080fd5b80638b77a6be146107175780638da5cb5b1461072d57806395d89b411461074b57600080fd5b80637aae744c146106555780637bafac3a146106755780637ec067681461068a57806383ad7994146106aa57806388f82020146106c05780638953c770146106f957600080fd5b8063395093511161024f5780635300f82b1161020857806370a08231116101e257806370a08231146105d0578063715018a6146105f057806375ee838914610605578063768dc7101461062557600080fd5b80635300f82b1461055e5780635342acb4146105775780635fdb86f9146105b057600080fd5b806339509351146104a8578063421dd7c7146104c8578063437823ec146104dd5780634549b039146104fd5780634a74bb021461051d57806352390c021461053e57600080fd5b806318e61cd7116102a157806318e61cd7146103e65780631f69fcb91461040657806323b872dd146104265780632d83811914610446578063313ce567146104665780633685d4191461048857600080fd5b806306fdde03146102f4578063095ea7b31461031f578063110a599f1461034f57806313114a9d146103665780631694505e1461038557806318160ddd146103d157600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610999565b6040516103169190612d6b565b60405180910390f35b34801561032b57600080fd5b5061033f61033a366004612dd5565b610a2b565b6040519015158152602001610316565b34801561035b57600080fd5b50610364610a42565b005b34801561037257600080fd5b50600d545b604051908152602001610316565b34801561039157600080fd5b506103b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610316565b3480156103dd57600080fd5b50600b54610377565b3480156103f257600080fd5b506017546103b9906001600160a01b031681565b34801561041257600080fd5b50610364610421366004612e01565b610a5b565b34801561043257600080fd5b5061033f610441366004612e1e565b610b15565b34801561045257600080fd5b50610377610461366004612e5f565b610b7e565b34801561047257600080fd5b5060105460405160ff9091168152602001610316565b34801561049457600080fd5b506103646104a3366004612e01565b610c02565b3480156104b457600080fd5b5061033f6104c3366004612dd5565b610db8565b3480156104d457600080fd5b50610364610dee565b3480156104e957600080fd5b506103646104f8366004612e01565b610e05565b34801561050957600080fd5b50610377610518366004612e86565b610e53565b34801561052957600080fd5b5060175461033f90600160a81b900460ff1681565b34801561054a57600080fd5b50610364610559366004612e01565b610ee0565b34801561056a57600080fd5b5060035460ff161561033f565b34801561058357600080fd5b5061033f610592366004612e01565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105bc57600080fd5b506103646105cb366004612efb565b611038565b3480156105dc57600080fd5b506103776105eb366004612e01565b611133565b3480156105fc57600080fd5b50610364611192565b34801561061157600080fd5b50610364610620366004612f3d565b611206565b34801561063157600080fd5b5061033f610640366004612e01565b60076020526000908152604090205460ff1681565b34801561066157600080fd5b50610364610670366004612f94565b61136c565b34801561068157600080fd5b506103646113b8565b34801561069657600080fd5b506103646106a5366004612e5f565b6113f6565b3480156106b657600080fd5b5061037760135481565b3480156106cc57600080fd5b5061033f6106db366004612e01565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561070557600080fd5b50600354610100900460ff161561033f565b34801561072357600080fd5b5061037760165481565b34801561073957600080fd5b506000546001600160a01b03166103b9565b34801561075757600080fd5b50610309611425565b34801561076c57600080fd5b506103b9611434565b34801561078157600080fd5b5061033f610790366004612dd5565b61148a565b3480156107a157600080fd5b5061033f6107b0366004612e01565b60086020526000908152604090205460ff1681565b3480156107d157600080fd5b5061033f6107e0366004612dd5565b6114d9565b3480156107f157600080fd5b506103b97f000000000000000000000000000000000000000000000000000000000000000081565b34801561082557600080fd5b506103b973d2877702675e6ceb975b4a1dff9fb7baf4c91ea981565b34801561084d57600080fd5b5061036461085c366004612f94565b6114e6565b34801561086d57600080fd5b5061037760185481565b34801561088357600080fd5b5061037760115481565b34801561089957600080fd5b5061037760145481565b3480156108af57600080fd5b506103776108be366004612fb1565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156108f557600080fd5b50610364610904366004612e01565b611568565b34801561091557600080fd5b5060155461033f9060ff1681565b34801561092f57600080fd5b5061036461093e366004612fdf565b6115b4565b34801561094f57600080fd5b5061036461095e366004612e01565b611609565b34801561096f57600080fd5b5061037760125481565b34801561098557600080fd5b50610364610994366004612e01565b611654565b6060600e80546109a89061300d565b80601f01602080910402602001604051908101604052809291908181526020018280546109d49061300d565b8015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b5050505050905090565b6000610a3833848461173e565b5060015b92915050565b610a4a611862565b6003805461ff001916610100179055565b610a63611862565b610a73610a6e611434565b61188e565b15610aeb5760405162461bcd60e51b815260206004820152603860248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f206c697175696469747920616c7265616479206164646564000000000000000060648201526084015b60405180910390fd5b600380546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610b22848484611899565b610b748433610b6f85604051806060016040528060288152602001613242602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611aed565b61173e565b5060019392505050565b6000600c54821115610be55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ae2565b6000610bef611b27565b9050610bfb8382611b4a565b9392505050565b6000546001600160a01b03163314610c2c5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03811660009081526009602052604090205460ff16610c945760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610ae2565b60005b600a54811015610db457816001600160a01b0316600a8281548110610cbe57610cbe61307c565b6000918252602090912001546001600160a01b031603610da257600a8054610ce8906001906130a8565b81548110610cf857610cf861307c565b600091825260209091200154600a80546001600160a01b039092169183908110610d2457610d2461307c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600990925220805460ff19169055600a805480610d7c57610d7c6130bf565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dac816130d5565b915050610c97565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610a38918590610b6f9086611b8c565b610df6611862565b6003805460ff19166001179055565b6000546001600160a01b03163314610e2f5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600b54831115610ea75760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ae2565b81610ec6576000610eb784611beb565b50939550610a3c945050505050565b6000610ed184611beb565b50929550610a3c945050505050565b6000546001600160a01b03163314610f0a5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03811660009081526009602052604090205460ff1615610f735760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ae2565b6001600160a01b03811660009081526004602052604090205415610fcd576001600160a01b038116600090815260046020526040902054610fb390610b7e565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b905090565b611040611862565b611048611c3a565b6110645760405162461bcd60e51b8152600401610ae2906130ee565b600061106e611434565b905060005b8281101561112d576003546201000090046001600160a01b0316630d8bd5e8838686858181106110a5576110a561307c565b90506020020160208101906110ba9190612e01565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801561110257600080fd5b505af1158015611116573d6000803e3d6000fd5b505050508080611125906130d5565b915050611073565b50505050565b6001600160a01b03811660009081526009602052604081205460ff161561117057506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610a3c90610b7e565b6000546001600160a01b031633146111bc5760405162461bcd60e51b8152600401610ae290613047565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61120e611862565b611216611c3a565b6112325760405162461bcd60e51b8152600401610ae2906130ee565b6003805461010161ffff1982161790915560ff808216916101009004166000611259611434565b905060005b8581101561134357600087878381811061127a5761127a61307c565b905060200201602081019061128f9190612e01565b6003549091506201000090046001600160a01b0316604051634362c69f60e11b81526001600160a01b038581166004830152838116602483015291909116906386c58d3e90604401602060405180830381865afa1580156112f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113189190613141565b1561133057611330818761132b8461188e565b611c49565b508061133b816130d5565b91505061125e565b50506003805461ffff191692151561ff0019169290921761010091151591909102179055505050565b6000546001600160a01b031633146113965760405162461bcd60e51b8152600401610ae290613047565b80156113b0576113ad601254601155601454601355565b50565b6113ad611c59565b6000546001600160a01b031633146113e25760405162461bcd60e51b8152600401610ae290613047565b6015805460ff19811660ff90911615179055565b6000546001600160a01b031633146114205760405162461bcd60e51b8152600401610ae290613047565b601855565b6060600f80546109a89061300d565b60006110337f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f3073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2611c87565b6000610a383384610b6f8560405180606001604052806025815260200161326a602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611aed565b6000610a38338484611899565b6000546001600160a01b031633146115105760405162461bcd60e51b8152600401610ae290613047565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061155d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115925760405162461bcd60e51b8152600401610ae290613047565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115de5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116335760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b0316331461167e5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b0381166116e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ae2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117a05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae2565b6001600160a01b0382166118015760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae2565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b0316331461188c5760405162461bcd60e51b8152600401610ae290613047565b565b6000610a3c82611133565b6001600160a01b0383166118fd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ae2565b6001600160a01b03821661195f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ae2565b600081116119c15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ae2565b6119cc838383611d45565b60006119d730611133565b601854909150811080159081906119f85750601754600160a01b900460ff16155b8015611a0d5750601754600160a81b900460ff165b15611a20576018549150611a2082611eb6565b6001600160a01b03851660009081526008602052604081205460ff1680611a5f57506001600160a01b03851660009081526008602052604090205460ff165b8015611a6d575060155460ff165b6001600160a01b03871660009081526007602052604090205490915060ff1680611aaf57506001600160a01b03851660009081526007602052604090205460ff165b15611ab8575060005b6001600160a01b038516600090815260086020526040902054611ae590879087908790859060ff166120bb565b505050505050565b60008184841115611b115760405162461bcd60e51b8152600401610ae29190612d6b565b506000611b1e84866130a8565b95945050505050565b6000806000611b3461223e565b9092509050611b438282611b4a565b9250505090565b6000610bfb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123c0565b600080611b99838561315e565b905083811015610bfb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ae2565b6000806000806000806000806000611c028a6123ee565b9250925092506000806000611c208d8686611c1b611b27565b612429565b919f909e50909c50959a5093985091965092945050505050565b6000611033636301757f612479565b611c54838383611899565b505050565b601154158015611c695750601354155b15611c7057565b601180546012556013805460145560009182905555565b6000806000611c96858561248b565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012088604051602001611d22939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b611d4d611c3a565b15611e925760035460ff16611dec576003546201000090046001600160a01b0316630336a330611d7b611434565b6040516001600160e01b031960e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b505050505b600354610100900460ff16155b15611c54576003546201000090046001600160a01b0316635434e559611e1d611434565b6040516001600160e01b031960e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b158015611e7557600080fd5b505af1158015611e89573d6000803e3d6000fd5b50505050505050565b600354610100900460ff16158015611df95750600354610100900460ff1615611df9565b6017805460ff60a01b1916600160a01b1790556040516370a0823160e01b815230600482015260009073d2877702675e6ceb975b4a1dff9fb7baf4c91ea9906370a0823190602401602060405180830381865afa158015611f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3f9190613176565b9050611f4a82612582565b6040516370a0823160e01b8152306004820152600090611fcc90839073d2877702675e6ceb975b4a1dff9fb7baf4c91ea9906370a0823190602401602060405180830381865afa158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc69190613176565b90612723565b60175460405163a9059cbb60e01b81526001600160a01b0390911660048201526024810182905290915073d2877702675e6ceb975b4a1dff9fb7baf4c91ea99063a9059cbb906044016020604051808303816000875af1158015612034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120589190613141565b50806016600082825461206b919061315e565b909155505060408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506017805460ff60a01b1916905550565b816120c8576120c8611c59565b6001600160a01b03851660009081526009602052604090205460ff16801561210957506001600160a01b03841660009081526009602052604090205460ff16155b1561211f5761211a85858584612765565b612221565b6001600160a01b03851660009081526009602052604090205460ff1615801561216057506001600160a01b03841660009081526009602052604090205460ff165b156121715761211a858585846128b2565b6001600160a01b03851660009081526009602052604090205460ff161580156121b357506001600160a01b03841660009081526009602052604090205460ff16155b156121c45761211a8585858461296d565b6001600160a01b03851660009081526009602052604090205460ff16801561220457506001600160a01b03841660009081526009602052604090205460ff165b156122155761211a858585846129c3565b6122218585858461296d565b8161223757612237601254601155601454601355565b5050505050565b600c54600b546000918291825b600a54811015612390578260046000600a848154811061226d5761226d61307c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122d857508160056000600a84815481106122b1576122b161307c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122ee57600c54600b54945094505050509091565b61233460046000600a84815481106123085761230861307c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612723565b925061237c60056000600a84815481106123505761235061307c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612723565b915080612388816130d5565b91505061224b565b50600b54600c546123a091611b4a565b8210156123b757600c54600b549350935050509091565b90939092509050565b600081836123e15760405162461bcd60e51b8152600401610ae29190612d6b565b506000611b1e848661318f565b6000806000806123fd85612aed565b9050600061240a86612b0f565b9050600061241c83611fc68985612723565b9791965091945092505050565b60008080806124388886612b2b565b905060006124468887612b2b565b905060006124548888612b2b565b9050600061246682611fc68686612723565b939b939a50919850919650505050505050565b6000610a3c61248783421190565b1590565b600080826001600160a01b0316846001600160a01b0316036124fd5760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b6064820152608401610ae2565b826001600160a01b0316846001600160a01b03161061251d578284612520565b83835b90925090506001600160a01b03821661257b5760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f4144445245535300006044820152606401610ae2565b9250929050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106125b9576125b961307c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061260d5761260d61307c565b60200260200101906001600160a01b031690816001600160a01b03168152505073d2877702675e6ceb975b4a1dff9fb7baf4c91ea9816002815181106126555761265561307c565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a0307f00000000000000000000000000000000000000000000000000000000000000008461173e565b604051635c11d79560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d795906126f59085906000908690309042906004016131b1565b600060405180830381600087803b15801561270f57600080fd5b505af1158015611ae5573d6000803e3d6000fd5b6000610bfb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aed565b60008060008060008061277788611beb565b9550955095509550955095506127bb88600560008d6001600160a01b03166001600160a01b031681526020019081526020016000205461272390919063ffffffff16565b6001600160a01b038b166000908152600560209081526040808320939093556004905220546127ea9087612723565b6001600160a01b03808c1660009081526004602052604080822093909355908b16815220546128199086611b8c565b6001600160a01b038a1660009081526004602052604090205586156128465761284181612bad565b61284f565b61284f81612cbf565b6128598483612d47565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161289e91815260200190565b60405180910390a350505050505050505050565b6000806000806000806128c488611beb565b95509550955095509550955061290886600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461272390919063ffffffff16565b6001600160a01b03808c16600090815260046020908152604080832094909455918c1681526005909152205461293e9084611b8c565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546128199086611b8c565b60008060008060008061297f88611beb565b9550955095509550955095506127ea86600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461272390919063ffffffff16565b6000806000806000806129d588611beb565b955095509550955095509550612a1988600560008d6001600160a01b03166001600160a01b031681526020019081526020016000205461272390919063ffffffff16565b6001600160a01b038b16600090815260056020908152604080832093909355600490522054612a489087612723565b6001600160a01b03808c16600090815260046020908152604080832094909455918c16815260059091522054612a7e9084611b8c565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612aad9086611b8c565b6001600160a01b038a16600090815260046020526040902055612ad08483612d47565b8615612ae457612adf81612bad565b612859565b61285981612cbf565b6000610a3c6064612b0960115485612b2b90919063ffffffff16565b90611b4a565b6000610a3c6064612b0960135485612b2b90919063ffffffff16565b600082600003612b3d57506000610a3c565b6000612b498385613222565b905082612b56858361318f565b14610bfb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ae2565b6000612bb7611b27565b90506000612bc58383612b2b565b61dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54909150612bff9082611b8c565b61dead6000527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd5560096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037855460ff1615611c545761dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba54612c8d9084611b8c565b61dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba55505050565b6000612cc9611b27565b90506000612cd78383612b2b565b30600090815260046020526040902054909150612cf49082611b8c565b3060009081526004602090815260408083209390935560099052205460ff1615611c545730600090815260056020526040902054612d329084611b8c565b30600090815260056020526040902055505050565b600c54612d549083612723565b600c55600d54612d649082611b8c565b600d555050565b600060208083528351808285015260005b81811015612d9857858101830151858201604001528201612d7c565b81811115612daa576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146113ad57600080fd5b60008060408385031215612de857600080fd5b8235612df381612dc0565b946020939093013593505050565b600060208284031215612e1357600080fd5b8135610bfb81612dc0565b600080600060608486031215612e3357600080fd5b8335612e3e81612dc0565b92506020840135612e4e81612dc0565b929592945050506040919091013590565b600060208284031215612e7157600080fd5b5035919050565b80151581146113ad57600080fd5b60008060408385031215612e9957600080fd5b823591506020830135612eab81612e78565b809150509250929050565b60008083601f840112612ec857600080fd5b50813567ffffffffffffffff811115612ee057600080fd5b6020830191508360208260051b850101111561257b57600080fd5b60008060208385031215612f0e57600080fd5b823567ffffffffffffffff811115612f2557600080fd5b612f3185828601612eb6565b90969095509350505050565b600080600060408486031215612f5257600080fd5b833567ffffffffffffffff811115612f6957600080fd5b612f7586828701612eb6565b9094509250506020840135612f8981612dc0565b809150509250925092565b600060208284031215612fa657600080fd5b8135610bfb81612e78565b60008060408385031215612fc457600080fd5b8235612fcf81612dc0565b91506020830135612eab81612dc0565b60008060408385031215612ff257600080fd5b8235612ffd81612dc0565b91506020830135612eab81612e78565b600181811c9082168061302157607f821691505b60208210810361304157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156130ba576130ba613092565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016130e7576130e7613092565b5060010190565b60208082526033908201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a604082015272081c1c9bdd1958dd1a5bdb881c995b5bdd9959606a1b606082015260800190565b60006020828403121561315357600080fd5b8151610bfb81612e78565b6000821982111561317157613171613092565b500190565b60006020828403121561318857600080fd5b5051919050565b6000826131ac57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132015784516001600160a01b0316835293830193918301916001016131dc565b50506001600160a01b03969096166060850152505050608001529392505050565b600081600019048311821515161561323c5761323c613092565b50029056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220423680bc2c1dc34e0332a05f2a68c4c6214ad16c7c907dd480a9c9c3a5d3448e64736f6c634300080f0033000000000000000000000000c4957257eb4bab46627b1cd039f2c22e41ce98c3

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80637aae744c11610190578063ad5c4648116100dc578063dd62ed3e11610095578063ea0b0fa11161006f578063ea0b0fa114610923578063ea2f0b3714610943578063f0f292e614610963578063f2fde38b1461097957600080fd5b8063dd62ed3e146108a3578063dec4e1e9146108e9578063e6c1909b1461090957600080fd5b8063ad5c4648146107e5578063aed2cd6114610819578063c49b9a8014610841578063cf92181314610861578063d0411f2314610877578063d31b06a21461088d57600080fd5b80638b77a6be1161014957806395ddbe891161012357806395ddbe8914610760578063a457c2d714610775578063a72905a214610795578063a9059cbb146107c557600080fd5b80638b77a6be146107175780638da5cb5b1461072d57806395d89b411461074b57600080fd5b80637aae744c146106555780637bafac3a146106755780637ec067681461068a57806383ad7994146106aa57806388f82020146106c05780638953c770146106f957600080fd5b8063395093511161024f5780635300f82b1161020857806370a08231116101e257806370a08231146105d0578063715018a6146105f057806375ee838914610605578063768dc7101461062557600080fd5b80635300f82b1461055e5780635342acb4146105775780635fdb86f9146105b057600080fd5b806339509351146104a8578063421dd7c7146104c8578063437823ec146104dd5780634549b039146104fd5780634a74bb021461051d57806352390c021461053e57600080fd5b806318e61cd7116102a157806318e61cd7146103e65780631f69fcb91461040657806323b872dd146104265780632d83811914610446578063313ce567146104665780633685d4191461048857600080fd5b806306fdde03146102f4578063095ea7b31461031f578063110a599f1461034f57806313114a9d146103665780631694505e1461038557806318160ddd146103d157600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b50610309610999565b6040516103169190612d6b565b60405180910390f35b34801561032b57600080fd5b5061033f61033a366004612dd5565b610a2b565b6040519015158152602001610316565b34801561035b57600080fd5b50610364610a42565b005b34801561037257600080fd5b50600d545b604051908152602001610316565b34801561039157600080fd5b506103b97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610316565b3480156103dd57600080fd5b50600b54610377565b3480156103f257600080fd5b506017546103b9906001600160a01b031681565b34801561041257600080fd5b50610364610421366004612e01565b610a5b565b34801561043257600080fd5b5061033f610441366004612e1e565b610b15565b34801561045257600080fd5b50610377610461366004612e5f565b610b7e565b34801561047257600080fd5b5060105460405160ff9091168152602001610316565b34801561049457600080fd5b506103646104a3366004612e01565b610c02565b3480156104b457600080fd5b5061033f6104c3366004612dd5565b610db8565b3480156104d457600080fd5b50610364610dee565b3480156104e957600080fd5b506103646104f8366004612e01565b610e05565b34801561050957600080fd5b50610377610518366004612e86565b610e53565b34801561052957600080fd5b5060175461033f90600160a81b900460ff1681565b34801561054a57600080fd5b50610364610559366004612e01565b610ee0565b34801561056a57600080fd5b5060035460ff161561033f565b34801561058357600080fd5b5061033f610592366004612e01565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105bc57600080fd5b506103646105cb366004612efb565b611038565b3480156105dc57600080fd5b506103776105eb366004612e01565b611133565b3480156105fc57600080fd5b50610364611192565b34801561061157600080fd5b50610364610620366004612f3d565b611206565b34801561063157600080fd5b5061033f610640366004612e01565b60076020526000908152604090205460ff1681565b34801561066157600080fd5b50610364610670366004612f94565b61136c565b34801561068157600080fd5b506103646113b8565b34801561069657600080fd5b506103646106a5366004612e5f565b6113f6565b3480156106b657600080fd5b5061037760135481565b3480156106cc57600080fd5b5061033f6106db366004612e01565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561070557600080fd5b50600354610100900460ff161561033f565b34801561072357600080fd5b5061037760165481565b34801561073957600080fd5b506000546001600160a01b03166103b9565b34801561075757600080fd5b50610309611425565b34801561076c57600080fd5b506103b9611434565b34801561078157600080fd5b5061033f610790366004612dd5565b61148a565b3480156107a157600080fd5b5061033f6107b0366004612e01565b60086020526000908152604090205460ff1681565b3480156107d157600080fd5b5061033f6107e0366004612dd5565b6114d9565b3480156107f157600080fd5b506103b97f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561082557600080fd5b506103b973d2877702675e6ceb975b4a1dff9fb7baf4c91ea981565b34801561084d57600080fd5b5061036461085c366004612f94565b6114e6565b34801561086d57600080fd5b5061037760185481565b34801561088357600080fd5b5061037760115481565b34801561089957600080fd5b5061037760145481565b3480156108af57600080fd5b506103776108be366004612fb1565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156108f557600080fd5b50610364610904366004612e01565b611568565b34801561091557600080fd5b5060155461033f9060ff1681565b34801561092f57600080fd5b5061036461093e366004612fdf565b6115b4565b34801561094f57600080fd5b5061036461095e366004612e01565b611609565b34801561096f57600080fd5b5061037760125481565b34801561098557600080fd5b50610364610994366004612e01565b611654565b6060600e80546109a89061300d565b80601f01602080910402602001604051908101604052809291908181526020018280546109d49061300d565b8015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b5050505050905090565b6000610a3833848461173e565b5060015b92915050565b610a4a611862565b6003805461ff001916610100179055565b610a63611862565b610a73610a6e611434565b61188e565b15610aeb5760405162461bcd60e51b815260206004820152603860248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f206c697175696469747920616c7265616479206164646564000000000000000060648201526084015b60405180910390fd5b600380546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610b22848484611899565b610b748433610b6f85604051806060016040528060288152602001613242602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611aed565b61173e565b5060019392505050565b6000600c54821115610be55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ae2565b6000610bef611b27565b9050610bfb8382611b4a565b9392505050565b6000546001600160a01b03163314610c2c5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03811660009081526009602052604090205460ff16610c945760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610ae2565b60005b600a54811015610db457816001600160a01b0316600a8281548110610cbe57610cbe61307c565b6000918252602090912001546001600160a01b031603610da257600a8054610ce8906001906130a8565b81548110610cf857610cf861307c565b600091825260209091200154600a80546001600160a01b039092169183908110610d2457610d2461307c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600990925220805460ff19169055600a805480610d7c57610d7c6130bf565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dac816130d5565b915050610c97565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610a38918590610b6f9086611b8c565b610df6611862565b6003805460ff19166001179055565b6000546001600160a01b03163314610e2f5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600b54831115610ea75760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ae2565b81610ec6576000610eb784611beb565b50939550610a3c945050505050565b6000610ed184611beb565b50929550610a3c945050505050565b6000546001600160a01b03163314610f0a5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03811660009081526009602052604090205460ff1615610f735760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ae2565b6001600160a01b03811660009081526004602052604090205415610fcd576001600160a01b038116600090815260046020526040902054610fb390610b7e565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b905090565b611040611862565b611048611c3a565b6110645760405162461bcd60e51b8152600401610ae2906130ee565b600061106e611434565b905060005b8281101561112d576003546201000090046001600160a01b0316630d8bd5e8838686858181106110a5576110a561307c565b90506020020160208101906110ba9190612e01565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801561110257600080fd5b505af1158015611116573d6000803e3d6000fd5b505050508080611125906130d5565b915050611073565b50505050565b6001600160a01b03811660009081526009602052604081205460ff161561117057506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610a3c90610b7e565b6000546001600160a01b031633146111bc5760405162461bcd60e51b8152600401610ae290613047565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61120e611862565b611216611c3a565b6112325760405162461bcd60e51b8152600401610ae2906130ee565b6003805461010161ffff1982161790915560ff808216916101009004166000611259611434565b905060005b8581101561134357600087878381811061127a5761127a61307c565b905060200201602081019061128f9190612e01565b6003549091506201000090046001600160a01b0316604051634362c69f60e11b81526001600160a01b038581166004830152838116602483015291909116906386c58d3e90604401602060405180830381865afa1580156112f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113189190613141565b1561133057611330818761132b8461188e565b611c49565b508061133b816130d5565b91505061125e565b50506003805461ffff191692151561ff0019169290921761010091151591909102179055505050565b6000546001600160a01b031633146113965760405162461bcd60e51b8152600401610ae290613047565b80156113b0576113ad601254601155601454601355565b50565b6113ad611c59565b6000546001600160a01b031633146113e25760405162461bcd60e51b8152600401610ae290613047565b6015805460ff19811660ff90911615179055565b6000546001600160a01b031633146114205760405162461bcd60e51b8152600401610ae290613047565b601855565b6060600f80546109a89061300d565b60006110337f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f3073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2611c87565b6000610a383384610b6f8560405180606001604052806025815260200161326a602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611aed565b6000610a38338484611899565b6000546001600160a01b031633146115105760405162461bcd60e51b8152600401610ae290613047565b60178054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061155d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115925760405162461bcd60e51b8152600401610ae290613047565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115de5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116335760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b0316331461167e5760405162461bcd60e51b8152600401610ae290613047565b6001600160a01b0381166116e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ae2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117a05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae2565b6001600160a01b0382166118015760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae2565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b0316331461188c5760405162461bcd60e51b8152600401610ae290613047565b565b6000610a3c82611133565b6001600160a01b0383166118fd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ae2565b6001600160a01b03821661195f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ae2565b600081116119c15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ae2565b6119cc838383611d45565b60006119d730611133565b601854909150811080159081906119f85750601754600160a01b900460ff16155b8015611a0d5750601754600160a81b900460ff165b15611a20576018549150611a2082611eb6565b6001600160a01b03851660009081526008602052604081205460ff1680611a5f57506001600160a01b03851660009081526008602052604090205460ff165b8015611a6d575060155460ff165b6001600160a01b03871660009081526007602052604090205490915060ff1680611aaf57506001600160a01b03851660009081526007602052604090205460ff165b15611ab8575060005b6001600160a01b038516600090815260086020526040902054611ae590879087908790859060ff166120bb565b505050505050565b60008184841115611b115760405162461bcd60e51b8152600401610ae29190612d6b565b506000611b1e84866130a8565b95945050505050565b6000806000611b3461223e565b9092509050611b438282611b4a565b9250505090565b6000610bfb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123c0565b600080611b99838561315e565b905083811015610bfb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ae2565b6000806000806000806000806000611c028a6123ee565b9250925092506000806000611c208d8686611c1b611b27565b612429565b919f909e50909c50959a5093985091965092945050505050565b6000611033636301757f612479565b611c54838383611899565b505050565b601154158015611c695750601354155b15611c7057565b601180546012556013805460145560009182905555565b6000806000611c96858561248b565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012088604051602001611d22939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b611d4d611c3a565b15611e925760035460ff16611dec576003546201000090046001600160a01b0316630336a330611d7b611434565b6040516001600160e01b031960e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b505050505b600354610100900460ff16155b15611c54576003546201000090046001600160a01b0316635434e559611e1d611434565b6040516001600160e01b031960e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b158015611e7557600080fd5b505af1158015611e89573d6000803e3d6000fd5b50505050505050565b600354610100900460ff16158015611df95750600354610100900460ff1615611df9565b6017805460ff60a01b1916600160a01b1790556040516370a0823160e01b815230600482015260009073d2877702675e6ceb975b4a1dff9fb7baf4c91ea9906370a0823190602401602060405180830381865afa158015611f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3f9190613176565b9050611f4a82612582565b6040516370a0823160e01b8152306004820152600090611fcc90839073d2877702675e6ceb975b4a1dff9fb7baf4c91ea9906370a0823190602401602060405180830381865afa158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc69190613176565b90612723565b60175460405163a9059cbb60e01b81526001600160a01b0390911660048201526024810182905290915073d2877702675e6ceb975b4a1dff9fb7baf4c91ea99063a9059cbb906044016020604051808303816000875af1158015612034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120589190613141565b50806016600082825461206b919061315e565b909155505060408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506017805460ff60a01b1916905550565b816120c8576120c8611c59565b6001600160a01b03851660009081526009602052604090205460ff16801561210957506001600160a01b03841660009081526009602052604090205460ff16155b1561211f5761211a85858584612765565b612221565b6001600160a01b03851660009081526009602052604090205460ff1615801561216057506001600160a01b03841660009081526009602052604090205460ff165b156121715761211a858585846128b2565b6001600160a01b03851660009081526009602052604090205460ff161580156121b357506001600160a01b03841660009081526009602052604090205460ff16155b156121c45761211a8585858461296d565b6001600160a01b03851660009081526009602052604090205460ff16801561220457506001600160a01b03841660009081526009602052604090205460ff165b156122155761211a858585846129c3565b6122218585858461296d565b8161223757612237601254601155601454601355565b5050505050565b600c54600b546000918291825b600a54811015612390578260046000600a848154811061226d5761226d61307c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122d857508160056000600a84815481106122b1576122b161307c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122ee57600c54600b54945094505050509091565b61233460046000600a84815481106123085761230861307c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612723565b925061237c60056000600a84815481106123505761235061307c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612723565b915080612388816130d5565b91505061224b565b50600b54600c546123a091611b4a565b8210156123b757600c54600b549350935050509091565b90939092509050565b600081836123e15760405162461bcd60e51b8152600401610ae29190612d6b565b506000611b1e848661318f565b6000806000806123fd85612aed565b9050600061240a86612b0f565b9050600061241c83611fc68985612723565b9791965091945092505050565b60008080806124388886612b2b565b905060006124468887612b2b565b905060006124548888612b2b565b9050600061246682611fc68686612723565b939b939a50919850919650505050505050565b6000610a3c61248783421190565b1590565b600080826001600160a01b0316846001600160a01b0316036124fd5760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b6064820152608401610ae2565b826001600160a01b0316846001600160a01b03161061251d578284612520565b83835b90925090506001600160a01b03821661257b5760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f4144445245535300006044820152606401610ae2565b9250929050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106125b9576125b961307c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061260d5761260d61307c565b60200260200101906001600160a01b031690816001600160a01b03168152505073d2877702675e6ceb975b4a1dff9fb7baf4c91ea9816002815181106126555761265561307c565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461173e565b604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1690635c11d795906126f59085906000908690309042906004016131b1565b600060405180830381600087803b15801561270f57600080fd5b505af1158015611ae5573d6000803e3d6000fd5b6000610bfb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aed565b60008060008060008061277788611beb565b9550955095509550955095506127bb88600560008d6001600160a01b03166001600160a01b031681526020019081526020016000205461272390919063ffffffff16565b6001600160a01b038b166000908152600560209081526040808320939093556004905220546127ea9087612723565b6001600160a01b03808c1660009081526004602052604080822093909355908b16815220546128199086611b8c565b6001600160a01b038a1660009081526004602052604090205586156128465761284181612bad565b61284f565b61284f81612cbf565b6128598483612d47565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161289e91815260200190565b60405180910390a350505050505050505050565b6000806000806000806128c488611beb565b95509550955095509550955061290886600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461272390919063ffffffff16565b6001600160a01b03808c16600090815260046020908152604080832094909455918c1681526005909152205461293e9084611b8c565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546128199086611b8c565b60008060008060008061297f88611beb565b9550955095509550955095506127ea86600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461272390919063ffffffff16565b6000806000806000806129d588611beb565b955095509550955095509550612a1988600560008d6001600160a01b03166001600160a01b031681526020019081526020016000205461272390919063ffffffff16565b6001600160a01b038b16600090815260056020908152604080832093909355600490522054612a489087612723565b6001600160a01b03808c16600090815260046020908152604080832094909455918c16815260059091522054612a7e9084611b8c565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612aad9086611b8c565b6001600160a01b038a16600090815260046020526040902055612ad08483612d47565b8615612ae457612adf81612bad565b612859565b61285981612cbf565b6000610a3c6064612b0960115485612b2b90919063ffffffff16565b90611b4a565b6000610a3c6064612b0960135485612b2b90919063ffffffff16565b600082600003612b3d57506000610a3c565b6000612b498385613222565b905082612b56858361318f565b14610bfb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ae2565b6000612bb7611b27565b90506000612bc58383612b2b565b61dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54909150612bff9082611b8c565b61dead6000527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd5560096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb1930750037855460ff1615611c545761dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba54612c8d9084611b8c565b61dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba55505050565b6000612cc9611b27565b90506000612cd78383612b2b565b30600090815260046020526040902054909150612cf49082611b8c565b3060009081526004602090815260408083209390935560099052205460ff1615611c545730600090815260056020526040902054612d329084611b8c565b30600090815260056020526040902055505050565b600c54612d549083612723565b600c55600d54612d649082611b8c565b600d555050565b600060208083528351808285015260005b81811015612d9857858101830151858201604001528201612d7c565b81811115612daa576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146113ad57600080fd5b60008060408385031215612de857600080fd5b8235612df381612dc0565b946020939093013593505050565b600060208284031215612e1357600080fd5b8135610bfb81612dc0565b600080600060608486031215612e3357600080fd5b8335612e3e81612dc0565b92506020840135612e4e81612dc0565b929592945050506040919091013590565b600060208284031215612e7157600080fd5b5035919050565b80151581146113ad57600080fd5b60008060408385031215612e9957600080fd5b823591506020830135612eab81612e78565b809150509250929050565b60008083601f840112612ec857600080fd5b50813567ffffffffffffffff811115612ee057600080fd5b6020830191508360208260051b850101111561257b57600080fd5b60008060208385031215612f0e57600080fd5b823567ffffffffffffffff811115612f2557600080fd5b612f3185828601612eb6565b90969095509350505050565b600080600060408486031215612f5257600080fd5b833567ffffffffffffffff811115612f6957600080fd5b612f7586828701612eb6565b9094509250506020840135612f8981612dc0565b809150509250925092565b600060208284031215612fa657600080fd5b8135610bfb81612e78565b60008060408385031215612fc457600080fd5b8235612fcf81612dc0565b91506020830135612eab81612dc0565b60008060408385031215612ff257600080fd5b8235612ffd81612dc0565b91506020830135612eab81612e78565b600181811c9082168061302157607f821691505b60208210810361304157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156130ba576130ba613092565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016130e7576130e7613092565b5060010190565b60208082526033908201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a604082015272081c1c9bdd1958dd1a5bdb881c995b5bdd9959606a1b606082015260800190565b60006020828403121561315357600080fd5b8151610bfb81612e78565b6000821982111561317157613171613092565b500190565b60006020828403121561318857600080fd5b5051919050565b6000826131ac57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132015784516001600160a01b0316835293830193918301916001016131dc565b50506001600160a01b03969096166060850152505050608001529392505050565b600081600019048311821515161561323c5761323c613092565b50029056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220423680bc2c1dc34e0332a05f2a68c4c6214ad16c7c907dd480a9c9c3a5d3448e64736f6c634300080f0033

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

000000000000000000000000c4957257eb4bab46627b1cd039f2c22e41ce98c3

-----Decoded View---------------
Arg [0] : _bridgingAddress (address): 0xc4957257eB4Bab46627b1cd039f2C22E41CE98c3

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c4957257eb4bab46627b1cd039f2c22e41ce98c3


Deployed Bytecode Sourcemap

27301:20702:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30106:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31207:193;;;;;;;;;;-1:-1:-1;31207:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;31207:193:0;1072:187:1;25384:107:0;;;;;;;;;;;;;:::i;:::-;;32706:87;;;;;;;;;;-1:-1:-1;32775:10:0;;32706:87;;;1410:25:1;;;1398:2;1383:18;32706:87:0;1264:177:1;28619:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1636:32:1;;;1618:51;;1606:2;1591:18;28619:51:0;1446:229:1;30383:95:0;;;;;;;;;;-1:-1:-1;30463:7:0;;30383:95;;28493:30;;;;;;;;;;-1:-1:-1;28493:30:0;;;;-1:-1:-1;;;;;28493:30:0;;;22173:254;;;;;;;;;;-1:-1:-1;22173:254:0;;;;;:::i;:::-;;:::i;31408:446::-;;;;;;;;;;-1:-1:-1;31408:446:0;;;;;:::i;:::-;;:::i;33288:322::-;;;;;;;;;;-1:-1:-1;33288:322:0;;;;;:::i;:::-;;:::i;30292:83::-;;;;;;;;;;-1:-1:-1;30358:9:0;;30292:83;;30358:9;;;;2941:36:1;;2929:2;2914:18;30292:83:0;2799:184:1;33958:477:0;;;;;;;;;;-1:-1:-1;33958:477:0;;;;;:::i;:::-;;:::i;31862:300::-;;;;;;;;;;-1:-1:-1;31862:300:0;;;;;:::i;:::-;;:::i;25279:97::-;;;;;;;;;;;;;:::i;35323:111::-;;;;;;;;;;-1:-1:-1;35323:111:0;;;;;:::i;:::-;;:::i;32801:479::-;;;;;;;;;;-1:-1:-1;32801:479:0;;;;;:::i;:::-;;:::i;28707:40::-;;;;;;;;;;-1:-1:-1;28707:40:0;;;;-1:-1:-1;;;28707:40:0;;;;;;33618:332;;;;;;;;;;-1:-1:-1;33618:332:0;;;;;:::i;:::-;;:::i;25499:91::-;;;;;;;;;;-1:-1:-1;25570:11:0;;;;26523;25499:91;;40366:124;;;;;;;;;;-1:-1:-1;40366:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;40455:27:0;40431:4;40455:27;;;:18;:27;;;;;;;;;40366:124;24916:355;;;;;;;;;;-1:-1:-1;24916:355:0;;;;;:::i;:::-;;:::i;30486:198::-;;;;;;;;;;-1:-1:-1;30486:198:0;;;;;:::i;:::-;;:::i;16866:148::-;;;;;;;;;;;;;:::i;24161:747::-;;;;;;;;;;-1:-1:-1;24161:747:0;;;;;:::i;:::-;;:::i;27677:50::-;;;;;;;;;;-1:-1:-1;27677:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35560:185;;;;;;;;;;-1:-1:-1;35560:185:0;;;;;:::i;:::-;;:::i;29764:89::-;;;;;;;;;;;;;:::i;29861:118::-;;;;;;;;;;-1:-1:-1;29861:118:0;;;;;:::i;:::-;;:::i;28318:32::-;;;;;;;;;;;;;;;;32578:120;;;;;;;;;;-1:-1:-1;32578:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;32670:20:0;32646:4;32670:20;;;:11;:20;;;;;;;;;32578:120;25598:101;;;;;;;;;;-1:-1:-1;25674:16:0;;;;;;;26523:11;25598:101;25499:91;28451:33;;;;;;;;;;;;;;;;16224:79;;;;;;;;;;-1:-1:-1;16262:7:0;16289:6;-1:-1:-1;;;;;16289:6:0;16224:79;;30197:87;;;;;;;;;;;;;:::i;26766:528::-;;;;;;;;;;;;;:::i;32170:400::-;;;;;;;;;;-1:-1:-1;32170:400:0;;;;;:::i;:::-;;:::i;27736:40::-;;;;;;;;;;-1:-1:-1;27736:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30808:199;;;;;;;;;;-1:-1:-1;30808:199:0;;;;;:::i;:::-;;:::i;28034:29::-;;;;;;;;;;;;;;;28530:80;;;;;;;;;;;;28567:42;28530:80;;35753:171;;;;;;;;;;-1:-1:-1;35753:171:0;;;;;:::i;:::-;;:::i;28756:56::-;;;;;;;;;;;;;;;;28227:29;;;;;;;;;;;;;;;;28357:52;;;;;;;;;;;;;;;;31015:184;;;;;;;;;;-1:-1:-1;31015:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;31164:18:0;;;31132:7;31164:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31015:184;29987:111;;;;;;;;;;-1:-1:-1;29987:111:0;;;;;:::i;:::-;;:::i;28418:24::-;;;;;;;;;;-1:-1:-1;28418:24:0;;;;;;;;30692:108;;;;;;;;;;-1:-1:-1;30692:108:0;;;;;:::i;:::-;;:::i;35442:110::-;;;;;;;;;;-1:-1:-1;35442:110:0;;;;;:::i;:::-;;:::i;28263:46::-;;;;;;;;;;;;;;;;17169:281;;;;;;;;;;-1:-1:-1;17169:281:0;;;;;:::i;:::-;;:::i;30106:83::-;30143:13;30176:5;30169:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30106:83;:::o;31207:193::-;31309:4;31331:39;8278:10;31354:7;31363:6;31331:8;:39::i;:::-;-1:-1:-1;31388:4:0;31207:193;;;;;:::o;25384:107::-;22049:22;:20;:22::i;:::-;25460:16:::1;:23:::0;;-1:-1:-1;;25460:23:0::1;;;::::0;;25384:107::o;22173:254::-;22049:22;:20;:22::i;:::-;22295:35:::1;22311:18;:16;:18::i;:::-;22295:15;:35::i;:::-;:40:::0;22287:109:::1;;;::::0;-1:-1:-1;;;22287:109:0;;6902:2:1;22287:109:0::1;::::0;::::1;6884:21:1::0;6941:2;6921:18;;;6914:30;6980:34;6960:18;;;6953:62;7051:26;7031:18;;;7024:54;7095:19;;22287:109:0::1;;;;;;;;;22407:4;:12:::0;;-1:-1:-1;;;;;22407:12:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;22407:12:0;;::::1;::::0;;;::::1;::::0;;22173:254::o;31408:446::-;31540:4;31557:36;31567:6;31575:9;31586:6;31557:9;:36::i;:::-;31604:220;31627:6;8278:10;31675:138;31731:6;31675:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31675:19:0;;;;;;:11;:19;;;;;;;;8278:10;31675:33;;;;;;;;;;:37;:138::i;:::-;31604:8;:220::i;:::-;-1:-1:-1;31842:4:0;31408:446;;;;;:::o;33288:322::-;33382:7;33440;;33429;:18;;33407:110;;;;-1:-1:-1;;;33407:110:0;;7327:2:1;33407:110:0;;;7309:21:1;7366:2;7346:18;;;7339:30;7405:34;7385:18;;;7378:62;-1:-1:-1;;;7456:18:1;;;7449:40;7506:19;;33407:110:0;7125:406:1;33407:110:0;33528:19;33550:10;:8;:10::i;:::-;33528:32;-1:-1:-1;33578:24:0;:7;33528:32;33578:11;:24::i;:::-;33571:31;33288:322;-1:-1:-1;;;33288:322:0:o;33958:477::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34038:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34030:60;;;::::0;-1:-1:-1;;;34030:60:0;;8099:2:1;34030:60:0::1;::::0;::::1;8081:21:1::0;8138:2;8118:18;;;8111:30;8177:29;8157:18;;;8150:57;8224:18;;34030:60:0::1;7897:351:1::0;34030:60:0::1;34106:9;34101:327;34125:9;:16:::0;34121:20;::::1;34101:327;;;34183:7;-1:-1:-1::0;;;;;34167:23:0::1;:9;34177:1;34167:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34167:12:0::1;:23:::0;34163:254:::1;;34226:9;34236:16:::0;;:20:::1;::::0;34255:1:::1;::::0;34236:20:::1;:::i;:::-;34226:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;34211:9:::1;:12:::0;;-1:-1:-1;;;;;34226:31:0;;::::1;::::0;34221:1;;34211:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;34211:46:0::1;-1:-1:-1::0;;;;;34211:46:0;;::::1;;::::0;;34276:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;34315:11:::1;:20:::0;;;;:28;;-1:-1:-1;;34315:28:0::1;::::0;;34362:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34362:15:0;;;;;-1:-1:-1;;;;;;34362:15:0::1;::::0;;;;;34101:327:::1;33958:477:::0;:::o;34163:254::-:1;34143:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34101:327;;;;33958:477:::0;:::o;31862:300::-;8278:10;31977:4;32071:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32071:34:0;;;;;;;;;;31977:4;;31999:133;;32049:7;;32071:50;;32110:10;32071:38;:50::i;25279:97::-;22049:22;:20;:22::i;:::-;25350:11:::1;:18:::0;;-1:-1:-1;;25350:18:0::1;25364:4;25350:18;::::0;;25279:97::o;35323:111::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35392:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35392:34:0::1;35422:4;35392:34;::::0;;35323:111::o;32801:479::-;32919:7;32963;;32952;:18;;32944:62;;;;-1:-1:-1;;;32944:62:0;;9121:2:1;32944:62:0;;;9103:21:1;9160:2;9140:18;;;9133:30;9199:33;9179:18;;;9172:61;9250:18;;32944:62:0;8919:355:1;32944:62:0;33022:17;33017:256;;33057:15;33086:19;33097:7;33086:10;:19::i;:::-;-1:-1:-1;33056:49:0;;-1:-1:-1;33120:14:0;;-1:-1:-1;;;;;33120:14:0;33017:256;33170:23;33205:19;33216:7;33205:10;:19::i;:::-;-1:-1:-1;33167:57:0;;-1:-1:-1;33239:22:0;;-1:-1:-1;;;;;33239:22:0;33618:332;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33699:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33698:21;33690:61;;;::::0;-1:-1:-1;;;33690:61:0;;9481:2:1;33690:61:0::1;::::0;::::1;9463:21:1::0;9520:2;9500:18;;;9493:30;9559:29;9539:18;;;9532:57;9606:18;;33690:61:0::1;9279:351:1::0;33690:61:0::1;-1:-1:-1::0;;;;;33766:16:0;::::1;33785:1;33766:16:::0;;;:7:::1;:16;::::0;;;;;:20;33762:109:::1;;-1:-1:-1::0;;;;;33842:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33822:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;33803:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;33762:109:::1;-1:-1:-1::0;;;;;33881:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;33881:27:0::1;33904:4;33881:27:::0;;::::1;::::0;;;33919:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33919:23:0::1;::::0;;::::1;::::0;;33618:332::o;25566:16::-;25559:23;;25499:91;:::o;24916:355::-;22049:22;:20;:22::i;:::-;25032:19:::1;:17;:19::i;:::-;25024:83;;;;-1:-1:-1::0;;;25024:83:0::1;;;;;;;:::i;:::-;25118:12;25133:18;:16;:18::i;:::-;25118:33;;25167:6;25162:102;25179:19:::0;;::::1;25162:102;;;23465:4:::0;;;;;-1:-1:-1;;;;;23465:4:0;25220:13:::1;25234:4:::0;25240:8;;25249:1;25240:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;25220:32;::::0;-1:-1:-1;;;;;;25220:32:0::1;::::0;;;;;;-1:-1:-1;;;;;10285:15:1;;;25220:32:0::1;::::0;::::1;10267:34:1::0;10337:15;;10317:18;;;10310:43;10202:18;;25220:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25200:3;;;;;:::i;:::-;;;;25162:102;;;;25013:258;24916:355:::0;;:::o;30486:198::-;-1:-1:-1;;;;;30576:20:0;;30552:7;30576:20;;;:11;:20;;;;;;;;30572:49;;;-1:-1:-1;;;;;;30605:16:0;;;;;:7;:16;;;;;;;30486:198::o;30572:49::-;-1:-1:-1;;;;;30659:16:0;;;;;;:7;:16;;;;;;30639:37;;:19;:37::i;16866:148::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;16973:1:::1;16957:6:::0;;16936:40:::1;::::0;-1:-1:-1;;;;;16957:6:0;;::::1;::::0;16936:40:::1;::::0;16973:1;;16936:40:::1;17004:1;16987:19:::0;;-1:-1:-1;;;;;;16987:19:0::1;::::0;;16866:148::o;24161:747::-;22049:22;:20;:22::i;:::-;24282:19:::1;:17;:19::i;:::-;24274:83;;;;-1:-1:-1::0;;;24274:83:0::1;;;;;;;:::i;:::-;24390:11;::::0;;24495:23;-1:-1:-1;;24495:23:0;;;;;;24390:11:::1;::::0;;::::1;::::0;::::1;24439:16:::0;::::1;;24368:19;24544:18;:16;:18::i;:::-;24529:33;;24578:6;24573:240;24590:19:::0;;::::1;24573:240;;;24631:14;24648:8;;24657:1;24648:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23465:4:::0;;24631:28;;-1:-1:-1;23465:4:0;;;-1:-1:-1;;;;;23465:4:0;24678:29:::1;::::0;-1:-1:-1;;;24678:29:0;;-1:-1:-1;;;;;10285:15:1;;;24678:29:0::1;::::0;::::1;10267:34:1::0;10337:15;;;10317:18;;;10310:43;24678:15:0;;;::::1;::::0;::::1;::::0;10202:18:1;;24678:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24674:128;;;24728:58;24743:6;24751:9;24762:23;24778:6;24762:15;:23::i;:::-;24728:14;:58::i;:::-;-1:-1:-1::0;24611:3:0;::::1;::::0;::::1;:::i;:::-;;;;24573:240;;;-1:-1:-1::0;;24823:11:0::1;:28:::0;;-1:-1:-1;;24862:38:0;24823:28;::::1;;-1:-1:-1::0;;24862:38:0;;;;;24823:28:::1;24862:38:::0;::::1;;::::0;;;::::1;;::::0;;-1:-1:-1;;;24161:747:0:o;35560:185::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;35638:9:::1;35634:104;;;35664:15;40284:18:::0;;40271:10;:31;40329:21;;40313:13;:37;40227:131;35664:15:::1;35560:185:::0;:::o;35634:104::-:1;35712:14;:12;:14::i;29764:89::-:0;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;29833:12:::1;::::0;;-1:-1:-1;;29817:28:0;::::1;29833:12;::::0;;::::1;29832:13;29817:28;::::0;;29764:89::o;29861:118::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;29937:23:::1;:34:::0;29861:118::o;30197:87::-;30236:13;30269:7;30262:14;;;;;:::i;26766:528::-;26814:7;26899:91;21548:66;47174:42;26968:4;47942:42;26899:24;:91::i;32170:400::-;32290:4;32312:228;8278:10;32362:7;32384:145;32441:15;32384:145;;;;;;;;;;;;;;;;;8278:10;32384:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32384:34:0;;;;;;;;;;;;:38;:145::i;30808:199::-;30913:4;30935:42;8278:10;30959:9;30970:6;30935:9;:42::i;35753:171::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;35830:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;35830:32:0::1;-1:-1:-1::0;;;;35830:32:0;;::::1;;::::0;;35878:38:::1;::::0;::::1;::::0;::::1;::::0;35854:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;35878:38:0::1;;;;;;;;35753:171:::0;:::o;29987:111::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;30062:15:::1;:28:::0;;-1:-1:-1;;;;;;30062:28:0::1;-1:-1:-1::0;;;;;30062:28:0;;;::::1;::::0;;;::::1;::::0;;29987:111::o;30692:108::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30770:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:22;;-1:-1:-1;;30770:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30692:108::o;35442:110::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35509:27:0::1;35539:5;35509:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35509:35:0::1;::::0;;35442:110::o;17169:281::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17272:22:0;::::1;17250:110;;;::::0;-1:-1:-1;;;17250:110:0;;11422:2:1;17250:110:0::1;::::0;::::1;11404:21:1::0;11461:2;11441:18;;;11434:30;11500:34;11480:18;;;11473:62;-1:-1:-1;;;11551:18:1;;;11544:36;11597:19;;17250:110:0::1;11220:402:1::0;17250:110:0::1;17397:6;::::0;;17376:38:::1;::::0;-1:-1:-1;;;;;17376:38:0;;::::1;::::0;17397:6;::::1;::::0;17376:38:::1;::::0;::::1;17425:6;:17:::0;;-1:-1:-1;;;;;;17425:17:0::1;-1:-1:-1::0;;;;;17425:17:0;;;::::1;::::0;;;::::1;::::0;;17169:281::o;40498:371::-;-1:-1:-1;;;;;40625:19:0;;40617:68;;;;-1:-1:-1;;;40617:68:0;;11829:2:1;40617:68:0;;;11811:21:1;11868:2;11848:18;;;11841:30;11907:34;11887:18;;;11880:62;-1:-1:-1;;;11958:18:1;;;11951:34;12002:19;;40617:68:0;11627:400:1;40617:68:0;-1:-1:-1;;;;;40704:21:0;;40696:68;;;;-1:-1:-1;;;40696:68:0;;12234:2:1;40696:68:0;;;12216:21:1;12273:2;12253:18;;;12246:30;12312:34;12292:18;;;12285:62;-1:-1:-1;;;12363:18:1;;;12356:32;12405:19;;40696:68:0;12032:398:1;40696:68:0;-1:-1:-1;;;;;40777:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40829:32;;1410:25:1;;;40829:32:0;;1383:18:1;40829:32:0;;;;;;;40498:371;;;:::o;46696:67::-;16436:6;;-1:-1:-1;;;;;16436:6:0;8278:10;16436:22;16428:67;;;;-1:-1:-1;;;16428:67:0;;;;;;;:::i;:::-;46696:::o;46533:157::-;46606:4;46630:18;46640:7;46630:9;:18::i;40877:1094::-;-1:-1:-1;;;;;40999:18:0;;40991:68;;;;-1:-1:-1;;;40991:68:0;;12637:2:1;40991:68:0;;;12619:21:1;12676:2;12656:18;;;12649:30;12715:34;12695:18;;;12688:62;-1:-1:-1;;;12766:18:1;;;12759:35;12811:19;;40991:68:0;12435:401:1;40991:68:0;-1:-1:-1;;;;;41078:16:0;;41070:64;;;;-1:-1:-1;;;41070:64:0;;13043:2:1;41070:64:0;;;13025:21:1;13082:2;13062:18;;;13055:30;13121:34;13101:18;;;13094:62;-1:-1:-1;;;13172:18:1;;;13165:33;13215:19;;41070:64:0;12841:399:1;41070:64:0;41162:1;41153:6;:10;41145:64;;;;-1:-1:-1;;;41145:64:0;;13447:2:1;41145:64:0;;;13429:21:1;13486:2;13466:18;;;13459:30;13525:34;13505:18;;;13498:62;-1:-1:-1;;;13576:18:1;;;13569:39;13625:19;;41145:64:0;13245:405:1;41145:64:0;41220:57;41260:4;41266:2;41270:6;41220:39;:57::i;:::-;41290:28;41321:24;41339:4;41321:9;:24::i;:::-;41422:23;;41290:55;;-1:-1:-1;41385:60:0;;;;;;;41460:40;;-1:-1:-1;41484:16:0;;-1:-1:-1;;;41484:16:0;;;;41483:17;41460:40;:65;;;;-1:-1:-1;41504:21:0;;-1:-1:-1;;;41504:21:0;;;;41460:65;41456:195;;;41565:23;;41542:46;;41603:36;41618:20;41603:14;:36::i;:::-;-1:-1:-1;;;;;41738:14:0;;41722:12;41738:14;;;:8;:14;;;;;;;;;:30;;-1:-1:-1;;;;;;41756:12:0;;;;;;:8;:12;;;;;;;;41738:30;41737:48;;;;-1:-1:-1;41773:12:0;;;;41737:48;-1:-1:-1;;;;;41802:24:0;;;;;;:18;:24;;;;;;41722:63;;-1:-1:-1;41802:24:0;;;:50;;-1:-1:-1;;;;;;41830:22:0;;;;;;:18;:22;;;;;;;;41802:50;41798:98;;;-1:-1:-1;41879:5:0;41798:98;-1:-1:-1;;;;;41950:12:0;;;;;;:8;:12;;;;;;41908:55;;41923:4;;41929:2;;41933:6;;41941:7;;41950:12;;41908:14;:55::i;:::-;40980:991;;;40877:1094;;;:::o;4490:226::-;4610:7;4646:12;4638:6;;;;4630:29;;;;-1:-1:-1;;;4630:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4670:9:0;4682:5;4686:1;4682;:5;:::i;:::-;4670:17;4490:226;-1:-1:-1;;;;;4490:226:0:o;37929:164::-;37971:7;37992:15;38009;38028:19;:17;:19::i;:::-;37991:56;;-1:-1:-1;37991:56:0;-1:-1:-1;38065:20:0;37991:56;;38065:11;:20::i;:::-;38058:27;;;;37929:164;:::o;5922:132::-;5980:7;6007:39;6011:1;6014;6007:39;;;;;;;;;;;;;;;;;:3;:39::i;3587:181::-;3645:7;;3677:5;3681:1;3677;:5;:::i;:::-;3665:17;;3706:1;3701;:6;;3693:46;;;;-1:-1:-1;;;3693:46:0;;13990:2:1;3693:46:0;;;13972:21:1;14029:2;14009:18;;;14002:30;14068:29;14048:18;;;14041:57;14115:18;;3693:46:0;13788:351:1;36180:745:0;36280:7;36302;36324;36346;36368;36390;36440:23;36478:12;36505:19;36538:20;36550:7;36538:11;:20::i;:::-;36425:133;;;;;;36570:15;36587:23;36612:12;36628:114;36654:7;36676:4;36695:11;36721:10;:8;:10::i;:::-;36628:11;:114::i;:::-;36569:173;;;;-1:-1:-1;36569:173:0;;-1:-1:-1;36846:15:0;;-1:-1:-1;36876:4:0;;-1:-1:-1;36895:11:0;;-1:-1:-1;36180:745:0;;-1:-1:-1;;;;;36180:745:0:o;47382:422::-;47442:4;47466:38;47493:10;47466:26;:38::i;46349:178::-;46444:30;46454:5;46461:3;46466:7;46444:9;:30::i;:::-;46349:178;;;:::o;39974:245::-;40021:10;;:15;:37;;;;-1:-1:-1;40040:13:0;;:18;40021:37;40017:50;;;39974:245::o;40017:50::-;40100:10;;;40079:18;:31;40145:13;;;40121:21;:37;-1:-1:-1;40169:14:0;;;;40194:17;39974:245::o;18349:452::-;18460:12;18486:14;18502;18520:26;18531:6;18539;18520:10;:26::i;:::-;18692:32;;-1:-1:-1;;14371:2:1;14367:15;;;14363:24;;18692:32:0;;;14351:37:1;14422:15;;;14418:24;14404:12;;;14397:46;18485:61:0;;-1:-1:-1;18485:61:0;-1:-1:-1;18656:7:0;;14459:12:1;;18692:32:0;;;;;;;;;;;;18682:43;;;;;;18744:12;18595:194;;;;;;;;;-1:-1:-1;;;;;;14768:26:1;;14831:2;14827:15;;;;-1:-1:-1;;14823:53:1;14819:1;14810:11;;14803:74;14902:2;14893:12;;14886:28;;;;14939:2;14930:12;;14923:28;14976:2;14967:12;;14482:503;18595:194:0;;;;-1:-1:-1;;18595:194:0;;;;;;;;;18585:205;;18595:194;18585:205;;;;;18349:452;-1:-1:-1;;;;;;;18349:452:0:o;23485:668::-;23608:19;:17;:19::i;:::-;23604:542;;;23652:11;;;;23644:143;;23465:4;;;;;-1:-1:-1;;;;;23465:4:0;23685:45;23731:18;:16;:18::i;:::-;23685:86;;-1:-1:-1;;;;;;23685:86:0;;;;;;;-1:-1:-1;;;;;15670:15:1;;;23685:86:0;;;15652:34:1;15722:15;;;15702:18;;;15695:43;15774:15;;;15754:18;;;15747:43;15806:18;;;15799:34;;;15586:19;;23685:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23644:143;23809:16;;;;;;;26523:11;23805:21;23801:154;;;23465:4;;;;;-1:-1:-1;;;;;23465:4:0;23847:51;23899:18;:16;:18::i;:::-;23847:92;;-1:-1:-1;;;;;;23847:92:0;;;;;;;-1:-1:-1;;;;;15670:15:1;;;23847:92:0;;;15652:34:1;15722:15;;;15702:18;;;15695:43;15774:15;;;15754:18;;;15747:43;15806:18;;;15799:34;;;15586:19;;23847:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46349:178;;;:::o;23604:542::-;25674:16;;;;;;;26523:11;23976:49;;;;-1:-1:-1;24008:16:0;;;;;;;26523:11;24004:21;26447:95;41979:438;29052:16;:23;;-1:-1:-1;;;;29052:23:0;-1:-1:-1;;;29052:23:0;;;42089:29:::1;::::0;-1:-1:-1;;;42089:29:0;;42112:4:::1;42089:29;::::0;::::1;1618:51:1::0;-1:-1:-1;;28567:42:0::1;::::0;42089:14:::1;::::0;1591:18:1;;42089:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42064:54;;42129:39;42147:20;42129:17;:39::i;:::-;42200:29;::::0;-1:-1:-1;;;42200:29:0;;42223:4:::1;42200:29;::::0;::::1;1618:51:1::0;42179:18:0::1;::::0;42200:49:::1;::::0;42234:14;;28567:42:::1;::::0;42200:14:::1;::::0;1591:18:1;;42200:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33:::0;::::1;:49::i;:::-;42274:15;::::0;42260:42:::1;::::0;-1:-1:-1;;;42260:42:0;;-1:-1:-1;;;;;42274:15:0;;::::1;42260:42;::::0;::::1;16207:51:1::0;16274:18;;;16267:34;;;42179:70:0;;-1:-1:-1;28567:42:0::1;::::0;42260:13:::1;::::0;16180:18:1;;42260:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42335:10;42313:18;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;42361:48:0::1;::::0;;16486:25:1;;;16542:2;16527:18;;16520:34;;;42361:48:0::1;::::0;16459:18:1;42361:48:0::1;;;;;;;-1:-1:-1::0;;29098:16:0;:24;;-1:-1:-1;;;;29098:24:0;;;-1:-1:-1;41979:438:0:o;43055:900::-;43233:7;43228:28;;43242:14;:12;:14::i;:::-;-1:-1:-1;;;;;43273:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;43297:22:0;;;;;;:11;:22;;;;;;;;43296:23;43273:46;43269:637;;;43336:56;43358:6;43366:9;43377:6;43385;43336:21;:56::i;:::-;43269:637;;;-1:-1:-1;;;;;43415:19:0;;;;;;:11;:19;;;;;;;;43414:20;:46;;;;-1:-1:-1;;;;;;43438:22:0;;;;;;:11;:22;;;;;;;;43414:46;43410:496;;;43477:54;43497:6;43505:9;43516:6;43524;43477:19;:54::i;43410:496::-;-1:-1:-1;;;;;43554:19:0;;;;;;:11;:19;;;;;;;;43553:20;:47;;;;-1:-1:-1;;;;;;43578:22:0;;;;;;:11;:22;;;;;;;;43577:23;43553:47;43549:357;;;43617:52;43635:6;43643:9;43654:6;43662;43617:17;:52::i;43549:357::-;-1:-1:-1;;;;;43691:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;43714:22:0;;;;;;:11;:22;;;;;;;;43691:45;43687:219;;;43753:56;43775:6;43783:9;43794:6;43802;43753:21;:56::i;43687:219::-;43842:52;43860:6;43868:9;43879:6;43887;43842:17;:52::i;:::-;43923:7;43918:29;;43932:15;40284:18;;40271:10;:31;40329:21;;40313:13;:37;40227:131;43932:15;43055:900;;;;;:::o;38101:605::-;38199:7;;38235;;38152;;;;;38253:338;38277:9;:16;38273:20;;38253:338;;;38361:7;38337;:21;38345:9;38355:1;38345:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38345:12:0;38337:21;;;;;;;;;;;;;:31;;:83;;;38413:7;38389;:21;38397:9;38407:1;38397:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38397:12:0;38389:21;;;;;;;;;;;;;:31;38337:83;38315:146;;;38444:7;;38453;;38436:25;;;;;;;38101:605;;:::o;38315:146::-;38486:34;38498:7;:21;38506:9;38516:1;38506:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38506:12:0;38498:21;;;;;;;;;;;;;38486:7;;:11;:34::i;:::-;38476:44;;38545:34;38557:7;:21;38565:9;38575:1;38565:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38565:12:0;38557:21;;;;;;;;;;;;;38545:7;;:11;:34::i;:::-;38535:44;-1:-1:-1;38295:3:0;;;;:::i;:::-;;;;38253:338;;;-1:-1:-1;38627:7:0;;38615;;:20;;:11;:20::i;:::-;38605:7;:30;38601:61;;;38645:7;;38654;;38637:25;;;;;;38101:605;;:::o;38601:61::-;38681:7;;38690;;-1:-1:-1;38101:605:0;-1:-1:-1;38101:605:0:o;6550:312::-;6670:7;6705:12;6698:5;6690:28;;;;-1:-1:-1;;;6690:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6729:9:0;6741:5;6745:1;6741;:5;:::i;36933:422::-;37034:7;37056;37078;37113:19;37135:28;37155:7;37135:19;:28::i;:::-;37113:50;;37174:12;37189:31;37212:7;37189:22;:31::i;:::-;37174:46;-1:-1:-1;37233:23:0;37259:34;37281:11;37259:17;:7;37174:46;37259:11;:17::i;:34::-;37233:60;37329:4;;-1:-1:-1;37335:11:0;;-1:-1:-1;36933:422:0;-1:-1:-1;;;36933:422:0:o;37363:558::-;37563:7;;;;37660:24;:7;37672:11;37660;:24::i;:::-;37642:42;-1:-1:-1;37695:12:0;37710:21;:4;37719:11;37710:8;:21::i;:::-;37695:36;-1:-1:-1;37742:19:0;37764:28;:11;37780;37764:15;:28::i;:::-;37742:50;-1:-1:-1;37803:23:0;37829:34;37742:50;37829:17;:7;37841:4;37829:11;:17::i;:34::-;37882:7;;;;-1:-1:-1;37908:4:0;;-1:-1:-1;37363:558:0;;-1:-1:-1;;;;;;;37363:558:0:o;25938:130::-;26013:4;26037:23;26041:18;26048:10;26416:15;-1:-1:-1;26403:28:0;26324:115;26041:18;26523:11;;26447:95;17908:349;17983:14;17999;18044:6;-1:-1:-1;;;;;18034:16:0;:6;-1:-1:-1;;;;;18034:16:0;;18026:66;;;;-1:-1:-1;;;18026:66:0;;16989:2:1;18026:66:0;;;16971:21:1;17028:2;17008:18;;;17001:30;17067:34;17047:18;;;17040:62;-1:-1:-1;;;17118:18:1;;;17111:35;17163:19;;18026:66:0;16787:401:1;18026:66:0;18131:6;-1:-1:-1;;;;;18122:15:0;:6;-1:-1:-1;;;;;18122:15:0;;:53;;18160:6;18168;18122:53;;;18141:6;18149;18122:53;18103:72;;-1:-1:-1;18103:72:0;-1:-1:-1;;;;;;18194:20:0;;18186:63;;;;-1:-1:-1;;;18186:63:0;;17395:2:1;18186:63:0;;;17377:21:1;17434:2;17414:18;;;17407:30;17473:32;17453:18;;;17446:60;17523:18;;18186:63:0;17193:354:1;18186:63:0;17908:349;;;;;:::o;42425:549::-;42516:16;;;42530:1;42516:16;;;;;;;;;42492:21;;42516:16;;;;;;;;;;-1:-1:-1;42516:16:0;42492:40;;42561:4;42543;42548:1;42543:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42543:23:0;;;-1:-1:-1;;;;;42543:23:0;;;;;42587:4;42577;42582:1;42577:7;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;42577:14:0;;;-1:-1:-1;;;;;42577:14:0;;;;;28567:42;42602:4;42607:1;42602:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42602:23:0;;;-1:-1:-1;;;;;42602:23:0;;;;;42638:62;42655:4;42670:15;42688:11;42638:8;:62::i;:::-;42739:227;;-1:-1:-1;;;42739:227:0;;-1:-1:-1;;;;;42739:15:0;:69;;;;:227;;42823:11;;42849:1;;42893:4;;42920;;42940:15;;42739:227;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4051:136;4109:7;4136:43;4140:1;4143;4136:43;;;;;;;;;;;;;;;;;:3;:43::i;45538:803::-;45711:15;45741:23;45779:12;45806:23;45844:12;45871:19;45904;45915:7;45904:10;:19::i;:::-;45696:227;;;;;;;;;;;;45952:28;45972:7;45952;:15;45960:6;-1:-1:-1;;;;;45952:15:0;-1:-1:-1;;;;;45952:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;45934:15:0;;;;;;:7;:15;;;;;;;;:46;;;;46009:7;:15;;;;:28;;46029:7;46009:19;:28::i;:::-;-1:-1:-1;;;;;45991:15:0;;;;;;;:7;:15;;;;;;:46;;;;46069:18;;;;;;;:39;;46092:15;46069:22;:39::i;:::-;-1:-1:-1;;;;;46048:18:0;;;;;;:7;:18;;;;;:60;46121:119;;;;46148:25;46161:11;46148:12;:25::i;:::-;46121:119;;;46206:22;46216:11;46206:9;:22::i;:::-;46250:23;46262:4;46268;46250:11;:23::i;:::-;46306:9;-1:-1:-1;;;;;46289:44:0;46298:6;-1:-1:-1;;;;;46289:44:0;;46317:15;46289:44;;;;1410:25:1;;1398:2;1383:18;;1264:177;46289:44:0;;;;;;;;45685:656;;;;;;45538:803;;;;:::o;44715:815::-;44886:15;44916:23;44954:12;44981:23;45019:12;45046:19;45079;45090:7;45079:10;:19::i;:::-;44871:227;;;;;;;;;;;;45127:28;45147:7;45127;:15;45135:6;-1:-1:-1;;;;;45127:15:0;-1:-1:-1;;;;;45127:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;45109:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;45187:18;;;;;:7;:18;;;;;:39;;45210:15;45187:22;:39::i;:::-;-1:-1:-1;;;;;45166:18:0;;;;;;:7;:18;;;;;;;;:60;;;;45258:7;:18;;;;:39;;45281:15;45258:22;:39::i;43963:744::-;44132:15;44162:23;44200:12;44227:23;44265:12;44292:19;44325;44336:7;44325:10;:19::i;:::-;44117:227;;;;;;;;;;;;44373:28;44393:7;44373;:15;44381:6;-1:-1:-1;;;;;44373:15:0;-1:-1:-1;;;;;44373:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;34443:872::-;34616:15;34646:23;34684:12;34711:23;34749:12;34776:19;34809;34820:7;34809:10;:19::i;:::-;34601:227;;;;;;;;;;;;34857:28;34877:7;34857;:15;34865:6;-1:-1:-1;;;;;34857:15:0;-1:-1:-1;;;;;34857:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;34839:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34914:7;:15;;;;:28;;34934:7;34914:19;:28::i;:::-;-1:-1:-1;;;;;34896:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34974:18;;;;;:7;:18;;;;;:39;;34997:15;34974:22;:39::i;:::-;-1:-1:-1;;;;;34953:18:0;;;;;;:7;:18;;;;;;;;:60;;;;35045:7;:18;;;;:39;;35068:15;35045:22;:39::i;:::-;-1:-1:-1;;;;;35024:18:0;;;;;;:7;:18;;;;;:60;35095:23;35107:4;35113;35095:11;:23::i;:::-;35133:6;35129:119;;;35156:25;35169:11;35156:12;:25::i;:::-;35129:119;;;35214:22;35224:11;35214:9;:22::i;39614:169::-;39709:7;39741:34;39769:5;39741:23;39753:10;;39741:7;:11;;:23;;;;:::i;:::-;:27;;:34::i;39791:175::-;39889:7;39921:37;39952:5;39921:26;39933:13;;39921:7;:11;;:26;;;;:::i;4975:471::-;5033:7;5278:1;5283;5278:6;5274:47;;-1:-1:-1;5308:1:0;5301:8;;5274:47;5333:9;5345:5;5349:1;5345;:5;:::i;:::-;5333:17;-1:-1:-1;5378:1:0;5369:5;5373:1;5333:17;5369:5;:::i;:::-;:10;5361:56;;;;-1:-1:-1;;;5361:56:0;;19044:2:1;5361:56:0;;;19026:21:1;19083:2;19063:18;;;19056:30;19122:34;19102:18;;;19095:62;-1:-1:-1;;;19173:18:1;;;19166:31;19214:19;;5361:56:0;18842:397:1;39077:529:0;39133:19;39155:10;:8;:10::i;:::-;39133:32;-1:-1:-1;39176:13:0;39192:22;:5;39133:32;39192:9;:22::i;:::-;39301:42;39279:75;;:7;:75;;;;39176:38;;-1:-1:-1;39279:86:0;;39176:38;39279:79;:86::i;:::-;39233:42;39225:51;;;:140;39380:11;39225:51;39380:55;;;;;39376:222;;;39530:42;39504:83;;:7;:83;;;;:94;;39592:5;39504:87;:94::i;:::-;39458:42;39450:51;;:7;:51;;;:148;39122:484;;39077:529;:::o;38714:355::-;38773:19;38795:10;:8;:10::i;:::-;38773:32;-1:-1:-1;38816:19:0;38838:28;:11;38773:32;38838:15;:28::i;:::-;38918:4;38902:22;;;;:7;:22;;;;;;38816:50;;-1:-1:-1;38902:39:0;;38816:50;38902:26;:39::i;:::-;38893:4;38877:22;;;;:7;:22;;;;;;;;:64;;;;38956:11;:26;;;;;;38952:109;;;39038:4;39022:22;;;;:7;:22;;;;;;:39;;39049:11;39022:26;:39::i;:::-;39013:4;38997:22;;;;:7;:22;;;;;:64;38762:307;;38714:355;:::o;36025:147::-;36103:7;;:17;;36115:4;36103:11;:17::i;:::-;36093:7;:27;36144:10;;:20;;36159:4;36144:14;:20::i;:::-;36131:10;:33;-1:-1:-1;;36025:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1888:260::-;1960:6;2013:2;2001:9;1992:7;1988:23;1984:32;1981:52;;;2029:1;2026;2019:12;1981:52;2068:9;2055:23;2087:31;2112:5;2087:31;:::i;2153:456::-;2230:6;2238;2246;2299:2;2287:9;2278:7;2274:23;2270:32;2267:52;;;2315:1;2312;2305:12;2267:52;2354:9;2341:23;2373:31;2398:5;2373:31;:::i;:::-;2423:5;-1:-1:-1;2480:2:1;2465:18;;2452:32;2493:33;2452:32;2493:33;:::i;:::-;2153:456;;2545:7;;-1:-1:-1;;;2599:2:1;2584:18;;;;2571:32;;2153:456::o;2614:180::-;2673:6;2726:2;2714:9;2705:7;2701:23;2697:32;2694:52;;;2742:1;2739;2732:12;2694:52;-1:-1:-1;2765:23:1;;2614:180;-1:-1:-1;2614:180:1:o;3240:118::-;3326:5;3319:13;3312:21;3305:5;3302:32;3292:60;;3348:1;3345;3338:12;3363:309;3428:6;3436;3489:2;3477:9;3468:7;3464:23;3460:32;3457:52;;;3505:1;3502;3495:12;3457:52;3541:9;3528:23;3518:33;;3601:2;3590:9;3586:18;3573:32;3614:28;3636:5;3614:28;:::i;:::-;3661:5;3651:15;;;3363:309;;;;;:::o;3677:367::-;3740:8;3750:6;3804:3;3797:4;3789:6;3785:17;3781:27;3771:55;;3822:1;3819;3812:12;3771:55;-1:-1:-1;3845:20:1;;3888:18;3877:30;;3874:50;;;3920:1;3917;3910:12;3874:50;3957:4;3949:6;3945:17;3933:29;;4017:3;4010:4;4000:6;3997:1;3993:14;3985:6;3981:27;3977:38;3974:47;3971:67;;;4034:1;4031;4024:12;4049:437;4135:6;4143;4196:2;4184:9;4175:7;4171:23;4167:32;4164:52;;;4212:1;4209;4202:12;4164:52;4252:9;4239:23;4285:18;4277:6;4274:30;4271:50;;;4317:1;4314;4307:12;4271:50;4356:70;4418:7;4409:6;4398:9;4394:22;4356:70;:::i;:::-;4445:8;;4330:96;;-1:-1:-1;4049:437:1;-1:-1:-1;;;;4049:437:1:o;4491:572::-;4586:6;4594;4602;4655:2;4643:9;4634:7;4630:23;4626:32;4623:52;;;4671:1;4668;4661:12;4623:52;4711:9;4698:23;4744:18;4736:6;4733:30;4730:50;;;4776:1;4773;4766:12;4730:50;4815:70;4877:7;4868:6;4857:9;4853:22;4815:70;:::i;:::-;4904:8;;-1:-1:-1;4789:96:1;-1:-1:-1;;4989:2:1;4974:18;;4961:32;5002:31;4961:32;5002:31;:::i;:::-;5052:5;5042:15;;;4491:572;;;;;:::o;5068:241::-;5124:6;5177:2;5165:9;5156:7;5152:23;5148:32;5145:52;;;5193:1;5190;5183:12;5145:52;5232:9;5219:23;5251:28;5273:5;5251:28;:::i;5535:388::-;5603:6;5611;5664:2;5652:9;5643:7;5639:23;5635:32;5632:52;;;5680:1;5677;5670:12;5632:52;5719:9;5706:23;5738:31;5763:5;5738:31;:::i;:::-;5788:5;-1:-1:-1;5845:2:1;5830:18;;5817:32;5858:33;5817:32;5858:33;:::i;5928:382::-;5993:6;6001;6054:2;6042:9;6033:7;6029:23;6025:32;6022:52;;;6070:1;6067;6060:12;6022:52;6109:9;6096:23;6128:31;6153:5;6128:31;:::i;:::-;6178:5;-1:-1:-1;6235:2:1;6220:18;;6207:32;6248:30;6207:32;6248:30;:::i;6315:380::-;6394:1;6390:12;;;;6437;;;6458:61;;6512:4;6504:6;6500:17;6490:27;;6458:61;6565:2;6557:6;6554:14;6534:18;6531:38;6528:161;;6611:10;6606:3;6602:20;6599:1;6592:31;6646:4;6643:1;6636:15;6674:4;6671:1;6664:15;6528:161;;6315:380;;;:::o;7536:356::-;7738:2;7720:21;;;7757:18;;;7750:30;7816:34;7811:2;7796:18;;7789:62;7883:2;7868:18;;7536:356::o;8253:127::-;8314:10;8309:3;8305:20;8302:1;8295:31;8345:4;8342:1;8335:15;8369:4;8366:1;8359:15;8385:127;8446:10;8441:3;8437:20;8434:1;8427:31;8477:4;8474:1;8467:15;8501:4;8498:1;8491:15;8517:125;8557:4;8585:1;8582;8579:8;8576:34;;;8590:18;;:::i;:::-;-1:-1:-1;8627:9:1;;8517:125::o;8647:127::-;8708:10;8703:3;8699:20;8696:1;8689:31;8739:4;8736:1;8729:15;8763:4;8760:1;8753:15;8779:135;8818:3;8839:17;;;8836:43;;8859:18;;:::i;:::-;-1:-1:-1;8906:1:1;8895:13;;8779:135::o;9635:415::-;9837:2;9819:21;;;9876:2;9856:18;;;9849:30;9915:34;9910:2;9895:18;;9888:62;-1:-1:-1;;;9981:2:1;9966:18;;9959:49;10040:3;10025:19;;9635:415::o;10364:245::-;10431:6;10484:2;10472:9;10463:7;10459:23;10455:32;10452:52;;;10500:1;10497;10490:12;10452:52;10532:9;10526:16;10551:28;10573:5;10551:28;:::i;13655:128::-;13695:3;13726:1;13722:6;13719:1;13716:13;13713:39;;;13732:18;;:::i;:::-;-1:-1:-1;13768:9:1;;13655:128::o;15844:184::-;15914:6;15967:2;15955:9;15946:7;15942:23;15938:32;15935:52;;;15983:1;15980;15973:12;15935:52;-1:-1:-1;16006:16:1;;15844:184;-1:-1:-1;15844:184:1:o;16565:217::-;16605:1;16631;16621:132;;16675:10;16670:3;16666:20;16663:1;16656:31;16710:4;16707:1;16700:15;16738:4;16735:1;16728:15;16621:132;-1:-1:-1;16767:9:1;;16565:217::o;17684:980::-;17946:4;17994:3;17983:9;17979:19;18025:6;18014:9;18007:25;18051:2;18089:6;18084:2;18073:9;18069:18;18062:34;18132:3;18127:2;18116:9;18112:18;18105:31;18156:6;18191;18185:13;18222:6;18214;18207:22;18260:3;18249:9;18245:19;18238:26;;18299:2;18291:6;18287:15;18273:29;;18320:1;18330:195;18344:6;18341:1;18338:13;18330:195;;;18409:13;;-1:-1:-1;;;;;18405:39:1;18393:52;;18500:15;;;;18465:12;;;;18441:1;18359:9;18330:195;;;-1:-1:-1;;;;;;;18581:32:1;;;;18576:2;18561:18;;18554:60;-1:-1:-1;;;18645:3:1;18630:19;18623:35;18542:3;17684:980;-1:-1:-1;;;17684:980:1:o;18669:168::-;18709:7;18775:1;18771;18767:6;18763:14;18760:1;18757:21;18752:1;18745:9;18738:17;18734:45;18731:71;;;18782:18;;:::i;:::-;-1:-1:-1;18822:9:1;;18669:168::o

Swarm Source

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