ETH Price: $3,334.61 (-1.46%)
Gas: 15 Gwei

Token

GoblinDoge NFT (GDOGE)
 

Overview

Max Total Supply

68 GDOGE

Holders

35

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
totti.eth
Balance
4 GDOGE
0x954ba71601f6534ed776ed6ee75875b516eaba93
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:
GoblinDoge

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-18
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol

// SPDX-License-Identifier: MIT
/**
  *
  *      ...                                                                  ....                                             
  *    .x888888hx    :            dL ud8Nu  :8c                             .xH888888Hx.                                         
  *    d88888888888hxx             8Fd888888L %8               u.    u.    .H8888888888888:           u.                          
  *  8" ... `"*8888%`       .u    4N88888888cuR      .u     x@88k u@88c.  888*"""?""*88888X    ...ue888b       uL          .u    
  *  !  "   ` .xnxx.      ud8888.  4F   ^""%""d    ud8888.  ^"8888""8888" 'f     d8x.   ^%88k   888R Y888r  .ue888Nc..   ud8888.  
  *  X X   .H8888888%:  :888'8888. d       .z8   :888'8888.   8888  888R  '>    <88888X   '?8   888R I888> d88E`"888E` :888'8888. 
  *  X 'hn8888888*"   > d888 '88%" ^     z888    d888 '88%"   8888  888R   `:..:`888888>    8>  888R I888> 888E  888E  d888 '88%" 
  *  X: `*88888%`     ! 8888.+"        d8888'    8888.+"      8888  888R          `"*88     X   888R I888> 888E  888E  8888.+"    
  *  '8h.. ``     ..x8> 8888L         888888     8888L        8888  888R     .xHHhx.."      !  u8888cJ888  888E  888E  8888L      
  *  `88888888888888f  '8888c. .+   :888888     '8888c. .+  "*88*" 8888"   X88888888hx. ..!    "*888*P"   888& .888E  '8888c. .+ 
  *    '%8888888888*"    "88888%      888888      "88888%      ""   'Y"    !   "*888888888"       'Y"      *888" 888&   "88888%   
  *      ^"****""`        "YP'       '%**%         "YP'                          ^"***"`                   `"   "888E    "YP'    
  *                                                                                                        .dWi   `88E            
  *                                                                                                        4888~  J8%             
  *                                                                                                        ^"===*"`              
  *
 */
pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/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



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



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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/owner/Operator.sol


pragma solidity 0.8.0;



contract Operator is Context, Ownable {
    address private _operator;

    mapping(address => bool) public miners;

    event OperatorTransferred(
        address indexed previousOperator,
        address indexed newOperator
    );

    constructor() {
        _operator = _msgSender();
        emit OperatorTransferred(address(0), _operator);
    }

    function operator() public view returns (address) {
        return _operator;
    }

     modifier onlyMiner(){
        require(miners[msg.sender],"Not miner");
        _;
    }

    modifier onlyOperator() {
        require(
            _operator == msg.sender,
            'operator: caller is not the operator'
        );
        _;
    }


    function addMiner(address _miner) public onlyOwner(){
        miners[_miner] = true;
    }

    function removeMiner(address _miner) public onlyOwner(){
        miners[_miner] = false;
    }


    function isOperator() public view returns (bool) {
        return _msgSender() == _operator;
    }

    function transferOperator(address newOperator_) public onlyOwner {
        _transferOperator(newOperator_);
    }

    function _transferOperator(address newOperator_) internal {
        require(
            newOperator_ != address(0),
            'operator: zero address given for new operator'
        );
        emit OperatorTransferred(address(0), newOperator_);
        _operator = newOperator_;
    }
}

// File: @openzeppelin/contracts/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/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/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/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/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/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/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: contracts/activity/ERC721L.sol


