Contract 0x12790034c87A0F72Bd2EE02a37c232C40281aEDa 1

Contract Overview

Balance:
0 Ether

Token:
Txn Hash
Method
Block
From
To
Value
0x21fef2aa615405609a23c1c018246320f7cf07d70e642b42745ee91a19d981b6Set Max Wallet S...103525972022-03-19 8:16:08253 days 11 hrs ago0x285025030985dc4546864b3d8c48a76c0d44d167 IN  0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether0.00007633 2.50000002
0xf3d2a6d60639cef29f5b2b0c86f7c0bd605e018e6c44d59dabb17707a08c1c8aSet Max Tx Perce...103525912022-03-19 8:14:38253 days 11 hrs ago0x285025030985dc4546864b3d8c48a76c0d44d167 IN  0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether0.00007619 2.50000002
0xd74a60ca85dfa55ac79cc47582eeb8e3fd650fed3b75037df59093ae187afd71Approve103525662022-03-19 8:08:23253 days 11 hrs ago0x4a814e1715ac82462a444f397b283d9fafda9f9e IN  0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether0.00007 1.50000003
0xc72f74cf12056a2b7c491458c609d6373f0b337e76502d4423ec8f6bdbbc7f5aApprove103525112022-03-19 7:54:38253 days 12 hrs ago0xc4c712cf5207e84aab62d1b35b9e2507533fb7a6 IN  0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether0.00007 1.50000003
0x4e1edbd7316adf5e5ba01ce59536d4708e18ce4437d596832e81bb9421d664330x60806040103522712022-03-19 6:54:35253 days 13 hrs ago0x285025030985dc4546864b3d8c48a76c0d44d167 IN  Create: HocusPocus0 Ether0.01461604 2.50000001
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd78afbac755a50af3f9647d1a3d5915184f841f0b4cc7d0cc8746489350ba2a4103526032022-03-19 8:17:38253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xd78afbac755a50af3f9647d1a3d5915184f841f0b4cc7d0cc8746489350ba2a4103526032022-03-19 8:17:38253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x12790034c87a0f72bd2ee02a37c232c40281aeda0xb7e2575c7bec6eb03d454b8510bd33fe335eb3e60.00006817 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x7a250d5630b4cf539739df2c5dacb4c659f2488d 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x12790034c87a0f72bd2ee02a37c232c40281aeda 0x7a250d5630b4cf539739df2c5dacb4c659f2488d0.00001947 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x7a250d5630b4cf539739df2c5dacb4c659f2488d 0x12790034c87a0f72bd2ee02a37c232c40281aeda0.00008765 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x7a250d5630b4cf539739df2c5dacb4c659f2488d 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x7a250d5630b4cf539739df2c5dacb4c659f2488d 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x12790034c87a0f72bd2ee02a37c232c40281aeda 0x7a250d5630b4cf539739df2c5dacb4c659f2488d0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x12790034c87a0f72bd2ee02a37c232c40281aeda 0x7a250d5630b4cf539739df2c5dacb4c659f2488d0 Ether
0xff2864e4409187634e4b59b341e3af88c43c8e9084d9dfa95687f55d81e57070103525832022-03-19 8:12:38253 days 11 hrs ago 0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0x5e4afadbf298f91b6506299ab4da9ffed74cf8f1db785bd64b2527da179e0e57103525752022-03-19 8:10:38253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0x5e4afadbf298f91b6506299ab4da9ffed74cf8f1db785bd64b2527da179e0e57103525752022-03-19 8:10:38253 days 11 hrs ago 0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0x5e4afadbf298f91b6506299ab4da9ffed74cf8f1db785bd64b2527da179e0e57103525752022-03-19 8:10:38253 days 11 hrs ago 0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xebced3362dbb01bc72d4e0feab73f18fa187d51643af87c1184f4d0f104e0260103525572022-03-19 8:06:08253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xebced3362dbb01bc72d4e0feab73f18fa187d51643af87c1184f4d0f104e0260103525572022-03-19 8:06:08253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xba5d1a428c4841487e57b70a62a247e5021f05578c661be19c694bf8b633a7b5103525322022-03-19 7:59:53253 days 11 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xba5d1a428c4841487e57b70a62a247e5021f05578c661be19c694bf8b633a7b5103525322022-03-19 7:59:53253 days 11 hrs ago 0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xba5d1a428c4841487e57b70a62a247e5021f05578c661be19c694bf8b633a7b5103525322022-03-19 7:59:53253 days 11 hrs ago 0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xe848e759ed3cee5217f1dd90a553147743503c326a3bcdc048e4eb484ec2395f103525132022-03-19 7:55:08253 days 12 hrs ago 0xda74f664c4def775c60c577448583c013db1d6ce 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
0xe848e759ed3cee5217f1dd90a553147743503c326a3bcdc048e4eb484ec2395f103525132022-03-19 7:55:08253 days 12 hrs ago 0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45 0x12790034c87a0f72bd2ee02a37c232c40281aeda0 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HocusPocus

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-19
*/

/////////////////////////////////////////////////////////////////
///////////////////HOCUS//POCUS//////////////////
/////////////////////////////////////////////////////////////////
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

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

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

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @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"
        );

        (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"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


/////////////////////////////////////////////////
////////////////PULSEX//INTERFACE////////////////
/////////////////////////////////////////////////

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address lpPair,
        uint256
    );

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address lpPair);

    function createPair(address tokenA, address tokenB)
        external
        returns (address lpPair);
}

interface IUniswapV2Pair {
    function factory() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );
}

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

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
}

///////////////////////////////////////////////////////////////
////////////////////CONTRACT//IMPLEMENTATION///////////////////
///////////////////////////////////////////////////////////////

