ETH Price: $3,410.44 (-1.00%)
Gas: 2 Gwei

Token

Ponzi Panthers (PONZI)
 

Overview

Max Total Supply

4,949 PONZI

Holders

2,463

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
tryptomine.eth
Balance
1 PONZI
0x2213E06519E54F23749bE0D80284dD86B6Bc3375
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PonziPanthers

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-27
*/

// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}


// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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);
            }
        }
    }
}


// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


pragma solidity ^0.8.0;

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}



// File: PonziPanthers.sol

pragma solidity ^0.8.4;

contract PonziPanthers is ERC721Enumerable, Ownable {
    using Strings for uint256;
    using Address for address;
    using Counters for Counters.Counter;

    uint256 public maxSupply = 4949;
    Counters.Counter private _tokenIds;
    uint256 public totalNFT;
    uint256 public totalMint;

    string public baseURI;
    string public notRevealedUri;
    string public baseExtension = ".json";

    bool public isBurnEnabled = false;
    bool public paused = false;
    bool public revealed = false;

    constructor() ERC721("Ponzi Panthers", "PONZI") {}

    function changePauseState() public onlyOwner {
        paused = !paused;
    }

    function setBaseURI(string calldata _tokenBaseURI) external onlyOwner {
        baseURI = _tokenBaseURI;
    }

    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }

    function reveal() public onlyOwner {
        revealed = true;
    }

    function setIsBurnEnabled(bool _isBurnEnabled) external onlyOwner {
        isBurnEnabled = _isBurnEnabled;
    }

    function airdropPanthers(address[] calldata _addresses) external onlyOwner {
      uint i;
      uint256 _newItemId;
      for (i = 0; i < _addresses.length; i++) {
        _tokenIds.increment();
        _newItemId = _tokenIds.current();
        _safeMint(_addresses[i], _newItemId);
        totalNFT = totalNFT + 1;
        totalMint = totalMint + 1;
      }
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        if (revealed == false) {
          string memory unrev = notRevealedUri;
          return bytes(unrev).length > 0 ? string(abi.encodePacked(unrev, "/", tokenId.toString(), baseExtension)) : "";
        }

        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, "/", tokenId.toString(), baseExtension)) : "";
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function changeTotalSupply(uint256 _newSupply) public onlyOwner {
        maxSupply = _newSupply;
    }

    function burn(uint256 tokenId) external {
        require(isBurnEnabled, "Burning disabled!");
        require(_isApprovedOrOwner(msg.sender, tokenId), "Burn caller is not owner nor approved!");
        _burn(tokenId);
        totalNFT = totalNFT - 1;
    }

    function tokensMinted() public view returns (uint256) {
      return _tokenIds.current();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"airdropPanthers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changePauseState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"changeTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBurnEnabled","type":"bool"}],"name":"setIsBurnEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052611355600b556040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060119080519060200190620000579291906200024b565b506000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff021916908315150217905550348015620000b657600080fd5b506040518060400160405280600e81526020017f506f6e7a692050616e74686572730000000000000000000000000000000000008152506040518060400160405280600581526020017f504f4e5a4900000000000000000000000000000000000000000000000000000081525081600090805190602001906200013b9291906200024b565b508060019080519060200190620001549291906200024b565b505050620001776200016b6200017d60201b60201c565b6200018560201b60201c565b62000360565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025990620002fb565b90600052602060002090601f0160209004810192826200027d5760008555620002c9565b82601f106200029857805160ff1916838001178555620002c9565b82800160010185558215620002c9579182015b82811115620002c8578251825591602001919060010190620002ab565b5b509050620002d89190620002dc565b5090565b5b80821115620002f7576000816000905550600101620002dd565b5090565b600060028204905060018216806200031457607f821691505b602082108114156200032b576200032a62000331565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6144ff80620003706000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80635c975abb11610130578063a22cb465116100b8578063c87b56dd1161007c578063c87b56dd14610607578063d5abeb0114610637578063e985e9c514610655578063f2c4ce1e14610685578063f2fde38b146106a157610226565b8063a22cb4651461058b578063a475b5dd146105a7578063b88d4fde146105b1578063be9207c1146105cd578063c6682862146105e957610226565b80636e0e5b19116100ff5780636e0e5b19146104f957806370a0823114610515578063715018a6146105455780638da5cb5b1461054f57806395d89b411461056d57610226565b80635c975abb1461046f5780636352211e1461048d5780636c0360eb146104bd5780636de9f32b146104db57610226565b80632f745c59116101b35780634f6ccce7116101825780634f6ccce7146103cb57806351830227146103fb57806352e973261461041957806355f804b31461043557806359a7715a1461045157610226565b80632f745c591461035957806342842e0e1461038957806342966c68146103a557806346e79ffc146103c157610226565b8063081812fc116101fa578063081812fc146102b5578063081c8c44146102e5578063095ea7b31461030357806318160ddd1461031f57806323b872dd1461033d57610226565b80624563791461022b57806301ffc9a71461024957806306fdde031461027957806307ebec2714610297575b600080fd5b6102336106bd565b6040516102409190613a45565b60405180910390f35b610263600480360381019061025e919061319a565b6106c3565b6040516102709190613788565b60405180910390f35b61028161073d565b60405161028e91906137a3565b60405180910390f35b61029f6107cf565b6040516102ac9190613788565b60405180910390f35b6102cf60048036038101906102ca919061328a565b6107e2565b6040516102dc9190613721565b60405180910390f35b6102ed610867565b6040516102fa91906137a3565b60405180910390f35b61031d600480360381019061031891906130e0565b6108f5565b005b610327610a0d565b6040516103349190613a45565b60405180910390f35b61035760048036038101906103529190612fca565b610a1a565b005b610373600480360381019061036e91906130e0565b610a7a565b6040516103809190613a45565b60405180910390f35b6103a3600480360381019061039e9190612fca565b610b1f565b005b6103bf60048036038101906103ba919061328a565b610b3f565b005b6103c9610bf8565b005b6103e560048036038101906103e0919061328a565b610ca0565b6040516103f29190613a45565b60405180910390f35b610403610d11565b6040516104109190613788565b60405180910390f35b610433600480360381019061042e919061328a565b610d24565b005b61044f600480360381019061044a91906131f4565b610daa565b005b610459610e3c565b6040516104669190613a45565b60405180910390f35b610477610e42565b6040516104849190613788565b60405180910390f35b6104a760048036038101906104a2919061328a565b610e55565b6040516104b49190613721565b60405180910390f35b6104c5610f07565b6040516104d291906137a3565b60405180910390f35b6104e3610f95565b6040516104f09190613a45565b60405180910390f35b610513600480360381019061050e919061316d565b610fa6565b005b61052f600480360381019061052a9190612f5d565b61103f565b60405161053c9190613a45565b60405180910390f35b61054d6110f7565b005b61055761117f565b6040516105649190613721565b60405180910390f35b6105756111a9565b60405161058291906137a3565b60405180910390f35b6105a560048036038101906105a091906130a0565b61123b565b005b6105af611251565b005b6105cb60048036038101906105c6919061301d565b6112ea565b005b6105e760048036038101906105e29190613120565b61134c565b005b6105f1611465565b6040516105fe91906137a3565b60405180910390f35b610621600480360381019061061c919061328a565b6114f3565b60405161062e91906137a3565b60405180910390f35b61063f61169d565b60405161064c9190613a45565b60405180910390f35b61066f600480360381019061066a9190612f8a565b6116a3565b60405161067c9190613788565b60405180910390f35b61069f600480360381019061069a9190613241565b611737565b005b6106bb60048036038101906106b69190612f5d565b6117cd565b005b600d5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107365750610735826118c5565b5b9050919050565b60606000805461074c90613cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461077890613cb0565b80156107c55780601f1061079a576101008083540402835291602001916107c5565b820191906000526020600020905b8154815290600101906020018083116107a857829003601f168201915b5050505050905090565b601260009054906101000a900460ff1681565b60006107ed826119a7565b61082c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082390613945565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6010805461087490613cb0565b80601f01602080910402602001604051908101604052809291908181526020018280546108a090613cb0565b80156108ed5780601f106108c2576101008083540402835291602001916108ed565b820191906000526020600020905b8154815290600101906020018083116108d057829003601f168201915b505050505081565b600061090082610e55565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610968906139c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610990611a13565b73ffffffffffffffffffffffffffffffffffffffff1614806109bf57506109be816109b9611a13565b6116a3565b5b6109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906138a5565b60405180910390fd5b610a088383611a1b565b505050565b6000600880549050905090565b610a2b610a25611a13565b82611ad4565b610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a61906139e5565b60405180910390fd5b610a75838383611bb2565b505050565b6000610a858361103f565b8210610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd906137c5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3a838383604051806020016040528060008152506112ea565b505050565b601260009054906101000a900460ff16610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590613905565b60405180910390fd5b610b983382611ad4565b610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90613a25565b60405180910390fd5b610be081611e0e565b6001600d54610bef9190613bc6565b600d8190555050565b610c00611a13565b73ffffffffffffffffffffffffffffffffffffffff16610c1e61117f565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90613965565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b6000610caa610a0d565b8210610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613a05565b60405180910390fd5b60088281548110610cff57610cfe613e49565b5b90600052602060002001549050919050565b601260029054906101000a900460ff1681565b610d2c611a13565b73ffffffffffffffffffffffffffffffffffffffff16610d4a61117f565b73ffffffffffffffffffffffffffffffffffffffff1614610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613965565b60405180910390fd5b80600b8190555050565b610db2611a13565b73ffffffffffffffffffffffffffffffffffffffff16610dd061117f565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613965565b60405180910390fd5b8181600f9190610e37929190612c3f565b505050565b600e5481565b601260019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef5906138e5565b60405180910390fd5b80915050919050565b600f8054610f1490613cb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4090613cb0565b8015610f8d5780601f10610f6257610100808354040283529160200191610f8d565b820191906000526020600020905b815481529060010190602001808311610f7057829003601f168201915b505050505081565b6000610fa1600c611f1f565b905090565b610fae611a13565b73ffffffffffffffffffffffffffffffffffffffff16610fcc61117f565b73ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613965565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906138c5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ff611a13565b73ffffffffffffffffffffffffffffffffffffffff1661111d61117f565b73ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613965565b60405180910390fd5b61117d6000611f2d565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111b890613cb0565b80601f01602080910402602001604051908101604052809291908181526020018280546111e490613cb0565b80156112315780601f1061120657610100808354040283529160200191611231565b820191906000526020600020905b81548152906001019060200180831161121457829003601f168201915b5050505050905090565b61124d611246611a13565b8383611ff3565b5050565b611259611a13565b73ffffffffffffffffffffffffffffffffffffffff1661127761117f565b73ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613965565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b6112fb6112f5611a13565b83611ad4565b61133a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611331906139e5565b60405180910390fd5b61134684848484612160565b50505050565b611354611a13565b73ffffffffffffffffffffffffffffffffffffffff1661137261117f565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90613965565b60405180910390fd5b600080600091505b8383905082101561145f576113e5600c6121bc565b6113ef600c611f1f565b905061142284848481811061140757611406613e49565b5b905060200201602081019061141c9190612f5d565b826121d2565b6001600d546114319190613b3f565b600d819055506001600e546114469190613b3f565b600e81905550818061145790613d13565b9250506113d0565b50505050565b6011805461147290613cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461149e90613cb0565b80156114eb5780601f106114c0576101008083540402835291602001916114eb565b820191906000526020600020905b8154815290600101906020018083116114ce57829003601f168201915b505050505081565b60606114fe826119a7565b61153d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611534906139a5565b60405180910390fd5b60001515601260029054906101000a900460ff161515141561163c5760006010805461156890613cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461159490613cb0565b80156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b5050505050905060008151116116065760405180602001604052806000815250611634565b80611610846121f0565b6011604051602001611624939291906136e5565b6040516020818303038152906040525b915050611698565b6000611646612351565b905060008151116116665760405180602001604052806000815250611694565b80611670846121f0565b6011604051602001611684939291906136e5565b6040516020818303038152906040525b9150505b919050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61173f611a13565b73ffffffffffffffffffffffffffffffffffffffff1661175d61117f565b73ffffffffffffffffffffffffffffffffffffffff16146117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117aa90613965565b60405180910390fd5b80601090805190602001906117c9929190612cc5565b5050565b6117d5611a13565b73ffffffffffffffffffffffffffffffffffffffff166117f361117f565b73ffffffffffffffffffffffffffffffffffffffff1614611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090613965565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613805565b60405180910390fd5b6118c281611f2d565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061199057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119a0575061199f826123e3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a8e83610e55565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611adf826119a7565b611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1590613885565b60405180910390fd5b6000611b2983610e55565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b9857508373ffffffffffffffffffffffffffffffffffffffff16611b80846107e2565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ba95750611ba881856116a3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bd282610e55565b73ffffffffffffffffffffffffffffffffffffffff1614611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90613985565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613845565b60405180910390fd5b611ca383838361244d565b611cae600082611a1b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cfe9190613bc6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d559190613b3f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611e1982610e55565b9050611e278160008461244d565b611e32600083611a1b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e829190613bc6565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600081600001549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205990613865565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121539190613788565b60405180910390a3505050565b61216b848484611bb2565b61217784848484612561565b6121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad906137e5565b60405180910390fd5b50505050565b6001816000016000828254019250508190555050565b6121ec8282604051806020016040528060008152506126f8565b5050565b60606000821415612238576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061234c565b600082905060005b6000821461226a57808061225390613d13565b915050600a826122639190613b95565b9150612240565b60008167ffffffffffffffff81111561228657612285613e78565b5b6040519080825280601f01601f1916602001820160405280156122b85781602001600182028036833780820191505090505b5090505b60008514612345576001826122d19190613bc6565b9150600a856122e09190613d5c565b60306122ec9190613b3f565b60f81b81838151811061230257612301613e49565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561233e9190613b95565b94506122bc565b8093505050505b919050565b6060600f805461236090613cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461238c90613cb0565b80156123d95780601f106123ae576101008083540402835291602001916123d9565b820191906000526020600020905b8154815290600101906020018083116123bc57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612458838383612753565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561249b5761249681612758565b6124da565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124d9576124d883826127a1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561251d576125188161290e565b61255c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461255b5761255a82826129df565b5b5b505050565b60006125828473ffffffffffffffffffffffffffffffffffffffff16612a5e565b156126eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125ab611a13565b8786866040518563ffffffff1660e01b81526004016125cd949392919061373c565b602060405180830381600087803b1580156125e757600080fd5b505af192505050801561261857506040513d601f19601f8201168201806040525081019061261591906131c7565b60015b61269b573d8060008114612648576040519150601f19603f3d011682016040523d82523d6000602084013e61264d565b606091505b50600081511415612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a906137e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126f0565b600190505b949350505050565b6127028383612a71565b61270f6000848484612561565b61274e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612745906137e5565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016127ae8461103f565b6127b89190613bc6565b905060006007600084815260200190815260200160002054905081811461289d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129229190613bc6565b905060006009600084815260200190815260200160002054905060006008838154811061295257612951613e49565b5b90600052602060002001549050806008838154811061297457612973613e49565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806129c3576129c2613e1a565b5b6001900381819060005260206000200160009055905550505050565b60006129ea8361103f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890613925565b60405180910390fd5b612aea816119a7565b15612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190613825565b60405180910390fd5b612b366000838361244d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b869190613b3f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612c4b90613cb0565b90600052602060002090601f016020900481019282612c6d5760008555612cb4565b82601f10612c8657803560ff1916838001178555612cb4565b82800160010185558215612cb4579182015b82811115612cb3578235825591602001919060010190612c98565b5b509050612cc19190612d4b565b5090565b828054612cd190613cb0565b90600052602060002090601f016020900481019282612cf35760008555612d3a565b82601f10612d0c57805160ff1916838001178555612d3a565b82800160010185558215612d3a579182015b82811115612d39578251825591602001919060010190612d1e565b5b509050612d479190612d4b565b5090565b5b80821115612d64576000816000905550600101612d4c565b5090565b6000612d7b612d7684613a85565b613a60565b905082815260208101848484011115612d9757612d96613eb6565b5b612da2848285613c6e565b509392505050565b6000612dbd612db884613ab6565b613a60565b905082815260208101848484011115612dd957612dd8613eb6565b5b612de4848285613c6e565b509392505050565b600081359050612dfb8161446d565b92915050565b60008083601f840112612e1757612e16613eac565b5b8235905067ffffffffffffffff811115612e3457612e33613ea7565b5b602083019150836020820283011115612e5057612e4f613eb1565b5b9250929050565b600081359050612e6681614484565b92915050565b600081359050612e7b8161449b565b92915050565b600081519050612e908161449b565b92915050565b600082601f830112612eab57612eaa613eac565b5b8135612ebb848260208601612d68565b91505092915050565b60008083601f840112612eda57612ed9613eac565b5b8235905067ffffffffffffffff811115612ef757612ef6613ea7565b5b602083019150836001820283011115612f1357612f12613eb1565b5b9250929050565b600082601f830112612f2f57612f2e613eac565b5b8135612f3f848260208601612daa565b91505092915050565b600081359050612f57816144b2565b92915050565b600060208284031215612f7357612f72613ec0565b5b6000612f8184828501612dec565b91505092915050565b60008060408385031215612fa157612fa0613ec0565b5b6000612faf85828601612dec565b9250506020612fc085828601612dec565b9150509250929050565b600080600060608486031215612fe357612fe2613ec0565b5b6000612ff186828701612dec565b935050602061300286828701612dec565b925050604061301386828701612f48565b9150509250925092565b6000806000806080858703121561303757613036613ec0565b5b600061304587828801612dec565b945050602061305687828801612dec565b935050604061306787828801612f48565b925050606085013567ffffffffffffffff81111561308857613087613ebb565b5b61309487828801612e96565b91505092959194509250565b600080604083850312156130b7576130b6613ec0565b5b60006130c585828601612dec565b92505060206130d685828601612e57565b9150509250929050565b600080604083850312156130f7576130f6613ec0565b5b600061310585828601612dec565b925050602061311685828601612f48565b9150509250929050565b6000806020838503121561313757613136613ec0565b5b600083013567ffffffffffffffff81111561315557613154613ebb565b5b61316185828601612e01565b92509250509250929050565b60006020828403121561318357613182613ec0565b5b600061319184828501612e57565b91505092915050565b6000602082840312156131b0576131af613ec0565b5b60006131be84828501612e6c565b91505092915050565b6000602082840312156131dd576131dc613ec0565b5b60006131eb84828501612e81565b91505092915050565b6000806020838503121561320b5761320a613ec0565b5b600083013567ffffffffffffffff81111561322957613228613ebb565b5b61323585828601612ec4565b92509250509250929050565b60006020828403121561325757613256613ec0565b5b600082013567ffffffffffffffff81111561327557613274613ebb565b5b61328184828501612f1a565b91505092915050565b6000602082840312156132a05761329f613ec0565b5b60006132ae84828501612f48565b91505092915050565b6132c081613bfa565b82525050565b6132cf81613c0c565b82525050565b60006132e082613afc565b6132ea8185613b12565b93506132fa818560208601613c7d565b61330381613ec5565b840191505092915050565b600061331982613b07565b6133238185613b23565b9350613333818560208601613c7d565b61333c81613ec5565b840191505092915050565b600061335282613b07565b61335c8185613b34565b935061336c818560208601613c7d565b80840191505092915050565b6000815461338581613cb0565b61338f8186613b34565b945060018216600081146133aa57600181146133bb576133ee565b60ff198316865281860193506133ee565b6133c485613ae7565b60005b838110156133e6578154818901526001820191506020810190506133c7565b838801955050505b50505092915050565b6000613404602b83613b23565b915061340f82613ed6565b604082019050919050565b6000613427603283613b23565b915061343282613f25565b604082019050919050565b600061344a602683613b23565b915061345582613f74565b604082019050919050565b600061346d601c83613b23565b915061347882613fc3565b602082019050919050565b6000613490602483613b23565b915061349b82613fec565b604082019050919050565b60006134b3601983613b23565b91506134be8261403b565b602082019050919050565b60006134d6602c83613b23565b91506134e182614064565b604082019050919050565b60006134f9603883613b23565b9150613504826140b3565b604082019050919050565b600061351c602a83613b23565b915061352782614102565b604082019050919050565b600061353f602983613b23565b915061354a82614151565b604082019050919050565b6000613562601183613b23565b915061356d826141a0565b602082019050919050565b6000613585602083613b23565b9150613590826141c9565b602082019050919050565b60006135a8602c83613b23565b91506135b3826141f2565b604082019050919050565b60006135cb602083613b23565b91506135d682614241565b602082019050919050565b60006135ee602983613b23565b91506135f98261426a565b604082019050919050565b6000613611602f83613b23565b915061361c826142b9565b604082019050919050565b6000613634602183613b23565b915061363f82614308565b604082019050919050565b6000613657603183613b23565b915061366282614357565b604082019050919050565b600061367a602c83613b23565b9150613685826143a6565b604082019050919050565b600061369d602683613b23565b91506136a8826143f5565b604082019050919050565b60006136c0600183613b34565b91506136cb82614444565b600182019050919050565b6136df81613c64565b82525050565b60006136f18286613347565b91506136fc826136b3565b91506137088285613347565b91506137148284613378565b9150819050949350505050565b600060208201905061373660008301846132b7565b92915050565b600060808201905061375160008301876132b7565b61375e60208301866132b7565b61376b60408301856136d6565b818103606083015261377d81846132d5565b905095945050505050565b600060208201905061379d60008301846132c6565b92915050565b600060208201905081810360008301526137bd818461330e565b905092915050565b600060208201905081810360008301526137de816133f7565b9050919050565b600060208201905081810360008301526137fe8161341a565b9050919050565b6000602082019050818103600083015261381e8161343d565b9050919050565b6000602082019050818103600083015261383e81613460565b9050919050565b6000602082019050818103600083015261385e81613483565b9050919050565b6000602082019050818103600083015261387e816134a6565b9050919050565b6000602082019050818103600083015261389e816134c9565b9050919050565b600060208201905081810360008301526138be816134ec565b9050919050565b600060208201905081810360008301526138de8161350f565b9050919050565b600060208201905081810360008301526138fe81613532565b9050919050565b6000602082019050818103600083015261391e81613555565b9050919050565b6000602082019050818103600083015261393e81613578565b9050919050565b6000602082019050818103600083015261395e8161359b565b9050919050565b6000602082019050818103600083015261397e816135be565b9050919050565b6000602082019050818103600083015261399e816135e1565b9050919050565b600060208201905081810360008301526139be81613604565b9050919050565b600060208201905081810360008301526139de81613627565b9050919050565b600060208201905081810360008301526139fe8161364a565b9050919050565b60006020820190508181036000830152613a1e8161366d565b9050919050565b60006020820190508181036000830152613a3e81613690565b9050919050565b6000602082019050613a5a60008301846136d6565b92915050565b6000613a6a613a7b565b9050613a768282613ce2565b919050565b6000604051905090565b600067ffffffffffffffff821115613aa057613a9f613e78565b5b613aa982613ec5565b9050602081019050919050565b600067ffffffffffffffff821115613ad157613ad0613e78565b5b613ada82613ec5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b4a82613c64565b9150613b5583613c64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b8a57613b89613d8d565b5b828201905092915050565b6000613ba082613c64565b9150613bab83613c64565b925082613bbb57613bba613dbc565b5b828204905092915050565b6000613bd182613c64565b9150613bdc83613c64565b925082821015613bef57613bee613d8d565b5b828203905092915050565b6000613c0582613c44565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c9b578082015181840152602081019050613c80565b83811115613caa576000848401525b50505050565b60006002820490506001821680613cc857607f821691505b60208210811415613cdc57613cdb613deb565b5b50919050565b613ceb82613ec5565b810181811067ffffffffffffffff82111715613d0a57613d09613e78565b5b80604052505050565b6000613d1e82613c64565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d5157613d50613d8d565b5b600182019050919050565b6000613d6782613c64565b9150613d7283613c64565b925082613d8257613d81613dbc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4275726e696e672064697361626c656421000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4275726e2063616c6c6572206973206e6f74206f776e6572206e6f722061707060008201527f726f766564210000000000000000000000000000000000000000000000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61447681613bfa565b811461448157600080fd5b50565b61448d81613c0c565b811461449857600080fd5b50565b6144a481613c18565b81146144af57600080fd5b50565b6144bb81613c64565b81146144c657600080fd5b5056fea264697066735822122080408c5eb3e2e786c763fb99bd2e402b4c8bd2e0021771dd2d672ffc3847901e64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102265760003560e01c80635c975abb11610130578063a22cb465116100b8578063c87b56dd1161007c578063c87b56dd14610607578063d5abeb0114610637578063e985e9c514610655578063f2c4ce1e14610685578063f2fde38b146106a157610226565b8063a22cb4651461058b578063a475b5dd146105a7578063b88d4fde146105b1578063be9207c1146105cd578063c6682862146105e957610226565b80636e0e5b19116100ff5780636e0e5b19146104f957806370a0823114610515578063715018a6146105455780638da5cb5b1461054f57806395d89b411461056d57610226565b80635c975abb1461046f5780636352211e1461048d5780636c0360eb146104bd5780636de9f32b146104db57610226565b80632f745c59116101b35780634f6ccce7116101825780634f6ccce7146103cb57806351830227146103fb57806352e973261461041957806355f804b31461043557806359a7715a1461045157610226565b80632f745c591461035957806342842e0e1461038957806342966c68146103a557806346e79ffc146103c157610226565b8063081812fc116101fa578063081812fc146102b5578063081c8c44146102e5578063095ea7b31461030357806318160ddd1461031f57806323b872dd1461033d57610226565b80624563791461022b57806301ffc9a71461024957806306fdde031461027957806307ebec2714610297575b600080fd5b6102336106bd565b6040516102409190613a45565b60405180910390f35b610263600480360381019061025e919061319a565b6106c3565b6040516102709190613788565b60405180910390f35b61028161073d565b60405161028e91906137a3565b60405180910390f35b61029f6107cf565b6040516102ac9190613788565b60405180910390f35b6102cf60048036038101906102ca919061328a565b6107e2565b6040516102dc9190613721565b60405180910390f35b6102ed610867565b6040516102fa91906137a3565b60405180910390f35b61031d600480360381019061031891906130e0565b6108f5565b005b610327610a0d565b6040516103349190613a45565b60405180910390f35b61035760048036038101906103529190612fca565b610a1a565b005b610373600480360381019061036e91906130e0565b610a7a565b6040516103809190613a45565b60405180910390f35b6103a3600480360381019061039e9190612fca565b610b1f565b005b6103bf60048036038101906103ba919061328a565b610b3f565b005b6103c9610bf8565b005b6103e560048036038101906103e0919061328a565b610ca0565b6040516103f29190613a45565b60405180910390f35b610403610d11565b6040516104109190613788565b60405180910390f35b610433600480360381019061042e919061328a565b610d24565b005b61044f600480360381019061044a91906131f4565b610daa565b005b610459610e3c565b6040516104669190613a45565b60405180910390f35b610477610e42565b6040516104849190613788565b60405180910390f35b6104a760048036038101906104a2919061328a565b610e55565b6040516104b49190613721565b60405180910390f35b6104c5610f07565b6040516104d291906137a3565b60405180910390f35b6104e3610f95565b6040516104f09190613a45565b60405180910390f35b610513600480360381019061050e919061316d565b610fa6565b005b61052f600480360381019061052a9190612f5d565b61103f565b60405161053c9190613a45565b60405180910390f35b61054d6110f7565b005b61055761117f565b6040516105649190613721565b60405180910390f35b6105756111a9565b60405161058291906137a3565b60405180910390f35b6105a560048036038101906105a091906130a0565b61123b565b005b6105af611251565b005b6105cb60048036038101906105c6919061301d565b6112ea565b005b6105e760048036038101906105e29190613120565b61134c565b005b6105f1611465565b6040516105fe91906137a3565b60405180910390f35b610621600480360381019061061c919061328a565b6114f3565b60405161062e91906137a3565b60405180910390f35b61063f61169d565b60405161064c9190613a45565b60405180910390f35b61066f600480360381019061066a9190612f8a565b6116a3565b60405161067c9190613788565b60405180910390f35b61069f600480360381019061069a9190613241565b611737565b005b6106bb60048036038101906106b69190612f5d565b6117cd565b005b600d5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107365750610735826118c5565b5b9050919050565b60606000805461074c90613cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461077890613cb0565b80156107c55780601f1061079a576101008083540402835291602001916107c5565b820191906000526020600020905b8154815290600101906020018083116107a857829003601f168201915b5050505050905090565b601260009054906101000a900460ff1681565b60006107ed826119a7565b61082c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082390613945565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6010805461087490613cb0565b80601f01602080910402602001604051908101604052809291908181526020018280546108a090613cb0565b80156108ed5780601f106108c2576101008083540402835291602001916108ed565b820191906000526020600020905b8154815290600101906020018083116108d057829003601f168201915b505050505081565b600061090082610e55565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610968906139c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610990611a13565b73ffffffffffffffffffffffffffffffffffffffff1614806109bf57506109be816109b9611a13565b6116a3565b5b6109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906138a5565b60405180910390fd5b610a088383611a1b565b505050565b6000600880549050905090565b610a2b610a25611a13565b82611ad4565b610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a61906139e5565b60405180910390fd5b610a75838383611bb2565b505050565b6000610a858361103f565b8210610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd906137c5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3a838383604051806020016040528060008152506112ea565b505050565b601260009054906101000a900460ff16610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590613905565b60405180910390fd5b610b983382611ad4565b610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90613a25565b60405180910390fd5b610be081611e0e565b6001600d54610bef9190613bc6565b600d8190555050565b610c00611a13565b73ffffffffffffffffffffffffffffffffffffffff16610c1e61117f565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90613965565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b6000610caa610a0d565b8210610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613a05565b60405180910390fd5b60088281548110610cff57610cfe613e49565b5b90600052602060002001549050919050565b601260029054906101000a900460ff1681565b610d2c611a13565b73ffffffffffffffffffffffffffffffffffffffff16610d4a61117f565b73ffffffffffffffffffffffffffffffffffffffff1614610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613965565b60405180910390fd5b80600b8190555050565b610db2611a13565b73ffffffffffffffffffffffffffffffffffffffff16610dd061117f565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613965565b60405180910390fd5b8181600f9190610e37929190612c3f565b505050565b600e5481565b601260019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef5906138e5565b60405180910390fd5b80915050919050565b600f8054610f1490613cb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4090613cb0565b8015610f8d5780601f10610f6257610100808354040283529160200191610f8d565b820191906000526020600020905b815481529060010190602001808311610f7057829003601f168201915b505050505081565b6000610fa1600c611f1f565b905090565b610fae611a13565b73ffffffffffffffffffffffffffffffffffffffff16610fcc61117f565b73ffffffffffffffffffffffffffffffffffffffff1614611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613965565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906138c5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ff611a13565b73ffffffffffffffffffffffffffffffffffffffff1661111d61117f565b73ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613965565b60405180910390fd5b61117d6000611f2d565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111b890613cb0565b80601f01602080910402602001604051908101604052809291908181526020018280546111e490613cb0565b80156112315780601f1061120657610100808354040283529160200191611231565b820191906000526020600020905b81548152906001019060200180831161121457829003601f168201915b5050505050905090565b61124d611246611a13565b8383611ff3565b5050565b611259611a13565b73ffffffffffffffffffffffffffffffffffffffff1661127761117f565b73ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613965565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b6112fb6112f5611a13565b83611ad4565b61133a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611331906139e5565b60405180910390fd5b61134684848484612160565b50505050565b611354611a13565b73ffffffffffffffffffffffffffffffffffffffff1661137261117f565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90613965565b60405180910390fd5b600080600091505b8383905082101561145f576113e5600c6121bc565b6113ef600c611f1f565b905061142284848481811061140757611406613e49565b5b905060200201602081019061141c9190612f5d565b826121d2565b6001600d546114319190613b3f565b600d819055506001600e546114469190613b3f565b600e81905550818061145790613d13565b9250506113d0565b50505050565b6011805461147290613cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461149e90613cb0565b80156114eb5780601f106114c0576101008083540402835291602001916114eb565b820191906000526020600020905b8154815290600101906020018083116114ce57829003601f168201915b505050505081565b60606114fe826119a7565b61153d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611534906139a5565b60405180910390fd5b60001515601260029054906101000a900460ff161515141561163c5760006010805461156890613cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461159490613cb0565b80156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b5050505050905060008151116116065760405180602001604052806000815250611634565b80611610846121f0565b6011604051602001611624939291906136e5565b6040516020818303038152906040525b915050611698565b6000611646612351565b905060008151116116665760405180602001604052806000815250611694565b80611670846121f0565b6011604051602001611684939291906136e5565b6040516020818303038152906040525b9150505b919050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61173f611a13565b73ffffffffffffffffffffffffffffffffffffffff1661175d61117f565b73ffffffffffffffffffffffffffffffffffffffff16146117b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117aa90613965565b60405180910390fd5b80601090805190602001906117c9929190612cc5565b5050565b6117d5611a13565b73ffffffffffffffffffffffffffffffffffffffff166117f361117f565b73ffffffffffffffffffffffffffffffffffffffff1614611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090613965565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613805565b60405180910390fd5b6118c281611f2d565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061199057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119a0575061199f826123e3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a8e83610e55565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611adf826119a7565b611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1590613885565b60405180910390fd5b6000611b2983610e55565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b9857508373ffffffffffffffffffffffffffffffffffffffff16611b80846107e2565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ba95750611ba881856116a3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bd282610e55565b73ffffffffffffffffffffffffffffffffffffffff1614611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90613985565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613845565b60405180910390fd5b611ca383838361244d565b611cae600082611a1b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cfe9190613bc6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d559190613b3f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611e1982610e55565b9050611e278160008461244d565b611e32600083611a1b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e829190613bc6565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600081600001549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205990613865565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121539190613788565b60405180910390a3505050565b61216b848484611bb2565b61217784848484612561565b6121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad906137e5565b60405180910390fd5b50505050565b6001816000016000828254019250508190555050565b6121ec8282604051806020016040528060008152506126f8565b5050565b60606000821415612238576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061234c565b600082905060005b6000821461226a57808061225390613d13565b915050600a826122639190613b95565b9150612240565b60008167ffffffffffffffff81111561228657612285613e78565b5b6040519080825280601f01601f1916602001820160405280156122b85781602001600182028036833780820191505090505b5090505b60008514612345576001826122d19190613bc6565b9150600a856122e09190613d5c565b60306122ec9190613b3f565b60f81b81838151811061230257612301613e49565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561233e9190613b95565b94506122bc565b8093505050505b919050565b6060600f805461236090613cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461238c90613cb0565b80156123d95780601f106123ae576101008083540402835291602001916123d9565b820191906000526020600020905b8154815290600101906020018083116123bc57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612458838383612753565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561249b5761249681612758565b6124da565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124d9576124d883826127a1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561251d576125188161290e565b61255c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461255b5761255a82826129df565b5b5b505050565b60006125828473ffffffffffffffffffffffffffffffffffffffff16612a5e565b156126eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125ab611a13565b8786866040518563ffffffff1660e01b81526004016125cd949392919061373c565b602060405180830381600087803b1580156125e757600080fd5b505af192505050801561261857506040513d601f19601f8201168201806040525081019061261591906131c7565b60015b61269b573d8060008114612648576040519150601f19603f3d011682016040523d82523d6000602084013e61264d565b606091505b50600081511415612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a906137e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126f0565b600190505b949350505050565b6127028383612a71565b61270f6000848484612561565b61274e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612745906137e5565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016127ae8461103f565b6127b89190613bc6565b905060006007600084815260200190815260200160002054905081811461289d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129229190613bc6565b905060006009600084815260200190815260200160002054905060006008838154811061295257612951613e49565b5b90600052602060002001549050806008838154811061297457612973613e49565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806129c3576129c2613e1a565b5b6001900381819060005260206000200160009055905550505050565b60006129ea8361103f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890613925565b60405180910390fd5b612aea816119a7565b15612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190613825565b60405180910390fd5b612b366000838361244d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b869190613b3f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612c4b90613cb0565b90600052602060002090601f016020900481019282612c6d5760008555612cb4565b82601f10612c8657803560ff1916838001178555612cb4565b82800160010185558215612cb4579182015b82811115612cb3578235825591602001919060010190612c98565b5b509050612cc19190612d4b565b5090565b828054612cd190613cb0565b90600052602060002090601f016020900481019282612cf35760008555612d3a565b82601f10612d0c57805160ff1916838001178555612d3a565b82800160010185558215612d3a579182015b82811115612d39578251825591602001919060010190612d1e565b5b509050612d479190612d4b565b5090565b5b80821115612d64576000816000905550600101612d4c565b5090565b6000612d7b612d7684613a85565b613a60565b905082815260208101848484011115612d9757612d96613eb6565b5b612da2848285613c6e565b509392505050565b6000612dbd612db884613ab6565b613a60565b905082815260208101848484011115612dd957612dd8613eb6565b5b612de4848285613c6e565b509392505050565b600081359050612dfb8161446d565b92915050565b60008083601f840112612e1757612e16613eac565b5b8235905067ffffffffffffffff811115612e3457612e33613ea7565b5b602083019150836020820283011115612e5057612e4f613eb1565b5b9250929050565b600081359050612e6681614484565b92915050565b600081359050612e7b8161449b565b92915050565b600081519050612e908161449b565b92915050565b600082601f830112612eab57612eaa613eac565b5b8135612ebb848260208601612d68565b91505092915050565b60008083601f840112612eda57612ed9613eac565b5b8235905067ffffffffffffffff811115612ef757612ef6613ea7565b5b602083019150836001820283011115612f1357612f12613eb1565b5b9250929050565b600082601f830112612f2f57612f2e613eac565b5b8135612f3f848260208601612daa565b91505092915050565b600081359050612f57816144b2565b92915050565b600060208284031215612f7357612f72613ec0565b5b6000612f8184828501612dec565b91505092915050565b60008060408385031215612fa157612fa0613ec0565b5b6000612faf85828601612dec565b9250506020612fc085828601612dec565b9150509250929050565b600080600060608486031215612fe357612fe2613ec0565b5b6000612ff186828701612dec565b935050602061300286828701612dec565b925050604061301386828701612f48565b9150509250925092565b6000806000806080858703121561303757613036613ec0565b5b600061304587828801612dec565b945050602061305687828801612dec565b935050604061306787828801612f48565b925050606085013567ffffffffffffffff81111561308857613087613ebb565b5b61309487828801612e96565b91505092959194509250565b600080604083850312156130b7576130b6613ec0565b5b60006130c585828601612dec565b92505060206130d685828601612e57565b9150509250929050565b600080604083850312156130f7576130f6613ec0565b5b600061310585828601612dec565b925050602061311685828601612f48565b9150509250929050565b6000806020838503121561313757613136613ec0565b5b600083013567ffffffffffffffff81111561315557613154613ebb565b5b61316185828601612e01565b92509250509250929050565b60006020828403121561318357613182613ec0565b5b600061319184828501612e57565b91505092915050565b6000602082840312156131b0576131af613ec0565b5b60006131be84828501612e6c565b91505092915050565b6000602082840312156131dd576131dc613ec0565b5b60006131eb84828501612e81565b91505092915050565b6000806020838503121561320b5761320a613ec0565b5b600083013567ffffffffffffffff81111561322957613228613ebb565b5b61323585828601612ec4565b92509250509250929050565b60006020828403121561325757613256613ec0565b5b600082013567ffffffffffffffff81111561327557613274613ebb565b5b61328184828501612f1a565b91505092915050565b6000602082840312156132a05761329f613ec0565b5b60006132ae84828501612f48565b91505092915050565b6132c081613bfa565b82525050565b6132cf81613c0c565b82525050565b60006132e082613afc565b6132ea8185613b12565b93506132fa818560208601613c7d565b61330381613ec5565b840191505092915050565b600061331982613b07565b6133238185613b23565b9350613333818560208601613c7d565b61333c81613ec5565b840191505092915050565b600061335282613b07565b61335c8185613b34565b935061336c818560208601613c7d565b80840191505092915050565b6000815461338581613cb0565b61338f8186613b34565b945060018216600081146133aa57600181146133bb576133ee565b60ff198316865281860193506133ee565b6133c485613ae7565b60005b838110156133e6578154818901526001820191506020810190506133c7565b838801955050505b50505092915050565b6000613404602b83613b23565b915061340f82613ed6565b604082019050919050565b6000613427603283613b23565b915061343282613f25565b604082019050919050565b600061344a602683613b23565b915061345582613f74565b604082019050919050565b600061346d601c83613b23565b915061347882613fc3565b602082019050919050565b6000613490602483613b23565b915061349b82613fec565b604082019050919050565b60006134b3601983613b23565b91506134be8261403b565b602082019050919050565b60006134d6602c83613b23565b91506134e182614064565b604082019050919050565b60006134f9603883613b23565b9150613504826140b3565b604082019050919050565b600061351c602a83613b23565b915061352782614102565b604082019050919050565b600061353f602983613b23565b915061354a82614151565b604082019050919050565b6000613562601183613b23565b915061356d826141a0565b602082019050919050565b6000613585602083613b23565b9150613590826141c9565b602082019050919050565b60006135a8602c83613b23565b91506135b3826141f2565b604082019050919050565b60006135cb602083613b23565b91506135d682614241565b602082019050919050565b60006135ee602983613b23565b91506135f98261426a565b604082019050919050565b6000613611602f83613b23565b915061361c826142b9565b604082019050919050565b6000613634602183613b23565b915061363f82614308565b604082019050919050565b6000613657603183613b23565b915061366282614357565b604082019050919050565b600061367a602c83613b23565b9150613685826143a6565b604082019050919050565b600061369d602683613b23565b91506136a8826143f5565b604082019050919050565b60006136c0600183613b34565b91506136cb82614444565b600182019050919050565b6136df81613c64565b82525050565b60006136f18286613347565b91506136fc826136b3565b91506137088285613347565b91506137148284613378565b9150819050949350505050565b600060208201905061373660008301846132b7565b92915050565b600060808201905061375160008301876132b7565b61375e60208301866132b7565b61376b60408301856136d6565b818103606083015261377d81846132d5565b905095945050505050565b600060208201905061379d60008301846132c6565b92915050565b600060208201905081810360008301526137bd818461330e565b905092915050565b600060208201905081810360008301526137de816133f7565b9050919050565b600060208201905081810360008301526137fe8161341a565b9050919050565b6000602082019050818103600083015261381e8161343d565b9050919050565b6000602082019050818103600083015261383e81613460565b9050919050565b6000602082019050818103600083015261385e81613483565b9050919050565b6000602082019050818103600083015261387e816134a6565b9050919050565b6000602082019050818103600083015261389e816134c9565b9050919050565b600060208201905081810360008301526138be816134ec565b9050919050565b600060208201905081810360008301526138de8161350f565b9050919050565b600060208201905081810360008301526138fe81613532565b9050919050565b6000602082019050818103600083015261391e81613555565b9050919050565b6000602082019050818103600083015261393e81613578565b9050919050565b6000602082019050818103600083015261395e8161359b565b9050919050565b6000602082019050818103600083015261397e816135be565b9050919050565b6000602082019050818103600083015261399e816135e1565b9050919050565b600060208201905081810360008301526139be81613604565b9050919050565b600060208201905081810360008301526139de81613627565b9050919050565b600060208201905081810360008301526139fe8161364a565b9050919050565b60006020820190508181036000830152613a1e8161366d565b9050919050565b60006020820190508181036000830152613a3e81613690565b9050919050565b6000602082019050613a5a60008301846136d6565b92915050565b6000613a6a613a7b565b9050613a768282613ce2565b919050565b6000604051905090565b600067ffffffffffffffff821115613aa057613a9f613e78565b5b613aa982613ec5565b9050602081019050919050565b600067ffffffffffffffff821115613ad157613ad0613e78565b5b613ada82613ec5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b4a82613c64565b9150613b5583613c64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b8a57613b89613d8d565b5b828201905092915050565b6000613ba082613c64565b9150613bab83613c64565b925082613bbb57613bba613dbc565b5b828204905092915050565b6000613bd182613c64565b9150613bdc83613c64565b925082821015613bef57613bee613d8d565b5b828203905092915050565b6000613c0582613c44565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c9b578082015181840152602081019050613c80565b83811115613caa576000848401525b50505050565b60006002820490506001821680613cc857607f821691505b60208210811415613cdc57613cdb613deb565b5b50919050565b613ceb82613ec5565b810181811067ffffffffffffffff82111715613d0a57613d09613e78565b5b80604052505050565b6000613d1e82613c64565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d5157613d50613d8d565b5b600182019050919050565b6000613d6782613c64565b9150613d7283613c64565b925082613d8257613d81613dbc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4275726e696e672064697361626c656421000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4275726e2063616c6c6572206973206e6f74206f776e6572206e6f722061707060008201527f726f766564210000000000000000000000000000000000000000000000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61447681613bfa565b811461448157600080fd5b50565b61448d81613c0c565b811461449857600080fd5b50565b6144a481613c18565b81146144af57600080fd5b50565b6144bb81613c64565b81146144c657600080fd5b5056fea264697066735822122080408c5eb3e2e786c763fb99bd2e402b4c8bd2e0021771dd2d672ffc3847901e64736f6c63430008070033

Deployed Bytecode Sourcemap

52408:2703:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52654:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46199:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34066:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52826:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35625:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52745:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35148:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46839:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36375:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46507:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36785:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54741:262;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52994:80;;;:::i;:::-;;47029:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52899:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54628:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53082:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52684:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52866:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33760:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52717:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55011:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53387:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33490:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9077:103;;;:::i;:::-;;8426:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34235:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35918:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53310:69;;;:::i;:::-;;37041:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53510:375;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52780:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53893:593;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52575:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36144:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54494:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9335:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52654:23;;;;:::o;46199:224::-;46301:4;46340:35;46325:50;;;:11;:50;;;;:90;;;;46379:36;46403:11;46379:23;:36::i;:::-;46325:90;46318:97;;46199:224;;;:::o;34066:100::-;34120:13;34153:5;34146:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34066:100;:::o;52826:33::-;;;;;;;;;;;;;:::o;35625:221::-;35701:7;35729:16;35737:7;35729;:16::i;:::-;35721:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35814:15;:24;35830:7;35814:24;;;;;;;;;;;;;;;;;;;;;35807:31;;35625:221;;;:::o;52745:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35148:411::-;35229:13;35245:23;35260:7;35245:14;:23::i;:::-;35229:39;;35293:5;35287:11;;:2;:11;;;;35279:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;35387:5;35371:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;35396:37;35413:5;35420:12;:10;:12::i;:::-;35396:16;:37::i;:::-;35371:62;35349:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;35530:21;35539:2;35543:7;35530:8;:21::i;:::-;35218:341;35148:411;;:::o;46839:113::-;46900:7;46927:10;:17;;;;46920:24;;46839:113;:::o;36375:339::-;36570:41;36589:12;:10;:12::i;:::-;36603:7;36570:18;:41::i;:::-;36562:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36678:28;36688:4;36694:2;36698:7;36678:9;:28::i;:::-;36375:339;;;:::o;46507:256::-;46604:7;46640:23;46657:5;46640:16;:23::i;:::-;46632:5;:31;46624:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;46729:12;:19;46742:5;46729:19;;;;;;;;;;;;;;;:26;46749:5;46729:26;;;;;;;;;;;;46722:33;;46507:256;;;;:::o;36785:185::-;36923:39;36940:4;36946:2;36950:7;36923:39;;;;;;;;;;;;:16;:39::i;:::-;36785:185;;;:::o;54741:262::-;54800:13;;;;;;;;;;;54792:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;54854:39;54873:10;54885:7;54854:18;:39::i;:::-;54846:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;54947:14;54953:7;54947:5;:14::i;:::-;54994:1;54983:8;;:12;;;;:::i;:::-;54972:8;:23;;;;54741:262;:::o;52994:80::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53060:6:::1;;;;;;;;;;;53059:7;53050:6;;:16;;;;;;;;;;;;;;;;;;52994:80::o:0;47029:233::-;47104:7;47140:30;:28;:30::i;:::-;47132:5;:38;47124:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;47237:10;47248:5;47237:17;;;;;;;;:::i;:::-;;;;;;;;;;47230:24;;47029:233;;;:::o;52899:28::-;;;;;;;;;;;;;:::o;54628:105::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54715:10:::1;54703:9;:22;;;;54628:105:::0;:::o;53082:112::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53173:13:::1;;53163:7;:23;;;;;;;:::i;:::-;;53082:112:::0;;:::o;52684:24::-;;;;:::o;52866:26::-;;;;;;;;;;;;;:::o;33760:239::-;33832:7;33852:13;33868:7;:16;33876:7;33868:16;;;;;;;;;;;;;;;;;;;;;33852:32;;33920:1;33903:19;;:5;:19;;;;33895:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33986:5;33979:12;;;33760:239;;;:::o;52717:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55011:97::-;55056:7;55081:19;:9;:17;:19::i;:::-;55074:26;;55011:97;:::o;53387:115::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53480:14:::1;53464:13;;:30;;;;;;;;;;;;;;;;;;53387:115:::0;:::o;33490:208::-;33562:7;33607:1;33590:19;;:5;:19;;;;33582:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33674:9;:16;33684:5;33674:16;;;;;;;;;;;;;;;;33667:23;;33490:208;;;:::o;9077:103::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9142:30:::1;9169:1;9142:18;:30::i;:::-;9077:103::o:0;8426:87::-;8472:7;8499:6;;;;;;;;;;;8492:13;;8426:87;:::o;34235:104::-;34291:13;34324:7;34317:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34235:104;:::o;35918:155::-;36013:52;36032:12;:10;:12::i;:::-;36046:8;36056;36013:18;:52::i;:::-;35918:155;;:::o;53310:69::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53367:4:::1;53356:8;;:15;;;;;;;;;;;;;;;;;;53310:69::o:0;37041:328::-;37216:41;37235:12;:10;:12::i;:::-;37249:7;37216:18;:41::i;:::-;37208:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;37322:39;37336:4;37342:2;37346:7;37355:5;37322:13;:39::i;:::-;37041:328;;;;:::o;53510:375::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53594:6:::1;53609:18:::0;53645:1:::1;53641:5;;53636:242;53652:10;;:17;;53648:1;:21;53636:242;;;53687:21;:9;:19;:21::i;:::-;53732:19;:9;:17;:19::i;:::-;53719:32;;53762:36;53772:10;;53783:1;53772:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53787:10;53762:9;:36::i;:::-;53831:1;53820:8;;:12;;;;:::i;:::-;53809:8;:23;;;;53867:1;53855:9;;:13;;;;:::i;:::-;53843:9;:25;;;;53671:3;;;;;:::i;:::-;;;;53636:242;;;53585:300;;53510:375:::0;;:::o;52780:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53893:593::-;53966:13;54000:16;54008:7;54000;:16::i;:::-;53992:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54097:5;54085:17;;:8;;;;;;;;;;;:17;;;54081:206;;;54117:19;54139:14;54117:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54195:1;54179:5;54173:19;:23;:102;;;;;;;;;;;;;;;;;54223:5;54235:18;:7;:16;:18::i;:::-;54255:13;54206:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54173:102;54166:109;;;;;54081:206;54299:28;54330:10;:8;:10::i;:::-;54299:41;;54389:1;54364:14;54358:28;:32;:120;;;;;;;;;;;;;;;;;54417:14;54438:18;:7;:16;:18::i;:::-;54458:13;54400:72;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54358:120;54351:127;;;53893:593;;;;:::o;52575:31::-;;;;:::o;36144:164::-;36241:4;36265:18;:25;36284:5;36265:25;;;;;;;;;;;;;;;:35;36291:8;36265:35;;;;;;;;;;;;;;;;;;;;;;;;;36258:42;;36144:164;;;;:::o;54494:126::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54597:15:::1;54580:14;:32;;;;;;;;;;;;:::i;:::-;;54494:126:::0;:::o;9335:201::-;8657:12;:10;:12::i;:::-;8646:23;;:7;:5;:7::i;:::-;:23;;;8638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9444:1:::1;9424:22;;:8;:22;;;;9416:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9500:28;9519:8;9500:18;:28::i;:::-;9335:201:::0;:::o;33121:305::-;33223:4;33275:25;33260:40;;;:11;:40;;;;:105;;;;33332:33;33317:48;;;:11;:48;;;;33260:105;:158;;;;33382:36;33406:11;33382:23;:36::i;:::-;33260:158;33240:178;;33121:305;;;:::o;38879:127::-;38944:4;38996:1;38968:30;;:7;:16;38976:7;38968:16;;;;;;;;;;;;;;;;;;;;;:30;;;;38961:37;;38879:127;;;:::o;7154:98::-;7207:7;7234:10;7227:17;;7154:98;:::o;42861:174::-;42963:2;42936:15;:24;42952:7;42936:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43019:7;43015:2;42981:46;;42990:23;43005:7;42990:14;:23::i;:::-;42981:46;;;;;;;;;;;;42861:174;;:::o;39173:348::-;39266:4;39291:16;39299:7;39291;:16::i;:::-;39283:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39367:13;39383:23;39398:7;39383:14;:23::i;:::-;39367:39;;39436:5;39425:16;;:7;:16;;;:51;;;;39469:7;39445:31;;:20;39457:7;39445:11;:20::i;:::-;:31;;;39425:51;:87;;;;39480:32;39497:5;39504:7;39480:16;:32::i;:::-;39425:87;39417:96;;;39173:348;;;;:::o;42165:578::-;42324:4;42297:31;;:23;42312:7;42297:14;:23::i;:::-;:31;;;42289:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;42407:1;42393:16;;:2;:16;;;;42385:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42463:39;42484:4;42490:2;42494:7;42463:20;:39::i;:::-;42567:29;42584:1;42588:7;42567:8;:29::i;:::-;42628:1;42609:9;:15;42619:4;42609:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;42657:1;42640:9;:13;42650:2;42640:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42688:2;42669:7;:16;42677:7;42669:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42727:7;42723:2;42708:27;;42717:4;42708:27;;;;;;;;;;;;42165:578;;;:::o;41468:360::-;41528:13;41544:23;41559:7;41544:14;:23::i;:::-;41528:39;;41580:48;41601:5;41616:1;41620:7;41580:20;:48::i;:::-;41669:29;41686:1;41690:7;41669:8;:29::i;:::-;41731:1;41711:9;:16;41721:5;41711:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;41750:7;:16;41758:7;41750:16;;;;;;;;;;;;41743:23;;;;;;;;;;;41812:7;41808:1;41784:36;;41793:5;41784:36;;;;;;;;;;;;41517:311;41468:360;:::o;868:114::-;933:7;960;:14;;;953:21;;868:114;;;:::o;9696:191::-;9770:16;9789:6;;;;;;;;;;;9770:25;;9815:8;9806:6;;:17;;;;;;;;;;;;;;;;;;9870:8;9839:40;;9860:8;9839:40;;;;;;;;;;;;9759:128;9696:191;:::o;43177:315::-;43332:8;43323:17;;:5;:17;;;;43315:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43419:8;43381:18;:25;43400:5;43381:25;;;;;;;;;;;;;;;:35;43407:8;43381:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;43465:8;43443:41;;43458:5;43443:41;;;43475:8;43443:41;;;;;;:::i;:::-;;;;;;;;43177:315;;;:::o;38251:::-;38408:28;38418:4;38424:2;38428:7;38408:9;:28::i;:::-;38455:48;38478:4;38484:2;38488:7;38497:5;38455:22;:48::i;:::-;38447:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;38251:315;;;;:::o;990:127::-;1097:1;1079:7;:14;;;:19;;;;;;;;;;;990:127;:::o;39863:110::-;39939:26;39949:2;39953:7;39939:26;;;;;;;;;;;;:9;:26::i;:::-;39863:110;;:::o;4718:723::-;4774:13;5004:1;4995:5;:10;4991:53;;;5022:10;;;;;;;;;;;;;;;;;;;;;4991:53;5054:12;5069:5;5054:20;;5085:14;5110:78;5125:1;5117:4;:9;5110:78;;5143:8;;;;;:::i;:::-;;;;5174:2;5166:10;;;;;:::i;:::-;;;5110:78;;;5198:19;5230:6;5220:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5198:39;;5248:154;5264:1;5255:5;:10;5248:154;;5292:1;5282:11;;;;;:::i;:::-;;;5359:2;5351:5;:10;;;;:::i;:::-;5338:2;:24;;;;:::i;:::-;5325:39;;5308:6;5315;5308:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5388:2;5379:11;;;;;:::i;:::-;;;5248:154;;;5426:6;5412:21;;;;;4718:723;;;;:::o;53202:100::-;53254:13;53287:7;53280:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53202:100;:::o;24837:157::-;24922:4;24961:25;24946:40;;;:11;:40;;;;24939:47;;24837:157;;;:::o;47875:589::-;48019:45;48046:4;48052:2;48056:7;48019:26;:45::i;:::-;48097:1;48081:18;;:4;:18;;;48077:187;;;48116:40;48148:7;48116:31;:40::i;:::-;48077:187;;;48186:2;48178:10;;:4;:10;;;48174:90;;48205:47;48238:4;48244:7;48205:32;:47::i;:::-;48174:90;48077:187;48292:1;48278:16;;:2;:16;;;48274:183;;;48311:45;48348:7;48311:36;:45::i;:::-;48274:183;;;48384:4;48378:10;;:2;:10;;;48374:83;;48405:40;48433:2;48437:7;48405:27;:40::i;:::-;48374:83;48274:183;47875:589;;;:::o;44057:799::-;44212:4;44233:15;:2;:13;;;:15::i;:::-;44229:620;;;44285:2;44269:36;;;44306:12;:10;:12::i;:::-;44320:4;44326:7;44335:5;44269:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44265:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44528:1;44511:6;:13;:18;44507:272;;;44554:60;;;;;;;;;;:::i;:::-;;;;;;;;44507:272;44729:6;44723:13;44714:6;44710:2;44706:15;44699:38;44265:529;44402:41;;;44392:51;;;:6;:51;;;;44385:58;;;;;44229:620;44833:4;44826:11;;44057:799;;;;;;;:::o;40200:321::-;40330:18;40336:2;40340:7;40330:5;:18::i;:::-;40381:54;40412:1;40416:2;40420:7;40429:5;40381:22;:54::i;:::-;40359:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;40200:321;;;:::o;45428:126::-;;;;:::o;49187:164::-;49291:10;:17;;;;49264:15;:24;49280:7;49264:24;;;;;;;;;;;:44;;;;49319:10;49335:7;49319:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49187:164;:::o;49978:988::-;50244:22;50294:1;50269:22;50286:4;50269:16;:22::i;:::-;:26;;;;:::i;:::-;50244:51;;50306:18;50327:17;:26;50345:7;50327:26;;;;;;;;;;;;50306:47;;50474:14;50460:10;:28;50456:328;;50505:19;50527:12;:18;50540:4;50527:18;;;;;;;;;;;;;;;:34;50546:14;50527:34;;;;;;;;;;;;50505:56;;50611:11;50578:12;:18;50591:4;50578:18;;;;;;;;;;;;;;;:30;50597:10;50578:30;;;;;;;;;;;:44;;;;50728:10;50695:17;:30;50713:11;50695:30;;;;;;;;;;;:43;;;;50490:294;50456:328;50880:17;:26;50898:7;50880:26;;;;;;;;;;;50873:33;;;50924:12;:18;50937:4;50924:18;;;;;;;;;;;;;;;:34;50943:14;50924:34;;;;;;;;;;;50917:41;;;50059:907;;49978:988;;:::o;51261:1079::-;51514:22;51559:1;51539:10;:17;;;;:21;;;;:::i;:::-;51514:46;;51571:18;51592:15;:24;51608:7;51592:24;;;;;;;;;;;;51571:45;;51943:19;51965:10;51976:14;51965:26;;;;;;;;:::i;:::-;;;;;;;;;;51943:48;;52029:11;52004:10;52015;52004:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;52140:10;52109:15;:28;52125:11;52109:28;;;;;;;;;;;:41;;;;52281:15;:24;52297:7;52281:24;;;;;;;;;;;52274:31;;;52316:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51332:1008;;;51261:1079;:::o;48765:221::-;48850:14;48867:20;48884:2;48867:16;:20::i;:::-;48850:37;;48925:7;48898:12;:16;48911:2;48898:16;;;;;;;;;;;;;;;:24;48915:6;48898:24;;;;;;;;;;;:34;;;;48972:6;48943:17;:26;48961:7;48943:26;;;;;;;;;;;:35;;;;48839:147;48765:221;;:::o;10712:387::-;10772:4;10980:12;11047:7;11035:20;11027:28;;11090:1;11083:4;:8;11076:15;;;10712:387;;;:::o;40857:382::-;40951:1;40937:16;;:2;:16;;;;40929:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41010:16;41018:7;41010;:16::i;:::-;41009:17;41001:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41072:45;41101:1;41105:2;41109:7;41072:20;:45::i;:::-;41147:1;41130:9;:13;41140:2;41130:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41178:2;41159:7;:16;41167:7;41159:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41223:7;41219:2;41198:33;;41215:1;41198:33;;;;;;;;;;;;40857:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:553::-;2435:8;2445:6;2495:3;2488:4;2480:6;2476:17;2472:27;2462:122;;2503:79;;:::i;:::-;2462:122;2616:6;2603:20;2593:30;;2646:18;2638:6;2635:30;2632:117;;;2668:79;;:::i;:::-;2632:117;2782:4;2774:6;2770:17;2758:29;;2836:3;2828:4;2820:6;2816:17;2806:8;2802:32;2799:41;2796:128;;;2843:79;;:::i;:::-;2796:128;2377:553;;;;;:::o;2950:340::-;3006:5;3055:3;3048:4;3040:6;3036:17;3032:27;3022:122;;3063:79;;:::i;:::-;3022:122;3180:6;3167:20;3205:79;3280:3;3272:6;3265:4;3257:6;3253:17;3205:79;:::i;:::-;3196:88;;3012:278;2950:340;;;;:::o;3296:139::-;3342:5;3380:6;3367:20;3358:29;;3396:33;3423:5;3396:33;:::i;:::-;3296:139;;;;:::o;3441:329::-;3500:6;3549:2;3537:9;3528:7;3524:23;3520:32;3517:119;;;3555:79;;:::i;:::-;3517:119;3675:1;3700:53;3745:7;3736:6;3725:9;3721:22;3700:53;:::i;:::-;3690:63;;3646:117;3441:329;;;;:::o;3776:474::-;3844:6;3852;3901:2;3889:9;3880:7;3876:23;3872:32;3869:119;;;3907:79;;:::i;:::-;3869:119;4027:1;4052:53;4097:7;4088:6;4077:9;4073:22;4052:53;:::i;:::-;4042:63;;3998:117;4154:2;4180:53;4225:7;4216:6;4205:9;4201:22;4180:53;:::i;:::-;4170:63;;4125:118;3776:474;;;;;:::o;4256:619::-;4333:6;4341;4349;4398:2;4386:9;4377:7;4373:23;4369:32;4366:119;;;4404:79;;:::i;:::-;4366:119;4524:1;4549:53;4594:7;4585:6;4574:9;4570:22;4549:53;:::i;:::-;4539:63;;4495:117;4651:2;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4622:118;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4256:619;;;;;:::o;4881:943::-;4976:6;4984;4992;5000;5049:3;5037:9;5028:7;5024:23;5020:33;5017:120;;;5056:79;;:::i;:::-;5017:120;5176:1;5201:53;5246:7;5237:6;5226:9;5222:22;5201:53;:::i;:::-;5191:63;;5147:117;5303:2;5329:53;5374:7;5365:6;5354:9;5350:22;5329:53;:::i;:::-;5319:63;;5274:118;5431:2;5457:53;5502:7;5493:6;5482:9;5478:22;5457:53;:::i;:::-;5447:63;;5402:118;5587:2;5576:9;5572:18;5559:32;5618:18;5610:6;5607:30;5604:117;;;5640:79;;:::i;:::-;5604:117;5745:62;5799:7;5790:6;5779:9;5775:22;5745:62;:::i;:::-;5735:72;;5530:287;4881:943;;;;;;;:::o;5830:468::-;5895:6;5903;5952:2;5940:9;5931:7;5927:23;5923:32;5920:119;;;5958:79;;:::i;:::-;5920:119;6078:1;6103:53;6148:7;6139:6;6128:9;6124:22;6103:53;:::i;:::-;6093:63;;6049:117;6205:2;6231:50;6273:7;6264:6;6253:9;6249:22;6231:50;:::i;:::-;6221:60;;6176:115;5830:468;;;;;:::o;6304:474::-;6372:6;6380;6429:2;6417:9;6408:7;6404:23;6400:32;6397:119;;;6435:79;;:::i;:::-;6397:119;6555:1;6580:53;6625:7;6616:6;6605:9;6601:22;6580:53;:::i;:::-;6570:63;;6526:117;6682:2;6708:53;6753:7;6744:6;6733:9;6729:22;6708:53;:::i;:::-;6698:63;;6653:118;6304:474;;;;;:::o;6784:559::-;6870:6;6878;6927:2;6915:9;6906:7;6902:23;6898:32;6895:119;;;6933:79;;:::i;:::-;6895:119;7081:1;7070:9;7066:17;7053:31;7111:18;7103:6;7100:30;7097:117;;;7133:79;;:::i;:::-;7097:117;7246:80;7318:7;7309:6;7298:9;7294:22;7246:80;:::i;:::-;7228:98;;;;7024:312;6784:559;;;;;:::o;7349:323::-;7405:6;7454:2;7442:9;7433:7;7429:23;7425:32;7422:119;;;7460:79;;:::i;:::-;7422:119;7580:1;7605:50;7647:7;7638:6;7627:9;7623:22;7605:50;:::i;:::-;7595:60;;7551:114;7349:323;;;;:::o;7678:327::-;7736:6;7785:2;7773:9;7764:7;7760:23;7756:32;7753:119;;;7791:79;;:::i;:::-;7753:119;7911:1;7936:52;7980:7;7971:6;7960:9;7956:22;7936:52;:::i;:::-;7926:62;;7882:116;7678:327;;;;:::o;8011:349::-;8080:6;8129:2;8117:9;8108:7;8104:23;8100:32;8097:119;;;8135:79;;:::i;:::-;8097:119;8255:1;8280:63;8335:7;8326:6;8315:9;8311:22;8280:63;:::i;:::-;8270:73;;8226:127;8011:349;;;;:::o;8366:529::-;8437:6;8445;8494:2;8482:9;8473:7;8469:23;8465:32;8462:119;;;8500:79;;:::i;:::-;8462:119;8648:1;8637:9;8633:17;8620:31;8678:18;8670:6;8667:30;8664:117;;;8700:79;;:::i;:::-;8664:117;8813:65;8870:7;8861:6;8850:9;8846:22;8813:65;:::i;:::-;8795:83;;;;8591:297;8366:529;;;;;:::o;8901:509::-;8970:6;9019:2;9007:9;8998:7;8994:23;8990:32;8987:119;;;9025:79;;:::i;:::-;8987:119;9173:1;9162:9;9158:17;9145:31;9203:18;9195:6;9192:30;9189:117;;;9225:79;;:::i;:::-;9189:117;9330:63;9385:7;9376:6;9365:9;9361:22;9330:63;:::i;:::-;9320:73;;9116:287;8901:509;;;;:::o;9416:329::-;9475:6;9524:2;9512:9;9503:7;9499:23;9495:32;9492:119;;;9530:79;;:::i;:::-;9492:119;9650:1;9675:53;9720:7;9711:6;9700:9;9696:22;9675:53;:::i;:::-;9665:63;;9621:117;9416:329;;;;:::o;9751:118::-;9838:24;9856:5;9838:24;:::i;:::-;9833:3;9826:37;9751:118;;:::o;9875:109::-;9956:21;9971:5;9956:21;:::i;:::-;9951:3;9944:34;9875:109;;:::o;9990:360::-;10076:3;10104:38;10136:5;10104:38;:::i;:::-;10158:70;10221:6;10216:3;10158:70;:::i;:::-;10151:77;;10237:52;10282:6;10277:3;10270:4;10263:5;10259:16;10237:52;:::i;:::-;10314:29;10336:6;10314:29;:::i;:::-;10309:3;10305:39;10298:46;;10080:270;9990:360;;;;:::o;10356:364::-;10444:3;10472:39;10505:5;10472:39;:::i;:::-;10527:71;10591:6;10586:3;10527:71;:::i;:::-;10520:78;;10607:52;10652:6;10647:3;10640:4;10633:5;10629:16;10607:52;:::i;:::-;10684:29;10706:6;10684:29;:::i;:::-;10679:3;10675:39;10668:46;;10448:272;10356:364;;;;:::o;10726:377::-;10832:3;10860:39;10893:5;10860:39;:::i;:::-;10915:89;10997:6;10992:3;10915:89;:::i;:::-;10908:96;;11013:52;11058:6;11053:3;11046:4;11039:5;11035:16;11013:52;:::i;:::-;11090:6;11085:3;11081:16;11074:23;;10836:267;10726:377;;;;:::o;11133:845::-;11236:3;11273:5;11267:12;11302:36;11328:9;11302:36;:::i;:::-;11354:89;11436:6;11431:3;11354:89;:::i;:::-;11347:96;;11474:1;11463:9;11459:17;11490:1;11485:137;;;;11636:1;11631:341;;;;11452:520;;11485:137;11569:4;11565:9;11554;11550:25;11545:3;11538:38;11605:6;11600:3;11596:16;11589:23;;11485:137;;11631:341;11698:38;11730:5;11698:38;:::i;:::-;11758:1;11772:154;11786:6;11783:1;11780:13;11772:154;;;11860:7;11854:14;11850:1;11845:3;11841:11;11834:35;11910:1;11901:7;11897:15;11886:26;;11808:4;11805:1;11801:12;11796:17;;11772:154;;;11955:6;11950:3;11946:16;11939:23;;11638:334;;11452:520;;11240:738;;11133:845;;;;:::o;11984:366::-;12126:3;12147:67;12211:2;12206:3;12147:67;:::i;:::-;12140:74;;12223:93;12312:3;12223:93;:::i;:::-;12341:2;12336:3;12332:12;12325:19;;11984:366;;;:::o;12356:::-;12498:3;12519:67;12583:2;12578:3;12519:67;:::i;:::-;12512:74;;12595:93;12684:3;12595:93;:::i;:::-;12713:2;12708:3;12704:12;12697:19;;12356:366;;;:::o;12728:::-;12870:3;12891:67;12955:2;12950:3;12891:67;:::i;:::-;12884:74;;12967:93;13056:3;12967:93;:::i;:::-;13085:2;13080:3;13076:12;13069:19;;12728:366;;;:::o;13100:::-;13242:3;13263:67;13327:2;13322:3;13263:67;:::i;:::-;13256:74;;13339:93;13428:3;13339:93;:::i;:::-;13457:2;13452:3;13448:12;13441:19;;13100:366;;;:::o;13472:::-;13614:3;13635:67;13699:2;13694:3;13635:67;:::i;:::-;13628:74;;13711:93;13800:3;13711:93;:::i;:::-;13829:2;13824:3;13820:12;13813:19;;13472:366;;;:::o;13844:::-;13986:3;14007:67;14071:2;14066:3;14007:67;:::i;:::-;14000:74;;14083:93;14172:3;14083:93;:::i;:::-;14201:2;14196:3;14192:12;14185:19;;13844:366;;;:::o;14216:::-;14358:3;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14455:93;14544:3;14455:93;:::i;:::-;14573:2;14568:3;14564:12;14557:19;;14216:366;;;:::o;14588:::-;14730:3;14751:67;14815:2;14810:3;14751:67;:::i;:::-;14744:74;;14827:93;14916:3;14827:93;:::i;:::-;14945:2;14940:3;14936:12;14929:19;;14588:366;;;:::o;14960:::-;15102:3;15123:67;15187:2;15182:3;15123:67;:::i;:::-;15116:74;;15199:93;15288:3;15199:93;:::i;:::-;15317:2;15312:3;15308:12;15301:19;;14960:366;;;:::o;15332:::-;15474:3;15495:67;15559:2;15554:3;15495:67;:::i;:::-;15488:74;;15571:93;15660:3;15571:93;:::i;:::-;15689:2;15684:3;15680:12;15673:19;;15332:366;;;:::o;15704:::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:::-;16218:3;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16315:93;16404:3;16315:93;:::i;:::-;16433:2;16428:3;16424:12;16417:19;;16076:366;;;:::o;16448:::-;16590:3;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16687:93;16776:3;16687:93;:::i;:::-;16805:2;16800:3;16796:12;16789:19;;16448:366;;;:::o;16820:::-;16962:3;16983:67;17047:2;17042:3;16983:67;:::i;:::-;16976:74;;17059:93;17148:3;17059:93;:::i;:::-;17177:2;17172:3;17168:12;17161:19;;16820:366;;;:::o;17192:::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17564:366;;;:::o;17936:::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:::-;18450:3;18471:67;18535:2;18530:3;18471:67;:::i;:::-;18464:74;;18547:93;18636:3;18547:93;:::i;:::-;18665:2;18660:3;18656:12;18649:19;;18308:366;;;:::o;18680:::-;18822:3;18843:67;18907:2;18902:3;18843:67;:::i;:::-;18836:74;;18919:93;19008:3;18919:93;:::i;:::-;19037:2;19032:3;19028:12;19021:19;;18680:366;;;:::o;19052:::-;19194:3;19215:67;19279:2;19274:3;19215:67;:::i;:::-;19208:74;;19291:93;19380:3;19291:93;:::i;:::-;19409:2;19404:3;19400:12;19393:19;;19052:366;;;:::o;19424:400::-;19584:3;19605:84;19687:1;19682:3;19605:84;:::i;:::-;19598:91;;19698:93;19787:3;19698:93;:::i;:::-;19816:1;19811:3;19807:11;19800:18;;19424:400;;;:::o;19830:118::-;19917:24;19935:5;19917:24;:::i;:::-;19912:3;19905:37;19830:118;;:::o;19954:855::-;20280:3;20302:95;20393:3;20384:6;20302:95;:::i;:::-;20295:102;;20414:148;20558:3;20414:148;:::i;:::-;20407:155;;20579:95;20670:3;20661:6;20579:95;:::i;:::-;20572:102;;20691:92;20779:3;20770:6;20691:92;:::i;:::-;20684:99;;20800:3;20793:10;;19954:855;;;;;;:::o;20815:222::-;20908:4;20946:2;20935:9;20931:18;20923:26;;20959:71;21027:1;21016:9;21012:17;21003:6;20959:71;:::i;:::-;20815:222;;;;:::o;21043:640::-;21238:4;21276:3;21265:9;21261:19;21253:27;;21290:71;21358:1;21347:9;21343:17;21334:6;21290:71;:::i;:::-;21371:72;21439:2;21428:9;21424:18;21415:6;21371:72;:::i;:::-;21453;21521:2;21510:9;21506:18;21497:6;21453:72;:::i;:::-;21572:9;21566:4;21562:20;21557:2;21546:9;21542:18;21535:48;21600:76;21671:4;21662:6;21600:76;:::i;:::-;21592:84;;21043:640;;;;;;;:::o;21689:210::-;21776:4;21814:2;21803:9;21799:18;21791:26;;21827:65;21889:1;21878:9;21874:17;21865:6;21827:65;:::i;:::-;21689:210;;;;:::o;21905:313::-;22018:4;22056:2;22045:9;22041:18;22033:26;;22105:9;22099:4;22095:20;22091:1;22080:9;22076:17;22069:47;22133:78;22206:4;22197:6;22133:78;:::i;:::-;22125:86;;21905:313;;;;:::o;22224:419::-;22390:4;22428:2;22417:9;22413:18;22405:26;;22477:9;22471:4;22467:20;22463:1;22452:9;22448:17;22441:47;22505:131;22631:4;22505:131;:::i;:::-;22497:139;;22224:419;;;:::o;22649:::-;22815:4;22853:2;22842:9;22838:18;22830:26;;22902:9;22896:4;22892:20;22888:1;22877:9;22873:17;22866:47;22930:131;23056:4;22930:131;:::i;:::-;22922:139;;22649:419;;;:::o;23074:::-;23240:4;23278:2;23267:9;23263:18;23255:26;;23327:9;23321:4;23317:20;23313:1;23302:9;23298:17;23291:47;23355:131;23481:4;23355:131;:::i;:::-;23347:139;;23074:419;;;:::o;23499:::-;23665:4;23703:2;23692:9;23688:18;23680:26;;23752:9;23746:4;23742:20;23738:1;23727:9;23723:17;23716:47;23780:131;23906:4;23780:131;:::i;:::-;23772:139;;23499:419;;;:::o;23924:::-;24090:4;24128:2;24117:9;24113:18;24105:26;;24177:9;24171:4;24167:20;24163:1;24152:9;24148:17;24141:47;24205:131;24331:4;24205:131;:::i;:::-;24197:139;;23924:419;;;:::o;24349:::-;24515:4;24553:2;24542:9;24538:18;24530:26;;24602:9;24596:4;24592:20;24588:1;24577:9;24573:17;24566:47;24630:131;24756:4;24630:131;:::i;:::-;24622:139;;24349:419;;;:::o;24774:::-;24940:4;24978:2;24967:9;24963:18;24955:26;;25027:9;25021:4;25017:20;25013:1;25002:9;24998:17;24991:47;25055:131;25181:4;25055:131;:::i;:::-;25047:139;;24774:419;;;:::o;25199:::-;25365:4;25403:2;25392:9;25388:18;25380:26;;25452:9;25446:4;25442:20;25438:1;25427:9;25423:17;25416:47;25480:131;25606:4;25480:131;:::i;:::-;25472:139;;25199:419;;;:::o;25624:::-;25790:4;25828:2;25817:9;25813:18;25805:26;;25877:9;25871:4;25867:20;25863:1;25852:9;25848:17;25841:47;25905:131;26031:4;25905:131;:::i;:::-;25897:139;;25624:419;;;:::o;26049:::-;26215:4;26253:2;26242:9;26238:18;26230:26;;26302:9;26296:4;26292:20;26288:1;26277:9;26273:17;26266:47;26330:131;26456:4;26330:131;:::i;:::-;26322:139;;26049:419;;;:::o;26474:::-;26640:4;26678:2;26667:9;26663:18;26655:26;;26727:9;26721:4;26717:20;26713:1;26702:9;26698:17;26691:47;26755:131;26881:4;26755:131;:::i;:::-;26747:139;;26474:419;;;:::o;26899:::-;27065:4;27103:2;27092:9;27088:18;27080:26;;27152:9;27146:4;27142:20;27138:1;27127:9;27123:17;27116:47;27180:131;27306:4;27180:131;:::i;:::-;27172:139;;26899:419;;;:::o;27324:::-;27490:4;27528:2;27517:9;27513:18;27505:26;;27577:9;27571:4;27567:20;27563:1;27552:9;27548:17;27541:47;27605:131;27731:4;27605:131;:::i;:::-;27597:139;;27324:419;;;:::o;27749:::-;27915:4;27953:2;27942:9;27938:18;27930:26;;28002:9;27996:4;27992:20;27988:1;27977:9;27973:17;27966:47;28030:131;28156:4;28030:131;:::i;:::-;28022:139;;27749:419;;;:::o;28174:::-;28340:4;28378:2;28367:9;28363:18;28355:26;;28427:9;28421:4;28417:20;28413:1;28402:9;28398:17;28391:47;28455:131;28581:4;28455:131;:::i;:::-;28447:139;;28174:419;;;:::o;28599:::-;28765:4;28803:2;28792:9;28788:18;28780:26;;28852:9;28846:4;28842:20;28838:1;28827:9;28823:17;28816:47;28880:131;29006:4;28880:131;:::i;:::-;28872:139;;28599:419;;;:::o;29024:::-;29190:4;29228:2;29217:9;29213:18;29205:26;;29277:9;29271:4;29267:20;29263:1;29252:9;29248:17;29241:47;29305:131;29431:4;29305:131;:::i;:::-;29297:139;;29024:419;;;:::o;29449:::-;29615:4;29653:2;29642:9;29638:18;29630:26;;29702:9;29696:4;29692:20;29688:1;29677:9;29673:17;29666:47;29730:131;29856:4;29730:131;:::i;:::-;29722:139;;29449:419;;;:::o;29874:::-;30040:4;30078:2;30067:9;30063:18;30055:26;;30127:9;30121:4;30117:20;30113:1;30102:9;30098:17;30091:47;30155:131;30281:4;30155:131;:::i;:::-;30147:139;;29874:419;;;:::o;30299:::-;30465:4;30503:2;30492:9;30488:18;30480:26;;30552:9;30546:4;30542:20;30538:1;30527:9;30523:17;30516:47;30580:131;30706:4;30580:131;:::i;:::-;30572:139;;30299:419;;;:::o;30724:222::-;30817:4;30855:2;30844:9;30840:18;30832:26;;30868:71;30936:1;30925:9;30921:17;30912:6;30868:71;:::i;:::-;30724:222;;;;:::o;30952:129::-;30986:6;31013:20;;:::i;:::-;31003:30;;31042:33;31070:4;31062:6;31042:33;:::i;:::-;30952:129;;;:::o;31087:75::-;31120:6;31153:2;31147:9;31137:19;;31087:75;:::o;31168:307::-;31229:4;31319:18;31311:6;31308:30;31305:56;;;31341:18;;:::i;:::-;31305:56;31379:29;31401:6;31379:29;:::i;:::-;31371:37;;31463:4;31457;31453:15;31445:23;;31168:307;;;:::o;31481:308::-;31543:4;31633:18;31625:6;31622:30;31619:56;;;31655:18;;:::i;:::-;31619:56;31693:29;31715:6;31693:29;:::i;:::-;31685:37;;31777:4;31771;31767:15;31759:23;;31481:308;;;:::o;31795:141::-;31844:4;31867:3;31859:11;;31890:3;31887:1;31880:14;31924:4;31921:1;31911:18;31903:26;;31795:141;;;:::o;31942:98::-;31993:6;32027:5;32021:12;32011:22;;31942:98;;;:::o;32046:99::-;32098:6;32132:5;32126:12;32116:22;;32046:99;;;:::o;32151:168::-;32234:11;32268:6;32263:3;32256:19;32308:4;32303:3;32299:14;32284:29;;32151:168;;;;:::o;32325:169::-;32409:11;32443:6;32438:3;32431:19;32483:4;32478:3;32474:14;32459:29;;32325:169;;;;:::o;32500:148::-;32602:11;32639:3;32624:18;;32500:148;;;;:::o;32654:305::-;32694:3;32713:20;32731:1;32713:20;:::i;:::-;32708:25;;32747:20;32765:1;32747:20;:::i;:::-;32742:25;;32901:1;32833:66;32829:74;32826:1;32823:81;32820:107;;;32907:18;;:::i;:::-;32820:107;32951:1;32948;32944:9;32937:16;;32654:305;;;;:::o;32965:185::-;33005:1;33022:20;33040:1;33022:20;:::i;:::-;33017:25;;33056:20;33074:1;33056:20;:::i;:::-;33051:25;;33095:1;33085:35;;33100:18;;:::i;:::-;33085:35;33142:1;33139;33135:9;33130:14;;32965:185;;;;:::o;33156:191::-;33196:4;33216:20;33234:1;33216:20;:::i;:::-;33211:25;;33250:20;33268:1;33250:20;:::i;:::-;33245:25;;33289:1;33286;33283:8;33280:34;;;33294:18;;:::i;:::-;33280:34;33339:1;33336;33332:9;33324:17;;33156:191;;;;:::o;33353:96::-;33390:7;33419:24;33437:5;33419:24;:::i;:::-;33408:35;;33353:96;;;:::o;33455:90::-;33489:7;33532:5;33525:13;33518:21;33507:32;;33455:90;;;:::o;33551:149::-;33587:7;33627:66;33620:5;33616:78;33605:89;;33551:149;;;:::o;33706:126::-;33743:7;33783:42;33776:5;33772:54;33761:65;;33706:126;;;:::o;33838:77::-;33875:7;33904:5;33893:16;;33838:77;;;:::o;33921:154::-;34005:6;34000:3;33995;33982:30;34067:1;34058:6;34053:3;34049:16;34042:27;33921:154;;;:::o;34081:307::-;34149:1;34159:113;34173:6;34170:1;34167:13;34159:113;;;34258:1;34253:3;34249:11;34243:18;34239:1;34234:3;34230:11;34223:39;34195:2;34192:1;34188:10;34183:15;;34159:113;;;34290:6;34287:1;34284:13;34281:101;;;34370:1;34361:6;34356:3;34352:16;34345:27;34281:101;34130:258;34081:307;;;:::o;34394:320::-;34438:6;34475:1;34469:4;34465:12;34455:22;;34522:1;34516:4;34512:12;34543:18;34533:81;;34599:4;34591:6;34587:17;34577:27;;34533:81;34661:2;34653:6;34650:14;34630:18;34627:38;34624:84;;;34680:18;;:::i;:::-;34624:84;34445:269;34394:320;;;:::o;34720:281::-;34803:27;34825:4;34803:27;:::i;:::-;34795:6;34791:40;34933:6;34921:10;34918:22;34897:18;34885:10;34882:34;34879:62;34876:88;;;34944:18;;:::i;:::-;34876:88;34984:10;34980:2;34973:22;34763:238;34720:281;;:::o;35007:233::-;35046:3;35069:24;35087:5;35069:24;:::i;:::-;35060:33;;35115:66;35108:5;35105:77;35102:103;;;35185:18;;:::i;:::-;35102:103;35232:1;35225:5;35221:13;35214:20;;35007:233;;;:::o;35246:176::-;35278:1;35295:20;35313:1;35295:20;:::i;:::-;35290:25;;35329:20;35347:1;35329:20;:::i;:::-;35324:25;;35368:1;35358:35;;35373:18;;:::i;:::-;35358:35;35414:1;35411;35407:9;35402:14;;35246:176;;;;:::o;35428:180::-;35476:77;35473:1;35466:88;35573:4;35570:1;35563:15;35597:4;35594:1;35587:15;35614:180;35662:77;35659:1;35652:88;35759:4;35756:1;35749:15;35783:4;35780:1;35773:15;35800:180;35848:77;35845:1;35838:88;35945:4;35942:1;35935:15;35969:4;35966:1;35959:15;35986:180;36034:77;36031:1;36024:88;36131:4;36128:1;36121:15;36155:4;36152:1;36145:15;36172:180;36220:77;36217:1;36210:88;36317:4;36314:1;36307:15;36341:4;36338:1;36331:15;36358:180;36406:77;36403:1;36396:88;36503:4;36500:1;36493:15;36527:4;36524:1;36517:15;36544:117;36653:1;36650;36643:12;36667:117;36776:1;36773;36766:12;36790:117;36899:1;36896;36889:12;36913:117;37022:1;37019;37012:12;37036:117;37145:1;37142;37135:12;37159:117;37268:1;37265;37258:12;37282:102;37323:6;37374:2;37370:7;37365:2;37358:5;37354:14;37350:28;37340:38;;37282:102;;;:::o;37390:230::-;37530:34;37526:1;37518:6;37514:14;37507:58;37599:13;37594:2;37586:6;37582:15;37575:38;37390:230;:::o;37626:237::-;37766:34;37762:1;37754:6;37750:14;37743:58;37835:20;37830:2;37822:6;37818:15;37811:45;37626:237;:::o;37869:225::-;38009:34;38005:1;37997:6;37993:14;37986:58;38078:8;38073:2;38065:6;38061:15;38054:33;37869:225;:::o;38100:178::-;38240:30;38236:1;38228:6;38224:14;38217:54;38100:178;:::o;38284:223::-;38424:34;38420:1;38412:6;38408:14;38401:58;38493:6;38488:2;38480:6;38476:15;38469:31;38284:223;:::o;38513:175::-;38653:27;38649:1;38641:6;38637:14;38630:51;38513:175;:::o;38694:231::-;38834:34;38830:1;38822:6;38818:14;38811:58;38903:14;38898:2;38890:6;38886:15;38879:39;38694:231;:::o;38931:243::-;39071:34;39067:1;39059:6;39055:14;39048:58;39140:26;39135:2;39127:6;39123:15;39116:51;38931:243;:::o;39180:229::-;39320:34;39316:1;39308:6;39304:14;39297:58;39389:12;39384:2;39376:6;39372:15;39365:37;39180:229;:::o;39415:228::-;39555:34;39551:1;39543:6;39539:14;39532:58;39624:11;39619:2;39611:6;39607:15;39600:36;39415:228;:::o;39649:167::-;39789:19;39785:1;39777:6;39773:14;39766:43;39649:167;:::o;39822:182::-;39962:34;39958:1;39950:6;39946:14;39939:58;39822:182;:::o;40010:231::-;40150:34;40146:1;40138:6;40134:14;40127:58;40219:14;40214:2;40206:6;40202:15;40195:39;40010:231;:::o;40247:182::-;40387:34;40383:1;40375:6;40371:14;40364:58;40247:182;:::o;40435:228::-;40575:34;40571:1;40563:6;40559:14;40552:58;40644:11;40639:2;40631:6;40627:15;40620:36;40435:228;:::o;40669:234::-;40809:34;40805:1;40797:6;40793:14;40786:58;40878:17;40873:2;40865:6;40861:15;40854:42;40669:234;:::o;40909:220::-;41049:34;41045:1;41037:6;41033:14;41026:58;41118:3;41113:2;41105:6;41101:15;41094:28;40909:220;:::o;41135:236::-;41275:34;41271:1;41263:6;41259:14;41252:58;41344:19;41339:2;41331:6;41327:15;41320:44;41135:236;:::o;41377:231::-;41517:34;41513:1;41505:6;41501:14;41494:58;41586:14;41581:2;41573:6;41569:15;41562:39;41377:231;:::o;41614:225::-;41754:34;41750:1;41742:6;41738:14;41731:58;41823:8;41818:2;41810:6;41806:15;41799:33;41614:225;:::o;41845:151::-;41985:3;41981:1;41973:6;41969:14;41962:27;41845:151;:::o;42002:122::-;42075:24;42093:5;42075:24;:::i;:::-;42068:5;42065:35;42055:63;;42114:1;42111;42104:12;42055:63;42002:122;:::o;42130:116::-;42200:21;42215:5;42200:21;:::i;:::-;42193:5;42190:32;42180:60;;42236:1;42233;42226:12;42180:60;42130:116;:::o;42252:120::-;42324:23;42341:5;42324:23;:::i;:::-;42317:5;42314:34;42304:62;;42362:1;42359;42352:12;42304:62;42252:120;:::o;42378:122::-;42451:24;42469:5;42451:24;:::i;:::-;42444:5;42441:35;42431:63;;42490:1;42487;42480:12;42431:63;42378:122;:::o

Swarm Source

ipfs://80408c5eb3e2e786c763fb99bd2e402b4c8bd2e0021771dd2d672ffc3847901e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.