pragma solidity 0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721L is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;
  uint256 private fromIndex;

  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // 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
   * `maxBatchSize` refers to how much a minter can mint at a time.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 fromIndex_
  ) {
    require(maxBatchSize_ > 0, "ERC721L: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    currentIndex = fromIndex_;
    fromIndex = fromIndex_;
    maxBatchSize = maxBatchSize_;
  }

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

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

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721L: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = fromIndex; i <= numMintedSoFar+fromIndex; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721L: unable to get token of owner by index");
  }

  /**
   * @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 ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

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

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721L: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721L: owner query for nonexistent token");
    //storage min tokenId
    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721L: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @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 override {
    address owner = ERC721L.ownerOf(tokenId);
    require(to != owner, "ERC721L: approval to current owner");

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721L: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_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 override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721L: 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`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    require(tokenId != 0, "ERC721L: owner query for nonexistent token");
    return tokenId < currentIndex && tokenId >= fromIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    //current tokenId
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721L: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721L: token already minted");
    require(quantity <= maxBatchSize, "ERC721L: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);
    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));
    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721L: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }
    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * 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
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721L: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721L: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721L: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

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

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    //renew token
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

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

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @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(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721L: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * 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`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}

// File: contracts/activity/doge/GoblinDogeNFT.sol


pragma solidity 0.8.0;





contract GoblinDoge is Operator, ERC721L, ReentrancyGuard {

  uint256 public maxSupply = 7777;
  string private _baseTokenURI;

  mapping(address=>uint256) public buyCounts;
  uint256 public startTimes;
  uint256 public maxCounts;
  uint256 public maxDevCount = 200;
  mapping(address=>uint256) public devHasMint;
  uint256 public hasMints;

  modifier notContract() {
    require(tx.origin == msg.sender, "Call is constructor");
    uint256 size;
    address account = msg.sender;
    assembly {
        size := extcodesize(account)
    }
    require(size == 0,"Not contract");
    _;
  }

  constructor() ERC721L("GoblinDoge NFT", "GDOGE", 200,1) {
    _baseTokenURI="ipfs://QmPyV357wc3csb1YmoFb3JxDZRgHNNb8f2f6CjhUUrg5J1/";
    startTimes = 1655604000;
  }
  

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

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

  function devMint(address _owner,uint256 amount) external nonReentrant onlyMiner{
    require(totalSupply() + amount <= maxSupply, "Exceed total count");
    require(devHasMint[msg.sender] + amount <= maxDevCount, "Over max supply");
    _safeMint(_owner, amount);
  }

  function publicMint(uint256 _count) payable external nonReentrant notContract{
    require(_count>0, "Count error");
    require(block.timestamp>startTimes, "Not start");
    require(totalSupply() + _count <= maxSupply, "Exceed total count");
    require(_count<=2, "Max 2");
    require(buyCounts[msg.sender]+_count<=2, "Limit 2");
    if(totalSupply() + _count > 5000){
      uint256 price = _count * 77e15;
      require(msg.value == price && price > 0, "Portion amount or price error");
    }
    _safeMint(msg.sender,_count);
    buyCounts[msg.sender] = buyCounts[msg.sender] + _count;
  }

  function withdrawCoin() external onlyOwner{
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  receive () external payable {}
}

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":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","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":"_miner","type":"address"}],"name":"addMiner","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":[{"internalType":"address","name":"","type":"address"}],"name":"buyCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"devHasMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"devMint","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":[],"name":"hasMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDevCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"miners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_miner","type":"address"}],"name":"removeMiner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"newOperator_","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260016003556000600b55611e61600d5560c86012553480156200002657600080fd5b506040518060400160405280600e81526020017f476f626c696e446f6765204e46540000000000000000000000000000000000008152506040518060400160405280600581526020017f47444f474500000000000000000000000000000000000000000000000000000081525060c86001620000b7620000ab6200026160201b60201c565b6200026960201b60201c565b620000c76200026160201b60201c565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a360008211620001ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c19062000445565b60405180910390fd5b8360059080519060200190620001e29291906200032d565b508260069080519060200190620001fb9291906200032d565b5080600381905550806004819055508160808181525050505050506001600c81905550604051806060016040528060368152602001620053a260369139600e90805190602001906200024f9291906200032d565b506362ae8320601081905550620004dd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200033b9062000478565b90600052602060002090601f0160209004810192826200035f5760008555620003ab565b82601f106200037a57805160ff1916838001178555620003ab565b82800160010185558215620003ab579182015b82811115620003aa5782518255916020019190600101906200038d565b5b509050620003ba9190620003be565b5090565b5b80821115620003d9576000816000905550600101620003bf565b5090565b6000620003ec60278362000467565b91507f4552433732314c3a206d61782062617463682073697a65206d7573742062652060008301527f6e6f6e7a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b600060208201905081810360008301526200046081620003dd565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200049157607f821691505b60208210811415620004a857620004a7620004ae565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b608051614e9b62000507600039600081816128c1015281816128ea0152612fd80152614e9b6000f3fe60806040526004361061021e5760003560e01c8063627804af11610123578063c87b56dd116100ab578063de908ab41161006f578063de908ab4146107f5578063e985e9c514610820578063f2fde38b1461085d578063f3982e5e14610886578063fbbd0736146108af57610225565b8063c87b56dd146106e8578063cc79221d14610725578063d46f75b814610762578063d5abeb011461079f578063d7224ba0146107ca57610225565b8063715018a6116100f2578063715018a6146106295780638da5cb5b1461064057806395d89b411461066b578063a22cb46514610696578063b88d4fde146106bf57610225565b8063627804af146105495780636352211e14610572578063648ec7b9146105af57806370a08231146105ec57610225565b80632db11544116101a65780634c7c71fe116101755780634c7c71fe146104765780634f6ccce7146104a157806355f804b3146104de578063570ca735146105075780636220aea81461053257610225565b80632db11544146103c95780632f745c59146103e557806342842e0e146104225780634456eda21461044b57610225565b806310242590116101ed57806310242590146102f857806318160ddd1461032157806323b872dd1461034c57806329605e77146103755780632974dc3b1461039e57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906137a8565b6108da565b60405161025e91906144de565b60405180910390f35b34801561027357600080fd5b5061027c610a24565b60405161028991906144f9565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061383f565b610ab6565b6040516102c69190614477565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061376c565b610b3b565b005b34801561030457600080fd5b5061031f600480360381019061031a9190613601565b610c54565b005b34801561032d57600080fd5b50610336610d2b565b604051610343919061493b565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190613666565b610d42565b005b34801561038157600080fd5b5061039c60048036038101906103979190613601565b610d52565b005b3480156103aa57600080fd5b506103b3610dda565b6040516103c0919061493b565b60405180910390f35b6103e360048036038101906103de919061383f565b610de0565b005b3480156103f157600080fd5b5061040c6004803603810190610407919061376c565b6111c2565b604051610419919061493b565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613666565b6113d1565b005b34801561045757600080fd5b506104606113f1565b60405161046d91906144de565b60405180910390f35b34801561048257600080fd5b5061048b611450565b604051610498919061493b565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c3919061383f565b611456565b6040516104d5919061493b565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906137fa565b6114b6565b005b34801561051357600080fd5b5061051c611548565b6040516105299190614477565b60405180910390f35b34801561053e57600080fd5b50610547611572565b005b34801561055557600080fd5b50610570600480360381019061056b919061376c565b61169d565b005b34801561057e57600080fd5b506105996004803603810190610594919061383f565b611873565b6040516105a69190614477565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190613601565b611889565b6040516105e391906144de565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190613601565b6118a9565b604051610620919061493b565b60405180910390f35b34801561063557600080fd5b5061063e611992565b005b34801561064c57600080fd5b50610655611a1a565b6040516106629190614477565b60405180910390f35b34801561067757600080fd5b50610680611a43565b60405161068d91906144f9565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613730565b611ad5565b005b3480156106cb57600080fd5b506106e660048036038101906106e191906136b5565b611c56565b005b3480156106f457600080fd5b5061070f600480360381019061070a919061383f565b611cb2565b60405161071c91906144f9565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190613601565b611d59565b604051610759919061493b565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613601565b611d71565b604051610796919061493b565b60405180910390f35b3480156107ab57600080fd5b506107b4611d89565b6040516107c1919061493b565b60405180910390f35b3480156107d657600080fd5b506107df611d8f565b6040516107ec919061493b565b60405180910390f35b34801561080157600080fd5b5061080a611d95565b604051610817919061493b565b60405180910390f35b34801561082c57600080fd5b506108476004803603810190610842919061362a565b611d9b565b60405161085491906144de565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f9190613601565b611e2f565b005b34801561089257600080fd5b506108ad60048036038101906108a89190613601565b611f27565b005b3480156108bb57600080fd5b506108c4611ffe565b6040516108d1919061493b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1d5750610a1c82612004565b5b9050919050565b606060058054610a3390614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f90614c90565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b5050505050905090565b6000610ac18261206e565b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906147fb565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4682611873565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906145db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd66120cd565b73ffffffffffffffffffffffffffffffffffffffff161480610c055750610c0481610bff6120cd565b611d9b565b5b610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b9061487b565b60405180910390fd5b610c4f8383836120d5565b505050565b610c5c6120cd565b73ffffffffffffffffffffffffffffffffffffffff16610c7a611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc7906146fb565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600454600354610d3d9190614b60565b905090565b610d4d838383612187565b505050565b610d5a6120cd565b73ffffffffffffffffffffffffffffffffffffffff16610d78611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc5906146fb565b60405180910390fd5b610dd781612740565b50565b60145481565b6002600c541415610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d9061489b565b60405180910390fd5b6002600c819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061477b565b60405180910390fd5b600080339050803b915060008214610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee09061471b565b60405180910390fd5b60008311610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f23906145bb565b60405180910390fd5b6010544211610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906146db565b60405180910390fd5b600d5483610f7c610d2b565b610f869190614a4b565b1115610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe9061459b565b60405180910390fd5b600283111561100b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110029061457b565b60405180910390fd5b600283600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110589190614a4b565b1115611099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110909061475b565b60405180910390fd5b611388836110a5610d2b565b6110af9190614a4b565b111561111d5760006701118f178fb48000846110cb9190614ad2565b905080341480156110dc5750600081115b61111b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111129061467b565b60405180910390fd5b505b611127338461284f565b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111729190614a4b565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050506001600c8190555050565b60006111cd836118a9565b821061120e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611205906148bb565b60405180910390fd5b6000611218610d2b565b9050600080600060045490505b600454846112339190614a4b565b811161138f576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461132357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561137b578684141561136c5781955050505050506113cb565b838061137790614cc2565b9450505b50808061138790614cc2565b915050611225565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c29061453b565b60405180910390fd5b92915050565b6113ec83838360405180602001604052806000815250611c56565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114346120cd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60105481565b6000611460610d2b565b82106114a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611498906147bb565b60405180910390fd5b600454826114af9190614a4b565b9050919050565b6114be6120cd565b73ffffffffffffffffffffffffffffffffffffffff166114dc611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611529906146fb565b60405180910390fd5b8181600e9190611543929190613409565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157a6120cd565b73ffffffffffffffffffffffffffffffffffffffff16611598611a1a565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906146fb565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161161490614462565b60006040518083038185875af1925050503d8060008114611651576040519150601f19603f3d011682016040523d82523d6000602084013e611656565b606091505b505090508061169a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611691906147db565b60405180910390fd5b50565b6002600c5414156116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da9061489b565b60405180910390fd5b6002600c81905550600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906146bb565b60405180910390fd5b600d5481611783610d2b565b61178d9190614a4b565b11156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c59061459b565b60405180910390fd5b60125481601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461181c9190614a4b565b111561185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061491b565b60405180910390fd5b611867828261284f565b6001600c819055505050565b600061187e8261286d565b600001519050919050565b60026020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119119061469b565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61199a6120cd565b73ffffffffffffffffffffffffffffffffffffffff166119b8611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906146fb565b60405180910390fd5b611a186000612a70565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054611a5290614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7e90614c90565b8015611acb5780601f10611aa057610100808354040283529160200191611acb565b820191906000526020600020905b815481529060010190602001808311611aae57829003601f168201915b5050505050905090565b611add6120cd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b429061481b565b60405180910390fd5b80600a6000611b586120cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c056120cd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4a91906144de565b60405180910390a35050565b611c61848484612187565b611c6d84848484612b34565b611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca3906148db565b60405180910390fd5b50505050565b6060611cbd8261206e565b611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf39061473b565b60405180910390fd5b6000611d06612ccb565b90506000815111611d265760405180602001604052806000815250611d51565b80611d3084612d5d565b604051602001611d4192919061443e565b6040516020818303038152906040525b915050919050565b600f6020528060005260406000206000915090505481565b60136020528060005260406000206000915090505481565b600d5481565b600b5481565b60115481565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e376120cd565b73ffffffffffffffffffffffffffffffffffffffff16611e55611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea2906146fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f129061455b565b60405180910390fd5b611f2481612a70565b50565b611f2f6120cd565b73ffffffffffffffffffffffffffffffffffffffff16611f4d611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a906146fb565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000808214156120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa906145fb565b60405180910390fd5b600354821080156120c657506004548210155b9050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121928261286d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121b96120cd565b73ffffffffffffffffffffffffffffffffffffffff16148061221557506121de6120cd565b73ffffffffffffffffffffffffffffffffffffffff166121fd84610ab6565b73ffffffffffffffffffffffffffffffffffffffff16145b806122315750612230826000015161222b6120cd565b611d9b565b5b905080612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a9061461b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc9061483b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c906148fb565b60405180910390fd5b6123628585856001612f0a565b61237260008484600001516120d5565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123e09190614b2c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124849190614a05565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461258a9190614a4b565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126d0576126008161206e565b156126cf576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127388686866001612f10565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a79061463b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612869828260405180602001604052806000815250612f16565b5050565b61287561348f565b61287e8261206e565b6128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b4906145fb565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106129215760017f0000000000000000000000000000000000000000000000000000000000000000846129149190614b60565b61291e9190614a4b565b90505b60008390505b818110612a2f576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a1b57809350505050612a6b565b508080612a2790614c66565b915050612927565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a629061485b565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612b558473ffffffffffffffffffffffffffffffffffffffff166133f6565b15612cbe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b7e6120cd565b8786866040518563ffffffff1660e01b8152600401612ba09493929190614492565b602060405180830381600087803b158015612bba57600080fd5b505af1925050508015612beb57506040513d601f19601f82011682018060405250810190612be891906137d1565b60015b612c6e573d8060008114612c1b576040519150601f19603f3d011682016040523d82523d6000602084013e612c20565b606091505b50600081511415612c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5d906148db565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cc3565b600190505b949350505050565b6060600e8054612cda90614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0690614c90565b8015612d535780601f10612d2857610100808354040283529160200191612d53565b820191906000526020600020905b815481529060010190602001808311612d3657829003601f168201915b5050505050905090565b60606000821415612da5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f05565b600082905060005b60008214612dd7578080612dc090614cc2565b915050600a82612dd09190614aa1565b9150612dad565b60008167ffffffffffffffff811115612e19577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e4b5781602001600182028036833780820191505090505b5090505b60008514612efe57600182612e649190614b60565b9150600a85612e739190614d0b565b6030612e7f9190614a4b565b60f81b818381518110612ebb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ef79190614aa1565b9450612e4f565b8093505050505b919050565b50505050565b50505050565b60006003549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f849061465b565b60405180910390fd5b612f968161206e565b15612fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcd9061479b565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130309061451b565b60405180910390fd5b6130466000858386612f0a565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516131439190614a05565b6fffffffffffffffffffffffffffffffff16815260200185836020015161316a9190614a05565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156133d957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133796000888488612b34565b6133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af906148db565b60405180910390fd5b81806133c390614cc2565b92505080806133d190614cc2565b915050613308565b50806003819055506133ee6000878588612f10565b505050505050565b600080823b905060008111915050919050565b82805461341590614c90565b90600052602060002090601f016020900481019282613437576000855561347e565b82601f1061345057803560ff191683800117855561347e565b8280016001018555821561347e579182015b8281111561347d578235825591602001919060010190613462565b5b50905061348b91906134c9565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156134e25760008160009055506001016134ca565b5090565b60006134f96134f484614987565b614956565b90508281526020810184848401111561351157600080fd5b61351c848285614c24565b509392505050565b60008135905061353381614e09565b92915050565b60008135905061354881614e20565b92915050565b60008135905061355d81614e37565b92915050565b60008151905061357281614e37565b92915050565b600082601f83011261358957600080fd5b81356135998482602086016134e6565b91505092915050565b60008083601f8401126135b457600080fd5b8235905067ffffffffffffffff8111156135cd57600080fd5b6020830191508360018202830111156135e557600080fd5b9250929050565b6000813590506135fb81614e4e565b92915050565b60006020828403121561361357600080fd5b600061362184828501613524565b91505092915050565b6000806040838503121561363d57600080fd5b600061364b85828601613524565b925050602061365c85828601613524565b9150509250929050565b60008060006060848603121561367b57600080fd5b600061368986828701613524565b935050602061369a86828701613524565b92505060406136ab868287016135ec565b9150509250925092565b600080600080608085870312156136cb57600080fd5b60006136d987828801613524565b94505060206136ea87828801613524565b93505060406136fb878288016135ec565b925050606085013567ffffffffffffffff81111561371857600080fd5b61372487828801613578565b91505092959194509250565b6000806040838503121561374357600080fd5b600061375185828601613524565b925050602061376285828601613539565b9150509250929050565b6000806040838503121561377f57600080fd5b600061378d85828601613524565b925050602061379e858286016135ec565b9150509250929050565b6000602082840312156137ba57600080fd5b60006137c88482850161354e565b91505092915050565b6000602082840312156137e357600080fd5b60006137f184828501613563565b91505092915050565b6000806020838503121561380d57600080fd5b600083013567ffffffffffffffff81111561382757600080fd5b613833858286016135a2565b92509250509250929050565b60006020828403121561385157600080fd5b600061385f848285016135ec565b91505092915050565b61387181614b94565b82525050565b61388081614ba6565b82525050565b6000613891826149b7565b61389b81856149cd565b93506138ab818560208601614c33565b6138b481614df8565b840191505092915050565b60006138ca826149c2565b6138d481856149e9565b93506138e4818560208601614c33565b6138ed81614df8565b840191505092915050565b6000613903826149c2565b61390d81856149fa565b935061391d818560208601614c33565b80840191505092915050565b60006139366022836149e9565b91507f4552433732314c3a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061399c602e836149e9565b91507f4552433732314c3a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613a026026836149e9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a686005836149e9565b91507f4d617820320000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613aa86012836149e9565b91507f45786365656420746f74616c20636f756e7400000000000000000000000000006000830152602082019050919050565b6000613ae8600b836149e9565b91507f436f756e74206572726f720000000000000000000000000000000000000000006000830152602082019050919050565b6000613b286022836149e9565b91507f4552433732314c3a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b8e602a836149e9565b91507f4552433732314c3a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bf46032836149e9565b91507f4552433732314c3a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613c5a602d836149e9565b91507f6f70657261746f723a207a65726f206164647265737320676976656e20666f7260008301527f206e6577206f70657261746f72000000000000000000000000000000000000006020830152604082019050919050565b6000613cc06021836149e9565b91507f4552433732314c3a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d26601d836149e9565b91507f506f7274696f6e20616d6f756e74206f72207072696365206572726f720000006000830152602082019050919050565b6000613d66602b836149e9565b91507f4552433732314c3a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613dcc6009836149e9565b91507f4e6f74206d696e657200000000000000000000000000000000000000000000006000830152602082019050919050565b6000613e0c6009836149e9565b91507f4e6f7420737461727400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613e4c6020836149e9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613e8c600c836149e9565b91507f4e6f7420636f6e747261637400000000000000000000000000000000000000006000830152602082019050919050565b6000613ecc602f836149e9565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613f326007836149e9565b91507f4c696d69742032000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f726013836149e9565b91507f43616c6c20697320636f6e7374727563746f72000000000000000000000000006000830152602082019050919050565b6000613fb2601d836149e9565b91507f4552433732314c3a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613ff26000836149de565b9150600082019050919050565b600061400c6023836149e9565b91507f4552433732314c3a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140726010836149e9565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b60006140b2602d836149e9565b91507f4552433732314c3a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614118601a836149e9565b91507f4552433732314c3a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006141586026836149e9565b91507f4552433732314c3a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141be602f836149e9565b91507f4552433732314c3a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006142246039836149e9565b91507f4552433732314c3a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061428a601f836149e9565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006142ca6022836149e9565b91507f4552433732314c3a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143306033836149e9565b91507f4552433732314c3a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006143966025836149e9565b91507f4552433732314c3a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143fc600f836149e9565b91507f4f766572206d617820737570706c7900000000000000000000000000000000006000830152602082019050919050565b61443881614c1a565b82525050565b600061444a82856138f8565b915061445682846138f8565b91508190509392505050565b600061446d82613fe5565b9150819050919050565b600060208201905061448c6000830184613868565b92915050565b60006080820190506144a76000830187613868565b6144b46020830186613868565b6144c1604083018561442f565b81810360608301526144d38184613886565b905095945050505050565b60006020820190506144f36000830184613877565b92915050565b6000602082019050818103600083015261451381846138bf565b905092915050565b6000602082019050818103600083015261453481613929565b9050919050565b600060208201905081810360008301526145548161398f565b9050919050565b60006020820190508181036000830152614574816139f5565b9050919050565b6000602082019050818103600083015261459481613a5b565b9050919050565b600060208201905081810360008301526145b481613a9b565b9050919050565b600060208201905081810360008301526145d481613adb565b9050919050565b600060208201905081810360008301526145f481613b1b565b9050919050565b6000602082019050818103600083015261461481613b81565b9050919050565b6000602082019050818103600083015261463481613be7565b9050919050565b6000602082019050818103600083015261465481613c4d565b9050919050565b6000602082019050818103600083015261467481613cb3565b9050919050565b6000602082019050818103600083015261469481613d19565b9050919050565b600060208201905081810360008301526146b481613d59565b9050919050565b600060208201905081810360008301526146d481613dbf565b9050919050565b600060208201905081810360008301526146f481613dff565b9050919050565b6000602082019050818103600083015261471481613e3f565b9050919050565b6000602082019050818103600083015261473481613e7f565b9050919050565b6000602082019050818103600083015261475481613ebf565b9050919050565b6000602082019050818103600083015261477481613f25565b9050919050565b6000602082019050818103600083015261479481613f65565b9050919050565b600060208201905081810360008301526147b481613fa5565b9050919050565b600060208201905081810360008301526147d481613fff565b9050919050565b600060208201905081810360008301526147f481614065565b9050919050565b60006020820190508181036000830152614814816140a5565b9050919050565b600060208201905081810360008301526148348161410b565b9050919050565b600060208201905081810360008301526148548161414b565b9050919050565b60006020820190508181036000830152614874816141b1565b9050919050565b6000602082019050818103600083015261489481614217565b9050919050565b600060208201905081810360008301526148b48161427d565b9050919050565b600060208201905081810360008301526148d4816142bd565b9050919050565b600060208201905081810360008301526148f481614323565b9050919050565b6000602082019050818103600083015261491481614389565b9050919050565b60006020820190508181036000830152614934816143ef565b9050919050565b6000602082019050614950600083018461442f565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561497d5761497c614dc9565b5b8060405250919050565b600067ffffffffffffffff8211156149a2576149a1614dc9565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a1082614bde565b9150614a1b83614bde565b9250826fffffffffffffffffffffffffffffffff03821115614a4057614a3f614d3c565b5b828201905092915050565b6000614a5682614c1a565b9150614a6183614c1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a9657614a95614d3c565b5b828201905092915050565b6000614aac82614c1a565b9150614ab783614c1a565b925082614ac757614ac6614d6b565b5b828204905092915050565b6000614add82614c1a565b9150614ae883614c1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b2157614b20614d3c565b5b828202905092915050565b6000614b3782614bde565b9150614b4283614bde565b925082821015614b5557614b54614d3c565b5b828203905092915050565b6000614b6b82614c1a565b9150614b7683614c1a565b925082821015614b8957614b88614d3c565b5b828203905092915050565b6000614b9f82614bfa565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c51578082015181840152602081019050614c36565b83811115614c60576000848401525b50505050565b6000614c7182614c1a565b91506000821415614c8557614c84614d3c565b5b600182039050919050565b60006002820490506001821680614ca857607f821691505b60208210811415614cbc57614cbb614d9a565b5b50919050565b6000614ccd82614c1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0057614cff614d3c565b5b600182019050919050565b6000614d1682614c1a565b9150614d2183614c1a565b925082614d3157614d30614d6b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614e1281614b94565b8114614e1d57600080fd5b50565b614e2981614ba6565b8114614e3457600080fd5b50565b614e4081614bb2565b8114614e4b57600080fd5b50565b614e5781614c1a565b8114614e6257600080fd5b5056fea2646970667358221220e5ec101caf983c97a61441e9d9d91c6622608d494b2814a605b1512c64dcc9a264736f6c63430008000033697066733a2f2f516d50795633353777633363736231596d6f4662334a78445a5267484e4e623866326636436a6855557267354a312f

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063627804af11610123578063c87b56dd116100ab578063de908ab41161006f578063de908ab4146107f5578063e985e9c514610820578063f2fde38b1461085d578063f3982e5e14610886578063fbbd0736146108af57610225565b8063c87b56dd146106e8578063cc79221d14610725578063d46f75b814610762578063d5abeb011461079f578063d7224ba0146107ca57610225565b8063715018a6116100f2578063715018a6146106295780638da5cb5b1461064057806395d89b411461066b578063a22cb46514610696578063b88d4fde146106bf57610225565b8063627804af146105495780636352211e14610572578063648ec7b9146105af57806370a08231146105ec57610225565b80632db11544116101a65780634c7c71fe116101755780634c7c71fe146104765780634f6ccce7146104a157806355f804b3146104de578063570ca735146105075780636220aea81461053257610225565b80632db11544146103c95780632f745c59146103e557806342842e0e146104225780634456eda21461044b57610225565b806310242590116101ed57806310242590146102f857806318160ddd1461032157806323b872dd1461034c57806329605e77146103755780632974dc3b1461039e57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906137a8565b6108da565b60405161025e91906144de565b60405180910390f35b34801561027357600080fd5b5061027c610a24565b60405161028991906144f9565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061383f565b610ab6565b6040516102c69190614477565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061376c565b610b3b565b005b34801561030457600080fd5b5061031f600480360381019061031a9190613601565b610c54565b005b34801561032d57600080fd5b50610336610d2b565b604051610343919061493b565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190613666565b610d42565b005b34801561038157600080fd5b5061039c60048036038101906103979190613601565b610d52565b005b3480156103aa57600080fd5b506103b3610dda565b6040516103c0919061493b565b60405180910390f35b6103e360048036038101906103de919061383f565b610de0565b005b3480156103f157600080fd5b5061040c6004803603810190610407919061376c565b6111c2565b604051610419919061493b565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613666565b6113d1565b005b34801561045757600080fd5b506104606113f1565b60405161046d91906144de565b60405180910390f35b34801561048257600080fd5b5061048b611450565b604051610498919061493b565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c3919061383f565b611456565b6040516104d5919061493b565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906137fa565b6114b6565b005b34801561051357600080fd5b5061051c611548565b6040516105299190614477565b60405180910390f35b34801561053e57600080fd5b50610547611572565b005b34801561055557600080fd5b50610570600480360381019061056b919061376c565b61169d565b005b34801561057e57600080fd5b506105996004803603810190610594919061383f565b611873565b6040516105a69190614477565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190613601565b611889565b6040516105e391906144de565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190613601565b6118a9565b604051610620919061493b565b60405180910390f35b34801561063557600080fd5b5061063e611992565b005b34801561064c57600080fd5b50610655611a1a565b6040516106629190614477565b60405180910390f35b34801561067757600080fd5b50610680611a43565b60405161068d91906144f9565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613730565b611ad5565b005b3480156106cb57600080fd5b506106e660048036038101906106e191906136b5565b611c56565b005b3480156106f457600080fd5b5061070f600480360381019061070a919061383f565b611cb2565b60405161071c91906144f9565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190613601565b611d59565b604051610759919061493b565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613601565b611d71565b604051610796919061493b565b60405180910390f35b3480156107ab57600080fd5b506107b4611d89565b6040516107c1919061493b565b60405180910390f35b3480156107d657600080fd5b506107df611d8f565b6040516107ec919061493b565b60405180910390f35b34801561080157600080fd5b5061080a611d95565b604051610817919061493b565b60405180910390f35b34801561082c57600080fd5b506108476004803603810190610842919061362a565b611d9b565b60405161085491906144de565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f9190613601565b611e2f565b005b34801561089257600080fd5b506108ad60048036038101906108a89190613601565b611f27565b005b3480156108bb57600080fd5b506108c4611ffe565b6040516108d1919061493b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1d5750610a1c82612004565b5b9050919050565b606060058054610a3390614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f90614c90565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b5050505050905090565b6000610ac18261206e565b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906147fb565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4682611873565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906145db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd66120cd565b73ffffffffffffffffffffffffffffffffffffffff161480610c055750610c0481610bff6120cd565b611d9b565b5b610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b9061487b565b60405180910390fd5b610c4f8383836120d5565b505050565b610c5c6120cd565b73ffffffffffffffffffffffffffffffffffffffff16610c7a611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc7906146fb565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600454600354610d3d9190614b60565b905090565b610d4d838383612187565b505050565b610d5a6120cd565b73ffffffffffffffffffffffffffffffffffffffff16610d78611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc5906146fb565b60405180910390fd5b610dd781612740565b50565b60145481565b6002600c541415610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d9061489b565b60405180910390fd5b6002600c819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061477b565b60405180910390fd5b600080339050803b915060008214610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee09061471b565b60405180910390fd5b60008311610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f23906145bb565b60405180910390fd5b6010544211610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906146db565b60405180910390fd5b600d5483610f7c610d2b565b610f869190614a4b565b1115610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe9061459b565b60405180910390fd5b600283111561100b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110029061457b565b60405180910390fd5b600283600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110589190614a4b565b1115611099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110909061475b565b60405180910390fd5b611388836110a5610d2b565b6110af9190614a4b565b111561111d5760006701118f178fb48000846110cb9190614ad2565b905080341480156110dc5750600081115b61111b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111129061467b565b60405180910390fd5b505b611127338461284f565b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111729190614a4b565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050506001600c8190555050565b60006111cd836118a9565b821061120e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611205906148bb565b60405180910390fd5b6000611218610d2b565b9050600080600060045490505b600454846112339190614a4b565b811161138f576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461132357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561137b578684141561136c5781955050505050506113cb565b838061137790614cc2565b9450505b50808061138790614cc2565b915050611225565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c29061453b565b60405180910390fd5b92915050565b6113ec83838360405180602001604052806000815250611c56565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114346120cd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60105481565b6000611460610d2b565b82106114a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611498906147bb565b60405180910390fd5b600454826114af9190614a4b565b9050919050565b6114be6120cd565b73ffffffffffffffffffffffffffffffffffffffff166114dc611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611529906146fb565b60405180910390fd5b8181600e9190611543929190613409565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157a6120cd565b73ffffffffffffffffffffffffffffffffffffffff16611598611a1a565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906146fb565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161161490614462565b60006040518083038185875af1925050503d8060008114611651576040519150601f19603f3d011682016040523d82523d6000602084013e611656565b606091505b505090508061169a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611691906147db565b60405180910390fd5b50565b6002600c5414156116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da9061489b565b60405180910390fd5b6002600c81905550600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906146bb565b60405180910390fd5b600d5481611783610d2b565b61178d9190614a4b565b11156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c59061459b565b60405180910390fd5b60125481601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461181c9190614a4b565b111561185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061491b565b60405180910390fd5b611867828261284f565b6001600c819055505050565b600061187e8261286d565b600001519050919050565b60026020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119119061469b565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61199a6120cd565b73ffffffffffffffffffffffffffffffffffffffff166119b8611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906146fb565b60405180910390fd5b611a186000612a70565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054611a5290614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7e90614c90565b8015611acb5780601f10611aa057610100808354040283529160200191611acb565b820191906000526020600020905b815481529060010190602001808311611aae57829003601f168201915b5050505050905090565b611add6120cd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b429061481b565b60405180910390fd5b80600a6000611b586120cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c056120cd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4a91906144de565b60405180910390a35050565b611c61848484612187565b611c6d84848484612b34565b611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca3906148db565b60405180910390fd5b50505050565b6060611cbd8261206e565b611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf39061473b565b60405180910390fd5b6000611d06612ccb565b90506000815111611d265760405180602001604052806000815250611d51565b80611d3084612d5d565b604051602001611d4192919061443e565b6040516020818303038152906040525b915050919050565b600f6020528060005260406000206000915090505481565b60136020528060005260406000206000915090505481565b600d5481565b600b5481565b60115481565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e376120cd565b73ffffffffffffffffffffffffffffffffffffffff16611e55611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea2906146fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f129061455b565b60405180910390fd5b611f2481612a70565b50565b611f2f6120cd565b73ffffffffffffffffffffffffffffffffffffffff16611f4d611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a906146fb565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000808214156120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa906145fb565b60405180910390fd5b600354821080156120c657506004548210155b9050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121928261286d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121b96120cd565b73ffffffffffffffffffffffffffffffffffffffff16148061221557506121de6120cd565b73ffffffffffffffffffffffffffffffffffffffff166121fd84610ab6565b73ffffffffffffffffffffffffffffffffffffffff16145b806122315750612230826000015161222b6120cd565b611d9b565b5b905080612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a9061461b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc9061483b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c906148fb565b60405180910390fd5b6123628585856001612f0a565b61237260008484600001516120d5565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123e09190614b2c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124849190614a05565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461258a9190614a4b565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126d0576126008161206e565b156126cf576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127388686866001612f10565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a79061463b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612869828260405180602001604052806000815250612f16565b5050565b61287561348f565b61287e8261206e565b6128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b4906145fb565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000c883106129215760017f00000000000000000000000000000000000000000000000000000000000000c8846129149190614b60565b61291e9190614a4b565b90505b60008390505b818110612a2f576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a1b57809350505050612a6b565b508080612a2790614c66565b915050612927565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a629061485b565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612b558473ffffffffffffffffffffffffffffffffffffffff166133f6565b15612cbe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b7e6120cd565b8786866040518563ffffffff1660e01b8152600401612ba09493929190614492565b602060405180830381600087803b158015612bba57600080fd5b505af1925050508015612beb57506040513d601f19601f82011682018060405250810190612be891906137d1565b60015b612c6e573d8060008114612c1b576040519150601f19603f3d011682016040523d82523d6000602084013e612c20565b606091505b50600081511415612c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5d906148db565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cc3565b600190505b949350505050565b6060600e8054612cda90614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0690614c90565b8015612d535780601f10612d2857610100808354040283529160200191612d53565b820191906000526020600020905b815481529060010190602001808311612d3657829003601f168201915b5050505050905090565b60606000821415612da5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f05565b600082905060005b60008214612dd7578080612dc090614cc2565b915050600a82612dd09190614aa1565b9150612dad565b60008167ffffffffffffffff811115612e19577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e4b5781602001600182028036833780820191505090505b5090505b60008514612efe57600182612e649190614b60565b9150600a85612e739190614d0b565b6030612e7f9190614a4b565b60f81b818381518110612ebb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ef79190614aa1565b9450612e4f565b8093505050505b919050565b50505050565b50505050565b60006003549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f849061465b565b60405180910390fd5b612f968161206e565b15612fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcd9061479b565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000c8831115613039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130309061451b565b60405180910390fd5b6130466000858386612f0a565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516131439190614a05565b6fffffffffffffffffffffffffffffffff16815260200185836020015161316a9190614a05565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156133d957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133796000888488612b34565b6133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af906148db565b60405180910390fd5b81806133c390614cc2565b92505080806133d190614cc2565b915050613308565b50806003819055506133ee6000878588612f10565b505050505050565b600080823b905060008111915050919050565b82805461341590614c90565b90600052602060002090601f016020900481019282613437576000855561347e565b82601f1061345057803560ff191683800117855561347e565b8280016001018555821561347e579182015b8281111561347d578235825591602001919060010190613462565b5b50905061348b91906134c9565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156134e25760008160009055506001016134ca565b5090565b60006134f96134f484614987565b614956565b90508281526020810184848401111561351157600080fd5b61351c848285614c24565b509392505050565b60008135905061353381614e09565b92915050565b60008135905061354881614e20565b92915050565b60008135905061355d81614e37565b92915050565b60008151905061357281614e37565b92915050565b600082601f83011261358957600080fd5b81356135998482602086016134e6565b91505092915050565b60008083601f8401126135b457600080fd5b8235905067ffffffffffffffff8111156135cd57600080fd5b6020830191508360018202830111156135e557600080fd5b9250929050565b6000813590506135fb81614e4e565b92915050565b60006020828403121561361357600080fd5b600061362184828501613524565b91505092915050565b6000806040838503121561363d57600080fd5b600061364b85828601613524565b925050602061365c85828601613524565b9150509250929050565b60008060006060848603121561367b57600080fd5b600061368986828701613524565b935050602061369a86828701613524565b92505060406136ab868287016135ec565b9150509250925092565b600080600080608085870312156136cb57600080fd5b60006136d987828801613524565b94505060206136ea87828801613524565b93505060406136fb878288016135ec565b925050606085013567ffffffffffffffff81111561371857600080fd5b61372487828801613578565b91505092959194509250565b6000806040838503121561374357600080fd5b600061375185828601613524565b925050602061376285828601613539565b9150509250929050565b6000806040838503121561377f57600080fd5b600061378d85828601613524565b925050602061379e858286016135ec565b9150509250929050565b6000602082840312156137ba57600080fd5b60006137c88482850161354e565b91505092915050565b6000602082840312156137e357600080fd5b60006137f184828501613563565b91505092915050565b6000806020838503121561380d57600080fd5b600083013567ffffffffffffffff81111561382757600080fd5b613833858286016135a2565b92509250509250929050565b60006020828403121561385157600080fd5b600061385f848285016135ec565b91505092915050565b61387181614b94565b82525050565b61388081614ba6565b82525050565b6000613891826149b7565b61389b81856149cd565b93506138ab818560208601614c33565b6138b481614df8565b840191505092915050565b60006138ca826149c2565b6138d481856149e9565b93506138e4818560208601614c33565b6138ed81614df8565b840191505092915050565b6000613903826149c2565b61390d81856149fa565b935061391d818560208601614c33565b80840191505092915050565b60006139366022836149e9565b91507f4552433732314c3a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061399c602e836149e9565b91507f4552433732314c3a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613a026026836149e9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a686005836149e9565b91507f4d617820320000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613aa86012836149e9565b91507f45786365656420746f74616c20636f756e7400000000000000000000000000006000830152602082019050919050565b6000613ae8600b836149e9565b91507f436f756e74206572726f720000000000000000000000000000000000000000006000830152602082019050919050565b6000613b286022836149e9565b91507f4552433732314c3a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b8e602a836149e9565b91507f4552433732314c3a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bf46032836149e9565b91507f4552433732314c3a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613c5a602d836149e9565b91507f6f70657261746f723a207a65726f206164647265737320676976656e20666f7260008301527f206e6577206f70657261746f72000000000000000000000000000000000000006020830152604082019050919050565b6000613cc06021836149e9565b91507f4552433732314c3a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d26601d836149e9565b91507f506f7274696f6e20616d6f756e74206f72207072696365206572726f720000006000830152602082019050919050565b6000613d66602b836149e9565b91507f4552433732314c3a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613dcc6009836149e9565b91507f4e6f74206d696e657200000000000000000000000000000000000000000000006000830152602082019050919050565b6000613e0c6009836149e9565b91507f4e6f7420737461727400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613e4c6020836149e9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613e8c600c836149e9565b91507f4e6f7420636f6e747261637400000000000000000000000000000000000000006000830152602082019050919050565b6000613ecc602f836149e9565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613f326007836149e9565b91507f4c696d69742032000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f726013836149e9565b91507f43616c6c20697320636f6e7374727563746f72000000000000000000000000006000830152602082019050919050565b6000613fb2601d836149e9565b91507f4552433732314c3a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613ff26000836149de565b9150600082019050919050565b600061400c6023836149e9565b91507f4552433732314c3a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140726010836149e9565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b60006140b2602d836149e9565b91507f4552433732314c3a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614118601a836149e9565b91507f4552433732314c3a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006141586026836149e9565b91507f4552433732314c3a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141be602f836149e9565b91507f4552433732314c3a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006142246039836149e9565b91507f4552433732314c3a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061428a601f836149e9565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006142ca6022836149e9565b91507f4552433732314c3a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143306033836149e9565b91507f4552433732314c3a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006143966025836149e9565b91507f4552433732314c3a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143fc600f836149e9565b91507f4f766572206d617820737570706c7900000000000000000000000000000000006000830152602082019050919050565b61443881614c1a565b82525050565b600061444a82856138f8565b915061445682846138f8565b91508190509392505050565b600061446d82613fe5565b9150819050919050565b600060208201905061448c6000830184613868565b92915050565b60006080820190506144a76000830187613868565b6144b46020830186613868565b6144c1604083018561442f565b81810360608301526144d38184613886565b905095945050505050565b60006020820190506144f36000830184613877565b92915050565b6000602082019050818103600083015261451381846138bf565b905092915050565b6000602082019050818103600083015261453481613929565b9050919050565b600060208201905081810360008301526145548161398f565b9050919050565b60006020820190508181036000830152614574816139f5565b9050919050565b6000602082019050818103600083015261459481613a5b565b9050919050565b600060208201905081810360008301526145b481613a9b565b9050919050565b600060208201905081810360008301526145d481613adb565b9050919050565b600060208201905081810360008301526145f481613b1b565b9050919050565b6000602082019050818103600083015261461481613b81565b9050919050565b6000602082019050818103600083015261463481613be7565b9050919050565b6000602082019050818103600083015261465481613c4d565b9050919050565b6000602082019050818103600083015261467481613cb3565b9050919050565b6000602082019050818103600083015261469481613d19565b9050919050565b600060208201905081810360008301526146b481613d59565b9050919050565b600060208201905081810360008301526146d481613dbf565b9050919050565b600060208201905081810360008301526146f481613dff565b9050919050565b6000602082019050818103600083015261471481613e3f565b9050919050565b6000602082019050818103600083015261473481613e7f565b9050919050565b6000602082019050818103600083015261475481613ebf565b9050919050565b6000602082019050818103600083015261477481613f25565b9050919050565b6000602082019050818103600083015261479481613f65565b9050919050565b600060208201905081810360008301526147b481613fa5565b9050919050565b600060208201905081810360008301526147d481613fff565b9050919050565b600060208201905081810360008301526147f481614065565b9050919050565b60006020820190508181036000830152614814816140a5565b9050919050565b600060208201905081810360008301526148348161410b565b9050919050565b600060208201905081810360008301526148548161414b565b9050919050565b60006020820190508181036000830152614874816141b1565b9050919050565b6000602082019050818103600083015261489481614217565b9050919050565b600060208201905081810360008301526148b48161427d565b9050919050565b600060208201905081810360008301526148d4816142bd565b9050919050565b600060208201905081810360008301526148f481614323565b9050919050565b6000602082019050818103600083015261491481614389565b9050919050565b60006020820190508181036000830152614934816143ef565b9050919050565b6000602082019050614950600083018461442f565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561497d5761497c614dc9565b5b8060405250919050565b600067ffffffffffffffff8211156149a2576149a1614dc9565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a1082614bde565b9150614a1b83614bde565b9250826fffffffffffffffffffffffffffffffff03821115614a4057614a3f614d3c565b5b828201905092915050565b6000614a5682614c1a565b9150614a6183614c1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a9657614a95614d3c565b5b828201905092915050565b6000614aac82614c1a565b9150614ab783614c1a565b925082614ac757614ac6614d6b565b5b828204905092915050565b6000614add82614c1a565b9150614ae883614c1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b2157614b20614d3c565b5b828202905092915050565b6000614b3782614bde565b9150614b4283614bde565b925082821015614b5557614b54614d3c565b5b828203905092915050565b6000614b6b82614c1a565b9150614b7683614c1a565b925082821015614b8957614b88614d3c565b5b828203905092915050565b6000614b9f82614bfa565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c51578082015181840152602081019050614c36565b83811115614c60576000848401525b50505050565b6000614c7182614c1a565b91506000821415614c8557614c84614d3c565b5b600182039050919050565b60006002820490506001821680614ca857607f821691505b60208210811415614cbc57614cbb614d9a565b5b50919050565b6000614ccd82614c1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0057614cff614d3c565b5b600182019050919050565b6000614d1682614c1a565b9150614d2183614c1a565b925082614d3157614d30614d6b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614e1281614b94565b8114614e1d57600080fd5b50565b614e2981614ba6565b8114614e3457600080fd5b50565b614e4081614bb2565b8114614e4b57600080fd5b50565b614e5781614c1a565b8114614e6257600080fd5b5056fea2646970667358221220e5ec101caf983c97a61441e9d9d91c6622608d494b2814a605b1512c64dcc9a264736f6c63430008000033

Deployed Bytecode Sourcemap

44068:2110:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32465:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34216:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35741:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35304:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10810:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30987:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36591:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11024:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44395:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45361:606;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31638:763;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36796:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10916:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44251:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31160:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44978:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10344:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45973:166;;;;;;;;;;;;;:::i;:::-;;45084:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34039:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10052:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32891:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9271:94;;;;;;;;;;;;;:::i;:::-;;8620:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34371:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36009:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37016:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34532:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44204:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44347:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44133:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41565:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44281:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36346:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9520:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10710:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44310:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32465:370;32592:4;32637:25;32622:40;;;:11;:40;;;;:99;;;;32688:33;32673:48;;;:11;:48;;;;32622:99;:160;;;;32747:35;32732:50;;;:11;:50;;;;32622:160;:207;;;;32793:36;32817:11;32793:23;:36::i;:::-;32622:207;32608:221;;32465:370;;;:::o;34216:94::-;34270:13;34299:5;34292:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34216:94;:::o;35741:204::-;35809:7;35833:16;35841:7;35833;:16::i;:::-;35825:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35915:15;:24;35931:7;35915:24;;;;;;;;;;;;;;;;;;;;;35908:31;;35741:204;;;:::o;35304:379::-;35373:13;35389:24;35405:7;35389:15;:24::i;:::-;35373:40;;35434:5;35428:11;;:2;:11;;;;35420:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35519:5;35503:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;35528:37;35545:5;35552:12;:10;:12::i;:::-;35528:16;:37::i;:::-;35503:62;35487:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;35649:28;35658:2;35662:7;35671:5;35649:8;:28::i;:::-;35304:379;;;:::o;10810:96::-;8851:12;:10;:12::i;:::-;8840:23;;:7;:5;:7::i;:::-;:23;;;8832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10893:5:::1;10876:6;:14;10883:6;10876:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;10810:96:::0;:::o;30987:104::-;31040:7;31076:9;;31063:12;;:22;;;;:::i;:::-;31056:29;;30987:104;:::o;36591:142::-;36699:28;36709:4;36715:2;36719:7;36699:9;:28::i;:::-;36591:142;;;:::o;11024:115::-;8851:12;:10;:12::i;:::-;8840:23;;:7;:5;:7::i;:::-;:23;;;8832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11100:31:::1;11118:12;11100:17;:31::i;:::-;11024:115:::0;:::o;44395:23::-;;;;:::o;45361:606::-;3768:1;4364:7;;:19;;4356:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3768:1;4497:7;:18;;;;44476:10:::1;44463:23;;:9;:23;;;44455:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44517:12;44536:15:::0;44554:10:::1;44536:28;;44611:7;44599:20;44591:28;;44648:1;44640:4;:9;44632:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;45460:1:::2;45453:6;:8;45445:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;45508:10;;45492:15;:26;45484:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;45573:9;;45563:6;45547:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;;45539:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45628:1;45620:6;:9;;45612:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;45684:1;45676:6;45654:9;:21;45664:10;45654:21;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:31;;45646:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45732:4;45723:6;45707:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:29;45704:162;;;45746:13;45771:5;45762:6;:14;;;;:::i;:::-;45746:30;;45806:5;45793:9;:18;:31;;;;;45823:1;45815:5;:9;45793:31;45785:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45704:162;;45872:28;45882:10;45893:6;45872:9;:28::i;:::-;45955:6;45931:9;:21;45941:10;45931:21;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;45907:9;:21;45917:10;45907:21;;;;;;;;;;;;;;;:54;;;;4528:1:::1;;3724::::0;4676:7;:22;;;;45361:606;:::o;31638:763::-;31747:7;31782:16;31792:5;31782:9;:16::i;:::-;31774:5;:24;31766:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31844:22;31869:13;:11;:13::i;:::-;31844:38;;31889:19;31919:25;31969:9;31981;;31969:21;;31964:369;32012:9;;31997:14;:24;;;;:::i;:::-;31992:1;:29;31964:369;;32037:31;32071:11;:14;32083:1;32071:14;;;;;;;;;;;32037:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32124:1;32098:28;;:9;:14;;;:28;;;32094:89;;32159:9;:14;;;32139:34;;32094:89;32216:5;32195:26;;:17;:26;;;32191:135;;;32253:5;32238:11;:20;32234:59;;;32280:1;32273:8;;;;;;;;;32234:59;32303:13;;;;;:::i;:::-;;;;32191:135;31964:369;32023:3;;;;;:::i;:::-;;;;31964:369;;;;32339:56;;;;;;;;;;:::i;:::-;;;;;;;;31638:763;;;;;:::o;36796:157::-;36908:39;36925:4;36931:2;36935:7;36908:39;;;;;;;;;;;;:16;:39::i;:::-;36796:157;;;:::o;10916:100::-;10959:4;10999:9;;;;;;;;;;;10983:25;;:12;:10;:12::i;:::-;:25;;;10976:32;;10916:100;:::o;44251:25::-;;;;:::o;31160:187::-;31227:7;31259:13;:11;:13::i;:::-;31251:5;:21;31243:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31332:9;;31326:5;:15;;;;:::i;:::-;31319:22;;31160:187;;;:::o;44978:100::-;8851:12;:10;:12::i;:::-;8840:23;;:7;:5;:7::i;:::-;:23;;;8832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45065:7:::1;;45049:13;:23;;;;;;;:::i;:::-;;44978:100:::0;;:::o;10344:85::-;10385:7;10412:9;;;;;;;;;;;10405:16;;10344:85;:::o;45973:166::-;8851:12;:10;:12::i;:::-;8840:23;;:7;:5;:7::i;:::-;:23;;;8832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46023:12:::1;46041:10;:15;;46064:21;46041:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46022:68;;;46105:7;46097:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;8911:1;45973:166::o:0;45084:271::-;3768:1;4364:7;;:19;;4356:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3768:1;4497:7;:18;;;;10477:6:::1;:18;10484:10;10477:18;;;;;;;;;;;;;;;;;;;;;;;;;10469:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;45204:9:::2;;45194:6;45178:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;;45170:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45286:11;;45276:6;45251:10;:22;45262:10;45251:22;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:46;;45243:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45324:25;45334:6;45342;45324:9;:25::i;:::-;3724:1:::0;4676:7;:22;;;;45084:271;;:::o;34039:118::-;34103:7;34126:20;34138:7;34126:11;:20::i;:::-;:25;;;34119:32;;34039:118;;;:::o;10052:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;32891:211::-;32955:7;32996:1;32979:19;;:5;:19;;;;32971:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;33068:12;:19;33081:5;33068:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;33060:36;;33053:43;;32891:211;;;:::o;9271:94::-;8851:12;:10;:12::i;:::-;8840:23;;:7;:5;:7::i;:::-;:23;;;8832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9336:21:::1;9354:1;9336:9;:21::i;:::-;9271:94::o:0;8620:87::-;8666:7;8693:6;;;;;;;;;;;8686:13;;8620:87;:::o;34371:98::-;34427:13;34456:7;34449:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34371:98;:::o;36009:274::-;36112:12;:10;:12::i;:::-;36100:24;;:8;:24;;;;36092:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36209:8;36164:18;:32;36183:12;:10;:12::i;:::-;36164:32;;;;;;;;;;;;;;;:42;36197:8;36164:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36258:8;36229:48;;36244:12;:10;:12::i;:::-;36229:48;;;36268:8;36229:48;;;;;;:::i;:::-;;;;;;;;36009:274;;:::o;37016:311::-;37153:28;37163:4;37169:2;37173:7;37153:9;:28::i;:::-;37204:48;37227:4;37233:2;37237:7;37246:5;37204:22;:48::i;:::-;37188:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;37016:311;;;;:::o;34532:394::-;34630:13;34671:16;34679:7;34671;:16::i;:::-;34655:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;34761:21;34785:10;:8;:10::i;:::-;34761:34;;34840:1;34822:7;34816:21;:25;:104;;;;;;;;;;;;;;;;;34877:7;34886:18;:7;:16;:18::i;:::-;34860:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34816:104;34802:118;;;34532:394;;;:::o;44204:42::-;;;;;;;;;;;;;;;;;:::o;44347:43::-;;;;;;;;;;;;;;;;;:::o;44133:31::-;;;;:::o;41565:43::-;;;;:::o;44281:24::-;;;;:::o;36346:186::-;36468:4;36491:18;:25;36510:5;36491:25;;;;;;;;;;;;;;;:35;36517:8;36491:35;;;;;;;;;;;;;;;;;;;;;;;;;36484:42;;36346:186;;;;:::o;9520:192::-;8851:12;:10;:12::i;:::-;8840:23;;:7;:5;:7::i;:::-;:23;;;8832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9629:1:::1;9609:22;;:8;:22;;;;9601:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9685:19;9695:8;9685:9;:19::i;:::-;9520:192:::0;:::o;10710:92::-;8851:12;:10;:12::i;:::-;8840:23;;:7;:5;:7::i;:::-;:23;;;8832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10790:4:::1;10773:6;:14;10780:6;10773:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10710:92:::0;:::o;44310:32::-;;;;:::o;28679:157::-;28764:4;28803:25;28788:40;;;:11;:40;;;;28781:47;;28679:157;;;:::o;37566:203::-;37623:4;37655:1;37644:7;:12;;37636:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37727:12;;37717:7;:22;:46;;;;;37754:9;;37743:7;:20;;37717:46;37710:53;;37566:203;;;:::o;7408:98::-;7461:7;7488:10;7481:17;;7408:98;:::o;41387:172::-;41511:2;41484:15;:24;41500:7;41484:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41545:7;41541:2;41525:28;;41534:5;41525:28;;;;;;;;;;;;41387:172;;;:::o;39733:1548::-;39830:35;39868:20;39880:7;39868:11;:20::i;:::-;39830:58;;39897:22;39939:13;:18;;;39923:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;39992:12;:10;:12::i;:::-;39968:36;;:20;39980:7;39968:11;:20::i;:::-;:36;;;39923:81;:142;;;;40015:50;40032:13;:18;;;40052:12;:10;:12::i;:::-;40015:16;:50::i;:::-;39923:142;39897:169;;40091:17;40075:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;40223:4;40201:26;;:13;:18;;;:26;;;40185:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;40312:1;40298:16;;:2;:16;;;;40290:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40365:43;40387:4;40393:2;40397:7;40406:1;40365:21;:43::i;:::-;40465:49;40482:1;40486:7;40495:13;:18;;;40465:8;:49::i;:::-;40553:1;40523:12;:18;40536:4;40523:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40589:1;40561:12;:16;40574:2;40561:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40620:43;;;;;;;;40635:2;40620:43;;;;;;40646:15;40620:43;;;;;40597:11;:20;40609:7;40597:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40910:19;40942:1;40932:7;:11;;;;:::i;:::-;40910:33;;40995:1;40954:43;;:11;:24;40966:11;40954:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40950:236;;;41012:20;41020:11;41012:7;:20::i;:::-;41008:171;;;41072:97;;;;;;;;41099:13;:18;;;41072:97;;;;;;41130:13;:28;;;41072:97;;;;;41045:11;:24;41057:11;41045:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41008:171;40950:236;41218:7;41214:2;41199:27;;41208:4;41199:27;;;;;;;;;;;;41233:42;41254:4;41260:2;41264:7;41273:1;41233:20;:42::i;:::-;39733:1548;;;;;;:::o;11147:294::-;11262:1;11238:26;;:12;:26;;;;11216:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;11385:12;11353:45;;11381:1;11353:45;;;;;;;;;;;;11421:12;11409:9;;:24;;;;;;;;;;;;;;;;;;11147:294;:::o;37775:98::-;37840:27;37850:2;37854:8;37840:27;;;;;;;;;;;;:9;:27::i;:::-;37775:98;;:::o;33354:631::-;33430:21;;:::i;:::-;33471:16;33479:7;33471;:16::i;:::-;33463:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33568:26;33616:12;33605:7;:23;33601:93;;33685:1;33670:12;33660:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;33639:47;;33601:93;33707:12;33722:7;33707:22;;33702:212;33739:18;33731:4;:26;33702:212;;33776:31;33810:11;:17;33822:4;33810:17;;;;;;;;;;;33776:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33866:1;33840:28;;:9;:14;;;:28;;;33836:71;;33888:9;33881:16;;;;;;;33836:71;33702:212;33759:6;;;;;:::i;:::-;;;;33702:212;;;;33922:57;;;;;;;;;;:::i;:::-;;;;;;;;33354:631;;;;:::o;9720:173::-;9776:16;9795:6;;;;;;;;;;;9776:25;;9821:8;9812:6;;:17;;;;;;;;;;;;;;;;;;9876:8;9845:40;;9866:8;9845:40;;;;;;;;;;;;9720:173;;:::o;42152:690::-;42289:4;42306:15;:2;:13;;;:15::i;:::-;42302:535;;;42361:2;42345:36;;;42382:12;:10;:12::i;:::-;42396:4;42402:7;42411:5;42345:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42332:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42593:1;42576:6;:13;:18;42572:215;;;42609:61;;;;;;;;;;:::i;:::-;;;;;;;;42572:215;42755:6;42749:13;42740:6;42736:2;42732:15;42725:38;42332:464;42477:45;;;42467:55;;;:6;:55;;;;42460:62;;;;;42302:535;42825:4;42818:11;;42152:690;;;;;;;:::o;44864:108::-;44924:13;44953;44946:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44864:108;:::o;5024:723::-;5080:13;5310:1;5301:5;:10;5297:53;;;5328:10;;;;;;;;;;;;;;;;;;;;;5297:53;5360:12;5375:5;5360:20;;5391:14;5416:78;5431:1;5423:4;:9;5416:78;;5449:8;;;;;:::i;:::-;;;;5480:2;5472:10;;;;;:::i;:::-;;;5416:78;;;5504:19;5536:6;5526:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5504:39;;5554:154;5570:1;5561:5;:10;5554:154;;5598:1;5588:11;;;;;:::i;:::-;;;5665:2;5657:5;:10;;;;:::i;:::-;5644:2;:24;;;;:::i;:::-;5631:39;;5614:6;5621;5614:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;5694:2;5685:11;;;;;:::i;:::-;;;5554:154;;;5732:6;5718:21;;;;;5024:723;;;;:::o;43304:141::-;;;;;:::o;43831:140::-;;;;;:::o;38212:1289::-;38340:20;38363:12;;38340:35;;38404:1;38390:16;;:2;:16;;;;38382:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38581:21;38589:12;38581:7;:21::i;:::-;38580:22;38572:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38663:12;38651:8;:24;;38643:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38723:61;38753:1;38757:2;38761:12;38775:8;38723:21;:61::i;:::-;38791:30;38824:12;:16;38837:2;38824:16;;;;;;;;;;;;;;;38791:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38866:119;;;;;;;;38916:8;38886:11;:19;;;:39;;;;:::i;:::-;38866:119;;;;;;38969:8;38934:11;:24;;;:44;;;;:::i;:::-;38866:119;;;;;38847:12;:16;38860:2;38847:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39020:43;;;;;;;;39035:2;39020:43;;;;;;39046:15;39020:43;;;;;38992:11;:25;39004:12;38992:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39070:20;39093:12;39070:35;;39119:9;39114:281;39138:8;39134:1;:12;39114:281;;;39192:12;39188:2;39167:38;;39184:1;39167:38;;;;;;;;;;;;39232:59;39263:1;39267:2;39271:12;39285:5;39232:22;:59::i;:::-;39214:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;39373:14;;;;;:::i;:::-;;;;39148:3;;;;;:::i;:::-;;;;39114:281;;;;39416:12;39401;:27;;;;39435:60;39464:1;39468:2;39472:12;39486:8;39435:20;:60::i;:::-;38212:1289;;;;;;:::o;20550:387::-;20610:4;20818:12;20885:7;20873:20;20865:28;;20928:1;20921:4;:8;20914:15;;;20550:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1233:352::-;;;1351:3;1344:4;1336:6;1332:17;1328:27;1318:2;;1369:1;1366;1359:12;1318:2;1405:6;1392:20;1382:30;;1435:18;1427:6;1424:30;1421:2;;;1467:1;1464;1457:12;1421:2;1504:4;1496:6;1492:17;1480:29;;1558:3;1550:4;1542:6;1538:17;1528:8;1524:32;1521:41;1518:2;;;1575:1;1572;1565:12;1518:2;1308:277;;;;;:::o;1591:139::-;;1675:6;1662:20;1653:29;;1691:33;1718:5;1691:33;:::i;:::-;1643:87;;;;:::o;1736:262::-;;1844:2;1832:9;1823:7;1819:23;1815:32;1812:2;;;1860:1;1857;1850:12;1812:2;1903:1;1928:53;1973:7;1964:6;1953:9;1949:22;1928:53;:::i;:::-;1918:63;;1874:117;1802:196;;;;:::o;2004:407::-;;;2129:2;2117:9;2108:7;2104:23;2100:32;2097:2;;;2145:1;2142;2135:12;2097:2;2188:1;2213:53;2258:7;2249:6;2238:9;2234:22;2213:53;:::i;:::-;2203:63;;2159:117;2315:2;2341:53;2386:7;2377:6;2366:9;2362:22;2341:53;:::i;:::-;2331:63;;2286:118;2087:324;;;;;:::o;2417:552::-;;;;2559:2;2547:9;2538:7;2534:23;2530:32;2527:2;;;2575:1;2572;2565:12;2527:2;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2745:2;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;:::i;:::-;2761:63;;2716:118;2873:2;2899:53;2944:7;2935:6;2924:9;2920:22;2899:53;:::i;:::-;2889:63;;2844:118;2517:452;;;;;:::o;2975:809::-;;;;;3143:3;3131:9;3122:7;3118:23;3114:33;3111:2;;;3160:1;3157;3150:12;3111:2;3203:1;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3174:117;3330:2;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3301:118;3458:2;3484:53;3529:7;3520:6;3509:9;3505:22;3484:53;:::i;:::-;3474:63;;3429:118;3614:2;3603:9;3599:18;3586:32;3645:18;3637:6;3634:30;3631:2;;;3677:1;3674;3667:12;3631:2;3705:62;3759:7;3750:6;3739:9;3735:22;3705:62;:::i;:::-;3695:72;;3557:220;3101:683;;;;;;;:::o;3790:401::-;;;3912:2;3900:9;3891:7;3887:23;3883:32;3880:2;;;3928:1;3925;3918:12;3880:2;3971:1;3996:53;4041:7;4032:6;4021:9;4017:22;3996:53;:::i;:::-;3986:63;;3942:117;4098:2;4124:50;4166:7;4157:6;4146:9;4142:22;4124:50;:::i;:::-;4114:60;;4069:115;3870:321;;;;;:::o;4197:407::-;;;4322:2;4310:9;4301:7;4297:23;4293:32;4290:2;;;4338:1;4335;4328:12;4290:2;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4508:2;4534:53;4579:7;4570:6;4559:9;4555:22;4534:53;:::i;:::-;4524:63;;4479:118;4280:324;;;;;:::o;4610:260::-;;4717:2;4705:9;4696:7;4692:23;4688:32;4685:2;;;4733:1;4730;4723:12;4685:2;4776:1;4801:52;4845:7;4836:6;4825:9;4821:22;4801:52;:::i;:::-;4791:62;;4747:116;4675:195;;;;:::o;4876:282::-;;4994:2;4982:9;4973:7;4969:23;4965:32;4962:2;;;5010:1;5007;5000:12;4962:2;5053:1;5078:63;5133:7;5124:6;5113:9;5109:22;5078:63;:::i;:::-;5068:73;;5024:127;4952:206;;;;:::o;5164:395::-;;;5292:2;5280:9;5271:7;5267:23;5263:32;5260:2;;;5308:1;5305;5298:12;5260:2;5379:1;5368:9;5364:17;5351:31;5409:18;5401:6;5398:30;5395:2;;;5441:1;5438;5431:12;5395:2;5477:65;5534:7;5525:6;5514:9;5510:22;5477:65;:::i;:::-;5459:83;;;;5322:230;5250:309;;;;;:::o;5565:262::-;;5673:2;5661:9;5652:7;5648:23;5644:32;5641:2;;;5689:1;5686;5679:12;5641:2;5732:1;5757:53;5802:7;5793:6;5782:9;5778:22;5757:53;:::i;:::-;5747:63;;5703:117;5631:196;;;;:::o;5833:118::-;5920:24;5938:5;5920:24;:::i;:::-;5915:3;5908:37;5898:53;;:::o;5957:109::-;6038:21;6053:5;6038:21;:::i;:::-;6033:3;6026:34;6016:50;;:::o;6072:360::-;;6186:38;6218:5;6186:38;:::i;:::-;6240:70;6303:6;6298:3;6240:70;:::i;:::-;6233:77;;6319:52;6364:6;6359:3;6352:4;6345:5;6341:16;6319:52;:::i;:::-;6396:29;6418:6;6396:29;:::i;:::-;6391:3;6387:39;6380:46;;6162:270;;;;;:::o;6438:364::-;;6554:39;6587:5;6554:39;:::i;:::-;6609:71;6673:6;6668:3;6609:71;:::i;:::-;6602:78;;6689:52;6734:6;6729:3;6722:4;6715:5;6711:16;6689:52;:::i;:::-;6766:29;6788:6;6766:29;:::i;:::-;6761:3;6757:39;6750:46;;6530:272;;;;;:::o;6808:377::-;;6942:39;6975:5;6942:39;:::i;:::-;6997:89;7079:6;7074:3;6997:89;:::i;:::-;6990:96;;7095:52;7140:6;7135:3;7128:4;7121:5;7117:16;7095:52;:::i;:::-;7172:6;7167:3;7163:16;7156:23;;6918:267;;;;;:::o;7191:366::-;;7354:67;7418:2;7413:3;7354:67;:::i;:::-;7347:74;;7451:34;7447:1;7442:3;7438:11;7431:55;7517:4;7512:2;7507:3;7503:12;7496:26;7548:2;7543:3;7539:12;7532:19;;7337:220;;;:::o;7563:378::-;;7726:67;7790:2;7785:3;7726:67;:::i;:::-;7719:74;;7823:34;7819:1;7814:3;7810:11;7803:55;7889:16;7884:2;7879:3;7875:12;7868:38;7932:2;7927:3;7923:12;7916:19;;7709:232;;;:::o;7947:370::-;;8110:67;8174:2;8169:3;8110:67;:::i;:::-;8103:74;;8207:34;8203:1;8198:3;8194:11;8187:55;8273:8;8268:2;8263:3;8259:12;8252:30;8308:2;8303:3;8299:12;8292:19;;8093:224;;;:::o;8323:302::-;;8486:66;8550:1;8545:3;8486:66;:::i;:::-;8479:73;;8582:7;8578:1;8573:3;8569:11;8562:28;8616:2;8611:3;8607:12;8600:19;;8469:156;;;:::o;8631:316::-;;8794:67;8858:2;8853:3;8794:67;:::i;:::-;8787:74;;8891:20;8887:1;8882:3;8878:11;8871:41;8938:2;8933:3;8929:12;8922:19;;8777:170;;;:::o;8953:309::-;;9116:67;9180:2;9175:3;9116:67;:::i;:::-;9109:74;;9213:13;9209:1;9204:3;9200:11;9193:34;9253:2;9248:3;9244:12;9237:19;;9099:163;;;:::o;9268:366::-;;9431:67;9495:2;9490:3;9431:67;:::i;:::-;9424:74;;9528:34;9524:1;9519:3;9515:11;9508:55;9594:4;9589:2;9584:3;9580:12;9573:26;9625:2;9620:3;9616:12;9609:19;;9414:220;;;:::o;9640:374::-;;9803:67;9867:2;9862:3;9803:67;:::i;:::-;9796:74;;9900:34;9896:1;9891:3;9887:11;9880:55;9966:12;9961:2;9956:3;9952:12;9945:34;10005:2;10000:3;9996:12;9989:19;;9786:228;;;:::o;10020:382::-;;10183:67;10247:2;10242:3;10183:67;:::i;:::-;10176:74;;10280:34;10276:1;10271:3;10267:11;10260:55;10346:20;10341:2;10336:3;10332:12;10325:42;10393:2;10388:3;10384:12;10377:19;;10166:236;;;:::o;10408:377::-;;10571:67;10635:2;10630:3;10571:67;:::i;:::-;10564:74;;10668:34;10664:1;10659:3;10655:11;10648:55;10734:15;10729:2;10724:3;10720:12;10713:37;10776:2;10771:3;10767:12;10760:19;;10554:231;;;:::o;10791:365::-;;10954:67;11018:2;11013:3;10954:67;:::i;:::-;10947:74;;11051:34;11047:1;11042:3;11038:11;11031:55;11117:3;11112:2;11107:3;11103:12;11096:25;11147:2;11142:3;11138:12;11131:19;;10937:219;;;:::o;11162:327::-;;11325:67;11389:2;11384:3;11325:67;:::i;:::-;11318:74;;11422:31;11418:1;11413:3;11409:11;11402:52;11480:2;11475:3;11471:12;11464:19;;11308:181;;;:::o;11495:375::-;;11658:67;11722:2;11717:3;11658:67;:::i;:::-;11651:74;;11755:34;11751:1;11746:3;11742:11;11735:55;11821:13;11816:2;11811:3;11807:12;11800:35;11861:2;11856:3;11852:12;11845:19;;11641:229;;;:::o;11876:306::-;;12039:66;12103:1;12098:3;12039:66;:::i;:::-;12032:73;;12135:11;12131:1;12126:3;12122:11;12115:32;12173:2;12168:3;12164:12;12157:19;;12022:160;;;:::o;12188:306::-;;12351:66;12415:1;12410:3;12351:66;:::i;:::-;12344:73;;12447:11;12443:1;12438:3;12434:11;12427:32;12485:2;12480:3;12476:12;12469:19;;12334:160;;;:::o;12500:330::-;;12663:67;12727:2;12722:3;12663:67;:::i;:::-;12656:74;;12760:34;12756:1;12751:3;12747:11;12740:55;12821:2;12816:3;12812:12;12805:19;;12646:184;;;:::o;12836:310::-;;12999:67;13063:2;13058:3;12999:67;:::i;:::-;12992:74;;13096:14;13092:1;13087:3;13083:11;13076:35;13137:2;13132:3;13128:12;13121:19;;12982:164;;;:::o;13152:379::-;;13315:67;13379:2;13374:3;13315:67;:::i;:::-;13308:74;;13412:34;13408:1;13403:3;13399:11;13392:55;13478:17;13473:2;13468:3;13464:12;13457:39;13522:2;13517:3;13513:12;13506:19;;13298:233;;;:::o;13537:304::-;;13700:66;13764:1;13759:3;13700:66;:::i;:::-;13693:73;;13796:9;13792:1;13787:3;13783:11;13776:30;13832:2;13827:3;13823:12;13816:19;;13683:158;;;:::o;13847:317::-;;14010:67;14074:2;14069:3;14010:67;:::i;:::-;14003:74;;14107:21;14103:1;14098:3;14094:11;14087:42;14155:2;14150:3;14146:12;14139:19;;13993:171;;;:::o;14170:327::-;;14333:67;14397:2;14392:3;14333:67;:::i;:::-;14326:74;;14430:31;14426:1;14421:3;14417:11;14410:52;14488:2;14483:3;14479:12;14472:19;;14316:181;;;:::o;14503:297::-;;14683:83;14764:1;14759:3;14683:83;:::i;:::-;14676:90;;14792:1;14787:3;14783:11;14776:18;;14666:134;;;:::o;14806:367::-;;14969:67;15033:2;15028:3;14969:67;:::i;:::-;14962:74;;15066:34;15062:1;15057:3;15053:11;15046:55;15132:5;15127:2;15122:3;15118:12;15111:27;15164:2;15159:3;15155:12;15148:19;;14952:221;;;:::o;15179:314::-;;15342:67;15406:2;15401:3;15342:67;:::i;:::-;15335:74;;15439:18;15435:1;15430:3;15426:11;15419:39;15484:2;15479:3;15475:12;15468:19;;15325:168;;;:::o;15499:377::-;;15662:67;15726:2;15721:3;15662:67;:::i;:::-;15655:74;;15759:34;15755:1;15750:3;15746:11;15739:55;15825:15;15820:2;15815:3;15811:12;15804:37;15867:2;15862:3;15858:12;15851:19;;15645:231;;;:::o;15882:324::-;;16045:67;16109:2;16104:3;16045:67;:::i;:::-;16038:74;;16142:28;16138:1;16133:3;16129:11;16122:49;16197:2;16192:3;16188:12;16181:19;;16028:178;;;:::o;16212:370::-;;16375:67;16439:2;16434:3;16375:67;:::i;:::-;16368:74;;16472:34;16468:1;16463:3;16459:11;16452:55;16538:8;16533:2;16528:3;16524:12;16517:30;16573:2;16568:3;16564:12;16557:19;;16358:224;;;:::o;16588:379::-;;16751:67;16815:2;16810:3;16751:67;:::i;:::-;16744:74;;16848:34;16844:1;16839:3;16835:11;16828:55;16914:17;16909:2;16904:3;16900:12;16893:39;16958:2;16953:3;16949:12;16942:19;;16734:233;;;:::o;16973:389::-;;17136:67;17200:2;17195:3;17136:67;:::i;:::-;17129:74;;17233:34;17229:1;17224:3;17220:11;17213:55;17299:27;17294:2;17289:3;17285:12;17278:49;17353:2;17348:3;17344:12;17337:19;;17119:243;;;:::o;17368:329::-;;17531:67;17595:2;17590:3;17531:67;:::i;:::-;17524:74;;17628:33;17624:1;17619:3;17615:11;17608:54;17688:2;17683:3;17679:12;17672:19;;17514:183;;;:::o;17703:366::-;;17866:67;17930:2;17925:3;17866:67;:::i;:::-;17859:74;;17963:34;17959:1;17954:3;17950:11;17943:55;18029:4;18024:2;18019:3;18015:12;18008:26;18060:2;18055:3;18051:12;18044:19;;17849:220;;;:::o;18075:383::-;;18238:67;18302:2;18297:3;18238:67;:::i;:::-;18231:74;;18335:34;18331:1;18326:3;18322:11;18315:55;18401:21;18396:2;18391:3;18387:12;18380:43;18449:2;18444:3;18440:12;18433:19;;18221:237;;;:::o;18464:369::-;;18627:67;18691:2;18686:3;18627:67;:::i;:::-;18620:74;;18724:34;18720:1;18715:3;18711:11;18704:55;18790:7;18785:2;18780:3;18776:12;18769:29;18824:2;18819:3;18815:12;18808:19;;18610:223;;;:::o;18839:313::-;;19002:67;19066:2;19061:3;19002:67;:::i;:::-;18995:74;;19099:17;19095:1;19090:3;19086:11;19079:38;19143:2;19138:3;19134:12;19127:19;;18985:167;;;:::o;19158:118::-;19245:24;19263:5;19245:24;:::i;:::-;19240:3;19233:37;19223:53;;:::o;19282:435::-;;19484:95;19575:3;19566:6;19484:95;:::i;:::-;19477:102;;19596:95;19687:3;19678:6;19596:95;:::i;:::-;19589:102;;19708:3;19701:10;;19466:251;;;;;:::o;19723:379::-;;19929:147;20072:3;19929:147;:::i;:::-;19922:154;;20093:3;20086:10;;19911:191;;;:::o;20108:222::-;;20239:2;20228:9;20224:18;20216:26;;20252:71;20320:1;20309:9;20305:17;20296:6;20252:71;:::i;:::-;20206:124;;;;:::o;20336:640::-;;20569:3;20558:9;20554:19;20546:27;;20583:71;20651:1;20640:9;20636:17;20627:6;20583:71;:::i;:::-;20664:72;20732:2;20721:9;20717:18;20708:6;20664:72;:::i;:::-;20746;20814:2;20803:9;20799:18;20790:6;20746:72;:::i;:::-;20865:9;20859:4;20855:20;20850:2;20839:9;20835:18;20828:48;20893:76;20964:4;20955:6;20893:76;:::i;:::-;20885:84;;20536:440;;;;;;;:::o;20982:210::-;;21107:2;21096:9;21092:18;21084:26;;21120:65;21182:1;21171:9;21167:17;21158:6;21120:65;:::i;:::-;21074:118;;;;:::o;21198:313::-;;21349:2;21338:9;21334:18;21326:26;;21398:9;21392:4;21388:20;21384:1;21373:9;21369:17;21362:47;21426:78;21499:4;21490:6;21426:78;:::i;:::-;21418:86;;21316:195;;;;:::o;21517:419::-;;21721:2;21710:9;21706:18;21698:26;;21770:9;21764:4;21760:20;21756:1;21745:9;21741:17;21734:47;21798:131;21924:4;21798:131;:::i;:::-;21790:139;;21688:248;;;:::o;21942:419::-;;22146:2;22135:9;22131:18;22123:26;;22195:9;22189:4;22185:20;22181:1;22170:9;22166:17;22159:47;22223:131;22349:4;22223:131;:::i;:::-;22215:139;;22113:248;;;:::o;22367:419::-;;22571:2;22560:9;22556:18;22548:26;;22620:9;22614:4;22610:20;22606:1;22595:9;22591:17;22584:47;22648:131;22774:4;22648:131;:::i;:::-;22640:139;;22538:248;;;:::o;22792:419::-;;22996:2;22985:9;22981:18;22973:26;;23045:9;23039:4;23035:20;23031:1;23020:9;23016:17;23009:47;23073:131;23199:4;23073:131;:::i;:::-;23065:139;;22963:248;;;:::o;23217:419::-;;23421:2;23410:9;23406:18;23398:26;;23470:9;23464:4;23460:20;23456:1;23445:9;23441:17;23434:47;23498:131;23624:4;23498:131;:::i;:::-;23490:139;;23388:248;;;:::o;23642:419::-;;23846:2;23835:9;23831:18;23823:26;;23895:9;23889:4;23885:20;23881:1;23870:9;23866:17;23859:47;23923:131;24049:4;23923:131;:::i;:::-;23915:139;;23813:248;;;:::o;24067:419::-;;24271:2;24260:9;24256:18;24248:26;;24320:9;24314:4;24310:20;24306:1;24295:9;24291:17;24284:47;24348:131;24474:4;24348:131;:::i;:::-;24340:139;;24238:248;;;:::o;24492:419::-;;24696:2;24685:9;24681:18;24673:26;;24745:9;24739:4;24735:20;24731:1;24720:9;24716:17;24709:47;24773:131;24899:4;24773:131;:::i;:::-;24765:139;;24663:248;;;:::o;24917:419::-;;25121:2;25110:9;25106:18;25098:26;;25170:9;25164:4;25160:20;25156:1;25145:9;25141:17;25134:47;25198:131;25324:4;25198:131;:::i;:::-;25190:139;;25088:248;;;:::o;25342:419::-;;25546:2;25535:9;25531:18;25523:26;;25595:9;25589:4;25585:20;25581:1;25570:9;25566:17;25559:47;25623:131;25749:4;25623:131;:::i;:::-;25615:139;;25513:248;;;:::o;25767:419::-;;25971:2;25960:9;25956:18;25948:26;;26020:9;26014:4;26010:20;26006:1;25995:9;25991:17;25984:47;26048:131;26174:4;26048:131;:::i;:::-;26040:139;;25938:248;;;:::o;26192:419::-;;26396:2;26385:9;26381:18;26373:26;;26445:9;26439:4;26435:20;26431:1;26420:9;26416:17;26409:47;26473:131;26599:4;26473:131;:::i;:::-;26465:139;;26363:248;;;:::o;26617:419::-;;26821:2;26810:9;26806:18;26798:26;;26870:9;26864:4;26860:20;26856:1;26845:9;26841:17;26834:47;26898:131;27024:4;26898:131;:::i;:::-;26890:139;;26788:248;;;:::o;27042:419::-;;27246:2;27235:9;27231:18;27223:26;;27295:9;27289:4;27285:20;27281:1;27270:9;27266:17;27259:47;27323:131;27449:4;27323:131;:::i;:::-;27315:139;;27213:248;;;:::o;27467:419::-;;27671:2;27660:9;27656:18;27648:26;;27720:9;27714:4;27710:20;27706:1;27695:9;27691:17;27684:47;27748:131;27874:4;27748:131;:::i;:::-;27740:139;;27638:248;;;:::o;27892:419::-;;28096:2;28085:9;28081:18;28073:26;;28145:9;28139:4;28135:20;28131:1;28120:9;28116:17;28109:47;28173:131;28299:4;28173:131;:::i;:::-;28165:139;;28063:248;;;:::o;28317:419::-;;28521:2;28510:9;28506:18;28498:26;;28570:9;28564:4;28560:20;28556:1;28545:9;28541:17;28534:47;28598:131;28724:4;28598:131;:::i;:::-;28590:139;;28488:248;;;:::o;28742:419::-;;28946:2;28935:9;28931:18;28923:26;;28995:9;28989:4;28985:20;28981:1;28970:9;28966:17;28959:47;29023:131;29149:4;29023:131;:::i;:::-;29015:139;;28913:248;;;:::o;29167:419::-;;29371:2;29360:9;29356:18;29348:26;;29420:9;29414:4;29410:20;29406:1;29395:9;29391:17;29384:47;29448:131;29574:4;29448:131;:::i;:::-;29440:139;;29338:248;;;:::o;29592:419::-;;29796:2;29785:9;29781:18;29773:26;;29845:9;29839:4;29835:20;29831:1;29820:9;29816:17;29809:47;29873:131;29999:4;29873:131;:::i;:::-;29865:139;;29763:248;;;:::o;30017:419::-;;30221:2;30210:9;30206:18;30198:26;;30270:9;30264:4;30260:20;30256:1;30245:9;30241:17;30234:47;30298:131;30424:4;30298:131;:::i;:::-;30290:139;;30188:248;;;:::o;30442:419::-;;30646:2;30635:9;30631:18;30623:26;;30695:9;30689:4;30685:20;30681:1;30670:9;30666:17;30659:47;30723:131;30849:4;30723:131;:::i;:::-;30715:139;;30613:248;;;:::o;30867:419::-;;31071:2;31060:9;31056:18;31048:26;;31120:9;31114:4;31110:20;31106:1;31095:9;31091:17;31084:47;31148:131;31274:4;31148:131;:::i;:::-;31140:139;;31038:248;;;:::o;31292:419::-;;31496:2;31485:9;31481:18;31473:26;;31545:9;31539:4;31535:20;31531:1;31520:9;31516:17;31509:47;31573:131;31699:4;31573:131;:::i;:::-;31565:139;;31463:248;;;:::o;31717:419::-;;31921:2;31910:9;31906:18;31898:26;;31970:9;31964:4;31960:20;31956:1;31945:9;31941:17;31934:47;31998:131;32124:4;31998:131;:::i;:::-;31990:139;;31888:248;;;:::o;32142:419::-;;32346:2;32335:9;32331:18;32323:26;;32395:9;32389:4;32385:20;32381:1;32370:9;32366:17;32359:47;32423:131;32549:4;32423:131;:::i;:::-;32415:139;;32313:248;;;:::o;32567:419::-;;32771:2;32760:9;32756:18;32748:26;;32820:9;32814:4;32810:20;32806:1;32795:9;32791:17;32784:47;32848:131;32974:4;32848:131;:::i;:::-;32840:139;;32738:248;;;:::o;32992:419::-;;33196:2;33185:9;33181:18;33173:26;;33245:9;33239:4;33235:20;33231:1;33220:9;33216:17;33209:47;33273:131;33399:4;33273:131;:::i;:::-;33265:139;;33163:248;;;:::o;33417:419::-;;33621:2;33610:9;33606:18;33598:26;;33670:9;33664:4;33660:20;33656:1;33645:9;33641:17;33634:47;33698:131;33824:4;33698:131;:::i;:::-;33690:139;;33588:248;;;:::o;33842:419::-;;34046:2;34035:9;34031:18;34023:26;;34095:9;34089:4;34085:20;34081:1;34070:9;34066:17;34059:47;34123:131;34249:4;34123:131;:::i;:::-;34115:139;;34013:248;;;:::o;34267:419::-;;34471:2;34460:9;34456:18;34448:26;;34520:9;34514:4;34510:20;34506:1;34495:9;34491:17;34484:47;34548:131;34674:4;34548:131;:::i;:::-;34540:139;;34438:248;;;:::o;34692:419::-;;34896:2;34885:9;34881:18;34873:26;;34945:9;34939:4;34935:20;34931:1;34920:9;34916:17;34909:47;34973:131;35099:4;34973:131;:::i;:::-;34965:139;;34863:248;;;:::o;35117:419::-;;35321:2;35310:9;35306:18;35298:26;;35370:9;35364:4;35360:20;35356:1;35345:9;35341:17;35334:47;35398:131;35524:4;35398:131;:::i;:::-;35390:139;;35288:248;;;:::o;35542:222::-;;35673:2;35662:9;35658:18;35650:26;;35686:71;35754:1;35743:9;35739:17;35730:6;35686:71;:::i;:::-;35640:124;;;;:::o;35770:283::-;;35836:2;35830:9;35820:19;;35878:4;35870:6;35866:17;35985:6;35973:10;35970:22;35949:18;35937:10;35934:34;35931:62;35928:2;;;35996:18;;:::i;:::-;35928:2;36036:10;36032:2;36025:22;35810:243;;;;:::o;36059:331::-;;36210:18;36202:6;36199:30;36196:2;;;36232:18;;:::i;:::-;36196:2;36317:4;36313:9;36306:4;36298:6;36294:17;36290:33;36282:41;;36378:4;36372;36368:15;36360:23;;36125:265;;;:::o;36396:98::-;;36481:5;36475:12;36465:22;;36454:40;;;:::o;36500:99::-;;36586:5;36580:12;36570:22;;36559:40;;;:::o;36605:168::-;;36722:6;36717:3;36710:19;36762:4;36757:3;36753:14;36738:29;;36700:73;;;;:::o;36779:147::-;;36917:3;36902:18;;36892:34;;;;:::o;36932:169::-;;37050:6;37045:3;37038:19;37090:4;37085:3;37081:14;37066:29;;37028:73;;;;:::o;37107:148::-;;37246:3;37231:18;;37221:34;;;;:::o;37261:273::-;;37320:20;37338:1;37320:20;:::i;:::-;37315:25;;37354:20;37372:1;37354:20;:::i;:::-;37349:25;;37476:1;37440:34;37436:42;37433:1;37430:49;37427:2;;;37482:18;;:::i;:::-;37427:2;37526:1;37523;37519:9;37512:16;;37305:229;;;;:::o;37540:305::-;;37599:20;37617:1;37599:20;:::i;:::-;37594:25;;37633:20;37651:1;37633:20;:::i;:::-;37628:25;;37787:1;37719:66;37715:74;37712:1;37709:81;37706:2;;;37793:18;;:::i;:::-;37706:2;37837:1;37834;37830:9;37823:16;;37584:261;;;;:::o;37851:185::-;;37908:20;37926:1;37908:20;:::i;:::-;37903:25;;37942:20;37960:1;37942:20;:::i;:::-;37937:25;;37981:1;37971:2;;37986:18;;:::i;:::-;37971:2;38028:1;38025;38021:9;38016:14;;37893:143;;;;:::o;38042:348::-;;38105:20;38123:1;38105:20;:::i;:::-;38100:25;;38139:20;38157:1;38139:20;:::i;:::-;38134:25;;38327:1;38259:66;38255:74;38252:1;38249:81;38244:1;38237:9;38230:17;38226:105;38223:2;;;38334:18;;:::i;:::-;38223:2;38382:1;38379;38375:9;38364:20;;38090:300;;;;:::o;38396:191::-;;38456:20;38474:1;38456:20;:::i;:::-;38451:25;;38490:20;38508:1;38490:20;:::i;:::-;38485:25;;38529:1;38526;38523:8;38520:2;;;38534:18;;:::i;:::-;38520:2;38579:1;38576;38572:9;38564:17;;38441:146;;;;:::o;38593:191::-;;38653:20;38671:1;38653:20;:::i;:::-;38648:25;;38687:20;38705:1;38687:20;:::i;:::-;38682:25;;38726:1;38723;38720:8;38717:2;;;38731:18;;:::i;:::-;38717:2;38776:1;38773;38769:9;38761:17;;38638:146;;;;:::o;38790:96::-;;38856:24;38874:5;38856:24;:::i;:::-;38845:35;;38835:51;;;:::o;38892:90::-;;38969:5;38962:13;38955:21;38944:32;;38934:48;;;:::o;38988:149::-;;39064:66;39057:5;39053:78;39042:89;;39032:105;;;:::o;39143:118::-;;39220:34;39213:5;39209:46;39198:57;;39188:73;;;:::o;39267:126::-;;39344:42;39337:5;39333:54;39322:65;;39312:81;;;:::o;39399:77::-;;39465:5;39454:16;;39444:32;;;:::o;39482:154::-;39566:6;39561:3;39556;39543:30;39628:1;39619:6;39614:3;39610:16;39603:27;39533:103;;;:::o;39642:307::-;39710:1;39720:113;39734:6;39731:1;39728:13;39720:113;;;39819:1;39814:3;39810:11;39804:18;39800:1;39795:3;39791:11;39784:39;39756:2;39753:1;39749:10;39744:15;;39720:113;;;39851:6;39848:1;39845:13;39842:2;;;39931:1;39922:6;39917:3;39913:16;39906:27;39842:2;39691:258;;;;:::o;39955:171::-;;40017:24;40035:5;40017:24;:::i;:::-;40008:33;;40063:4;40056:5;40053:15;40050:2;;;40071:18;;:::i;:::-;40050:2;40118:1;40111:5;40107:13;40100:20;;39998:128;;;:::o;40132:320::-;;40213:1;40207:4;40203:12;40193:22;;40260:1;40254:4;40250:12;40281:18;40271:2;;40337:4;40329:6;40325:17;40315:27;;40271:2;40399;40391:6;40388:14;40368:18;40365:38;40362:2;;;40418:18;;:::i;:::-;40362:2;40183:269;;;;:::o;40458:233::-;;40520:24;40538:5;40520:24;:::i;:::-;40511:33;;40566:66;40559:5;40556:77;40553:2;;;40636:18;;:::i;:::-;40553:2;40683:1;40676:5;40672:13;40665:20;;40501:190;;;:::o;40697:176::-;;40746:20;40764:1;40746:20;:::i;:::-;40741:25;;40780:20;40798:1;40780:20;:::i;:::-;40775:25;;40819:1;40809:2;;40824:18;;:::i;:::-;40809:2;40865:1;40862;40858:9;40853:14;;40731:142;;;;:::o;40879:180::-;40927:77;40924:1;40917:88;41024:4;41021:1;41014:15;41048:4;41045:1;41038:15;41065:180;41113:77;41110:1;41103:88;41210:4;41207:1;41200:15;41234:4;41231:1;41224:15;41251:180;41299:77;41296:1;41289:88;41396:4;41393:1;41386:15;41420:4;41417:1;41410:15;41437:180;41485:77;41482:1;41475:88;41582:4;41579:1;41572:15;41606:4;41603:1;41596:15;41623:102;;41715:2;41711:7;41706:2;41699:5;41695:14;41691:28;41681:38;;41671:54;;;:::o;41731:122::-;41804:24;41822:5;41804:24;:::i;:::-;41797:5;41794:35;41784:2;;41843:1;41840;41833:12;41784:2;41774:79;:::o;41859:116::-;41929:21;41944:5;41929:21;:::i;:::-;41922:5;41919:32;41909:2;;41965:1;41962;41955:12;41909:2;41899:76;:::o;41981:120::-;42053:23;42070:5;42053:23;:::i;:::-;42046:5;42043:34;42033:2;;42091:1;42088;42081:12;42033:2;42023:78;:::o;42107:122::-;42180:24;42198:5;42180:24;:::i;:::-;42173:5;42170:35;42160:2;;42219:1;42216;42209:12;42160:2;42150:79;:::o

Swarm Source

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