contract HocusPocus is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    using SafeMath for uint256;
    using Address for address;
    address private _owner;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping(address => mapping(address => uint256)) private _allowances;

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

    mapping(address => bool) private _liquidityHolders;

    string private constant _name = "Hocus Pocus";
    string private constant _symbol = "HOC";
    uint8 private constant _decimals = 4;

    uint256 constant _totalSupply = 5_555_000_000_000 * (10**_decimals);
    uint256 private constant _tTotal = _totalSupply;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    struct Fees {
        uint16 reflect;
        uint16 burn;
        uint16 liquidity;
        uint16 treasury;
        uint16 team;
        uint16 sensFoundation;
        uint16 totalSwap;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 treasury;
        uint16 total;
    }

    Fees public _buyTaxes =
        Fees({
            reflect: 0,
            burn: 0,
            liquidity: 0,
            treasury: 0,
            sensFoundation: 100,
            team: 0,
            totalSwap: 0
        });

    Fees public _sellTaxes =
        Fees({
            reflect: 200,
            burn: 50,
            liquidity: 200,
            treasury: 350,
            sensFoundation: 0,
            team: 200,
            totalSwap: 550
        });

    Ratios public _ratios = Ratios({liquidity: 200, treasury: 350, total: 550});

    uint256 constant masterTaxDivisor = 10000;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant sensWallet =
        0x29E6d8b995C55767011adeeb1CB1d1Ed978BE451;
    address public constant teamWallet =
        0xd2642379D0D4dE718675321F7e0268E7BF4f1a47;

    struct treasuryWallet {
        address payable treasury;
    }

    treasuryWallet public _treasuryWallet =
        treasuryWallet({
            treasury: payable(0xb7e2575C7BEC6eb03D454b8510Bd33Fe335EB3e6)
        });

    bool inSwap;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public constant swapThreshold = (_tTotal * 5) / 10000;
    uint256 public constant swapAmount = (_tTotal * 10) / 10000;

    uint256 private _maxTxAmount = (_tTotal * 100) / 100;
    uint256 private _maxWalletSize = (_tTotal * 100) / 100;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }

    constructor() payable {
        _rOwned[msg.sender] = _rTotal;

        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IUniswapV2Router02(
                0x10ED43C718714eb63d5aA57B78B54704E256024E
            );
            contractSwapTimer = 3 seconds;
        } else if (block.chainid == 97) {
            dexRouter = IUniswapV2Router02(
                0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3
            );
            contractSwapTimer = 3 seconds;
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IUniswapV2Router02(
                0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            );
            contractSwapTimer = 10 seconds;
        } else {
            revert();
        }

        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(
            dexRouter.WETH(),
            address(this)
        );
        lpPairs[lpPair] = true;

        _approve(msg.sender, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;

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

    receive() external payable {}

    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner {
        require(
            newOwner != address(0),
            "Call renounceOwnership to transfer owner to the zero address."
        );
        require(
            newOwner != DEAD,
            "Call renounceOwnership to transfer owner to the zero address."
        );
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);

        if (balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }

        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
    }

    function renounceOwnership() external virtual onlyOwner {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }

    function totalSupply() external pure override returns (uint256) {
        if (_tTotal == 0) {
            revert();
        }
        return _tTotal;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

    function getOwner() external view override returns (address) {
        return owner();
    }

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

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

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

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

    function _approve(
        address sender,
        address spender,
        uint256 amount
    ) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(
            address(this),
            _newRouter.WETH()
        );
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(
                address(this),
                _newRouter.WETH()
            );
        } else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(
                    block.timestamp - timeSinceLastPair > 3 days,
                    "3 Day cooldown.!"
                );
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function getCirculatingSupply() external view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

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

    function setExcludedFromReward(address account, bool enabled)
        external
        onlyOwner
    {
        if (enabled) {
            require(!_isExcluded[account], "Account is already excluded.");
            if (_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            if (account != lpPair) {
                _excluded.push(account);
            }
        } else if (!enabled) {
            require(_isExcluded[account], "Account is already included.");
            if (account == lpPair) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _tOwned[account] = 0;
                _isExcluded[account] = false;
            } else if (_excluded.length == 1) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
            } else {
                for (uint256 i = 0; i < _excluded.length; i++) {
                    if (_excluded[i] == account) {
                        _excluded[i] = _excluded[_excluded.length - 1];
                        _tOwned[account] = 0;
                        _rOwned[account] = _tOwned[account] * _getRate();
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

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

    function setMaxTxPercent(uint256 percent, uint256 divisor)
        external
        onlyOwner
    {
        require(
            (_tTotal * percent) / divisor >= (_tTotal / 1000),
            "Max Transaction amt must be above 0.1% of total supply."
        );
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor)
        external
        onlyOwner
    {
        require(
            (_tTotal * percent) / divisor >= (_tTotal / 1000),
            "Max Wallet amt must be above 0.1% of total supply."
        );
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function setExcludedFromLimits(address account, bool enabled)
        external
        onlyOwner
    {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromLimits(address account) external view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled)
        public
        onlyOwner
    {
        _isExcludedFromFees[account] = enabled;
    }

    function getMaxTX() external view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() external view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function setWallets(address payable treasury) external onlyOwner {
        _treasuryWallet.treasury = payable(treasury);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (lpPairs[from] || lpPairs[to]) {
            if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
            }
        }
        if (to != address(dexRouter) && !lpPairs[to]) {
            if (!_isExcludedFromLimits[to]) {
                require(
                    balanceOf(to) + amount <= _maxWalletSize,
                    "Transfer amount exceeds the maxWalletSize."
                );
            }
        }

        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (lpPairs[to]) {
            if (!inSwap) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if (contractTokenBalance >= swapAmount) {
                            contractTokenBalance = swapAmount;
                        }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }
        }
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }

        if (
            _allowances[address(this)][address(dexRouter)] != type(uint256).max
        ) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) /
            ratios.total) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 treasuryBalance = amtBalance;
        if (ratios.treasury > 0) {
            _treasuryWallet.treasury.transfer(treasuryBalance);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;
        uint256 tBurn;
        uint256 tSens;
        uint256 tTeam;
        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
        uint256 currentRate;
    }

    function _finalizeTransfer(
        address from,
        address to,
        uint256 tAmount,
        bool takeFee
    ) private returns (bool) {
        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        }
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(
        address from,
        address to,
        uint256 tAmount,
        bool takeFee
    ) private returns (ExtraValues memory) {
        ExtraValues memory values;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.currentRate;

        if (takeFee) {
            uint256 currentReflect;
            uint256 currentSwap;
            uint256 currentBurn;
            uint256 currentSens;
            uint256 currentTeam;
            uint256 divisor = masterTaxDivisor;

            if (lpPairs[to]) {
                currentReflect = _sellTaxes.reflect;
                currentBurn = _sellTaxes.burn;
                currentSens = _sellTaxes.sensFoundation;
                currentTeam = _sellTaxes.team;
                currentSwap = _sellTaxes.totalSwap;
            } else if (lpPairs[from]) {
                currentReflect = _buyTaxes.reflect;
                currentBurn = _buyTaxes.burn;
                currentSens = _buyTaxes.sensFoundation;
                currentTeam = _buyTaxes.team;
                currentSwap = _buyTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentReflect) / divisor;
            values.tSwap = (tAmount * currentSwap) / divisor;
            values.tBurn = (tAmount * currentBurn) / divisor;
            values.tSens = (tAmount * currentSens) / divisor;
            values.tTeam = (tAmount * currentTeam) / divisor;
            values.tTransferAmount =
                tAmount -
                (values.tFee +
                    values.tSwap +
                    values.tBurn +
                    values.tSens +
                    values.tTeam);

            values.rFee = values.tFee * values.currentRate;
        } else {
            values.tFee = 0;
            values.tSwap = 0;
            values.tBurn = 0;
            values.tSens = 0;
            values.tTeam = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] += values.tSwap * values.currentRate;
            if (_isExcluded[address(this)]) {
                _tOwned[address(this)] += values.tSwap;
            }
            emit Transfer(from, address(this), values.tSwap);
        }

        if (values.tBurn > 0) {
            _rOwned[DEAD] += values.tBurn * values.currentRate;
            if (_isExcluded[DEAD]) {
                _tOwned[DEAD] += values.tBurn;
            }
            emit Transfer(from, DEAD, values.tBurn);
        }

        if (values.tSens > 0) {
            _rOwned[sensWallet] += values.tSens * values.currentRate;
            if (_isExcluded[sensWallet]) {
                _tOwned[sensWallet] += values.tSens;
            }
            emit Transfer(from, sensWallet, values.tSens);
        }

        if (values.tTeam > 0) {
            _rOwned[teamWallet] += values.tTeam * values.currentRate;
            if (_isExcluded[teamWallet]) {
                _tOwned[teamWallet] += values.tTeam;
            }
            emit Transfer(from, teamWallet, values.tTeam);
        }

        values.rTransferAmount =
            values.rAmount -
            (values.rFee +
                (values.tSwap * values.currentRate) +
                (values.tBurn * values.currentRate) +
                (values.tSens * values.currentRate) +
                (values.tTeam * values.currentRate));
        return values;
    }

    function _getRate() internal view returns (uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (_isExcluded[lpPair]) {
            if (_rOwned[lpPair] > rSupply || _tOwned[lpPair] > tSupply)
                return _rTotal / _tTotal;
            rSupply -= _rOwned[lpPair];
            tSupply -= _tOwned[lpPair];
        }
        if (_excluded.length > 0) {
            for (uint8 i = 0; i < _excluded.length; i++) {
                if (
                    _rOwned[_excluded[i]] > rSupply ||
                    _tOwned[_excluded[i]] > tSupply
                ) return _rTotal / _tTotal;
                rSupply = rSupply - _rOwned[_excluded[i]];
                tSupply = tSupply - _tOwned[_excluded[i]];
            }
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","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":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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"sensFoundation","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"sensFoundation","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryWallet","outputs":[{"internalType":"address payable","name":"treasury","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","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":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sensWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"treasury","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004556004600a620000199190620007e8565b6200002b9065050d5fcd3e0062000800565b620000399060001962000838565b62000047906000196200084f565b600b556040805160e080820183526000808352602080840182905283850182905260608085018390526080808601849052606460a080880182905260c0978801869052600c80546a64000000000000000000006001600160701b03199182161790915589519788018a5260c8808952603289880152888b0181905261015e89870181905294890181905291880187905261022697909801879052600d80549098166d0226000000c8015e00c8003200c8179097558751928301885295825281830152850192909252600e805465ffffffffffff1916650226015e00c8179055835191820190935273b7e2575c7bec6eb03d454b8510bd33fe335eb3e690819052601180546001600160a01b03191690911790556013919091556200016e6004600a620007e8565b620001809065050d5fcd3e0062000800565b6200018d90606462000800565b62000199919062000869565b6015556064620001ac6004600a620007e8565b620001be9065050d5fcd3e0062000800565b620001cb90606462000800565b620001d7919062000869565b601655600b543360008181526001602052604081209290925581546001600160a01b03191617905560384614156200023a57600f80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556003601355620002c1565b46606114156200027557600f80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556003601355620002c1565b4660011480620002855750466004145b15620002bc57600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600a601355620002c1565b600080fd5b600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b919062000880565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c3919062000880565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000410573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000436919062000880565b601080546001600160a01b0319166001600160a01b039283169081179091556000908152600360205260409020805460ff19166001179055600f546200048291339116600019620005d2565b600f546200049e9030906001600160a01b0316600019620005d2565b600160066000620004b76000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600a906200053f6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200056f3390565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620005a96004600a620007e8565b620005bb9065050d5fcd3e0062000800565b60405190815260200160405180910390a3620008ab565b6001600160a01b038316620006245760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006725760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200061b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200072a5781600019048211156200070e576200070e620006d3565b808516156200071c57918102915b93841c9390800290620006ee565b509250929050565b6000826200074357506001620007e2565b816200075257506000620007e2565b81600181146200076b5760028114620007765762000796565b6001915050620007e2565b60ff8411156200078a576200078a620006d3565b50506001821b620007e2565b5060208310610133831016604e8410600b8410161715620007bb575081810a620007e2565b620007c78383620006e9565b8060001904821115620007de57620007de620006d3565b0290505b92915050565b6000620007f960ff84168362000732565b9392505050565b60008160001904831182151516156200081d576200081d620006d3565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200084a576200084a62000822565b500690565b600082821015620008645762000864620006d3565b500390565b6000826200087b576200087b62000822565b500490565b6000602082840312156200089357600080fd5b81516001600160a01b0381168114620007f957600080fd5b61335080620008bb6000396000f3fe60806040526004361061023f5760003560e01c8063590ffdce1161012e578063893d20e8116100ab578063cf8477061161006f578063cf847706146107ab578063dd62ed3e14610801578063e4fcfd1814610847578063eafb5a3c1461085d578063eb50e70e1461087d57600080fd5b8063893d20e8146106e55780638da5cb5b146106e557806395d89b4114610703578063a9059cbb1461072f578063c6831cd81461074f57600080fd5b8063715018a6116100f2578063715018a6146105af5780637b45d431146105c457806380c581d114610664578063824f70b81461068457806388f82020146106ac57600080fd5b8063590ffdce146104f957806359927044146105195780635cce86cd146105415780636ebd00781461057a57806370a082311461058f57600080fd5b8063269d1faa116101bc57806336fddb041161018057806336fddb04146104405780633f3cf56c14610460578063452ed4f1146104805780634fb2e45d146104a05780634fbee193146104c057600080fd5b8063269d1faa146103ba5780632b112e49146103da5780632d838119146103ef5780632e8fa8211461040f578063313ce5671461042457600080fd5b80630fa604e4116102035780630fa604e41461032e57806313e461921461034357806318160ddd1461036557806323b872dd1461037a578063260039571461039a57600080fd5b806303fd2a451461024b5780630445b6671461027e57806306fdde03146102a15780630758d924146102de578063095ea7b3146102fe57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026161dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028a57600080fd5b5061029361089d565b604051908152602001610275565b3480156102ad57600080fd5b5060408051808201909152600b81526a486f63757320506f63757360a81b60208201525b6040516102759190612e15565b3480156102ea57600080fd5b50600f54610261906001600160a01b031681565b34801561030a57600080fd5b5061031e610319366004612e82565b6108d4565b6040519015158152602001610275565b34801561033a57600080fd5b506102936108eb565b34801561034f57600080fd5b5061036361035e366004612eae565b61090b565b005b34801561037157600080fd5b50610293610d7f565b34801561038657600080fd5b5061031e610395366004612eec565b610dc2565b3480156103a657600080fd5b506103636103b5366004612f2d565b610e3a565b3480156103c657600080fd5b50601154610261906001600160a01b031681565b3480156103e657600080fd5b50610293610f61565b3480156103fb57600080fd5b5061029361040a366004612f4f565b610fa8565b34801561041b57600080fd5b5061029361102c565b34801561043057600080fd5b5060405160048152602001610275565b34801561044c57600080fd5b5061036361045b366004612eae565b611056565b34801561046c57600080fd5b5061036361047b366004612f2d565b6110ab565b34801561048c57600080fd5b50601054610261906001600160a01b031681565b3480156104ac57600080fd5b506103636104bb366004612f68565b6111dd565b3480156104cc57600080fd5b5061031e6104db366004612f68565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561050557600080fd5b50610363610514366004612eae565b611304565b34801561052557600080fd5b5061026173d2642379d0d4de718675321f7e0268e7bf4f1a4781565b34801561054d57600080fd5b5061031e61055c366004612f68565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561058657600080fd5b50610293611359565b34801561059b57600080fd5b506102936105aa366004612f68565b611374565b3480156105bb57600080fd5b506103636113d3565b3480156105d057600080fd5b50600c546106209061ffff80821691620100008104821691640100000000820481169166010000000000008104821691600160401b8204811691600160501b8104821691600160601b9091041687565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015284166080840152831660a083015290911660c082015260e001610275565b34801561067057600080fd5b5061036361067f366004612eae565b611452565b34801561069057600080fd5b506102617329e6d8b995c55767011adeeb1cb1d1ed978be45181565b3480156106b857600080fd5b5061031e6106c7366004612f68565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156106f157600080fd5b506000546001600160a01b0316610261565b34801561070f57600080fd5b50604080518082019091526003815262484f4360e81b60208201526102d1565b34801561073b57600080fd5b5061031e61074a366004612e82565b611528565b34801561075b57600080fd5b50600d546106209061ffff80821691620100008104821691640100000000820481169166010000000000008104821691600160401b8204811691600160501b8104821691600160601b9091041687565b3480156107b757600080fd5b50600e546107dc9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610275565b34801561080d57600080fd5b5061029361081c366004612f85565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561085357600080fd5b5061029360135481565b34801561086957600080fd5b50610363610878366004612f68565b61153f565b34801561088957600080fd5b50610363610898366004612f68565b611873565b6127106108ac6004600a6130ad565b6108bc9065050d5fcd3e006130bc565b6108c79060056130bc565b6108d191906130db565b81565b60006108e13384846118bf565b5060015b92915050565b60006108f96004600a6130ad565b60165461090691906130db565b905090565b6000546001600160a01b0316331461093e5760405162461bcd60e51b8152600401610935906130fd565b60405180910390fd5b8015610a86576001600160a01b03821660009081526008602052604090205460ff16156109ad5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610935565b6001600160a01b03821660009081526001602052604090205415610a07576001600160a01b0382166000908152600160205260409020546109ed90610fa8565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff1916600117905560105490911614610a8257600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0384161790555b5050565b80610a82576001600160a01b03821660009081526008602052604090205460ff16610af35760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610935565b6010546001600160a01b0383811691161415610b6e57610b116119b8565b6001600160a01b038316600090815260026020526040902054610b3491906130bc565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b60095460011415610c1157610b816119b8565b6001600160a01b038316600090815260026020526040902054610ba491906130bc565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690556009805480610beb57610beb613128565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600954811015610d7a57826001600160a01b031660098281548110610c3b57610c3b61313e565b6000918252602090912001546001600160a01b03161415610d685760098054610c6690600190613154565b81548110610c7657610c7661313e565b600091825260209091200154600980546001600160a01b039092169183908110610ca257610ca261313e565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918516815260029091526040812055610ce16119b8565b6001600160a01b038416600090815260026020526040902054610d0491906130bc565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff191690556009805480610d4157610d41613128565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b80610d728161316b565b915050610c14565b505050565b6000610d8d6004600a6130ad565b610d9d9065050d5fcd3e006130bc565b610da657600080fd5b610db26004600a6130ad565b6109069065050d5fcd3e006130bc565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610e27576001600160a01b038416600090815260056020908152604080832033845290915281208054849290610e21908490613154565b90915550505b610e32848484611c8e565b949350505050565b6000546001600160a01b03163314610e645760405162461bcd60e51b8152600401610935906130fd565b6103e8610e736004600a6130ad565b610e839065050d5fcd3e006130bc565b610e8d91906130db565b8183610e9b6004600a6130ad565b610eab9065050d5fcd3e006130bc565b610eb591906130bc565b610ebf91906130db565b1015610f285760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610935565b8082610f366004600a6130ad565b610f469065050d5fcd3e006130bc565b610f5091906130bc565b610f5a91906130db565b6016555050565b6000610f6d6000611374565b610f7861dead611374565b610f829190613186565b610f8e6004600a6130ad565b610f9e9065050d5fcd3e006130bc565b6109069190613154565b6000600b5482111561100f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610935565b60006110196119b8565b905061102581846130db565b9392505050565b61271061103b6004600a6130ad565b61104b9065050d5fcd3e006130bc565b6108c790600a6130bc565b6000546001600160a01b031633146110805760405162461bcd60e51b8152600401610935906130fd565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110d55760405162461bcd60e51b8152600401610935906130fd565b6103e86110e46004600a6130ad565b6110f49065050d5fcd3e006130bc565b6110fe91906130db565b818361110c6004600a6130ad565b61111c9065050d5fcd3e006130bc565b61112691906130bc565b61113091906130db565b10156111a45760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610935565b80826111b26004600a6130ad565b6111c29065050d5fcd3e006130bc565b6111cc91906130bc565b6111d691906130db565b6015555050565b6000546001600160a01b031633146112075760405162461bcd60e51b8152600401610935906130fd565b6001600160a01b03811661122d5760405162461bcd60e51b81526004016109359061319e565b6001600160a01b03811661dead14156112585760405162461bcd60e51b81526004016109359061319e565b60008054611271916001600160a01b0390911690611304565b61127c816001611304565b60008054611292906001600160a01b0316611374565b11156112b9576000546112b7906001600160a01b0316826112b282611374565b611c8e565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461132e5760405162461bcd60e51b8152600401610935906130fd565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60006113676004600a6130ad565b60155461090691906130db565b6001600160a01b03811660009081526008602052604081205460ff16156113b157506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546108e590610fa8565b6000546001600160a01b031633146113fd5760405162461bcd60e51b8152600401610935906130fd565b60008054611416916001600160a01b0390911690611304565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610935906130fd565b806114a357506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156114fd576203f480600454426114bd9190613154565b116114fd5760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b6044820152606401610935565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000611535338484611c8e565b5060019392505050565b6000546001600160a01b031633146115695760405162461bcd60e51b8152600401610935906130fd565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d291906131fb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164391906131fb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561168e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b291906131fb565b90506001600160a01b03811661182b57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172491906131fb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611771573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179591906131fb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180691906131fb565b601080546001600160a01b0319166001600160a01b0392909216919091179055611847565b601080546001600160a01b0319166001600160a01b0383161790555b600f80546001600160a01b0319166001600160a01b038416908117909155610d7a9030906000196118bf565b6000546001600160a01b0316331461189d5760405162461bcd60e51b8152600401610935906130fd565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661190b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610935565b6001600160a01b0382166119575760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610935565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600b54600090816119cb6004600a6130ad565b6119db9065050d5fcd3e006130bc565b6010546001600160a01b031660009081526008602052604090205490915060ff1615611ac7576010546001600160a01b0316600090815260016020526040902054821080611a4257506010546001600160a01b031660009081526002602052604090205481105b15611a7757611a536004600a6130ad565b611a639065050d5fcd3e006130bc565b600b54611a7091906130db565b9250505090565b6010546001600160a01b0316600090815260016020526040902054611a9c9083613154565b6010546001600160a01b0316600090815260026020526040902054909250611ac49082613154565b90505b60095415611c485760005b60095460ff82161015611c4657826001600060098460ff1681548110611afa57611afa61313e565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b685750816002600060098460ff1681548110611b4157611b4161313e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b9e57611b796004600a6130ad565b611b899065050d5fcd3e006130bc565b600b54611b9691906130db565b935050505090565b6001600060098360ff1681548110611bb857611bb861313e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611be79084613154565b92506002600060098360ff1681548110611c0357611c0361313e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611c329083613154565b915080611c3e81613218565b915050611ad2565b505b611c546004600a6130ad565b611c649065050d5fcd3e006130bc565b600b54611c7191906130db565b821015611c8457611a536004600a6130ad565b611a7081836130db565b60006001600160a01b038416611cf45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610935565b6001600160a01b038316611d565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610935565b60008211611db85760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610935565b6001600160a01b03841660009081526003602052604090205460ff1680611df757506001600160a01b03831660009081526003602052604090205460ff165b15611ea6576001600160a01b03841660009081526007602052604090205460ff16158015611e3e57506001600160a01b03831660009081526007602052604090205460ff16155b15611ea657601554821115611ea65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610935565b600f546001600160a01b03848116911614801590611edd57506001600160a01b03831660009081526003602052604090205460ff16155b15611f7a576001600160a01b03831660009081526007602052604090205460ff16611f7a5760165482611f0f85611374565b611f199190613186565b1115611f7a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610935565b6001600160a01b03841660009081526006602052604090205460019060ff1680611fbc57506001600160a01b03841660009081526006602052604090205460ff165b15611fc5575060005b6001600160a01b03841660009081526003602052604090205460ff16156120cf5760125460ff166120cf57426013546014546120019190613186565b10156120cf57600061201230611374565b90506127106120236004600a6130ad565b6120339065050d5fcd3e006130bc565b61203e9060056130bc565b61204891906130db565b81106120cd5761271061205d6004600a6130ad565b61206d9065050d5fcd3e006130bc565b61207890600a6130bc565b61208291906130db565b81106120bf576127106120976004600a6130ad565b6120a79065050d5fcd3e006130bc565b6120b290600a6130bc565b6120bc91906130db565b90505b6120c8816120e4565b426014555b505b6120db85858584612489565b95945050505050565b6012805460ff1916600117905560408051606081018252600e5461ffff808216835262010000820481166020840152640100000000909104169181018290529061212e575061247c565b306000908152600560209081526040808320600f546001600160a01b031684529091529020546000191461218757306000908152600560209081526040808320600f546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856121a891906130bc565b6121b291906130db565b6121bc91906130db565b905060006121ca8285613154565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106122045761220461313e565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561225d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228191906131fb565b816001815181106122945761229461313e565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b815291169063791ac947906122da908590600090869030904290600401613238565b600060405180830381600087803b1580156122f457600080fd5b505af1158015612308573d6000803e3d6000fd5b504792506000915084905061231d86846130bc565b61232791906130db565b905084156123ff57600f5460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561239d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123c291906132a9565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6124098183613154565b915085600001518660400181815161242191906132d7565b61ffff90811690915260208801518492501615612474576011546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612472573d6000803e3d6000fd5b505b505050505050505b506012805460ff19169055565b60008061249886868686612650565b60e08101516001600160a01b0388166000908152600160205260409020549192506124c291613154565b6001600160a01b038088166000908152600160205260408082209390935560c0840151918816815291909120546124f99190613186565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff161561256b576001600160a01b038616600090815260026020526040902054612551908590613154565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff16156125cb5780516001600160a01b0386166000908152600260205260409020546125b19190613186565b6001600160a01b0386166000908152600260205260409020555b600081610100015111806125e3575060008160200151115b1561260557806101000151600b60008282546125ff9190613154565b90915550505b846001600160a01b0316866001600160a01b03166000805160206132fb833981519152836000015160405161263c91815260200190565b60405180910390a350600195945050505050565b612658612dc2565b612660612dc2565b6126686119b8565b610120820181905261267a90856130bc565b60e08201528215612838576001600160a01b03851660009081526003602052604081205481908190819081906127109060ff16156126ed57600d5461ffff8082169750600160601b82048116965062010000820481169550600160501b820481169450600160401b909104169150612745565b6001600160a01b038c1660009081526003602052604090205460ff161561274557600c5461ffff8082169750600160601b82048116965062010000820481169550600160501b820481169450600160401b9091041691505b80612750878c6130bc565b61275a91906130db565b60208801528061276a868c6130bc565b61277491906130db565b604088015280612784858c6130bc565b61278e91906130db565b60608801528061279e848c6130bc565b6127a891906130db565b6080880152806127b8838c6130bc565b6127c291906130db565b60a088018190526080880151606089015160408a015160208b01516127e79190613186565b6127f19190613186565b6127fb9190613186565b6128059190613186565b61280f908b613154565b8752610120870151602088015161282691906130bc565b61010088015250612867945050505050565b60006020820181905260408201819052606082018190526080820181905260a082018190528482526101008201525b60408101511561292d57806101200151816040015161288691906130bc565b30600090815260016020526040812080549091906128a5908490613186565b90915550503060009081526008602052604090205460ff16156128ed5760408082015130600090815260026020529182208054919290916128e7908490613186565b90915550505b306001600160a01b0316866001600160a01b03166000805160206132fb833981519152836040015160405161292491815260200190565b60405180910390a35b606081015115612a4f57806101200151816060015161294c91906130bc565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d805490919061298a908490613186565b909155505061dead60005260086020527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342995460ff1615612a0d57606081015161dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054909190612a07908490613186565b90915550505b61dead6001600160a01b0316866001600160a01b03166000805160206132fb8339815191528360600151604051612a4691815260200190565b60405180910390a35b608081015115612bb9578061012001518160800151612a6e91906130bc565b7329e6d8b995c55767011adeeb1cb1d1ed978be451600090815260016020527f909a2ccee4d889c7b391b07970786f468e4b91d036a0a25d1d0baf50609aebc98054909190612abe908490613186565b90915550507329e6d8b995c55767011adeeb1cb1d1ed978be45160005260086020527fa5686c86548bf4d55faf4710033d2c28db14dfbacf24cc9708ff91ddf7b3f2905460ff1615612b655760808101517329e6d8b995c55767011adeeb1cb1d1ed978be451600090815260026020527f944a3cf180b2fa52e871d18c42883bb3fae0d3f23d66f7f809c417aa93d1e1208054909190612b5f908490613186565b90915550505b7329e6d8b995c55767011adeeb1cb1d1ed978be4516001600160a01b0316866001600160a01b03166000805160206132fb8339815191528360800151604051612bb091815260200190565b60405180910390a35b60a081015115612d23578061012001518160a00151612bd891906130bc565b73d2642379d0d4de718675321f7e0268e7bf4f1a47600090815260016020527f45ff28d0bd7242febf183b17650fd0e0f4c79decdd9a781bf23e0a332ef4e2ce8054909190612c28908490613186565b909155505073d2642379d0d4de718675321f7e0268e7bf4f1a4760005260086020527ff824510b1d11e45e7509f37c0ecb84480bb99e5f2c3ef7ec6c5b0752577066945460ff1615612ccf5760a081015173d2642379d0d4de718675321f7e0268e7bf4f1a47600090815260026020527f40ef8e906cc4fdff73a2a75c4f969ea222a75261aaae28e8b8c179101a1a5f228054909190612cc9908490613186565b90915550505b73d2642379d0d4de718675321f7e0268e7bf4f1a476001600160a01b0316866001600160a01b03166000805160206132fb8339815191528360a00151604051612d1a91815260200190565b60405180910390a35b8061012001518160a00151612d3891906130bc565b8161012001518260800151612d4d91906130bc565b8261012001518360600151612d6291906130bc565b8361012001518460400151612d7791906130bc565b846101000151612d879190613186565b612d919190613186565b612d9b9190613186565b612da59190613186565b8160e00151612db49190613154565b60c082015295945050505050565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b81811015612e4257858101830151858201604001528201612e26565b81811115612e54576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612e7f57600080fd5b50565b60008060408385031215612e9557600080fd5b8235612ea081612e6a565b946020939093013593505050565b60008060408385031215612ec157600080fd5b8235612ecc81612e6a565b915060208301358015158114612ee157600080fd5b809150509250929050565b600080600060608486031215612f0157600080fd5b8335612f0c81612e6a565b92506020840135612f1c81612e6a565b929592945050506040919091013590565b60008060408385031215612f4057600080fd5b50508035926020909101359150565b600060208284031215612f6157600080fd5b5035919050565b600060208284031215612f7a57600080fd5b813561102581612e6a565b60008060408385031215612f9857600080fd5b8235612fa381612e6a565b91506020830135612ee181612e6a565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613004578160001904821115612fea57612fea612fb3565b80851615612ff757918102915b93841c9390800290612fce565b509250929050565b60008261301b575060016108e5565b81613028575060006108e5565b816001811461303e576002811461304857613064565b60019150506108e5565b60ff84111561305957613059612fb3565b50506001821b6108e5565b5060208310610133831016604e8410600b8410161715613087575081810a6108e5565b6130918383612fc9565b80600019048211156130a5576130a5612fb3565b029392505050565b600061102560ff84168361300c565b60008160001904831182151516156130d6576130d6612fb3565b500290565b6000826130f857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008282101561316657613166612fb3565b500390565b600060001982141561317f5761317f612fb3565b5060010190565b6000821982111561319957613199612fb3565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006020828403121561320d57600080fd5b815161102581612e6a565b600060ff821660ff81141561322f5761322f612fb3565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132885784516001600160a01b031683529383019391830191600101613263565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132be57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156132f2576132f2612fb3565b03939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122011c0f84d5539fce0db1b1c14ce068a044769e6c3606f0b6a4053881cdd232ec964736f6c634300080a0033

Deployed ByteCode Sourcemap

22933:21886:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25053:73;;;;;;;;;;;;25084:42;25053:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;25053:73:0;;;;;;;;25659:61;;;;;;;;;;;;;:::i;:::-;;;368:25:1;;;356:2;341:18;25659:61:0;222:177:1;29260:94:0;;;;;;;;;;-1:-1:-1;29341:5:0;;;;;;;;;;;;-1:-1:-1;;;29341:5:0;;;;29260:94;;;;;;;:::i;24981:35::-;;;;;;;;;;-1:-1:-1;24981:35:0;;;;-1:-1:-1;;;;;24981:35:0;;;30075:195;;;;;;;;;;-1:-1:-1;30075:195:0;;;;;:::i;:::-;;:::i;:::-;;;1861:14:1;;1854:22;1836:41;;1824:2;1809:18;30075:195:0;1696:187:1;35676:114:0;;;;;;;;;;;;;:::i;32393:1548::-;;;;;;;;;;-1:-1:-1;32393:1548:0;;;;;:::i;:::-;;:::i;:::-;;28884:160;;;;;;;;;;;;;:::i;30629:340::-;;;;;;;;;;-1:-1:-1;30629:340:0;;;;;:::i;:::-;;:::i;34613:327::-;;;;;;;;;;-1:-1:-1;34613:327:0;;;;;:::i;:::-;;:::i;25398:152::-;;;;;;;;;;-1:-1:-1;25398:152:0;;;;-1:-1:-1;;;;;25398:152:0;;;32112:143;;;;;;;;;;;;;:::i;33949:319::-;;;;;;;;;;-1:-1:-1;33949:319:0;;;;;:::i;:::-;;:::i;25727:59::-;;;;;;;;;;;;;:::i;29052:94::-;;;;;;;;;;-1:-1:-1;29052:94:0;;23793:1;3574:36:1;;3562:2;3547:18;29052:94:0;3432:184:1;34948:163:0;;;;;;;;;;-1:-1:-1;34948:163:0;;;;;:::i;:::-;;:::i;34276:329::-;;;;;;;;;;-1:-1:-1;34276:329:0;;;;;:::i;:::-;;:::i;25023:21::-;;;;;;;;;;-1:-1:-1;25023:21:0;;;;-1:-1:-1;;;;;25023:21:0;;;28036:637;;;;;;;;;;-1:-1:-1;28036:637:0;;;;;:::i;:::-;;:::i;35259:128::-;;;;;;;;;;-1:-1:-1;35259:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;35351:28:0;35327:4;35351:28;;;:19;:28;;;;;;;;;35259:128;35395:157;;;;;;;;;;-1:-1:-1;35395:157:0;;;;;:::i;:::-;;:::i;25228:88::-;;;;;;;;;;;;25274:42;25228:88;;35119:132;;;;;;;;;;-1:-1:-1;35119:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;35213:30:0;35189:4;35213:30;;;:21;:30;;;;;;;;;35119:132;35560:108;;;;;;;;;;;;;:::i;29660:198::-;;;;;;;;;;-1:-1:-1;29660:198:0;;;;;:::i;:::-;;:::i;28681:195::-;;;;;;;;;;;;;:::i;24353:233::-;;;;;;;;;;-1:-1:-1;24353:233:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24353:233:0;;;;;-1:-1:-1;;;24353:233:0;;;;;-1:-1:-1;;;24353:233:0;;;;;;;;;;4184:6:1;4217:15;;;4199:34;;4269:15;;;4264:2;4249:18;;4242:43;4321:15;;;4301:18;;;4294:43;;;;4373:15;;;4368:2;4353:18;;4346:43;4426:15;;4420:3;4405:19;;4398:44;4479:15;;4473:3;4458:19;;4451:44;4532:15;;;4526:3;4511:19;;4504:44;4161:3;4146:19;24353:233:0;3873:681:1;31636:468:0;;;;;;;;;;-1:-1:-1;31636:468:0;;;;;:::i;:::-;;:::i;25133:88::-;;;;;;;;;;;;25179:42;25133:88;;32263:122;;;;;;;;;;-1:-1:-1;32263:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;32357:20:0;32333:4;32357:20;;;:11;:20;;;;;;;;;32263:122;29362:94;;;;;;;;;;-1:-1:-1;29414:7:0;28014:6;-1:-1:-1;;;;;28014:6:0;29362:94;35676:114;29154:98;;;;;;;;;;-1:-1:-1;29237:7:0;;;;;;;;;;;;-1:-1:-1;;;29237:7:0;;;;29154:98;;29866:201;;;;;;;;;;-1:-1:-1;29866:201:0;;;;;:::i;:::-;;:::i;24595:243::-;;;;;;;;;;-1:-1:-1;24595:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24595:243:0;;;;;-1:-1:-1;;;24595:243:0;;;;;-1:-1:-1;;;24595:243:0;;;;;;24847:75;;;;;;;;;;-1:-1:-1;24847:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;4765:6:1;4798:15;;;4780:34;;4850:15;;;4845:2;4830:18;;4823:43;4902:15;;4882:18;;;4875:43;;;;4743:2;4728:18;24847:75:0;4559:365:1;29464:188:0;;;;;;;;;;-1:-1:-1;29464:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;29616:19:0;;;29584:7;29616:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;29464:188;25577:44;;;;;;;;;;;;;;;;30977:651;;;;;;;;;;-1:-1:-1;30977:651:0;;;;;:::i;:::-;;:::i;35798:128::-;;;;;;;;;;-1:-1:-1;35798:128:0;;;;;:::i;:::-;;:::i;25659:61::-;25715:5;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;25700:11;;25710:1;25700:11;:::i;:::-;25699:21;;;;:::i;:::-;25659:61;:::o;30075:195::-;30179:4;30201:39;374:10;30224:7;30233:6;30201:8;:39::i;:::-;-1:-1:-1;30258:4:0;30075:195;;;;;:::o;35676:114::-;35723:7;35768:13;23793:1;35768:2;:13;:::i;:::-;35750:14;;:32;;;;:::i;:::-;35743:39;;35676:114;:::o;32393:1548::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;;;;;;;;;32512:7:::1;32508:1426;;;-1:-1:-1::0;;;;;32545:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32544:21;32536:62;;;::::0;-1:-1:-1;;;32536:62:0;;8040:2:1;32536:62:0::1;::::0;::::1;8022:21:1::0;8079:2;8059:18;;;8052:30;8118;8098:18;;;8091:58;8166:18;;32536:62:0::1;7838:352:1::0;32536:62:0::1;-1:-1:-1::0;;;;;32617:16:0;::::1;32636:1;32617:16:::0;;;:7:::1;:16;::::0;;;;;:20;32613:117:::1;;-1:-1:-1::0;;;;;32697:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32677:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32658:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32613:117:::1;-1:-1:-1::0;;;;;32744:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32744:27:0::1;32767:4;32744:27;::::0;;32801:6:::1;::::0;;;::::1;32790:17;32786:81;;32828:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;32828:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;32828:23:0::1;-1:-1:-1::0;;;;;32828:23:0;::::1;;::::0;;32786:81:::1;32393:1548:::0;;:::o;32508:1426::-:1;32889:7;32884:1050;;-1:-1:-1::0;;;;;32921:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32913:61;;;::::0;-1:-1:-1;;;32913:61:0;;8397:2:1;32913:61:0::1;::::0;::::1;8379:21:1::0;8436:2;8416:18;;;8409:30;8475;8455:18;;;8448:58;8523:18;;32913:61:0::1;8195:352:1::0;32913:61:0::1;33004:6;::::0;-1:-1:-1;;;;;32993:17:0;;::::1;33004:6:::0;::::1;32993:17;32989:934;;;33069:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;33050:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;33031:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;33098:7:::1;:16:::0;;;;;:20;;;33137:11:::1;:20:::0;;;:28;;-1:-1:-1;;33137:28:0::1;::::0;;32393:1548;;:::o;32989:934::-:1;33191:9;:16:::0;33211:1:::1;33191:21;33187:736;;;33271:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;33252:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;33233:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;33300:7:::1;:16:::0;;;;;:20;;;33339:11:::1;:20:::0;;;:28;;-1:-1:-1;;33339:28:0::1;::::0;;33386:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33386:15:0;;;;;-1:-1:-1;;;;;;33386:15:0::1;::::0;;;;;32393:1548;;:::o;33187:736::-:1;33447:9;33442:466;33466:9;:16:::0;33462:20;::::1;33442:466;;;33532:7;-1:-1:-1::0;;;;;33516:23:0::1;:9;33526:1;33516:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33516:12:0::1;:23;33512:377;;;33583:9;33593:16:::0;;:20:::1;::::0;33612:1:::1;::::0;33593:20:::1;:::i;:::-;33583:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;33568:9:::1;:12:::0;;-1:-1:-1;;;;;33583:31:0;;::::1;::::0;33578:1;;33568:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33568:46:0::1;-1:-1:-1::0;;;;;33568:46:0;;::::1;;::::0;;33641:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;33726:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;33707:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;33688:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;33763:11:::1;:20:::0;;;:28;;-1:-1:-1;;33763:28:0::1;::::0;;33818:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33818:15:0;;;;;-1:-1:-1;;;;;;33818:15:0::1;::::0;;;;;33442:466:::1;32393:1548:::0;;:::o;33512:377::-:1;33484:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33442:466;;;;32393:1548:::0;;:::o;28884:160::-;28939:7;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;28959:53;;28992:8;;;28959:53;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;30629:340::-;-1:-1:-1;;;;;30784:19:0;;30763:4;30784:19;;;:11;:19;;;;;;;;30804:10;30784:31;;;;;;;;-1:-1:-1;;30784:52:0;30780:126;;-1:-1:-1;;;;;30853:19:0;;;;;;:11;:19;;;;;;;;30873:10;30853:31;;;;;;;:41;;30888:6;;30853:19;:41;;30888:6;;30853:41;:::i;:::-;;;;-1:-1:-1;;30780:126:0;30925:36;30935:6;30943:9;30954:6;30925:9;:36::i;:::-;30918:43;30629:340;-1:-1:-1;;;;30629:340:0:o;34613:327::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;34792:4:::1;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;::::0;:17:::1;:35;:::i;:::-;34782:14;;;;:::i;:::-;34770:7:::0;34759;23856:13:::1;23793:1;23856:2;:13;:::i;:::-;23835:35;::::0;:17:::1;:35;:::i;:::-;34749:17;;;;:::i;:::-;34748:29;;;;:::i;:::-;:49;;34726:149;;;::::0;-1:-1:-1;;;34726:149:0;;9288:2:1;34726:149:0::1;::::0;::::1;9270:21:1::0;9327:2;9307:18;;;9300:30;9366:34;9346:18;;;9339:62;-1:-1:-1;;;9417:18:1;;;9410:48;9475:19;;34726:149:0::1;9086:414:1::0;34726:149:0::1;34925:7:::0;34914;23856:13:::1;23793:1;23856:2;:13;:::i;:::-;23835:35;::::0;:17:::1;:35;:::i;:::-;34904:17;;;;:::i;:::-;34903:29;;;;:::i;:::-;34886:14;:46:::0;-1:-1:-1;;34613:327:0:o;32112:143::-;32167:7;32224:21;32242:1;32224:9;:21::i;:::-;32206:15;25084:42;32206:9;:15::i;:::-;:39;;;;:::i;:::-;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;32195:51;;;;:::i;33949:319::-;34043:7;34101;;34090;:18;;34068:110;;;;-1:-1:-1;;;34068:110:0;;9840:2:1;34068:110:0;;;9822:21:1;9879:2;9859:18;;;9852:30;9918:34;9898:18;;;9891:62;-1:-1:-1;;;9969:18:1;;;9962:40;10019:19;;34068:110:0;9638:406:1;34068:110:0;34189:19;34211:10;:8;:10::i;:::-;34189:32;-1:-1:-1;34239:21:0;34189:32;34239:7;:21;:::i;:::-;34232:28;33949:319;-1:-1:-1;;;33949:319:0:o;25727:59::-;25781:5;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;25765:12;;25775:2;25765:12;:::i;34948:163::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35063:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;35063:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34948:163::o;34276:329::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;34454:4:::1;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;::::0;:17:::1;:35;:::i;:::-;34444:14;;;;:::i;:::-;34432:7:::0;34421;23856:13:::1;23793:1;23856:2;:13;:::i;:::-;23835:35;::::0;:17:::1;:35;:::i;:::-;34411:17;;;;:::i;:::-;34410:29;;;;:::i;:::-;:49;;34388:154;;;::::0;-1:-1:-1;;;34388:154:0;;10251:2:1;34388:154:0::1;::::0;::::1;10233:21:1::0;10290:2;10270:18;;;10263:30;10329:34;10309:18;;;10302:62;10400:25;10380:18;;;10373:53;10443:19;;34388:154:0::1;10049:419:1::0;34388:154:0::1;34590:7:::0;34579;23856:13:::1;23793:1;23856:2;:13;:::i;:::-;23835:35;::::0;:17:::1;:35;:::i;:::-;34569:17;;;;:::i;:::-;34568:29;;;;:::i;:::-;34553:12;:44:::0;-1:-1:-1;;34276:329:0:o;28036:637::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28129:22:0;::::1;28107:133;;;;-1:-1:-1::0;;;28107:133:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28273:16:0;::::1;25084:42;28273:16;;28251:127;;;;-1:-1:-1::0;;;28251:127:0::1;;;;;;;:::i;:::-;28409:6;::::0;;28389:34:::1;::::0;-1:-1:-1;;;;;28409:6:0;;::::1;::::0;28389:19:::1;:34::i;:::-;28434:35;28454:8;28464:4;28434:19;:35::i;:::-;28506:1;28496:6:::0;;28486:17:::1;::::0;-1:-1:-1;;;;;28496:6:0::1;28486:9;:17::i;:::-;:21;28482:100;;;28534:6;::::0;28524:46:::1;::::0;-1:-1:-1;;;;;28534:6:0::1;28542:8:::0;28552:17:::1;28534:6:::0;28552:9:::1;:17::i;:::-;28524:9;:46::i;:::-;;28482:100;28594:6;:17:::0;;-1:-1:-1;;;;;;28594:17:0::1;-1:-1:-1::0;;;;;28594:17:0;::::1;::::0;;::::1;::::0;;28627:38:::1;::::0;28594:17;;;;28627:38:::1;::::0;28594:6;28627:38:::1;28036:637:::0;:::o;35395:157::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35506:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;35506:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35395:157::o;35560:108::-;35603:7;35646:13;23793:1;35646:2;:13;:::i;:::-;35630:12;;:30;;;;:::i;29660:198::-;-1:-1:-1;;;;;29750:20:0;;29726:7;29750:20;;;:11;:20;;;;;;;;29746:49;;;-1:-1:-1;;;;;;29779:16:0;;;;;:7;:16;;;;;;;29660:198::o;29746:49::-;-1:-1:-1;;;;;29833:16:0;;;;;;:7;:16;;;;;;29813:37;;:19;:37::i;28681:195::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;28768:6:::1;::::0;;28748:34:::1;::::0;-1:-1:-1;;;;;28768:6:0;;::::1;::::0;28748:19:::1;:34::i;:::-;28810:1;28793:19:::0;;-1:-1:-1;;;;;;28793:19:0::1;::::0;;28828:40:::1;::::0;28810:1;;28828:40:::1;::::0;28810:1;;28828:40:::1;28681:195::o:0;31636:468::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;31717:16;31713:384:::1;;-1:-1:-1::0;;;;;;31750:13:0::1;31766:5;31750:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;31750:21:0::1;::::0;;32393:1548::o;31713:384::-:1;31808:17;::::0;:22;31804:197:::1;;31919:6;31899:17;;31881:15;:35;;;;:::i;:::-;:44;31851:134;;;::::0;-1:-1:-1;;;31851:134:0;;11105:2:1;31851:134:0::1;::::0;::::1;11087:21:1::0;11144:2;11124:18;;;11117:30;-1:-1:-1;;;11163:18:1;;;11156:46;11219:18;;31851:134:0::1;10903:340:1::0;31851:134:0::1;-1:-1:-1::0;;;;;32015:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;32015:20:0::1;32031:4;32015:20;::::0;;32070:15:::1;32050:17;:35:::0;31636:468;;:::o;29866:201::-;29973:4;29995:42;374:10;30019:9;30030:6;29995:9;:42::i;:::-;-1:-1:-1;30055:4:0;;29866:201;-1:-1:-1;;;29866:201:0:o;30977:651::-;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;31048:29:::1;31099:9;31048:61;;31120:16;31157:10;-1:-1:-1::0;;;;;31157:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31139:47:0::1;;31209:4;31229:10;-1:-1:-1::0;;;;;31229:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31139:118;::::0;-1:-1:-1;;;;;;31139:118:0::1;::::0;;;;;;-1:-1:-1;;;;;11734:15:1;;;31139:118:0::1;::::0;::::1;11716:34:1::0;11786:15;;11766:18;;;11759:43;11651:18;;31139:118:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31120:137:::0;-1:-1:-1;;;;;;31272:22:0;::::1;31268:247;;31338:10;-1:-1:-1::0;;;;;31338:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31320:50:0::1;;31397:4;31421:10;-1:-1:-1::0;;;;;31421:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31320:133;::::0;-1:-1:-1;;;;;;31320:133:0::1;::::0;;;;;;-1:-1:-1;;;;;11734:15:1;;;31320:133:0::1;::::0;::::1;11716:34:1::0;11786:15;;11766:18;;;11759:43;11651:18;;31320:133:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31311:6;:142:::0;;-1:-1:-1;;;;;;31311:142:0::1;-1:-1:-1::0;;;;;31311:142:0;;;::::1;::::0;;;::::1;::::0;;31268:247:::1;;;31486:6;:17:::0;;-1:-1:-1;;;;;;31486:17:0::1;-1:-1:-1::0;;;;;31486:17:0;::::1;;::::0;;31268:247:::1;31525:9;:22:::0;;-1:-1:-1;;;;;;31525:22:0::1;-1:-1:-1::0;;;;;31525:22:0;::::1;::::0;;::::1;::::0;;;31558:62:::1;::::0;31575:4:::1;::::0;-1:-1:-1;;31558:8:0::1;:62::i;35798:128::-:0;26244:6;;-1:-1:-1;;;;;26244:6:0;374:10;26244:22;26236:52;;;;-1:-1:-1;;;26236:52:0;;;;;;;:::i;:::-;35874:15:::1;:44:::0;;-1:-1:-1;;;;;;35874:44:0::1;-1:-1:-1::0;;;;;35874:44:0;;;::::1;::::0;;;::::1;::::0;;35798:128::o;30278:343::-;-1:-1:-1;;;;;30406:20:0;;30398:52;;;;-1:-1:-1;;;30398:52:0;;12015:2:1;30398:52:0;;;11997:21:1;12054:2;12034:18;;;12027:30;-1:-1:-1;;;12073:18:1;;;12066:49;12132:18;;30398:52:0;11813:343:1;30398:52:0;-1:-1:-1;;;;;30469:21:0;;30461:53;;;;-1:-1:-1;;;30461:53:0;;12015:2:1;30461:53:0;;;11997:21:1;12054:2;12034:18;;;12027:30;-1:-1:-1;;;12073:18:1;;;12066:49;12132:18;;30461:53:0;11813:343:1;30461:53:0;-1:-1:-1;;;;;30527:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;30580:33;;368:25:1;;;30580:33:0;;341:18:1;30580:33:0;;;;;;;30278:343;;;:::o;43917:899::-;43998:7;;43960;;;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;44068:6;;-1:-1:-1;;;;;44068:6:0;44056:19;;;;:11;:19;;;;;;44016:25;;-1:-1:-1;44056:19:0;;44052:235;;;44104:6;;-1:-1:-1;;;;;44104:6:0;44096:15;;;;:7;:15;;;;;;:25;-1:-1:-1;44096:25:0;:54;;-1:-1:-1;44133:6:0;;-1:-1:-1;;;;;44133:6:0;44125:15;;;;:7;:15;;;;;;:25;-1:-1:-1;44096:54:0;44092:101;;;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;44176:7;;:17;;;;:::i;:::-;44169:24;;;;43917:899;:::o;44092:101::-;44227:6;;-1:-1:-1;;;;;44227:6:0;44219:15;;;;:7;:15;;;;;;44208:26;;;;:::i;:::-;44268:6;;-1:-1:-1;;;;;44268:6:0;44260:15;;;;:7;:15;;;;;;44208:26;;-1:-1:-1;44249:26:0;;;;:::i;:::-;;;44052:235;44301:9;:16;:20;44297:409;;44343:7;44338:357;44360:9;:16;44356:20;;;;44338:357;;;44452:7;44428;:21;44436:9;44446:1;44436:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44436:12:0;44428:21;;;;;;;;;;;;;:31;;:87;;;44508:7;44484;:21;44492:9;44502:1;44492:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44492:12:0;44484:21;;;;;;;;;;;;;:31;44428:87;44402:157;;;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;44542:7;;:17;;;;:::i;:::-;44535:24;;;;;43917:899;:::o;44402:157::-;44598:7;:21;44606:9;44616:1;44606:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44606:12:0;44598:21;;;;;;;;;;;;;44588:31;;:7;:31;:::i;:::-;44578:41;;44658:7;:21;44666:9;44676:1;44666:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44666:12:0;44658:21;;;;;;;;;;;;;44648:31;;:7;:31;:::i;:::-;44638:41;-1:-1:-1;44378:3:0;;;;:::i;:::-;;;;44338:357;;;;44297:409;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;44730:7;;:17;;;;:::i;:::-;44720:7;:27;44716:57;;;23856:13;23793:1;23856:2;:13;:::i;44716:57::-;44791:17;44801:7;44791;:17;:::i;35934:1783::-;36047:4;-1:-1:-1;;;;;36072:18:0;;36064:68;;;;-1:-1:-1;;;36064:68:0;;12543:2:1;36064:68:0;;;12525:21:1;12582:2;12562:18;;;12555:30;12621:34;12601:18;;;12594:62;-1:-1:-1;;;12672:18:1;;;12665:35;12717:19;;36064:68:0;12341:401:1;36064:68:0;-1:-1:-1;;;;;36151:16:0;;36143:64;;;;-1:-1:-1;;;36143:64:0;;12949:2:1;36143:64:0;;;12931:21:1;12988:2;12968:18;;;12961:30;13027:34;13007:18;;;13000:62;-1:-1:-1;;;13078:18:1;;;13071:33;13121:19;;36143:64:0;12747:399:1;36143:64:0;36235:1;36226:6;:10;36218:64;;;;-1:-1:-1;;;36218:64:0;;13353:2:1;36218:64:0;;;13335:21:1;13392:2;13372:18;;;13365:30;13431:34;13411:18;;;13404:62;-1:-1:-1;;;13482:18:1;;;13475:39;13531:19;;36218:64:0;13151:405:1;36218:64:0;-1:-1:-1;;;;;36299:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;36316:11:0;;;;;;:7;:11;;;;;;;;36299:28;36295:295;;;-1:-1:-1;;;;;36349:27:0;;;;;;:21;:27;;;;;;;;36348:28;:58;;;;-1:-1:-1;;;;;;36381:25:0;;;;;;:21;:25;;;;;;;;36380:26;36348:58;36344:235;;;36467:12;;36457:6;:22;;36427:136;;;;-1:-1:-1;;;36427:136:0;;13763:2:1;36427:136:0;;;13745:21:1;13802:2;13782:18;;;13775:30;13841:34;13821:18;;;13814:62;-1:-1:-1;;;13892:18:1;;;13885:38;13940:19;;36427:136:0;13561:404:1;36427:136:0;36618:9;;-1:-1:-1;;;;;36604:24:0;;;36618:9;;36604:24;;;;:40;;-1:-1:-1;;;;;;36633:11:0;;;;;;:7;:11;;;;;;;;36632:12;36604:40;36600:295;;;-1:-1:-1;;;;;36666:25:0;;;;;;:21;:25;;;;;;;;36661:223;;36768:14;;36758:6;36742:13;36752:2;36742:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;36712:156;;;;-1:-1:-1;;;36712:156:0;;14172:2:1;36712:156:0;;;14154:21:1;14211:2;14191:18;;;14184:30;14250:34;14230:18;;;14223:62;-1:-1:-1;;;14301:18:1;;;14294:40;14351:19;;36712:156:0;13970:406:1;36712:156:0;-1:-1:-1;;;;;36941:25:0;;36907:12;36941:25;;;:19;:25;;;;;;36922:4;;36941:25;;;:52;;-1:-1:-1;;;;;;36970:23:0;;;;;;:19;:23;;;;;;;;36941:52;36937:100;;;-1:-1:-1;37020:5:0;36937:100;-1:-1:-1;;;;;37051:11:0;;;;;;:7;:11;;;;;;;;37047:601;;;37084:6;;;;37079:558;;37146:15;37126:17;;37115:8;;:28;;;;:::i;:::-;:46;37111:511;;;37186:28;37217:24;37235:4;37217:9;:24::i;:::-;37186:55;-1:-1:-1;25715:5:0;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;25700:11;;25710:1;25700:11;:::i;:::-;25699:21;;;;:::i;:::-;37268:20;:37;37264:339;;25781:5;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;25765:12;;25775:2;25765:12;:::i;:::-;25764:22;;;;:::i;:::-;37338:20;:34;37334:132;;25781:5;23856:13;23793:1;23856:2;:13;:::i;:::-;23835:35;;:17;:35;:::i;:::-;25765:12;;25775:2;25765:12;:::i;:::-;25764:22;;;;:::i;:::-;37405:33;;37334:132;37492:34;37505:20;37492:12;:34::i;:::-;37564:15;37553:8;:26;37264:339;37163:459;37111:511;37665:44;37683:4;37689:2;37693:6;37701:7;37665:17;:44::i;:::-;37658:51;35934:1783;-1:-1:-1;;;;;35934:1783:0:o;37725:1593::-;26138:6;:13;;-1:-1:-1;;26138:13:0;26147:4;26138:13;;;37808:30:::1;::::0;;::::1;::::0;::::1;::::0;;37831:7:::1;37808:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;37849:56:::1;;37887:7;;;37849:56;37955:4;37935:26;::::0;;;:11:::1;:26;::::0;;;;;;;37970:9:::1;::::0;-1:-1:-1;;;;;37970:9:0::1;37935:46:::0;;;;;;;;-1:-1:-1;;37935:67:0::1;37917:190;;38049:4;38029:26;::::0;;;:11:::1;:26;::::0;;;;;;;38064:9:::1;::::0;-1:-1:-1;;;;;38064:9:0::1;38029:46:::0;;;;;;;-1:-1:-1;;38029:66:0;;37917:190:::1;38119:17;38213:1;38197:6;:12;;;38140:69;;38164:6;:16;;;38141:39;;:20;:39;;;;:::i;:::-;38140:69;;;;:::i;:::-;38139:75;;;;:::i;:::-;38119:95:::0;-1:-1:-1;38225:15:0::1;38243:32;38119:95:::0;38243:20;:32:::1;:::i;:::-;38312:16;::::0;;38326:1:::1;38312:16:::0;;;;;::::1;::::0;;38225:50;;-1:-1:-1;38288:21:0::1;::::0;38312:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;38312:16:0::1;38288:40;;38357:4;38339;38344:1;38339:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38339:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;38383:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;38383:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;38339:7;;38383:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38373:4;38378:1;38373:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38373:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;38412:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;38412:186:0;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;38487:7;;38412:9:::1;::::0;38525:4;;38552::::1;::::0;38572:15:::1;::::0;38412:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;38632:21:0::1;::::0;-1:-1:-1;38611:18:0::1;::::0;-1:-1:-1;38718:7:0;;-1:-1:-1;38692:22:0::1;38705:9:::0;38632:21;38692:22:::1;:::i;:::-;38691:34;;;;:::i;:::-;38664:61:::0;-1:-1:-1;38742:13:0;;38738:328:::1;;38772:9;::::0;:222:::1;::::0;-1:-1:-1;;;38772:222:0;;38849:4:::1;38772:222;::::0;::::1;15839:34:1::0;15889:18;;;15882:34;;;38772:9:0::1;15932:18:1::0;;;15925:34;;;15975:18;;;15968:34;25084:42:0::1;16018:19:1::0;;;16011:44;38964:15:0::1;16071:19:1::0;;;16064:35;-1:-1:-1;;;;;38772:9:0;;::::1;::::0;:25:::1;::::0;38805:16;;15773:19:1;;38772:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;39014:40:0::1;::::0;;16595:25:1;;;16651:2;16636:18;;16629:34;;;39014:40:0::1;::::0;-1:-1:-1;16568:18:1;39014:40:0::1;;;;;;;38738:328;39078:30;39092:16:::0;39078:30;::::1;:::i;:::-;;;39135:6;:16;;;39119:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;39213:15:::1;::::0;::::1;::::0;39188:10;;-1:-1:-1;39213:19:0::1;::::0;39209:102:::1;;39249:15;:24:::0;:50:::1;::::0;-1:-1:-1;;;;;39249:24:0;;::::1;::::0;:50;::::1;;;::::0;39283:15;;39249:24:::1;:50:::0;:24;:50;39283:15;39249:24;:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;39209:102;37797:1521;;;;;;;26162:1;-1:-1:-1::0;26174:6:0;:14;;-1:-1:-1;;26174:14:0;;;37725:1593::o;39627:747::-;39771:4;39788:25;39816:38;39827:4;39833:2;39837:7;39846;39816:10;:38::i;:::-;39899:14;;;;-1:-1:-1;;;;;39883:13:0;;;;;;:7;:13;;;;;;39788:66;;-1:-1:-1;39883:30:0;;;:::i;:::-;-1:-1:-1;;;;;39867:13:0;;;;;;;:7;:13;;;;;;:46;;;;39952:22;;;;39938:11;;;;;;;;;;:36;;39952:22;39938:36;:::i;:::-;-1:-1:-1;;;;;39924:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;39991:17;;;;;:11;:17;;;;;;;39987:89;;;-1:-1:-1;;;;;40041:13:0;;;;;;:7;:13;;;;;;:23;;40057:7;;40041:23;:::i;:::-;-1:-1:-1;;;;;40025:13:0;;;;;;:7;:13;;;;;:39;39987:89;-1:-1:-1;;;;;40090:15:0;;;;;;:11;:15;;;;;;;;40086:98;;;40150:22;;-1:-1:-1;;;;;40136:11:0;;40150:22;40136:11;;;:7;:11;;;;;;:36;;40150:22;40136:36;:::i;:::-;-1:-1:-1;;;;;40122:11:0;;;;;;:7;:11;;;;;:50;40086:98;40214:1;40200:6;:11;;;:15;:34;;;;40233:1;40219:6;:11;;;:15;40200:34;40196:89;;;40262:6;:11;;;40251:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;40196:89:0;40317:2;-1:-1:-1;;;;;40302:42:0;40311:4;-1:-1:-1;;;;;40302:42:0;-1:-1:-1;;;;;;;;;;;40321:6:0;:22;;;40302:42;;;;368:25:1;;356:2;341:18;;222:177;40302:42:0;;;;;;;;-1:-1:-1;40362:4:0;;39627:747;-1:-1:-1;;;;;39627:747:0:o;40382:3527::-;40519:18;;:::i;:::-;40550:25;;:::i;:::-;40607:10;:8;:10::i;:::-;40586:18;;;:31;;;40647:28;;:7;:28;:::i;:::-;40630:14;;;:45;40688:1728;;;;-1:-1:-1;;;;;40944:11:0;;40716:22;40944:11;;;:7;:11;;;;;;40716:22;;;;;;;;24967:5;;40944:11;;40940:591;;;40993:10;:18;;;;;;-1:-1:-1;;;;41198:20:0;;;;;-1:-1:-1;41044:15:0;;;;;;-1:-1:-1;;;;41092:25:0;;;;;-1:-1:-1;;;;41150:15:0;;;;;-1:-1:-1;40940:591:0;;;-1:-1:-1;;;;;41244:13:0;;;;;;:7;:13;;;;;;;;41240:291;;;41295:9;:17;;;;;;-1:-1:-1;;;;41496:19:0;;;;;-1:-1:-1;41345:14:0;;;;;;-1:-1:-1;;;;41392:24:0;;;;;-1:-1:-1;;;;41449:14:0;;;;;-1:-1:-1;41240:291:0;41590:7;41562:24;41572:14;41562:7;:24;:::i;:::-;41561:36;;;;:::i;:::-;41547:11;;;:50;41653:7;41628:21;41638:11;41628:7;:21;:::i;:::-;41627:33;;;;:::i;:::-;41612:12;;;:48;41716:7;41691:21;41701:11;41691:7;:21;:::i;:::-;41690:33;;;;:::i;:::-;41675:12;;;:48;41779:7;41754:21;41764:11;41754:7;:21;:::i;:::-;41753:33;;;;:::i;:::-;41738:12;;;:48;41842:7;41817:21;41827:11;41817:7;:21;:::i;:::-;41816:33;;;;:::i;:::-;41801:12;;;:48;;;42041:12;;;;42005;;;;41969;;;;41934:11;;;;:47;;41969:12;41934:47;:::i;:::-;:83;;;;:::i;:::-;:119;;;;:::i;:::-;:155;;;;:::i;:::-;41906:184;;:7;:184;:::i;:::-;41864:226;;42135:18;;;;42121:11;;;;:32;;42135:18;42121:32;:::i;:::-;42107:11;;;:46;-1:-1:-1;40688:1728:0;;-1:-1:-1;;;;;40688:1728:0;;42200:1;42186:11;;;:15;;;42216:12;;;:16;;;42247:12;;;:16;;;42278:12;;;:16;;;42309:12;;;:16;;;42340:32;;;42389:11;;;:15;40688:1728;42432:12;;;;:16;42428:290;;42506:6;:18;;;42491:6;:12;;;:33;;;;:::i;:::-;42481:4;42465:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;42563:4:0;42543:26;;;;:11;:26;;;;;;;;42539:105;;;42616:12;;;;;42606:4;42590:22;;;;:7;:22;;;;;:38;;42616:12;;42590:22;;:38;;42616:12;;42590:38;:::i;:::-;;;;-1:-1:-1;;42539:105:0;42686:4;-1:-1:-1;;;;;42663:43:0;42672:4;-1:-1:-1;;;;;42663:43:0;-1:-1:-1;;;;;;;;;;;42693:6:0;:12;;;42663:43;;;;368:25:1;;356:2;341:18;;222:177;42663:43:0;;;;;;;;42428:290;42734:12;;;;:16;42730:254;;42799:6;:18;;;42784:6;:12;;;:33;;;;:::i;:::-;25084:42;42767:13;;;;:7;:13;;;:50;;:13;;;:50;;;;;:::i;:::-;;;;-1:-1:-1;;25084:42:0;42836:17;;:11;:17;;;;;;42832:87;;;42891:12;;;;25084:42;42874:13;;;;:7;:13;;;:29;;:13;;;:29;;42891:12;;42874:29;:::i;:::-;;;;-1:-1:-1;;42832:87:0;25084:42;-1:-1:-1;;;;;42938:34:0;42947:4;-1:-1:-1;;;;;42938:34:0;-1:-1:-1;;;;;;;;;;;42959:6:0;:12;;;42938:34;;;;368:25:1;;356:2;341:18;;222:177;42938:34:0;;;;;;;;42730:254;43000:12;;;;:16;42996:278;;43071:6;:18;;;43056:6;:12;;;:33;;;;:::i;:::-;25179:42;43033:19;;;;:7;:19;;;:56;;:19;;;:56;;;;;:::i;:::-;;;;-1:-1:-1;;25179:42:0;43108:23;;:11;:23;;;;;;43104:99;;;43175:12;;;;25179:42;43152:19;;;;:7;:19;;;:35;;:19;;;:35;;43175:12;;43152:35;:::i;:::-;;;;-1:-1:-1;;43104:99:0;25179:42;-1:-1:-1;;;;;43222:40:0;43231:4;-1:-1:-1;;;;;43222:40:0;-1:-1:-1;;;;;;;;;;;43249:6:0;:12;;;43222:40;;;;368:25:1;;356:2;341:18;;222:177;43222:40:0;;;;;;;;42996:278;43290:12;;;;:16;43286:278;;43361:6;:18;;;43346:6;:12;;;:33;;;;:::i;:::-;25274:42;43323:19;;;;:7;:19;;;:56;;:19;;;:56;;;;;:::i;:::-;;;;-1:-1:-1;;25274:42:0;43398:23;;:11;:23;;;;;;43394:99;;;43465:12;;;;25274:42;43442:19;;;;:7;:19;;;:35;;:19;;;:35;;43465:12;;43442:35;:::i;:::-;;;;-1:-1:-1;;43394:99:0;25274:42;-1:-1:-1;;;;;43512:40:0;43521:4;-1:-1:-1;;;;;43512:40:0;-1:-1:-1;;;;;;;;;;;43539:6:0;:12;;;43512:40;;;;368:25:1;;356:2;341:18;;222:177;43512:40:0;;;;;;;;43286:278;43857:6;:18;;;43842:6;:12;;;:33;;;;:::i;:::-;43802:6;:18;;;43787:6;:12;;;:33;;;;:::i;:::-;43747:6;:18;;;43732:6;:12;;;:33;;;;:::i;:::-;43692:6;:18;;;43677:6;:12;;;:33;;;;:::i;:::-;43645:6;:11;;;:66;;;;:::i;:::-;:121;;;;:::i;:::-;:176;;;;:::i;:::-;:231;;;;:::i;:::-;43614:6;:14;;;:263;;;;:::i;:::-;43576:22;;;:301;:22;40382:3527;-1:-1:-1;;;;;40382:3527:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;404:597:1:-;516:4;545:2;574;563:9;556:21;606:6;600:13;649:6;644:2;633:9;629:18;622:34;674:1;684:140;698:6;695:1;692:13;684:140;;;793:14;;;789:23;;783:30;759:17;;;778:2;755:26;748:66;713:10;;684:140;;;842:6;839:1;836:13;833:91;;;912:1;907:2;898:6;887:9;883:22;879:31;872:42;833:91;-1:-1:-1;985:2:1;964:15;-1:-1:-1;;960:29:1;945:45;;;;992:2;941:54;;404:597;-1:-1:-1;;;404:597:1:o;1240:131::-;-1:-1:-1;;;;;1315:31:1;;1305:42;;1295:70;;1361:1;1358;1351:12;1295:70;1240:131;:::o;1376:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1376:315:1:o;1888:416::-;1953:6;1961;2014:2;2002:9;1993:7;1989:23;1985:32;1982:52;;;2030:1;2027;2020:12;1982:52;2069:9;2056:23;2088:31;2113:5;2088:31;:::i;:::-;2138:5;-1:-1:-1;2195:2:1;2180:18;;2167:32;2237:15;;2230:23;2218:36;;2208:64;;2268:1;2265;2258:12;2208:64;2291:7;2281:17;;;1888:416;;;;;:::o;2309:456::-;2386:6;2394;2402;2455:2;2443:9;2434:7;2430:23;2426:32;2423:52;;;2471:1;2468;2461:12;2423:52;2510:9;2497:23;2529:31;2554:5;2529:31;:::i;:::-;2579:5;-1:-1:-1;2636:2:1;2621:18;;2608:32;2649:33;2608:32;2649:33;:::i;:::-;2309:456;;2701:7;;-1:-1:-1;;;2755:2:1;2740:18;;;;2727:32;;2309:456::o;2770:248::-;2838:6;2846;2899:2;2887:9;2878:7;2874:23;2870:32;2867:52;;;2915:1;2912;2905:12;2867:52;-1:-1:-1;;2938:23:1;;;3008:2;2993:18;;;2980:32;;-1:-1:-1;2770:248:1:o;3247:180::-;3306:6;3359:2;3347:9;3338:7;3334:23;3330:32;3327:52;;;3375:1;3372;3365:12;3327:52;-1:-1:-1;3398:23:1;;3247:180;-1:-1:-1;3247:180:1:o;3621:247::-;3680:6;3733:2;3721:9;3712:7;3708:23;3704:32;3701:52;;;3749:1;3746;3739:12;3701:52;3788:9;3775:23;3807:31;3832:5;3807:31;:::i;4929:388::-;4997:6;5005;5058:2;5046:9;5037:7;5033:23;5029:32;5026:52;;;5074:1;5071;5064:12;5026:52;5113:9;5100:23;5132:31;5157:5;5132:31;:::i;:::-;5182:5;-1:-1:-1;5239:2:1;5224:18;;5211:32;5252:33;5211:32;5252:33;:::i;5582:127::-;5643:10;5638:3;5634:20;5631:1;5624:31;5674:4;5671:1;5664:15;5698:4;5695:1;5688:15;5714:422;5803:1;5846:5;5803:1;5860:270;5881:7;5871:8;5868:21;5860:270;;;5940:4;5936:1;5932:6;5928:17;5922:4;5919:27;5916:53;;;5949:18;;:::i;:::-;5999:7;5989:8;5985:22;5982:55;;;6019:16;;;;5982:55;6098:22;;;;6058:15;;;;5860:270;;;5864:3;5714:422;;;;;:::o;6141:806::-;6190:5;6220:8;6210:80;;-1:-1:-1;6261:1:1;6275:5;;6210:80;6309:4;6299:76;;-1:-1:-1;6346:1:1;6360:5;;6299:76;6391:4;6409:1;6404:59;;;;6477:1;6472:130;;;;6384:218;;6404:59;6434:1;6425:10;;6448:5;;;6472:130;6509:3;6499:8;6496:17;6493:43;;;6516:18;;:::i;:::-;-1:-1:-1;;6572:1:1;6558:16;;6587:5;;6384:218;;6686:2;6676:8;6673:16;6667:3;6661:4;6658:13;6654:36;6648:2;6638:8;6635:16;6630:2;6624:4;6621:12;6617:35;6614:77;6611:159;;;-1:-1:-1;6723:19:1;;;6755:5;;6611:159;6802:34;6827:8;6821:4;6802:34;:::i;:::-;6872:6;6868:1;6864:6;6860:19;6851:7;6848:32;6845:58;;;6883:18;;:::i;:::-;6921:20;;6141:806;-1:-1:-1;;;6141:806:1:o;6952:140::-;7010:5;7039:47;7080:4;7070:8;7066:19;7060:4;7039:47;:::i;7097:168::-;7137:7;7203:1;7199;7195:6;7191:14;7188:1;7185:21;7180:1;7173:9;7166:17;7162:45;7159:71;;;7210:18;;:::i;:::-;-1:-1:-1;7250:9:1;;7097:168::o;7270:217::-;7310:1;7336;7326:132;;7380:10;7375:3;7371:20;7368:1;7361:31;7415:4;7412:1;7405:15;7443:4;7440:1;7433:15;7326:132;-1:-1:-1;7472:9:1;;7270:217::o;7492:341::-;7694:2;7676:21;;;7733:2;7713:18;;;7706:30;-1:-1:-1;;;7767:2:1;7752:18;;7745:47;7824:2;7809:18;;7492:341::o;8552:127::-;8613:10;8608:3;8604:20;8601:1;8594:31;8644:4;8641:1;8634:15;8668:4;8665:1;8658:15;8684:127;8745:10;8740:3;8736:20;8733:1;8726:31;8776:4;8773:1;8766:15;8800:4;8797:1;8790:15;8816:125;8856:4;8884:1;8881;8878:8;8875:34;;;8889:18;;:::i;:::-;-1:-1:-1;8926:9:1;;8816:125::o;8946:135::-;8985:3;-1:-1:-1;;9006:17:1;;9003:43;;;9026:18;;:::i;:::-;-1:-1:-1;9073:1:1;9062:13;;8946:135::o;9505:128::-;9545:3;9576:1;9572:6;9569:1;9566:13;9563:39;;;9582:18;;:::i;:::-;-1:-1:-1;9618:9:1;;9505:128::o;10473:425::-;10675:2;10657:21;;;10714:2;10694:18;;;10687:30;10753:34;10748:2;10733:18;;10726:62;10824:31;10819:2;10804:18;;10797:59;10888:3;10873:19;;10473:425::o;11248:251::-;11318:6;11371:2;11359:9;11350:7;11346:23;11342:32;11339:52;;;11387:1;11384;11377:12;11339:52;11419:9;11413:16;11438:31;11463:5;11438:31;:::i;12161:175::-;12198:3;12242:4;12235:5;12231:16;12271:4;12262:7;12259:17;12256:43;;;12279:18;;:::i;:::-;12328:1;12315:15;;12161:175;-1:-1:-1;;12161:175:1:o;14513:980::-;14775:4;14823:3;14812:9;14808:19;14854:6;14843:9;14836:25;14880:2;14918:6;14913:2;14902:9;14898:18;14891:34;14961:3;14956:2;14945:9;14941:18;14934:31;14985:6;15020;15014:13;15051:6;15043;15036:22;15089:3;15078:9;15074:19;15067:26;;15128:2;15120:6;15116:15;15102:29;;15149:1;15159:195;15173:6;15170:1;15167:13;15159:195;;;15238:13;;-1:-1:-1;;;;;15234:39:1;15222:52;;15329:15;;;;15294:12;;;;15270:1;15188:9;15159:195;;;-1:-1:-1;;;;;;;15410:32:1;;;;15405:2;15390:18;;15383:60;-1:-1:-1;;;15474:3:1;15459:19;15452:35;15371:3;14513:980;-1:-1:-1;;;14513:980:1:o;16110:306::-;16198:6;16206;16214;16267:2;16255:9;16246:7;16242:23;16238:32;16235:52;;;16283:1;16280;16273:12;16235:52;16312:9;16306:16;16296:26;;16362:2;16351:9;16347:18;16341:25;16331:35;;16406:2;16395:9;16391:18;16385:25;16375:35;;16110:306;;;;;:::o;16674:217::-;16713:4;16742:6;16798:10;;;;16768;;16820:12;;;16817:38;;;16835:18;;:::i;:::-;16872:13;;16674:217;-1:-1:-1;;;16674:217:1:o

Swarm Source

ipfs://11c0f84d5539fce0db1b1c14ce068a044769e6c3606f0b6a4053881cdd232ec9
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.