ETH Price: $3,492.43 (+5.50%)

Token

STRYKER NFT (STRYKER)
 

Overview

Max Total Supply

273 STRYKER

Holders

98

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x589becE259280876e2ea262b99fB6b87CbbEAA41
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:
StrykerNft

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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: @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/IERC165.sol



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol



pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol



pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol



pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][account] = accountBalance - amount;
            }
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: contracts/StrykerNft.sol


pragma solidity ^0.8.0;



contract StrykerNft is ERC1155, Ownable {
    string public constant name = "STRYKER NFT";
    string public constant symbol = "STRYKER";

    uint32 public totalSupply = 0;

    uint32 public preSaleStartTimestamp = 1636668000;
    uint32 public constant preSaleMaxSupply = 2500;
    uint256 public constant preSalePrice = 0.055 ether;
    
    uint32 public publicSaleStartTimestamp = 1636680600;
    uint32 public constant publicSaleMaxSupply = 8888;
    uint256 public constant publicSalePrice = 0.065 ether;

    address private signerAddress = 0x2187D614e851758e7218c43ACFe2690693A15dE4;

    constructor(string memory uri) ERC1155(uri) {}

    function setURI(string memory uri) public onlyOwner {
        _setURI(uri);
    }

    function setSignerAddress(address addr) external onlyOwner {
        signerAddress = addr;
    }

    function setPreSaleStartTimestamp(uint32 timestamp) public onlyOwner {
        preSaleStartTimestamp = timestamp;
    }

    function setPublicSaleStartTimestamp(uint32 timestamp) public onlyOwner {
        publicSaleStartTimestamp = timestamp;
    }

    function preSaleIsActive() public view returns (bool) {
        return preSaleStartTimestamp <= block.timestamp && publicSaleStartTimestamp > block.timestamp;
    }
    
    function publicSaleIsActive() public view returns (bool) {
        return publicSaleStartTimestamp <= block.timestamp;
    }

    function isValidAccessMessage(uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(abi.encodePacked(msg.sender));
        return signerAddress == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), v, r, s);
    }

    function mint(address to, uint32 count) internal {
        if (count > 1) {
            uint256[] memory ids = new uint256[](uint256(count));
            uint256[] memory amounts = new uint256[](uint256(count));

            for (uint32 i = 0; i < count; i++) {
                ids[i] = totalSupply + i;
                amounts[i] = 1;
            }

            _mintBatch(to, ids, amounts, "");
            totalSupply += count;
        } else {
            _mint(to, totalSupply, 1, "");
            totalSupply += 1;
        }
    }
    
    function preSaleMint(uint8 v, bytes32 r, bytes32 s, uint32 count) external payable {
        require(preSaleIsActive(), "Pre-sale is not active.");
        require(isValidAccessMessage(v, r, s), "Not whitelisted.");
        require(count > 0, "Count must be greater than 0.");
        require(totalSupply + count <= preSaleMaxSupply, "Count exceeds the maximum allowed supply.");
        require(msg.value >= preSalePrice * count, "Not enough ether.");

        mint(msg.sender, count);
    }
    
    function publicSaleMint(uint32 count) external payable {
        require(publicSaleIsActive(), "Public sale is not active.");
        require(count > 0, "Count must be greater than 0.");
        require(totalSupply + count <= publicSaleMaxSupply, "Count exceeds the maximum allowed supply.");
        require(msg.value >= publicSalePrice * count, "Not enough ether.");

        mint(msg.sender, count);
    }

    function batchMint(address[] memory addresses) external onlyOwner {
        require(totalSupply + addresses.length < publicSaleMaxSupply, "Count exceeds the maximum allowed supply.");
        
        for (uint i = 0; i < addresses.length; i++) {
            mint(addresses[i], 1);
        }
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(owner()).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint32","name":"count","type":"uint32"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStartTimestamp","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStartTimestamp","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint32","name":"timestamp","type":"uint32"}],"name":"setPreSaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPublicSaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600360146101000a81548163ffffffff021916908363ffffffff16021790555063618d9260600360186101000a81548163ffffffff021916908363ffffffff16021790555063618dc3986003601c6101000a81548163ffffffff021916908363ffffffff160217905550732187d614e851758e7218c43acfe2690693a15de4600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d257600080fd5b5060405162004c0b38038062004c0b8339818101604052810190620000f8919062000469565b806200010a816200013260201b60201c565b506200012b6200011f6200014e60201b60201c565b6200015660201b60201c565b506200051f565b80600290805190602001906200014a9291906200021c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022a90620004e9565b90600052602060002090601f0160209004810192826200024e57600085556200029a565b82601f106200026957805160ff19168380011785556200029a565b828001600101855582156200029a579182015b82811115620002995782518255916020019190600101906200027c565b5b509050620002a99190620002ad565b5090565b5b80821115620002c8576000816000905550600101620002ae565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200033582620002ea565b810181811067ffffffffffffffff82111715620003575762000356620002fb565b5b80604052505050565b60006200036c620002cc565b90506200037a82826200032a565b919050565b600067ffffffffffffffff8211156200039d576200039c620002fb565b5b620003a882620002ea565b9050602081019050919050565b60005b83811015620003d5578082015181840152602081019050620003b8565b83811115620003e5576000848401525b50505050565b600062000402620003fc846200037f565b62000360565b905082815260208101848484011115620004215762000420620002e5565b5b6200042e848285620003b5565b509392505050565b600082601f8301126200044e576200044d620002e0565b5b815162000460848260208601620003eb565b91505092915050565b600060208284031215620004825762000481620002d6565b5b600082015167ffffffffffffffff811115620004a357620004a2620002db565b5b620004b18482850162000436565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200050257607f821691505b60208210811415620005195762000518620004ba565b5b50919050565b6146dc806200052f6000396000f3fe6080604052600436106101cc5760003560e01c8063892f5f6f116100f7578063a96d3e5911610095578063e757c17d11610064578063e757c17d14610623578063e985e9c51461064e578063f242432a1461068b578063f2fde38b146106b4576101cc565b8063a96d3e5914610588578063cc21f485146105b3578063d67b06c1146105cf578063d7822c99146105f8576101cc565b80639b6860c8116100d15780639b6860c8146104de578063a18116f114610509578063a1dd2c0714610534578063a22cb4651461055f576101cc565b8063892f5f6f1461046c5780638da5cb5b1461048857806395d89b41146104b3576101cc565b806318160ddd1161016f57806344ef7ba61161013e57806344ef7ba6146103c65780634e1273f4146103ef578063715018a61461042c57806382ef300f14610443576101cc565b806318160ddd146103305780631f0234d81461035b5780632eb2c2d6146103865780633ccfd60b146103af576101cc565b8063046dc166116101ab578063046dc1661461027457806306fdde031461029d5780630e89341c146102c85780630fcf2e7514610305576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806302fe53051461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f39190612b89565b6106dd565b6040516102059190612bd8565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190612c4b565b6107a6565b6040516102429190612c93565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d9190612df4565b610888565b005b34801561028057600080fd5b5061029b60048036038101906102969190612e3d565b610910565b005b3480156102a957600080fd5b506102b26109d0565b6040516102bf9190612ef2565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190612f14565b610a09565b6040516102fc9190612ef2565b60405180910390f35b34801561031157600080fd5b5061031a610a9d565b6040516103279190612c93565b60405180910390f35b34801561033c57600080fd5b50610345610ac0565b6040516103529190612f60565b60405180910390f35b34801561036757600080fd5b50610370610ad6565b60405161037d9190612c93565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906130e4565b610b1c565b005b3480156103bb57600080fd5b506103c4610bbd565b005b3480156103d257600080fd5b506103ed60048036038101906103e891906131df565b610c8f565b005b3480156103fb57600080fd5b50610416600480360381019061041191906132cf565b610d2f565b6040516104239190613405565b60405180910390f35b34801561043857600080fd5b50610441610e48565b005b34801561044f57600080fd5b5061046a600480360381019061046591906131df565b610ed0565b005b610486600480360381019061048191906131df565b610f70565b005b34801561049457600080fd5b5061049d6110d6565b6040516104aa9190613436565b60405180910390f35b3480156104bf57600080fd5b506104c8611100565b6040516104d59190612ef2565b60405180910390f35b3480156104ea57600080fd5b506104f3611139565b6040516105009190612bd8565b60405180910390f35b34801561051557600080fd5b5061051e611144565b60405161052b9190612f60565b60405180910390f35b34801561054057600080fd5b5061054961114a565b6040516105569190612f60565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061347d565b611150565b005b34801561059457600080fd5b5061059d6112d1565b6040516105aa9190612f60565b60405180910390f35b6105cd60048036038101906105c8919061352c565b6112e7565b005b3480156105db57600080fd5b506105f660048036038101906105f19190613593565b61149a565b005b34801561060457600080fd5b5061060d6115cc565b60405161061a9190612f60565b60405180910390f35b34801561062f57600080fd5b506106386115e2565b6040516106459190612bd8565b60405180910390f35b34801561065a57600080fd5b50610675600480360381019061067091906135dc565b6115ed565b6040516106829190612c93565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad919061361c565b611681565b005b3480156106c057600080fd5b506106db60048036038101906106d69190612e3d565b611722565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074590613725565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088157506108808261181a565b5b9050919050565b610890611884565b73ffffffffffffffffffffffffffffffffffffffff166108ae6110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90613791565b60405180910390fd5b61090d8161188c565b50565b610918611884565b73ffffffffffffffffffffffffffffffffffffffff166109366110d6565b73ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390613791565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600b81526020017f535452594b4552204e465400000000000000000000000000000000000000000081525081565b606060028054610a18906137e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a44906137e0565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610b175750426003601c9054906101000a900463ffffffff1663ffffffff16115b905090565b610b24611884565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b6a5750610b6985610b64611884565b6115ed565b5b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba090613884565b60405180910390fd5b610bb685858585856118a6565b5050505050565b610bc5611884565b73ffffffffffffffffffffffffffffffffffffffff16610be36110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090613791565b60405180910390fd5b6000479050610c466110d6565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c8b573d6000803e3d6000fd5b5050565b610c97611884565b73ffffffffffffffffffffffffffffffffffffffff16610cb56110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0290613791565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b60608151835114610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90613916565b60405180910390fd5b6000835167ffffffffffffffff811115610d9257610d91612cc9565b5b604051908082528060200260200182016040528015610dc05781602001602082028036833780820191505090505b50905060005b8451811015610e3d57610e0d858281518110610de557610de4613936565b5b6020026020010151858381518110610e0057610dff613936565b5b60200260200101516106dd565b828281518110610e2057610e1f613936565b5b60200260200101818152505080610e3690613994565b9050610dc6565b508091505092915050565b610e50611884565b73ffffffffffffffffffffffffffffffffffffffff16610e6e6110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613791565b60405180910390fd5b610ece6000611bba565b565b610ed8611884565b73ffffffffffffffffffffffffffffffffffffffff16610ef66110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390613791565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b610f78610a9d565b610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90613a29565b60405180910390fd5b60008163ffffffff1611611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790613a95565b60405180910390fd5b6122b863ffffffff1681600360149054906101000a900463ffffffff166110279190613ab5565b63ffffffff16111561106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590613b61565b60405180910390fd5b8063ffffffff1666e6ed27d66680006110879190613b81565b3410156110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c090613c27565b60405180910390fd5b6110d33382611c80565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600781526020017f535452594b45520000000000000000000000000000000000000000000000000081525081565b66e6ed27d666800081565b6109c481565b6122b881565b8173ffffffffffffffffffffffffffffffffffffffff1661116f611884565b73ffffffffffffffffffffffffffffffffffffffff1614156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613cb9565b60405180910390fd5b80600160006111d3611884565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611280611884565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112c59190612c93565b60405180910390a35050565b600360189054906101000a900463ffffffff1681565b6112ef610ad6565b61132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590613d25565b60405180910390fd5b611339848484611eaa565b611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613d91565b60405180910390fd5b60008163ffffffff16116113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b890613a95565b60405180910390fd5b6109c463ffffffff1681600360149054906101000a900463ffffffff166113e89190613ab5565b63ffffffff16111561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613b61565b60405180910390fd5b8063ffffffff1666c3663566a580006114489190613b81565b34101561148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190613c27565b60405180910390fd5b6114943382611c80565b50505050565b6114a2611884565b73ffffffffffffffffffffffffffffffffffffffff166114c06110d6565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613791565b60405180910390fd5b6122b863ffffffff168151600360149054906101000a900463ffffffff1663ffffffff166115449190613db1565b10611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90613b61565b60405180910390fd5b60005b81518110156115c8576115b58282815181106115a6576115a5613936565b5b60200260200101516001611c80565b80806115c090613994565b915050611587565b5050565b6003601c9054906101000a900463ffffffff1681565b66c3663566a5800081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611689611884565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806116cf57506116ce856116c9611884565b6115ed565b5b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590613e79565b60405180910390fd5b61171b8585858585611fa5565b5050505050565b61172a611884565b73ffffffffffffffffffffffffffffffffffffffff166117486110d6565b73ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613791565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590613f0b565b60405180910390fd5b61181781611bba565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906118a2929190612a3e565b5050565b81518351146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613f9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061402f565b60405180910390fd5b6000611964611884565b9050611974818787878787612227565b60005b8451811015611b2557600085828151811061199557611994613936565b5b6020026020010151905060008583815181106119b4576119b3613936565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c906140c1565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0a9190613db1565b9250508190555050505080611b1e90613994565b9050611977565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b9c9291906140e1565b60405180910390a4611bb281878787878761222f565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60018163ffffffff161115611e315760008163ffffffff1667ffffffffffffffff811115611cb157611cb0612cc9565b5b604051908082528060200260200182016040528015611cdf5781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611d0457611d03612cc9565b5b604051908082528060200260200182016040528015611d325781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611dcf5780600360149054906101000a900463ffffffff16611d6a9190613ab5565b63ffffffff16838263ffffffff1681518110611d8957611d88613936565b5b6020026020010181815250506001828263ffffffff1681518110611db057611daf613936565b5b6020026020010181815250508080611dc790614118565b915050611d38565b50611deb84838360405180602001604052806000815250612416565b82600360148282829054906101000a900463ffffffff16611e0c9190613ab5565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050611ea6565b611e6582600360149054906101000a900463ffffffff1663ffffffff16600160405180602001604052806000815250612634565b6001600360148282829054906101000a900463ffffffff16611e879190613ab5565b92506101000a81548163ffffffff021916908363ffffffff1602179055505b5050565b60008033604051602001611ebe919061418d565b604051602081830303815290604052805190602001209050600181604051602001611ee99190614220565b6040516020818303038152906040528051906020012086868660405160008152602001604052604051611f1f9493929190614264565b6020604051602081039080840390855afa158015611f41573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c9061402f565b60405180910390fd5b600061201f611884565b905061203f818787612030886127ca565b612039886127ca565b87612227565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd906140c1565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218b9190613db1565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122089291906142a9565b60405180910390a461221e828888888888612844565b50505050505050565b505050505050565b61224e8473ffffffffffffffffffffffffffffffffffffffff16612a2b565b1561240e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612294959493929190614327565b602060405180830381600087803b1580156122ae57600080fd5b505af19250505080156122df57506040513d601f19601f820116820180604052508101906122dc91906143a4565b60015b612385576122eb6143de565b806308c379a014156123485750612300614400565b8061230b575061234a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233f9190612ef2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614508565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461240c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124039061459a565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d9061462c565b60405180910390fd5b81518351146124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c190613f9d565b60405180910390fd5b60006124d4611884565b90506124e581600087878787612227565b60005b845181101561259e5783818151811061250457612503613936565b5b602002602001015160008087848151811061252257612521613936565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125849190613db1565b92505081905550808061259690613994565b9150506124e8565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126169291906140e1565b60405180910390a461262d8160008787878761222f565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b9061462c565b60405180910390fd5b60006126ae611884565b90506126cf816000876126c0886127ca565b6126c9886127ca565b87612227565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461272e9190613db1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516127ac9291906142a9565b60405180910390a46127c381600087878787612844565b5050505050565b60606000600167ffffffffffffffff8111156127e9576127e8612cc9565b5b6040519080825280602002602001820160405280156128175781602001602082028036833780820191505090505b509050828160008151811061282f5761282e613936565b5b60200260200101818152505080915050919050565b6128638473ffffffffffffffffffffffffffffffffffffffff16612a2b565b15612a23578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128a995949392919061464c565b602060405180830381600087803b1580156128c357600080fd5b505af19250505080156128f457506040513d601f19601f820116820180604052508101906128f191906143a4565b60015b61299a576129006143de565b806308c379a0141561295d5750612915614400565b80612920575061295f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129549190612ef2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190614508565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a189061459a565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612a4a906137e0565b90600052602060002090601f016020900481019282612a6c5760008555612ab3565b82601f10612a8557805160ff1916838001178555612ab3565b82800160010185558215612ab3579182015b82811115612ab2578251825591602001919060010190612a97565b5b509050612ac09190612ac4565b5090565b5b80821115612add576000816000905550600101612ac5565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2082612af5565b9050919050565b612b3081612b15565b8114612b3b57600080fd5b50565b600081359050612b4d81612b27565b92915050565b6000819050919050565b612b6681612b53565b8114612b7157600080fd5b50565b600081359050612b8381612b5d565b92915050565b60008060408385031215612ba057612b9f612aeb565b5b6000612bae85828601612b3e565b9250506020612bbf85828601612b74565b9150509250929050565b612bd281612b53565b82525050565b6000602082019050612bed6000830184612bc9565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c2881612bf3565b8114612c3357600080fd5b50565b600081359050612c4581612c1f565b92915050565b600060208284031215612c6157612c60612aeb565b5b6000612c6f84828501612c36565b91505092915050565b60008115159050919050565b612c8d81612c78565b82525050565b6000602082019050612ca86000830184612c84565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d0182612cb8565b810181811067ffffffffffffffff82111715612d2057612d1f612cc9565b5b80604052505050565b6000612d33612ae1565b9050612d3f8282612cf8565b919050565b600067ffffffffffffffff821115612d5f57612d5e612cc9565b5b612d6882612cb8565b9050602081019050919050565b82818337600083830152505050565b6000612d97612d9284612d44565b612d29565b905082815260208101848484011115612db357612db2612cb3565b5b612dbe848285612d75565b509392505050565b600082601f830112612ddb57612dda612cae565b5b8135612deb848260208601612d84565b91505092915050565b600060208284031215612e0a57612e09612aeb565b5b600082013567ffffffffffffffff811115612e2857612e27612af0565b5b612e3484828501612dc6565b91505092915050565b600060208284031215612e5357612e52612aeb565b5b6000612e6184828501612b3e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ea4578082015181840152602081019050612e89565b83811115612eb3576000848401525b50505050565b6000612ec482612e6a565b612ece8185612e75565b9350612ede818560208601612e86565b612ee781612cb8565b840191505092915050565b60006020820190508181036000830152612f0c8184612eb9565b905092915050565b600060208284031215612f2a57612f29612aeb565b5b6000612f3884828501612b74565b91505092915050565b600063ffffffff82169050919050565b612f5a81612f41565b82525050565b6000602082019050612f756000830184612f51565b92915050565b600067ffffffffffffffff821115612f9657612f95612cc9565b5b602082029050602081019050919050565b600080fd5b6000612fbf612fba84612f7b565b612d29565b90508083825260208201905060208402830185811115612fe257612fe1612fa7565b5b835b8181101561300b5780612ff78882612b74565b845260208401935050602081019050612fe4565b5050509392505050565b600082601f83011261302a57613029612cae565b5b813561303a848260208601612fac565b91505092915050565b600067ffffffffffffffff82111561305e5761305d612cc9565b5b61306782612cb8565b9050602081019050919050565b600061308761308284613043565b612d29565b9050828152602081018484840111156130a3576130a2612cb3565b5b6130ae848285612d75565b509392505050565b600082601f8301126130cb576130ca612cae565b5b81356130db848260208601613074565b91505092915050565b600080600080600060a08688031215613100576130ff612aeb565b5b600061310e88828901612b3e565b955050602061311f88828901612b3e565b945050604086013567ffffffffffffffff8111156131405761313f612af0565b5b61314c88828901613015565b935050606086013567ffffffffffffffff81111561316d5761316c612af0565b5b61317988828901613015565b925050608086013567ffffffffffffffff81111561319a57613199612af0565b5b6131a6888289016130b6565b9150509295509295909350565b6131bc81612f41565b81146131c757600080fd5b50565b6000813590506131d9816131b3565b92915050565b6000602082840312156131f5576131f4612aeb565b5b6000613203848285016131ca565b91505092915050565b600067ffffffffffffffff82111561322757613226612cc9565b5b602082029050602081019050919050565b600061324b6132468461320c565b612d29565b9050808382526020820190506020840283018581111561326e5761326d612fa7565b5b835b8181101561329757806132838882612b3e565b845260208401935050602081019050613270565b5050509392505050565b600082601f8301126132b6576132b5612cae565b5b81356132c6848260208601613238565b91505092915050565b600080604083850312156132e6576132e5612aeb565b5b600083013567ffffffffffffffff81111561330457613303612af0565b5b613310858286016132a1565b925050602083013567ffffffffffffffff81111561333157613330612af0565b5b61333d85828601613015565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61337c81612b53565b82525050565b600061338e8383613373565b60208301905092915050565b6000602082019050919050565b60006133b282613347565b6133bc8185613352565b93506133c783613363565b8060005b838110156133f85781516133df8882613382565b97506133ea8361339a565b9250506001810190506133cb565b5085935050505092915050565b6000602082019050818103600083015261341f81846133a7565b905092915050565b61343081612b15565b82525050565b600060208201905061344b6000830184613427565b92915050565b61345a81612c78565b811461346557600080fd5b50565b60008135905061347781613451565b92915050565b6000806040838503121561349457613493612aeb565b5b60006134a285828601612b3e565b92505060206134b385828601613468565b9150509250929050565b600060ff82169050919050565b6134d3816134bd565b81146134de57600080fd5b50565b6000813590506134f0816134ca565b92915050565b6000819050919050565b613509816134f6565b811461351457600080fd5b50565b60008135905061352681613500565b92915050565b6000806000806080858703121561354657613545612aeb565b5b6000613554878288016134e1565b945050602061356587828801613517565b935050604061357687828801613517565b9250506060613587878288016131ca565b91505092959194509250565b6000602082840312156135a9576135a8612aeb565b5b600082013567ffffffffffffffff8111156135c7576135c6612af0565b5b6135d3848285016132a1565b91505092915050565b600080604083850312156135f3576135f2612aeb565b5b600061360185828601612b3e565b925050602061361285828601612b3e565b9150509250929050565b600080600080600060a0868803121561363857613637612aeb565b5b600061364688828901612b3e565b955050602061365788828901612b3e565b945050604061366888828901612b74565b935050606061367988828901612b74565b925050608086013567ffffffffffffffff81111561369a57613699612af0565b5b6136a6888289016130b6565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061370f602b83612e75565b915061371a826136b3565b604082019050919050565b6000602082019050818103600083015261373e81613702565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061377b602083612e75565b915061378682613745565b602082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137f857607f821691505b6020821081141561380c5761380b6137b1565b5b50919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061386e603283612e75565b915061387982613812565b604082019050919050565b6000602082019050818103600083015261389d81613861565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613900602983612e75565b915061390b826138a4565b604082019050919050565b6000602082019050818103600083015261392f816138f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061399f82612b53565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d2576139d1613965565b5b600182019050919050565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b6000613a13601a83612e75565b9150613a1e826139dd565b602082019050919050565b60006020820190508181036000830152613a4281613a06565b9050919050565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b6000613a7f601d83612e75565b9150613a8a82613a49565b602082019050919050565b60006020820190508181036000830152613aae81613a72565b9050919050565b6000613ac082612f41565b9150613acb83612f41565b92508263ffffffff03821115613ae457613ae3613965565b5b828201905092915050565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b6000613b4b602983612e75565b9150613b5682613aef565b604082019050919050565b60006020820190508181036000830152613b7a81613b3e565b9050919050565b6000613b8c82612b53565b9150613b9783612b53565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bd057613bcf613965565b5b828202905092915050565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b6000613c11601183612e75565b9150613c1c82613bdb565b602082019050919050565b60006020820190508181036000830152613c4081613c04565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613ca3602983612e75565b9150613cae82613c47565b604082019050919050565b60006020820190508181036000830152613cd281613c96565b9050919050565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b6000613d0f601783612e75565b9150613d1a82613cd9565b602082019050919050565b60006020820190508181036000830152613d3e81613d02565b9050919050565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b6000613d7b601083612e75565b9150613d8682613d45565b602082019050919050565b60006020820190508181036000830152613daa81613d6e565b9050919050565b6000613dbc82612b53565b9150613dc783612b53565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dfc57613dfb613965565b5b828201905092915050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613e63602983612e75565b9150613e6e82613e07565b604082019050919050565b60006020820190508181036000830152613e9281613e56565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ef5602683612e75565b9150613f0082613e99565b604082019050919050565b60006020820190508181036000830152613f2481613ee8565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613f87602883612e75565b9150613f9282613f2b565b604082019050919050565b60006020820190508181036000830152613fb681613f7a565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614019602583612e75565b915061402482613fbd565b604082019050919050565b600060208201905081810360008301526140488161400c565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006140ab602a83612e75565b91506140b68261404f565b604082019050919050565b600060208201905081810360008301526140da8161409e565b9050919050565b600060408201905081810360008301526140fb81856133a7565b9050818103602083015261410f81846133a7565b90509392505050565b600061412382612f41565b915063ffffffff82141561413a57614139613965565b5b600182019050919050565b60008160601b9050919050565b600061415d82614145565b9050919050565b600061416f82614152565b9050919050565b61418761418282612b15565b614164565b82525050565b60006141998284614176565b60148201915081905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006141e9601c836141a8565b91506141f4826141b3565b601c82019050919050565b6000819050919050565b61421a614215826134f6565b6141ff565b82525050565b600061422b826141dc565b91506142378284614209565b60208201915081905092915050565b61424f816134f6565b82525050565b61425e816134bd565b82525050565b60006080820190506142796000830187614246565b6142866020830186614255565b6142936040830185614246565b6142a06060830184614246565b95945050505050565b60006040820190506142be6000830185612bc9565b6142cb6020830184612bc9565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006142f9826142d2565b61430381856142dd565b9350614313818560208601612e86565b61431c81612cb8565b840191505092915050565b600060a08201905061433c6000830188613427565b6143496020830187613427565b818103604083015261435b81866133a7565b9050818103606083015261436f81856133a7565b9050818103608083015261438381846142ee565b90509695505050505050565b60008151905061439e81612c1f565b92915050565b6000602082840312156143ba576143b9612aeb565b5b60006143c88482850161438f565b91505092915050565b60008160e01c9050919050565b600060033d11156143fd5760046000803e6143fa6000516143d1565b90505b90565b600060443d101561441057614493565b614418612ae1565b60043d036004823e80513d602482011167ffffffffffffffff82111715614440575050614493565b808201805167ffffffffffffffff81111561445e5750505050614493565b80602083010160043d03850181111561447b575050505050614493565b61448a82602001850186612cf8565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006144f2603483612e75565b91506144fd82614496565b604082019050919050565b60006020820190508181036000830152614521816144e5565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614584602883612e75565b915061458f82614528565b604082019050919050565b600060208201905081810360008301526145b381614577565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614616602183612e75565b9150614621826145ba565b604082019050919050565b6000602082019050818103600083015261464581614609565b9050919050565b600060a0820190506146616000830188613427565b61466e6020830187613427565b61467b6040830186612bc9565b6146886060830185612bc9565b818103608083015261469a81846142ee565b9050969550505050505056fea2646970667358221220c908ff54b217e8af3b536c36a0d59e0b59cb7dd5674e2a3ec256613ae990a51464736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005768747470733a2f2f737472796b65722e6d7970696e6174612e636c6f75642f697066732f516d566865586d51463659355359666354534d314675446f7365423538747a4d4867456b746770755354617967502f7b69647d000000000000000000

Deployed Bytecode

0x6080604052600436106101cc5760003560e01c8063892f5f6f116100f7578063a96d3e5911610095578063e757c17d11610064578063e757c17d14610623578063e985e9c51461064e578063f242432a1461068b578063f2fde38b146106b4576101cc565b8063a96d3e5914610588578063cc21f485146105b3578063d67b06c1146105cf578063d7822c99146105f8576101cc565b80639b6860c8116100d15780639b6860c8146104de578063a18116f114610509578063a1dd2c0714610534578063a22cb4651461055f576101cc565b8063892f5f6f1461046c5780638da5cb5b1461048857806395d89b41146104b3576101cc565b806318160ddd1161016f57806344ef7ba61161013e57806344ef7ba6146103c65780634e1273f4146103ef578063715018a61461042c57806382ef300f14610443576101cc565b806318160ddd146103305780631f0234d81461035b5780632eb2c2d6146103865780633ccfd60b146103af576101cc565b8063046dc166116101ab578063046dc1661461027457806306fdde031461029d5780630e89341c146102c85780630fcf2e7514610305576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806302fe53051461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f39190612b89565b6106dd565b6040516102059190612bd8565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190612c4b565b6107a6565b6040516102429190612c93565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d9190612df4565b610888565b005b34801561028057600080fd5b5061029b60048036038101906102969190612e3d565b610910565b005b3480156102a957600080fd5b506102b26109d0565b6040516102bf9190612ef2565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190612f14565b610a09565b6040516102fc9190612ef2565b60405180910390f35b34801561031157600080fd5b5061031a610a9d565b6040516103279190612c93565b60405180910390f35b34801561033c57600080fd5b50610345610ac0565b6040516103529190612f60565b60405180910390f35b34801561036757600080fd5b50610370610ad6565b60405161037d9190612c93565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906130e4565b610b1c565b005b3480156103bb57600080fd5b506103c4610bbd565b005b3480156103d257600080fd5b506103ed60048036038101906103e891906131df565b610c8f565b005b3480156103fb57600080fd5b50610416600480360381019061041191906132cf565b610d2f565b6040516104239190613405565b60405180910390f35b34801561043857600080fd5b50610441610e48565b005b34801561044f57600080fd5b5061046a600480360381019061046591906131df565b610ed0565b005b610486600480360381019061048191906131df565b610f70565b005b34801561049457600080fd5b5061049d6110d6565b6040516104aa9190613436565b60405180910390f35b3480156104bf57600080fd5b506104c8611100565b6040516104d59190612ef2565b60405180910390f35b3480156104ea57600080fd5b506104f3611139565b6040516105009190612bd8565b60405180910390f35b34801561051557600080fd5b5061051e611144565b60405161052b9190612f60565b60405180910390f35b34801561054057600080fd5b5061054961114a565b6040516105569190612f60565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061347d565b611150565b005b34801561059457600080fd5b5061059d6112d1565b6040516105aa9190612f60565b60405180910390f35b6105cd60048036038101906105c8919061352c565b6112e7565b005b3480156105db57600080fd5b506105f660048036038101906105f19190613593565b61149a565b005b34801561060457600080fd5b5061060d6115cc565b60405161061a9190612f60565b60405180910390f35b34801561062f57600080fd5b506106386115e2565b6040516106459190612bd8565b60405180910390f35b34801561065a57600080fd5b50610675600480360381019061067091906135dc565b6115ed565b6040516106829190612c93565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad919061361c565b611681565b005b3480156106c057600080fd5b506106db60048036038101906106d69190612e3d565b611722565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074590613725565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088157506108808261181a565b5b9050919050565b610890611884565b73ffffffffffffffffffffffffffffffffffffffff166108ae6110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90613791565b60405180910390fd5b61090d8161188c565b50565b610918611884565b73ffffffffffffffffffffffffffffffffffffffff166109366110d6565b73ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390613791565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600b81526020017f535452594b4552204e465400000000000000000000000000000000000000000081525081565b606060028054610a18906137e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a44906137e0565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610b175750426003601c9054906101000a900463ffffffff1663ffffffff16115b905090565b610b24611884565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b6a5750610b6985610b64611884565b6115ed565b5b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba090613884565b60405180910390fd5b610bb685858585856118a6565b5050505050565b610bc5611884565b73ffffffffffffffffffffffffffffffffffffffff16610be36110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090613791565b60405180910390fd5b6000479050610c466110d6565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c8b573d6000803e3d6000fd5b5050565b610c97611884565b73ffffffffffffffffffffffffffffffffffffffff16610cb56110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0290613791565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b60608151835114610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90613916565b60405180910390fd5b6000835167ffffffffffffffff811115610d9257610d91612cc9565b5b604051908082528060200260200182016040528015610dc05781602001602082028036833780820191505090505b50905060005b8451811015610e3d57610e0d858281518110610de557610de4613936565b5b6020026020010151858381518110610e0057610dff613936565b5b60200260200101516106dd565b828281518110610e2057610e1f613936565b5b60200260200101818152505080610e3690613994565b9050610dc6565b508091505092915050565b610e50611884565b73ffffffffffffffffffffffffffffffffffffffff16610e6e6110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613791565b60405180910390fd5b610ece6000611bba565b565b610ed8611884565b73ffffffffffffffffffffffffffffffffffffffff16610ef66110d6565b73ffffffffffffffffffffffffffffffffffffffff1614610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390613791565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b610f78610a9d565b610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90613a29565b60405180910390fd5b60008163ffffffff1611611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790613a95565b60405180910390fd5b6122b863ffffffff1681600360149054906101000a900463ffffffff166110279190613ab5565b63ffffffff16111561106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590613b61565b60405180910390fd5b8063ffffffff1666e6ed27d66680006110879190613b81565b3410156110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c090613c27565b60405180910390fd5b6110d33382611c80565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600781526020017f535452594b45520000000000000000000000000000000000000000000000000081525081565b66e6ed27d666800081565b6109c481565b6122b881565b8173ffffffffffffffffffffffffffffffffffffffff1661116f611884565b73ffffffffffffffffffffffffffffffffffffffff1614156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613cb9565b60405180910390fd5b80600160006111d3611884565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611280611884565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112c59190612c93565b60405180910390a35050565b600360189054906101000a900463ffffffff1681565b6112ef610ad6565b61132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590613d25565b60405180910390fd5b611339848484611eaa565b611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613d91565b60405180910390fd5b60008163ffffffff16116113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b890613a95565b60405180910390fd5b6109c463ffffffff1681600360149054906101000a900463ffffffff166113e89190613ab5565b63ffffffff16111561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613b61565b60405180910390fd5b8063ffffffff1666c3663566a580006114489190613b81565b34101561148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190613c27565b60405180910390fd5b6114943382611c80565b50505050565b6114a2611884565b73ffffffffffffffffffffffffffffffffffffffff166114c06110d6565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613791565b60405180910390fd5b6122b863ffffffff168151600360149054906101000a900463ffffffff1663ffffffff166115449190613db1565b10611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90613b61565b60405180910390fd5b60005b81518110156115c8576115b58282815181106115a6576115a5613936565b5b60200260200101516001611c80565b80806115c090613994565b915050611587565b5050565b6003601c9054906101000a900463ffffffff1681565b66c3663566a5800081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611689611884565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806116cf57506116ce856116c9611884565b6115ed565b5b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590613e79565b60405180910390fd5b61171b8585858585611fa5565b5050505050565b61172a611884565b73ffffffffffffffffffffffffffffffffffffffff166117486110d6565b73ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613791565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180590613f0b565b60405180910390fd5b61181781611bba565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906118a2929190612a3e565b5050565b81518351146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613f9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061402f565b60405180910390fd5b6000611964611884565b9050611974818787878787612227565b60005b8451811015611b2557600085828151811061199557611994613936565b5b6020026020010151905060008583815181106119b4576119b3613936565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c906140c1565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0a9190613db1565b9250508190555050505080611b1e90613994565b9050611977565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b9c9291906140e1565b60405180910390a4611bb281878787878761222f565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60018163ffffffff161115611e315760008163ffffffff1667ffffffffffffffff811115611cb157611cb0612cc9565b5b604051908082528060200260200182016040528015611cdf5781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611d0457611d03612cc9565b5b604051908082528060200260200182016040528015611d325781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611dcf5780600360149054906101000a900463ffffffff16611d6a9190613ab5565b63ffffffff16838263ffffffff1681518110611d8957611d88613936565b5b6020026020010181815250506001828263ffffffff1681518110611db057611daf613936565b5b6020026020010181815250508080611dc790614118565b915050611d38565b50611deb84838360405180602001604052806000815250612416565b82600360148282829054906101000a900463ffffffff16611e0c9190613ab5565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050611ea6565b611e6582600360149054906101000a900463ffffffff1663ffffffff16600160405180602001604052806000815250612634565b6001600360148282829054906101000a900463ffffffff16611e879190613ab5565b92506101000a81548163ffffffff021916908363ffffffff1602179055505b5050565b60008033604051602001611ebe919061418d565b604051602081830303815290604052805190602001209050600181604051602001611ee99190614220565b6040516020818303038152906040528051906020012086868660405160008152602001604052604051611f1f9493929190614264565b6020604051602081039080840390855afa158015611f41573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c9061402f565b60405180910390fd5b600061201f611884565b905061203f818787612030886127ca565b612039886127ca565b87612227565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd906140c1565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218b9190613db1565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122089291906142a9565b60405180910390a461221e828888888888612844565b50505050505050565b505050505050565b61224e8473ffffffffffffffffffffffffffffffffffffffff16612a2b565b1561240e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612294959493929190614327565b602060405180830381600087803b1580156122ae57600080fd5b505af19250505080156122df57506040513d601f19601f820116820180604052508101906122dc91906143a4565b60015b612385576122eb6143de565b806308c379a014156123485750612300614400565b8061230b575061234a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233f9190612ef2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614508565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461240c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124039061459a565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d9061462c565b60405180910390fd5b81518351146124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c190613f9d565b60405180910390fd5b60006124d4611884565b90506124e581600087878787612227565b60005b845181101561259e5783818151811061250457612503613936565b5b602002602001015160008087848151811061252257612521613936565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125849190613db1565b92505081905550808061259690613994565b9150506124e8565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126169291906140e1565b60405180910390a461262d8160008787878761222f565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b9061462c565b60405180910390fd5b60006126ae611884565b90506126cf816000876126c0886127ca565b6126c9886127ca565b87612227565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461272e9190613db1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516127ac9291906142a9565b60405180910390a46127c381600087878787612844565b5050505050565b60606000600167ffffffffffffffff8111156127e9576127e8612cc9565b5b6040519080825280602002602001820160405280156128175781602001602082028036833780820191505090505b509050828160008151811061282f5761282e613936565b5b60200260200101818152505080915050919050565b6128638473ffffffffffffffffffffffffffffffffffffffff16612a2b565b15612a23578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128a995949392919061464c565b602060405180830381600087803b1580156128c357600080fd5b505af19250505080156128f457506040513d601f19601f820116820180604052508101906128f191906143a4565b60015b61299a576129006143de565b806308c379a0141561295d5750612915614400565b80612920575061295f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129549190612ef2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190614508565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a189061459a565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612a4a906137e0565b90600052602060002090601f016020900481019282612a6c5760008555612ab3565b82601f10612a8557805160ff1916838001178555612ab3565b82800160010185558215612ab3579182015b82811115612ab2578251825591602001919060010190612a97565b5b509050612ac09190612ac4565b5090565b5b80821115612add576000816000905550600101612ac5565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2082612af5565b9050919050565b612b3081612b15565b8114612b3b57600080fd5b50565b600081359050612b4d81612b27565b92915050565b6000819050919050565b612b6681612b53565b8114612b7157600080fd5b50565b600081359050612b8381612b5d565b92915050565b60008060408385031215612ba057612b9f612aeb565b5b6000612bae85828601612b3e565b9250506020612bbf85828601612b74565b9150509250929050565b612bd281612b53565b82525050565b6000602082019050612bed6000830184612bc9565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c2881612bf3565b8114612c3357600080fd5b50565b600081359050612c4581612c1f565b92915050565b600060208284031215612c6157612c60612aeb565b5b6000612c6f84828501612c36565b91505092915050565b60008115159050919050565b612c8d81612c78565b82525050565b6000602082019050612ca86000830184612c84565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d0182612cb8565b810181811067ffffffffffffffff82111715612d2057612d1f612cc9565b5b80604052505050565b6000612d33612ae1565b9050612d3f8282612cf8565b919050565b600067ffffffffffffffff821115612d5f57612d5e612cc9565b5b612d6882612cb8565b9050602081019050919050565b82818337600083830152505050565b6000612d97612d9284612d44565b612d29565b905082815260208101848484011115612db357612db2612cb3565b5b612dbe848285612d75565b509392505050565b600082601f830112612ddb57612dda612cae565b5b8135612deb848260208601612d84565b91505092915050565b600060208284031215612e0a57612e09612aeb565b5b600082013567ffffffffffffffff811115612e2857612e27612af0565b5b612e3484828501612dc6565b91505092915050565b600060208284031215612e5357612e52612aeb565b5b6000612e6184828501612b3e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ea4578082015181840152602081019050612e89565b83811115612eb3576000848401525b50505050565b6000612ec482612e6a565b612ece8185612e75565b9350612ede818560208601612e86565b612ee781612cb8565b840191505092915050565b60006020820190508181036000830152612f0c8184612eb9565b905092915050565b600060208284031215612f2a57612f29612aeb565b5b6000612f3884828501612b74565b91505092915050565b600063ffffffff82169050919050565b612f5a81612f41565b82525050565b6000602082019050612f756000830184612f51565b92915050565b600067ffffffffffffffff821115612f9657612f95612cc9565b5b602082029050602081019050919050565b600080fd5b6000612fbf612fba84612f7b565b612d29565b90508083825260208201905060208402830185811115612fe257612fe1612fa7565b5b835b8181101561300b5780612ff78882612b74565b845260208401935050602081019050612fe4565b5050509392505050565b600082601f83011261302a57613029612cae565b5b813561303a848260208601612fac565b91505092915050565b600067ffffffffffffffff82111561305e5761305d612cc9565b5b61306782612cb8565b9050602081019050919050565b600061308761308284613043565b612d29565b9050828152602081018484840111156130a3576130a2612cb3565b5b6130ae848285612d75565b509392505050565b600082601f8301126130cb576130ca612cae565b5b81356130db848260208601613074565b91505092915050565b600080600080600060a08688031215613100576130ff612aeb565b5b600061310e88828901612b3e565b955050602061311f88828901612b3e565b945050604086013567ffffffffffffffff8111156131405761313f612af0565b5b61314c88828901613015565b935050606086013567ffffffffffffffff81111561316d5761316c612af0565b5b61317988828901613015565b925050608086013567ffffffffffffffff81111561319a57613199612af0565b5b6131a6888289016130b6565b9150509295509295909350565b6131bc81612f41565b81146131c757600080fd5b50565b6000813590506131d9816131b3565b92915050565b6000602082840312156131f5576131f4612aeb565b5b6000613203848285016131ca565b91505092915050565b600067ffffffffffffffff82111561322757613226612cc9565b5b602082029050602081019050919050565b600061324b6132468461320c565b612d29565b9050808382526020820190506020840283018581111561326e5761326d612fa7565b5b835b8181101561329757806132838882612b3e565b845260208401935050602081019050613270565b5050509392505050565b600082601f8301126132b6576132b5612cae565b5b81356132c6848260208601613238565b91505092915050565b600080604083850312156132e6576132e5612aeb565b5b600083013567ffffffffffffffff81111561330457613303612af0565b5b613310858286016132a1565b925050602083013567ffffffffffffffff81111561333157613330612af0565b5b61333d85828601613015565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61337c81612b53565b82525050565b600061338e8383613373565b60208301905092915050565b6000602082019050919050565b60006133b282613347565b6133bc8185613352565b93506133c783613363565b8060005b838110156133f85781516133df8882613382565b97506133ea8361339a565b9250506001810190506133cb565b5085935050505092915050565b6000602082019050818103600083015261341f81846133a7565b905092915050565b61343081612b15565b82525050565b600060208201905061344b6000830184613427565b92915050565b61345a81612c78565b811461346557600080fd5b50565b60008135905061347781613451565b92915050565b6000806040838503121561349457613493612aeb565b5b60006134a285828601612b3e565b92505060206134b385828601613468565b9150509250929050565b600060ff82169050919050565b6134d3816134bd565b81146134de57600080fd5b50565b6000813590506134f0816134ca565b92915050565b6000819050919050565b613509816134f6565b811461351457600080fd5b50565b60008135905061352681613500565b92915050565b6000806000806080858703121561354657613545612aeb565b5b6000613554878288016134e1565b945050602061356587828801613517565b935050604061357687828801613517565b9250506060613587878288016131ca565b91505092959194509250565b6000602082840312156135a9576135a8612aeb565b5b600082013567ffffffffffffffff8111156135c7576135c6612af0565b5b6135d3848285016132a1565b91505092915050565b600080604083850312156135f3576135f2612aeb565b5b600061360185828601612b3e565b925050602061361285828601612b3e565b9150509250929050565b600080600080600060a0868803121561363857613637612aeb565b5b600061364688828901612b3e565b955050602061365788828901612b3e565b945050604061366888828901612b74565b935050606061367988828901612b74565b925050608086013567ffffffffffffffff81111561369a57613699612af0565b5b6136a6888289016130b6565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061370f602b83612e75565b915061371a826136b3565b604082019050919050565b6000602082019050818103600083015261373e81613702565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061377b602083612e75565b915061378682613745565b602082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137f857607f821691505b6020821081141561380c5761380b6137b1565b5b50919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061386e603283612e75565b915061387982613812565b604082019050919050565b6000602082019050818103600083015261389d81613861565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613900602983612e75565b915061390b826138a4565b604082019050919050565b6000602082019050818103600083015261392f816138f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061399f82612b53565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d2576139d1613965565b5b600182019050919050565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b6000613a13601a83612e75565b9150613a1e826139dd565b602082019050919050565b60006020820190508181036000830152613a4281613a06565b9050919050565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b6000613a7f601d83612e75565b9150613a8a82613a49565b602082019050919050565b60006020820190508181036000830152613aae81613a72565b9050919050565b6000613ac082612f41565b9150613acb83612f41565b92508263ffffffff03821115613ae457613ae3613965565b5b828201905092915050565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b6000613b4b602983612e75565b9150613b5682613aef565b604082019050919050565b60006020820190508181036000830152613b7a81613b3e565b9050919050565b6000613b8c82612b53565b9150613b9783612b53565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bd057613bcf613965565b5b828202905092915050565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b6000613c11601183612e75565b9150613c1c82613bdb565b602082019050919050565b60006020820190508181036000830152613c4081613c04565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613ca3602983612e75565b9150613cae82613c47565b604082019050919050565b60006020820190508181036000830152613cd281613c96565b9050919050565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b6000613d0f601783612e75565b9150613d1a82613cd9565b602082019050919050565b60006020820190508181036000830152613d3e81613d02565b9050919050565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b6000613d7b601083612e75565b9150613d8682613d45565b602082019050919050565b60006020820190508181036000830152613daa81613d6e565b9050919050565b6000613dbc82612b53565b9150613dc783612b53565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dfc57613dfb613965565b5b828201905092915050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613e63602983612e75565b9150613e6e82613e07565b604082019050919050565b60006020820190508181036000830152613e9281613e56565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ef5602683612e75565b9150613f0082613e99565b604082019050919050565b60006020820190508181036000830152613f2481613ee8565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613f87602883612e75565b9150613f9282613f2b565b604082019050919050565b60006020820190508181036000830152613fb681613f7a565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614019602583612e75565b915061402482613fbd565b604082019050919050565b600060208201905081810360008301526140488161400c565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006140ab602a83612e75565b91506140b68261404f565b604082019050919050565b600060208201905081810360008301526140da8161409e565b9050919050565b600060408201905081810360008301526140fb81856133a7565b9050818103602083015261410f81846133a7565b90509392505050565b600061412382612f41565b915063ffffffff82141561413a57614139613965565b5b600182019050919050565b60008160601b9050919050565b600061415d82614145565b9050919050565b600061416f82614152565b9050919050565b61418761418282612b15565b614164565b82525050565b60006141998284614176565b60148201915081905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006141e9601c836141a8565b91506141f4826141b3565b601c82019050919050565b6000819050919050565b61421a614215826134f6565b6141ff565b82525050565b600061422b826141dc565b91506142378284614209565b60208201915081905092915050565b61424f816134f6565b82525050565b61425e816134bd565b82525050565b60006080820190506142796000830187614246565b6142866020830186614255565b6142936040830185614246565b6142a06060830184614246565b95945050505050565b60006040820190506142be6000830185612bc9565b6142cb6020830184612bc9565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006142f9826142d2565b61430381856142dd565b9350614313818560208601612e86565b61431c81612cb8565b840191505092915050565b600060a08201905061433c6000830188613427565b6143496020830187613427565b818103604083015261435b81866133a7565b9050818103606083015261436f81856133a7565b9050818103608083015261438381846142ee565b90509695505050505050565b60008151905061439e81612c1f565b92915050565b6000602082840312156143ba576143b9612aeb565b5b60006143c88482850161438f565b91505092915050565b60008160e01c9050919050565b600060033d11156143fd5760046000803e6143fa6000516143d1565b90505b90565b600060443d101561441057614493565b614418612ae1565b60043d036004823e80513d602482011167ffffffffffffffff82111715614440575050614493565b808201805167ffffffffffffffff81111561445e5750505050614493565b80602083010160043d03850181111561447b575050505050614493565b61448a82602001850186612cf8565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006144f2603483612e75565b91506144fd82614496565b604082019050919050565b60006020820190508181036000830152614521816144e5565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614584602883612e75565b915061458f82614528565b604082019050919050565b600060208201905081810360008301526145b381614577565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614616602183612e75565b9150614621826145ba565b604082019050919050565b6000602082019050818103600083015261464581614609565b9050919050565b600060a0820190506146616000830188613427565b61466e6020830187613427565b61467b6040830186612bc9565b6146886060830185612bc9565b818103608083015261469a81846142ee565b9050969550505050505056fea2646970667358221220c908ff54b217e8af3b536c36a0d59e0b59cb7dd5674e2a3ec256613ae990a51464736f6c63430008090033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005768747470733a2f2f737472796b65722e6d7970696e6174612e636c6f75642f697066732f516d566865586d51463659355359666354534d314675446f7365423538747a4d4867456b746770755354617967502f7b69647d000000000000000000

-----Decoded View---------------
Arg [0] : uri (string): https://stryker.mypinata.cloud/ipfs/QmVheXmQF6Y5SYfcTSM1FuDoseB58tzMHgEktgpuSTaygP/{id}

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000057
Arg [2] : 68747470733a2f2f737472796b65722e6d7970696e6174612e636c6f75642f69
Arg [3] : 7066732f516d566865586d51463659355359666354534d314675446f73654235
Arg [4] : 38747a4d4867456b746770755354617967502f7b69647d000000000000000000


Deployed Bytecode Sourcemap

35566:3692:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22202:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21225:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36235:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36326:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35613:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21946:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36874:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35713:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36696:166;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24297:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39113:142;;;;;;;;;;;;;:::i;:::-;;36432:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22599:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2488:94;;;;;;;;;;;;;:::i;:::-;;36561:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38379:415;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1837:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35663:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36036:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35806:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35980:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23196:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35751:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37867:500;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38802:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35922:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35859:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23579:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23819:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2737:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22202:231;22288:7;22335:1;22316:21;;:7;:21;;;;22308:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22403:9;:13;22413:2;22403:13;;;;;;;;;;;:22;22417:7;22403:22;;;;;;;;;;;;;;;;22396:29;;22202:231;;;;:::o;21225:310::-;21327:4;21379:26;21364:41;;;:11;:41;;;;:110;;;;21437:37;21422:52;;;:11;:52;;;;21364:110;:163;;;;21491:36;21515:11;21491:23;:36::i;:::-;21364:163;21344:183;;21225:310;;;:::o;36235:83::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36298:12:::1;36306:3;36298:7;:12::i;:::-;36235:83:::0;:::o;36326:98::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36412:4:::1;36396:13;;:20;;;;;;;;;;;;;;;;;;36326:98:::0;:::o;35613:43::-;;;;;;;;;;;;;;;;;;;:::o;21946:105::-;22006:13;22039:4;22032:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21946:105;;;:::o;36874:126::-;36925:4;36977:15;36949:24;;;;;;;;;;;:43;;;;36942:50;;36874:126;:::o;35713:29::-;;;;;;;;;;;;;:::o;36696:166::-;36744:4;36793:15;36768:21;;;;;;;;;;;:40;;;;:86;;;;;36839:15;36812:24;;;;;;;;;;;:42;;;36768:86;36761:93;;36696:166;:::o;24297:442::-;24538:12;:10;:12::i;:::-;24530:20;;:4;:20;;;:60;;;;24554:36;24571:4;24577:12;:10;:12::i;:::-;24554:16;:36::i;:::-;24530:60;24508:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24679:52;24702:4;24708:2;24712:3;24717:7;24726:4;24679:22;:52::i;:::-;24297:442;;;;;:::o;39113:142::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39163:15:::1;39181:21;39163:39;;39221:7;:5;:7::i;:::-;39213:25;;:34;39239:7;39213:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39152:103;39113:142::o:0;36432:121::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36536:9:::1;36512:21;;:33;;;;;;;;;;;;;;;;;;36432:121:::0;:::o;22599:524::-;22755:16;22816:3;:10;22797:8;:15;:29;22789:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22885:30;22932:8;:15;22918:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22885:63;;22966:9;22961:122;22985:8;:15;22981:1;:19;22961:122;;;23041:30;23051:8;23060:1;23051:11;;;;;;;;:::i;:::-;;;;;;;;23064:3;23068:1;23064:6;;;;;;;;:::i;:::-;;;;;;;;23041:9;:30::i;:::-;23022:13;23036:1;23022:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23002:3;;;;:::i;:::-;;;22961:122;;;;23102:13;23095:20;;;22599:524;;;;:::o;2488:94::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2553:21:::1;2571:1;2553:9;:21::i;:::-;2488:94::o:0;36561:127::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36671:9:::1;36644:24;;:36;;;;;;;;;;;;;;;;;;36561:127:::0;:::o;38379:415::-;38453:20;:18;:20::i;:::-;38445:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;38531:1;38523:5;:9;;;38515:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36025:4;38585:42;;38599:5;38585:11;;;;;;;;;;;:19;;;;:::i;:::-;:42;;;;38577:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38723:5;38705:23;;36078:11;38705:23;;;;:::i;:::-;38692:9;:36;;38684:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38763:23;38768:10;38780:5;38763:4;:23::i;:::-;38379:415;:::o;1837:87::-;1883:7;1910:6;;;;;;;;;;;1903:13;;1837:87;:::o;35663:41::-;;;;;;;;;;;;;;;;;;;:::o;36036:53::-;36078:11;36036:53;:::o;35806:46::-;35848:4;35806:46;:::o;35980:49::-;36025:4;35980:49;:::o;23196:311::-;23315:8;23299:24;;:12;:10;:12::i;:::-;:24;;;;23291:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23427:8;23382:18;:32;23401:12;:10;:12::i;:::-;23382:32;;;;;;;;;;;;;;;:42;23415:8;23382:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23480:8;23451:48;;23466:12;:10;:12::i;:::-;23451:48;;;23490:8;23451:48;;;;;;:::i;:::-;;;;;;;;23196:311;;:::o;35751:48::-;;;;;;;;;;;;;:::o;37867:500::-;37969:17;:15;:17::i;:::-;37961:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;38033:29;38054:1;38057;38060;38033:20;:29::i;:::-;38025:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38110:1;38102:5;:9;;;38094:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;35848:4;38164:39;;38178:5;38164:11;;;;;;;;;;;:19;;;;:::i;:::-;:39;;;;38156:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;38296:5;38281:20;;35898:11;38281:20;;;;:::i;:::-;38268:9;:33;;38260:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38336:23;38341:10;38353:5;38336:4;:23::i;:::-;37867:500;;;;:::o;38802:303::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36025:4:::1;38887:52;;38901:9;:16;38887:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:52;38879:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;39011:6;39006:92;39027:9;:16;39023:1;:20;39006:92;;;39065:21;39070:9;39080:1;39070:12;;;;;;;;:::i;:::-;;;;;;;;39084:1;39065:4;:21::i;:::-;39045:3;;;;;:::i;:::-;;;;39006:92;;;;38802:303:::0;:::o;35922:51::-;;;;;;;;;;;;;:::o;35859:50::-;35898:11;35859:50;:::o;23579:168::-;23678:4;23702:18;:27;23721:7;23702:27;;;;;;;;;;;;;;;:37;23730:8;23702:37;;;;;;;;;;;;;;;;;;;;;;;;;23695:44;;23579:168;;;;:::o;23819:401::-;24035:12;:10;:12::i;:::-;24027:20;;:4;:20;;;:60;;;;24051:36;24068:4;24074:12;:10;:12::i;:::-;24051:16;:36::i;:::-;24027:60;24005:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24167:45;24185:4;24191:2;24195;24199:6;24207:4;24167:17;:45::i;:::-;23819:401;;;;;:::o;2737:192::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:1:::1;2826:22;;:8;:22;;;;2818:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2902:19;2912:8;2902:9;:19::i;:::-;2737:192:::0;:::o;12861:157::-;12946:4;12985:25;12970:40;;;:11;:40;;;;12963:47;;12861:157;;;:::o;625:98::-;678:7;705:10;698:17;;625:98;:::o;28299:88::-;28373:6;28366:4;:13;;;;;;;;;;;;:::i;:::-;;28299:88;:::o;26381:1074::-;26608:7;:14;26594:3;:10;:28;26586:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26700:1;26686:16;;:2;:16;;;;26678:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26757:16;26776:12;:10;:12::i;:::-;26757:31;;26801:60;26822:8;26832:4;26838:2;26842:3;26847:7;26856:4;26801:20;:60::i;:::-;26879:9;26874:421;26898:3;:10;26894:1;:14;26874:421;;;26930:10;26943:3;26947:1;26943:6;;;;;;;;:::i;:::-;;;;;;;;26930:19;;26964:14;26981:7;26989:1;26981:10;;;;;;;;:::i;:::-;;;;;;;;26964:27;;27008:19;27030:9;:13;27040:2;27030:13;;;;;;;;;;;:19;27044:4;27030:19;;;;;;;;;;;;;;;;27008:41;;27087:6;27072:11;:21;;27064:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27220:6;27206:11;:20;27184:9;:13;27194:2;27184:13;;;;;;;;;;;:19;27198:4;27184:19;;;;;;;;;;;;;;;:42;;;;27277:6;27256:9;:13;27266:2;27256:13;;;;;;;;;;;:17;27270:2;27256:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26915:380;;;26910:3;;;;:::i;:::-;;;26874:421;;;;27342:2;27312:47;;27336:4;27312:47;;27326:8;27312:47;;;27346:3;27351:7;27312:47;;;;;;;:::i;:::-;;;;;;;;27372:75;27408:8;27418:4;27424:2;27428:3;27433:7;27442:4;27372:35;:75::i;:::-;26575:880;26381:1074;;;;;:::o;2937:173::-;2993:16;3012:6;;;;;;;;;;;2993:25;;3038:8;3029:6;;:17;;;;;;;;;;;;;;;;;;3093:8;3062:40;;3083:8;3062:40;;;;;;;;;;;;2982:128;2937:173;:::o;37303:552::-;37375:1;37367:5;:9;;;37363:485;;;37393:20;37438:5;37430:14;;37416:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37393:52;;37460:24;37509:5;37501:14;;37487:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37460:56;;37538:8;37533:127;37556:5;37552:9;;:1;:9;;;37533:127;;;37610:1;37596:11;;;;;;;;;;;:15;;;;:::i;:::-;37587:24;;:3;37591:1;37587:6;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;;37643:1;37630:7;37638:1;37630:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;37563:3;;;;;:::i;:::-;;;;37533:127;;;;37676:32;37687:2;37691:3;37696:7;37676:32;;;;;;;;;;;;:10;:32::i;:::-;37738:5;37723:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37378:377;;37363:485;;;37776:29;37782:2;37786:11;;;;;;;;;;;37776:29;;37799:1;37776:29;;;;;;;;;;;;:5;:29::i;:::-;37835:1;37820:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37363:485;37303:552;;:::o;37008:287::-;37092:4;37109:12;37151:10;37134:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;37124:39;;;;;;37109:54;;37198:89;37271:4;37218:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;37208:69;;;;;;37279:1;37282;37285;37198:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37181:106;;:13;;;;;;;;;;;:106;;;37174:113;;;37008:287;;;;;:::o;25203:820::-;25405:1;25391:16;;:2;:16;;;;25383:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25462:16;25481:12;:10;:12::i;:::-;25462:31;;25506:96;25527:8;25537:4;25543:2;25547:21;25565:2;25547:17;:21::i;:::-;25570:25;25588:6;25570:17;:25::i;:::-;25597:4;25506:20;:96::i;:::-;25615:19;25637:9;:13;25647:2;25637:13;;;;;;;;;;;:19;25651:4;25637:19;;;;;;;;;;;;;;;;25615:41;;25690:6;25675:11;:21;;25667:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25815:6;25801:11;:20;25779:9;:13;25789:2;25779:13;;;;;;;;;;;:19;25793:4;25779:19;;;;;;;;;;;;;;;:42;;;;25864:6;25843:9;:13;25853:2;25843:13;;;;;;;;;;;:17;25857:2;25843:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25919:2;25888:46;;25913:4;25888:46;;25903:8;25888:46;;;25923:2;25927:6;25888:46;;;;;;;:::i;:::-;;;;;;;;25947:68;25978:8;25988:4;25994:2;25998;26002:6;26010:4;25947:30;:68::i;:::-;25372:651;;25203:820;;;;;:::o;33489:221::-;;;;;;;:::o;34470:813::-;34710:15;:2;:13;;;:15::i;:::-;34706:570;;;34763:2;34746:43;;;34790:8;34800:4;34806:3;34811:7;34820:4;34746:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34742:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35138:6;35131:14;;;;;;;;;;;:::i;:::-;;;;;;;;34742:523;;;35187:62;;;;;;;;;;:::i;:::-;;;;;;;;34742:523;34919:48;;;34907:60;;;:8;:60;;;;34903:159;;34992:50;;;;;;;;;;:::i;:::-;;;;;;;;34903:159;34826:251;34706:570;34470:813;;;;;;:::o;29743:735::-;29935:1;29921:16;;:2;:16;;;;29913:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30008:7;:14;29994:3;:10;:28;29986:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30080:16;30099:12;:10;:12::i;:::-;30080:31;;30124:66;30145:8;30163:1;30167:2;30171:3;30176:7;30185:4;30124:20;:66::i;:::-;30208:9;30203:103;30227:3;:10;30223:1;:14;30203:103;;;30284:7;30292:1;30284:10;;;;;;;;:::i;:::-;;;;;;;;30259:9;:17;30269:3;30273:1;30269:6;;;;;;;;:::i;:::-;;;;;;;;30259:17;;;;;;;;;;;:21;30277:2;30259:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30239:3;;;;;:::i;:::-;;;;30203:103;;;;30359:2;30323:53;;30355:1;30323:53;;30337:8;30323:53;;;30363:3;30368:7;30323:53;;;;;;;:::i;:::-;;;;;;;;30389:81;30425:8;30443:1;30447:2;30451:3;30456:7;30465:4;30389:35;:81::i;:::-;29902:576;29743:735;;;;:::o;28788:599::-;28965:1;28946:21;;:7;:21;;;;28938:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29018:16;29037:12;:10;:12::i;:::-;29018:31;;29062:107;29083:8;29101:1;29105:7;29114:21;29132:2;29114:17;:21::i;:::-;29137:25;29155:6;29137:17;:25::i;:::-;29164:4;29062:20;:107::i;:::-;29208:6;29182:9;:13;29192:2;29182:13;;;;;;;;;;;:22;29196:7;29182:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;29267:7;29230:57;;29263:1;29230:57;;29245:8;29230:57;;;29276:2;29280:6;29230:57;;;;;;;:::i;:::-;;;;;;;;29300:79;29331:8;29349:1;29353:7;29362:2;29366:6;29374:4;29300:30;:79::i;:::-;28927:460;28788:599;;;;:::o;35291:198::-;35357:16;35386:22;35425:1;35411:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35386:41;;35449:7;35438:5;35444:1;35438:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;35476:5;35469:12;;;35291:198;;;:::o;33718:744::-;33933:15;:2;:13;;;:15::i;:::-;33929:526;;;33986:2;33969:38;;;34008:8;34018:4;34024:2;34028:6;34036:4;33969:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33965:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34317:6;34310:14;;;;;;;;;;;:::i;:::-;;;;;;;;33965:479;;;34366:62;;;;;;;;;;:::i;:::-;;;;;;;;33965:479;34103:43;;;34091:55;;;:8;:55;;;;34087:154;;34171:50;;;;;;;;;;:::i;:::-;;;;;;;;34087:154;34042:214;33929:526;33718:744;;;;;;:::o;3883:387::-;3943:4;4151:12;4218:7;4206:20;4198:28;;4261:1;4254:4;:8;4247:15;;;3883:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:329::-;6001:6;6050:2;6038:9;6029:7;6025:23;6021:32;6018:119;;;6056:79;;:::i;:::-;6018:119;6176:1;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6147:117;5942:329;;;;:::o;6277:99::-;6329:6;6363:5;6357:12;6347:22;;6277:99;;;:::o;6382:169::-;6466:11;6500:6;6495:3;6488:19;6540:4;6535:3;6531:14;6516:29;;6382:169;;;;:::o;6557:307::-;6625:1;6635:113;6649:6;6646:1;6643:13;6635:113;;;6734:1;6729:3;6725:11;6719:18;6715:1;6710:3;6706:11;6699:39;6671:2;6668:1;6664:10;6659:15;;6635:113;;;6766:6;6763:1;6760:13;6757:101;;;6846:1;6837:6;6832:3;6828:16;6821:27;6757:101;6606:258;6557:307;;;:::o;6870:364::-;6958:3;6986:39;7019:5;6986:39;:::i;:::-;7041:71;7105:6;7100:3;7041:71;:::i;:::-;7034:78;;7121:52;7166:6;7161:3;7154:4;7147:5;7143:16;7121:52;:::i;:::-;7198:29;7220:6;7198:29;:::i;:::-;7193:3;7189:39;7182:46;;6962:272;6870:364;;;;:::o;7240:313::-;7353:4;7391:2;7380:9;7376:18;7368:26;;7440:9;7434:4;7430:20;7426:1;7415:9;7411:17;7404:47;7468:78;7541:4;7532:6;7468:78;:::i;:::-;7460:86;;7240:313;;;;:::o;7559:329::-;7618:6;7667:2;7655:9;7646:7;7642:23;7638:32;7635:119;;;7673:79;;:::i;:::-;7635:119;7793:1;7818:53;7863:7;7854:6;7843:9;7839:22;7818:53;:::i;:::-;7808:63;;7764:117;7559:329;;;;:::o;7894:93::-;7930:7;7970:10;7963:5;7959:22;7948:33;;7894:93;;;:::o;7993:115::-;8078:23;8095:5;8078:23;:::i;:::-;8073:3;8066:36;7993:115;;:::o;8114:218::-;8205:4;8243:2;8232:9;8228:18;8220:26;;8256:69;8322:1;8311:9;8307:17;8298:6;8256:69;:::i;:::-;8114:218;;;;:::o;8338:311::-;8415:4;8505:18;8497:6;8494:30;8491:56;;;8527:18;;:::i;:::-;8491:56;8577:4;8569:6;8565:17;8557:25;;8637:4;8631;8627:15;8619:23;;8338:311;;;:::o;8655:117::-;8764:1;8761;8754:12;8795:710;8891:5;8916:81;8932:64;8989:6;8932:64;:::i;:::-;8916:81;:::i;:::-;8907:90;;9017:5;9046:6;9039:5;9032:21;9080:4;9073:5;9069:16;9062:23;;9133:4;9125:6;9121:17;9113:6;9109:30;9162:3;9154:6;9151:15;9148:122;;;9181:79;;:::i;:::-;9148:122;9296:6;9279:220;9313:6;9308:3;9305:15;9279:220;;;9388:3;9417:37;9450:3;9438:10;9417:37;:::i;:::-;9412:3;9405:50;9484:4;9479:3;9475:14;9468:21;;9355:144;9339:4;9334:3;9330:14;9323:21;;9279:220;;;9283:21;8897:608;;8795:710;;;;;:::o;9528:370::-;9599:5;9648:3;9641:4;9633:6;9629:17;9625:27;9615:122;;9656:79;;:::i;:::-;9615:122;9773:6;9760:20;9798:94;9888:3;9880:6;9873:4;9865:6;9861:17;9798:94;:::i;:::-;9789:103;;9605:293;9528:370;;;;:::o;9904:307::-;9965:4;10055:18;10047:6;10044:30;10041:56;;;10077:18;;:::i;:::-;10041:56;10115:29;10137:6;10115:29;:::i;:::-;10107:37;;10199:4;10193;10189:15;10181:23;;9904:307;;;:::o;10217:410::-;10294:5;10319:65;10335:48;10376:6;10335:48;:::i;:::-;10319:65;:::i;:::-;10310:74;;10407:6;10400:5;10393:21;10445:4;10438:5;10434:16;10483:3;10474:6;10469:3;10465:16;10462:25;10459:112;;;10490:79;;:::i;:::-;10459:112;10580:41;10614:6;10609:3;10604;10580:41;:::i;:::-;10300:327;10217:410;;;;;:::o;10646:338::-;10701:5;10750:3;10743:4;10735:6;10731:17;10727:27;10717:122;;10758:79;;:::i;:::-;10717:122;10875:6;10862:20;10900:78;10974:3;10966:6;10959:4;10951:6;10947:17;10900:78;:::i;:::-;10891:87;;10707:277;10646:338;;;;:::o;10990:1509::-;11144:6;11152;11160;11168;11176;11225:3;11213:9;11204:7;11200:23;11196:33;11193:120;;;11232:79;;:::i;:::-;11193:120;11352:1;11377:53;11422:7;11413:6;11402:9;11398:22;11377:53;:::i;:::-;11367:63;;11323:117;11479:2;11505:53;11550:7;11541:6;11530:9;11526:22;11505:53;:::i;:::-;11495:63;;11450:118;11635:2;11624:9;11620:18;11607:32;11666:18;11658:6;11655:30;11652:117;;;11688:79;;:::i;:::-;11652:117;11793:78;11863:7;11854:6;11843:9;11839:22;11793:78;:::i;:::-;11783:88;;11578:303;11948:2;11937:9;11933:18;11920:32;11979:18;11971:6;11968:30;11965:117;;;12001:79;;:::i;:::-;11965:117;12106:78;12176:7;12167:6;12156:9;12152:22;12106:78;:::i;:::-;12096:88;;11891:303;12261:3;12250:9;12246:19;12233:33;12293:18;12285:6;12282:30;12279:117;;;12315:79;;:::i;:::-;12279:117;12420:62;12474:7;12465:6;12454:9;12450:22;12420:62;:::i;:::-;12410:72;;12204:288;10990:1509;;;;;;;;:::o;12505:120::-;12577:23;12594:5;12577:23;:::i;:::-;12570:5;12567:34;12557:62;;12615:1;12612;12605:12;12557:62;12505:120;:::o;12631:137::-;12676:5;12714:6;12701:20;12692:29;;12730:32;12756:5;12730:32;:::i;:::-;12631:137;;;;:::o;12774:327::-;12832:6;12881:2;12869:9;12860:7;12856:23;12852:32;12849:119;;;12887:79;;:::i;:::-;12849:119;13007:1;13032:52;13076:7;13067:6;13056:9;13052:22;13032:52;:::i;:::-;13022:62;;12978:116;12774:327;;;;:::o;13107:311::-;13184:4;13274:18;13266:6;13263:30;13260:56;;;13296:18;;:::i;:::-;13260:56;13346:4;13338:6;13334:17;13326:25;;13406:4;13400;13396:15;13388:23;;13107:311;;;:::o;13441:710::-;13537:5;13562:81;13578:64;13635:6;13578:64;:::i;:::-;13562:81;:::i;:::-;13553:90;;13663:5;13692:6;13685:5;13678:21;13726:4;13719:5;13715:16;13708:23;;13779:4;13771:6;13767:17;13759:6;13755:30;13808:3;13800:6;13797:15;13794:122;;;13827:79;;:::i;:::-;13794:122;13942:6;13925:220;13959:6;13954:3;13951:15;13925:220;;;14034:3;14063:37;14096:3;14084:10;14063:37;:::i;:::-;14058:3;14051:50;14130:4;14125:3;14121:14;14114:21;;14001:144;13985:4;13980:3;13976:14;13969:21;;13925:220;;;13929:21;13543:608;;13441:710;;;;;:::o;14174:370::-;14245:5;14294:3;14287:4;14279:6;14275:17;14271:27;14261:122;;14302:79;;:::i;:::-;14261:122;14419:6;14406:20;14444:94;14534:3;14526:6;14519:4;14511:6;14507:17;14444:94;:::i;:::-;14435:103;;14251:293;14174:370;;;;:::o;14550:894::-;14668:6;14676;14725:2;14713:9;14704:7;14700:23;14696:32;14693:119;;;14731:79;;:::i;:::-;14693:119;14879:1;14868:9;14864:17;14851:31;14909:18;14901:6;14898:30;14895:117;;;14931:79;;:::i;:::-;14895:117;15036:78;15106:7;15097:6;15086:9;15082:22;15036:78;:::i;:::-;15026:88;;14822:302;15191:2;15180:9;15176:18;15163:32;15222:18;15214:6;15211:30;15208:117;;;15244:79;;:::i;:::-;15208:117;15349:78;15419:7;15410:6;15399:9;15395:22;15349:78;:::i;:::-;15339:88;;15134:303;14550:894;;;;;:::o;15450:114::-;15517:6;15551:5;15545:12;15535:22;;15450:114;;;:::o;15570:184::-;15669:11;15703:6;15698:3;15691:19;15743:4;15738:3;15734:14;15719:29;;15570:184;;;;:::o;15760:132::-;15827:4;15850:3;15842:11;;15880:4;15875:3;15871:14;15863:22;;15760:132;;;:::o;15898:108::-;15975:24;15993:5;15975:24;:::i;:::-;15970:3;15963:37;15898:108;;:::o;16012:179::-;16081:10;16102:46;16144:3;16136:6;16102:46;:::i;:::-;16180:4;16175:3;16171:14;16157:28;;16012:179;;;;:::o;16197:113::-;16267:4;16299;16294:3;16290:14;16282:22;;16197:113;;;:::o;16346:732::-;16465:3;16494:54;16542:5;16494:54;:::i;:::-;16564:86;16643:6;16638:3;16564:86;:::i;:::-;16557:93;;16674:56;16724:5;16674:56;:::i;:::-;16753:7;16784:1;16769:284;16794:6;16791:1;16788:13;16769:284;;;16870:6;16864:13;16897:63;16956:3;16941:13;16897:63;:::i;:::-;16890:70;;16983:60;17036:6;16983:60;:::i;:::-;16973:70;;16829:224;16816:1;16813;16809:9;16804:14;;16769:284;;;16773:14;17069:3;17062:10;;16470:608;;;16346:732;;;;:::o;17084:373::-;17227:4;17265:2;17254:9;17250:18;17242:26;;17314:9;17308:4;17304:20;17300:1;17289:9;17285:17;17278:47;17342:108;17445:4;17436:6;17342:108;:::i;:::-;17334:116;;17084:373;;;;:::o;17463:118::-;17550:24;17568:5;17550:24;:::i;:::-;17545:3;17538:37;17463:118;;:::o;17587:222::-;17680:4;17718:2;17707:9;17703:18;17695:26;;17731:71;17799:1;17788:9;17784:17;17775:6;17731:71;:::i;:::-;17587:222;;;;:::o;17815:116::-;17885:21;17900:5;17885:21;:::i;:::-;17878:5;17875:32;17865:60;;17921:1;17918;17911:12;17865:60;17815:116;:::o;17937:133::-;17980:5;18018:6;18005:20;17996:29;;18034:30;18058:5;18034:30;:::i;:::-;17937:133;;;;:::o;18076:468::-;18141:6;18149;18198:2;18186:9;18177:7;18173:23;18169:32;18166:119;;;18204:79;;:::i;:::-;18166:119;18324:1;18349:53;18394:7;18385:6;18374:9;18370:22;18349:53;:::i;:::-;18339:63;;18295:117;18451:2;18477:50;18519:7;18510:6;18499:9;18495:22;18477:50;:::i;:::-;18467:60;;18422:115;18076:468;;;;;:::o;18550:86::-;18585:7;18625:4;18618:5;18614:16;18603:27;;18550:86;;;:::o;18642:118::-;18713:22;18729:5;18713:22;:::i;:::-;18706:5;18703:33;18693:61;;18750:1;18747;18740:12;18693:61;18642:118;:::o;18766:135::-;18810:5;18848:6;18835:20;18826:29;;18864:31;18889:5;18864:31;:::i;:::-;18766:135;;;;:::o;18907:77::-;18944:7;18973:5;18962:16;;18907:77;;;:::o;18990:122::-;19063:24;19081:5;19063:24;:::i;:::-;19056:5;19053:35;19043:63;;19102:1;19099;19092:12;19043:63;18990:122;:::o;19118:139::-;19164:5;19202:6;19189:20;19180:29;;19218:33;19245:5;19218:33;:::i;:::-;19118:139;;;;:::o;19263:759::-;19346:6;19354;19362;19370;19419:3;19407:9;19398:7;19394:23;19390:33;19387:120;;;19426:79;;:::i;:::-;19387:120;19546:1;19571:51;19614:7;19605:6;19594:9;19590:22;19571:51;:::i;:::-;19561:61;;19517:115;19671:2;19697:53;19742:7;19733:6;19722:9;19718:22;19697:53;:::i;:::-;19687:63;;19642:118;19799:2;19825:53;19870:7;19861:6;19850:9;19846:22;19825:53;:::i;:::-;19815:63;;19770:118;19927:2;19953:52;19997:7;19988:6;19977:9;19973:22;19953:52;:::i;:::-;19943:62;;19898:117;19263:759;;;;;;;:::o;20028:539::-;20112:6;20161:2;20149:9;20140:7;20136:23;20132:32;20129:119;;;20167:79;;:::i;:::-;20129:119;20315:1;20304:9;20300:17;20287:31;20345:18;20337:6;20334:30;20331:117;;;20367:79;;:::i;:::-;20331:117;20472:78;20542:7;20533:6;20522:9;20518:22;20472:78;:::i;:::-;20462:88;;20258:302;20028:539;;;;:::o;20573:474::-;20641:6;20649;20698:2;20686:9;20677:7;20673:23;20669:32;20666:119;;;20704:79;;:::i;:::-;20666:119;20824:1;20849:53;20894:7;20885:6;20874:9;20870:22;20849:53;:::i;:::-;20839:63;;20795:117;20951:2;20977:53;21022:7;21013:6;21002:9;20998:22;20977:53;:::i;:::-;20967:63;;20922:118;20573:474;;;;;:::o;21053:1089::-;21157:6;21165;21173;21181;21189;21238:3;21226:9;21217:7;21213:23;21209:33;21206:120;;;21245:79;;:::i;:::-;21206:120;21365:1;21390:53;21435:7;21426:6;21415:9;21411:22;21390:53;:::i;:::-;21380:63;;21336:117;21492:2;21518:53;21563:7;21554:6;21543:9;21539:22;21518:53;:::i;:::-;21508:63;;21463:118;21620:2;21646:53;21691:7;21682:6;21671:9;21667:22;21646:53;:::i;:::-;21636:63;;21591:118;21748:2;21774:53;21819:7;21810:6;21799:9;21795:22;21774:53;:::i;:::-;21764:63;;21719:118;21904:3;21893:9;21889:19;21876:33;21936:18;21928:6;21925:30;21922:117;;;21958:79;;:::i;:::-;21922:117;22063:62;22117:7;22108:6;22097:9;22093:22;22063:62;:::i;:::-;22053:72;;21847:288;21053:1089;;;;;;;;:::o;22148:230::-;22288:34;22284:1;22276:6;22272:14;22265:58;22357:13;22352:2;22344:6;22340:15;22333:38;22148:230;:::o;22384:366::-;22526:3;22547:67;22611:2;22606:3;22547:67;:::i;:::-;22540:74;;22623:93;22712:3;22623:93;:::i;:::-;22741:2;22736:3;22732:12;22725:19;;22384:366;;;:::o;22756:419::-;22922:4;22960:2;22949:9;22945:18;22937:26;;23009:9;23003:4;22999:20;22995:1;22984:9;22980:17;22973:47;23037:131;23163:4;23037:131;:::i;:::-;23029:139;;22756:419;;;:::o;23181:182::-;23321:34;23317:1;23309:6;23305:14;23298:58;23181:182;:::o;23369:366::-;23511:3;23532:67;23596:2;23591:3;23532:67;:::i;:::-;23525:74;;23608:93;23697:3;23608:93;:::i;:::-;23726:2;23721:3;23717:12;23710:19;;23369:366;;;:::o;23741:419::-;23907:4;23945:2;23934:9;23930:18;23922:26;;23994:9;23988:4;23984:20;23980:1;23969:9;23965:17;23958:47;24022:131;24148:4;24022:131;:::i;:::-;24014:139;;23741:419;;;:::o;24166:180::-;24214:77;24211:1;24204:88;24311:4;24308:1;24301:15;24335:4;24332:1;24325:15;24352:320;24396:6;24433:1;24427:4;24423:12;24413:22;;24480:1;24474:4;24470:12;24501:18;24491:81;;24557:4;24549:6;24545:17;24535:27;;24491:81;24619:2;24611:6;24608:14;24588:18;24585:38;24582:84;;;24638:18;;:::i;:::-;24582:84;24403:269;24352:320;;;:::o;24678:237::-;24818:34;24814:1;24806:6;24802:14;24795:58;24887:20;24882:2;24874:6;24870:15;24863:45;24678:237;:::o;24921:366::-;25063:3;25084:67;25148:2;25143:3;25084:67;:::i;:::-;25077:74;;25160:93;25249:3;25160:93;:::i;:::-;25278:2;25273:3;25269:12;25262:19;;24921:366;;;:::o;25293:419::-;25459:4;25497:2;25486:9;25482:18;25474:26;;25546:9;25540:4;25536:20;25532:1;25521:9;25517:17;25510:47;25574:131;25700:4;25574:131;:::i;:::-;25566:139;;25293:419;;;:::o;25718:228::-;25858:34;25854:1;25846:6;25842:14;25835:58;25927:11;25922:2;25914:6;25910:15;25903:36;25718:228;:::o;25952:366::-;26094:3;26115:67;26179:2;26174:3;26115:67;:::i;:::-;26108:74;;26191:93;26280:3;26191:93;:::i;:::-;26309:2;26304:3;26300:12;26293:19;;25952:366;;;:::o;26324:419::-;26490:4;26528:2;26517:9;26513:18;26505:26;;26577:9;26571:4;26567:20;26563:1;26552:9;26548:17;26541:47;26605:131;26731:4;26605:131;:::i;:::-;26597:139;;26324:419;;;:::o;26749:180::-;26797:77;26794:1;26787:88;26894:4;26891:1;26884:15;26918:4;26915:1;26908:15;26935:180;26983:77;26980:1;26973:88;27080:4;27077:1;27070:15;27104:4;27101:1;27094:15;27121:233;27160:3;27183:24;27201:5;27183:24;:::i;:::-;27174:33;;27229:66;27222:5;27219:77;27216:103;;;27299:18;;:::i;:::-;27216:103;27346:1;27339:5;27335:13;27328:20;;27121:233;;;:::o;27360:176::-;27500:28;27496:1;27488:6;27484:14;27477:52;27360:176;:::o;27542:366::-;27684:3;27705:67;27769:2;27764:3;27705:67;:::i;:::-;27698:74;;27781:93;27870:3;27781:93;:::i;:::-;27899:2;27894:3;27890:12;27883:19;;27542:366;;;:::o;27914:419::-;28080:4;28118:2;28107:9;28103:18;28095:26;;28167:9;28161:4;28157:20;28153:1;28142:9;28138:17;28131:47;28195:131;28321:4;28195:131;:::i;:::-;28187:139;;27914:419;;;:::o;28339:179::-;28479:31;28475:1;28467:6;28463:14;28456:55;28339:179;:::o;28524:366::-;28666:3;28687:67;28751:2;28746:3;28687:67;:::i;:::-;28680:74;;28763:93;28852:3;28763:93;:::i;:::-;28881:2;28876:3;28872:12;28865:19;;28524:366;;;:::o;28896:419::-;29062:4;29100:2;29089:9;29085:18;29077:26;;29149:9;29143:4;29139:20;29135:1;29124:9;29120:17;29113:47;29177:131;29303:4;29177:131;:::i;:::-;29169:139;;28896:419;;;:::o;29321:246::-;29360:3;29379:19;29396:1;29379:19;:::i;:::-;29374:24;;29412:19;29429:1;29412:19;:::i;:::-;29407:24;;29509:1;29497:10;29493:18;29490:1;29487:25;29484:51;;;29515:18;;:::i;:::-;29484:51;29559:1;29556;29552:9;29545:16;;29321:246;;;;:::o;29573:228::-;29713:34;29709:1;29701:6;29697:14;29690:58;29782:11;29777:2;29769:6;29765:15;29758:36;29573:228;:::o;29807:366::-;29949:3;29970:67;30034:2;30029:3;29970:67;:::i;:::-;29963:74;;30046:93;30135:3;30046:93;:::i;:::-;30164:2;30159:3;30155:12;30148:19;;29807:366;;;:::o;30179:419::-;30345:4;30383:2;30372:9;30368:18;30360:26;;30432:9;30426:4;30422:20;30418:1;30407:9;30403:17;30396:47;30460:131;30586:4;30460:131;:::i;:::-;30452:139;;30179:419;;;:::o;30604:348::-;30644:7;30667:20;30685:1;30667:20;:::i;:::-;30662:25;;30701:20;30719:1;30701:20;:::i;:::-;30696:25;;30889:1;30821:66;30817:74;30814:1;30811:81;30806:1;30799:9;30792:17;30788:105;30785:131;;;30896:18;;:::i;:::-;30785:131;30944:1;30941;30937:9;30926:20;;30604:348;;;;:::o;30958:167::-;31098:19;31094:1;31086:6;31082:14;31075:43;30958:167;:::o;31131:366::-;31273:3;31294:67;31358:2;31353:3;31294:67;:::i;:::-;31287:74;;31370:93;31459:3;31370:93;:::i;:::-;31488:2;31483:3;31479:12;31472:19;;31131:366;;;:::o;31503:419::-;31669:4;31707:2;31696:9;31692:18;31684:26;;31756:9;31750:4;31746:20;31742:1;31731:9;31727:17;31720:47;31784:131;31910:4;31784:131;:::i;:::-;31776:139;;31503:419;;;:::o;31928:228::-;32068:34;32064:1;32056:6;32052:14;32045:58;32137:11;32132:2;32124:6;32120:15;32113:36;31928:228;:::o;32162:366::-;32304:3;32325:67;32389:2;32384:3;32325:67;:::i;:::-;32318:74;;32401:93;32490:3;32401:93;:::i;:::-;32519:2;32514:3;32510:12;32503:19;;32162:366;;;:::o;32534:419::-;32700:4;32738:2;32727:9;32723:18;32715:26;;32787:9;32781:4;32777:20;32773:1;32762:9;32758:17;32751:47;32815:131;32941:4;32815:131;:::i;:::-;32807:139;;32534:419;;;:::o;32959:173::-;33099:25;33095:1;33087:6;33083:14;33076:49;32959:173;:::o;33138:366::-;33280:3;33301:67;33365:2;33360:3;33301:67;:::i;:::-;33294:74;;33377:93;33466:3;33377:93;:::i;:::-;33495:2;33490:3;33486:12;33479:19;;33138:366;;;:::o;33510:419::-;33676:4;33714:2;33703:9;33699:18;33691:26;;33763:9;33757:4;33753:20;33749:1;33738:9;33734:17;33727:47;33791:131;33917:4;33791:131;:::i;:::-;33783:139;;33510:419;;;:::o;33935:166::-;34075:18;34071:1;34063:6;34059:14;34052:42;33935:166;:::o;34107:366::-;34249:3;34270:67;34334:2;34329:3;34270:67;:::i;:::-;34263:74;;34346:93;34435:3;34346:93;:::i;:::-;34464:2;34459:3;34455:12;34448:19;;34107:366;;;:::o;34479:419::-;34645:4;34683:2;34672:9;34668:18;34660:26;;34732:9;34726:4;34722:20;34718:1;34707:9;34703:17;34696:47;34760:131;34886:4;34760:131;:::i;:::-;34752:139;;34479:419;;;:::o;34904:305::-;34944:3;34963:20;34981:1;34963:20;:::i;:::-;34958:25;;34997:20;35015:1;34997:20;:::i;:::-;34992:25;;35151:1;35083:66;35079:74;35076:1;35073:81;35070:107;;;35157:18;;:::i;:::-;35070:107;35201:1;35198;35194:9;35187:16;;34904:305;;;;:::o;35215:228::-;35355:34;35351:1;35343:6;35339:14;35332:58;35424:11;35419:2;35411:6;35407:15;35400:36;35215:228;:::o;35449:366::-;35591:3;35612:67;35676:2;35671:3;35612:67;:::i;:::-;35605:74;;35688:93;35777:3;35688:93;:::i;:::-;35806:2;35801:3;35797:12;35790:19;;35449:366;;;:::o;35821:419::-;35987:4;36025:2;36014:9;36010:18;36002:26;;36074:9;36068:4;36064:20;36060:1;36049:9;36045:17;36038:47;36102:131;36228:4;36102:131;:::i;:::-;36094:139;;35821:419;;;:::o;36246:225::-;36386:34;36382:1;36374:6;36370:14;36363:58;36455:8;36450:2;36442:6;36438:15;36431:33;36246:225;:::o;36477:366::-;36619:3;36640:67;36704:2;36699:3;36640:67;:::i;:::-;36633:74;;36716:93;36805:3;36716:93;:::i;:::-;36834:2;36829:3;36825:12;36818:19;;36477:366;;;:::o;36849:419::-;37015:4;37053:2;37042:9;37038:18;37030:26;;37102:9;37096:4;37092:20;37088:1;37077:9;37073:17;37066:47;37130:131;37256:4;37130:131;:::i;:::-;37122:139;;36849:419;;;:::o;37274:227::-;37414:34;37410:1;37402:6;37398:14;37391:58;37483:10;37478:2;37470:6;37466:15;37459:35;37274:227;:::o;37507:366::-;37649:3;37670:67;37734:2;37729:3;37670:67;:::i;:::-;37663:74;;37746:93;37835:3;37746:93;:::i;:::-;37864:2;37859:3;37855:12;37848:19;;37507:366;;;:::o;37879:419::-;38045:4;38083:2;38072:9;38068:18;38060:26;;38132:9;38126:4;38122:20;38118:1;38107:9;38103:17;38096:47;38160:131;38286:4;38160:131;:::i;:::-;38152:139;;37879:419;;;:::o;38304:224::-;38444:34;38440:1;38432:6;38428:14;38421:58;38513:7;38508:2;38500:6;38496:15;38489:32;38304:224;:::o;38534:366::-;38676:3;38697:67;38761:2;38756:3;38697:67;:::i;:::-;38690:74;;38773:93;38862:3;38773:93;:::i;:::-;38891:2;38886:3;38882:12;38875:19;;38534:366;;;:::o;38906:419::-;39072:4;39110:2;39099:9;39095:18;39087:26;;39159:9;39153:4;39149:20;39145:1;39134:9;39130:17;39123:47;39187:131;39313:4;39187:131;:::i;:::-;39179:139;;38906:419;;;:::o;39331:229::-;39471:34;39467:1;39459:6;39455:14;39448:58;39540:12;39535:2;39527:6;39523:15;39516:37;39331:229;:::o;39566:366::-;39708:3;39729:67;39793:2;39788:3;39729:67;:::i;:::-;39722:74;;39805:93;39894:3;39805:93;:::i;:::-;39923:2;39918:3;39914:12;39907:19;;39566:366;;;:::o;39938:419::-;40104:4;40142:2;40131:9;40127:18;40119:26;;40191:9;40185:4;40181:20;40177:1;40166:9;40162:17;40155:47;40219:131;40345:4;40219:131;:::i;:::-;40211:139;;39938:419;;;:::o;40363:634::-;40584:4;40622:2;40611:9;40607:18;40599:26;;40671:9;40665:4;40661:20;40657:1;40646:9;40642:17;40635:47;40699:108;40802:4;40793:6;40699:108;:::i;:::-;40691:116;;40854:9;40848:4;40844:20;40839:2;40828:9;40824:18;40817:48;40882:108;40985:4;40976:6;40882:108;:::i;:::-;40874:116;;40363:634;;;;;:::o;41003:175::-;41041:3;41064:23;41081:5;41064:23;:::i;:::-;41055:32;;41109:10;41102:5;41099:21;41096:47;;;41123:18;;:::i;:::-;41096:47;41170:1;41163:5;41159:13;41152:20;;41003:175;;;:::o;41184:94::-;41217:8;41265:5;41261:2;41257:14;41236:35;;41184:94;;;:::o;41284:::-;41323:7;41352:20;41366:5;41352:20;:::i;:::-;41341:31;;41284:94;;;:::o;41384:100::-;41423:7;41452:26;41472:5;41452:26;:::i;:::-;41441:37;;41384:100;;;:::o;41490:157::-;41595:45;41615:24;41633:5;41615:24;:::i;:::-;41595:45;:::i;:::-;41590:3;41583:58;41490:157;;:::o;41653:256::-;41765:3;41780:75;41851:3;41842:6;41780:75;:::i;:::-;41880:2;41875:3;41871:12;41864:19;;41900:3;41893:10;;41653:256;;;;:::o;41915:148::-;42017:11;42054:3;42039:18;;41915:148;;;;:::o;42069:214::-;42209:66;42205:1;42197:6;42193:14;42186:90;42069:214;:::o;42289:402::-;42449:3;42470:85;42552:2;42547:3;42470:85;:::i;:::-;42463:92;;42564:93;42653:3;42564:93;:::i;:::-;42682:2;42677:3;42673:12;42666:19;;42289:402;;;:::o;42697:79::-;42736:7;42765:5;42754:16;;42697:79;;;:::o;42782:157::-;42887:45;42907:24;42925:5;42907:24;:::i;:::-;42887:45;:::i;:::-;42882:3;42875:58;42782:157;;:::o;42945:522::-;43158:3;43180:148;43324:3;43180:148;:::i;:::-;43173:155;;43338:75;43409:3;43400:6;43338:75;:::i;:::-;43438:2;43433:3;43429:12;43422:19;;43458:3;43451:10;;42945:522;;;;:::o;43473:118::-;43560:24;43578:5;43560:24;:::i;:::-;43555:3;43548:37;43473:118;;:::o;43597:112::-;43680:22;43696:5;43680:22;:::i;:::-;43675:3;43668:35;43597:112;;:::o;43715:545::-;43888:4;43926:3;43915:9;43911:19;43903:27;;43940:71;44008:1;43997:9;43993:17;43984:6;43940:71;:::i;:::-;44021:68;44085:2;44074:9;44070:18;44061:6;44021:68;:::i;:::-;44099:72;44167:2;44156:9;44152:18;44143:6;44099:72;:::i;:::-;44181;44249:2;44238:9;44234:18;44225:6;44181:72;:::i;:::-;43715:545;;;;;;;:::o;44266:332::-;44387:4;44425:2;44414:9;44410:18;44402:26;;44438:71;44506:1;44495:9;44491:17;44482:6;44438:71;:::i;:::-;44519:72;44587:2;44576:9;44572:18;44563:6;44519:72;:::i;:::-;44266:332;;;;;:::o;44604:98::-;44655:6;44689:5;44683:12;44673:22;;44604:98;;;:::o;44708:168::-;44791:11;44825:6;44820:3;44813:19;44865:4;44860:3;44856:14;44841:29;;44708:168;;;;:::o;44882:360::-;44968:3;44996:38;45028:5;44996:38;:::i;:::-;45050:70;45113:6;45108:3;45050:70;:::i;:::-;45043:77;;45129:52;45174:6;45169:3;45162:4;45155:5;45151:16;45129:52;:::i;:::-;45206:29;45228:6;45206:29;:::i;:::-;45201:3;45197:39;45190:46;;44972:270;44882:360;;;;:::o;45248:1053::-;45571:4;45609:3;45598:9;45594:19;45586:27;;45623:71;45691:1;45680:9;45676:17;45667:6;45623:71;:::i;:::-;45704:72;45772:2;45761:9;45757:18;45748:6;45704:72;:::i;:::-;45823:9;45817:4;45813:20;45808:2;45797:9;45793:18;45786:48;45851:108;45954:4;45945:6;45851:108;:::i;:::-;45843:116;;46006:9;46000:4;45996:20;45991:2;45980:9;45976:18;45969:48;46034:108;46137:4;46128:6;46034:108;:::i;:::-;46026:116;;46190:9;46184:4;46180:20;46174:3;46163:9;46159:19;46152:49;46218:76;46289:4;46280:6;46218:76;:::i;:::-;46210:84;;45248:1053;;;;;;;;:::o;46307:141::-;46363:5;46394:6;46388:13;46379:22;;46410:32;46436:5;46410:32;:::i;:::-;46307:141;;;;:::o;46454:349::-;46523:6;46572:2;46560:9;46551:7;46547:23;46543:32;46540:119;;;46578:79;;:::i;:::-;46540:119;46698:1;46723:63;46778:7;46769:6;46758:9;46754:22;46723:63;:::i;:::-;46713:73;;46669:127;46454:349;;;;:::o;46809:106::-;46853:8;46902:5;46897:3;46893:15;46872:36;;46809:106;;;:::o;46921:183::-;46956:3;46994:1;46976:16;46973:23;46970:128;;;47032:1;47029;47026;47011:23;47054:34;47085:1;47079:8;47054:34;:::i;:::-;47047:41;;46970:128;46921:183;:::o;47110:711::-;47149:3;47187:4;47169:16;47166:26;47163:39;;;47195:5;;47163:39;47224:20;;:::i;:::-;47299:1;47281:16;47277:24;47274:1;47268:4;47253:49;47332:4;47326:11;47431:16;47424:4;47416:6;47412:17;47409:39;47376:18;47368:6;47365:30;47349:113;47346:146;;;47477:5;;;;47346:146;47523:6;47517:4;47513:17;47559:3;47553:10;47586:18;47578:6;47575:30;47572:43;;;47608:5;;;;;;47572:43;47656:6;47649:4;47644:3;47640:14;47636:27;47715:1;47697:16;47693:24;47687:4;47683:35;47678:3;47675:44;47672:57;;;47722:5;;;;;;;47672:57;47739;47787:6;47781:4;47777:17;47769:6;47765:30;47759:4;47739:57;:::i;:::-;47812:3;47805:10;;47153:668;;;;;47110:711;;:::o;47827:239::-;47967:34;47963:1;47955:6;47951:14;47944:58;48036:22;48031:2;48023:6;48019:15;48012:47;47827:239;:::o;48072:366::-;48214:3;48235:67;48299:2;48294:3;48235:67;:::i;:::-;48228:74;;48311:93;48400:3;48311:93;:::i;:::-;48429:2;48424:3;48420:12;48413:19;;48072:366;;;:::o;48444:419::-;48610:4;48648:2;48637:9;48633:18;48625:26;;48697:9;48691:4;48687:20;48683:1;48672:9;48668:17;48661:47;48725:131;48851:4;48725:131;:::i;:::-;48717:139;;48444:419;;;:::o;48869:227::-;49009:34;49005:1;48997:6;48993:14;48986:58;49078:10;49073:2;49065:6;49061:15;49054:35;48869:227;:::o;49102:366::-;49244:3;49265:67;49329:2;49324:3;49265:67;:::i;:::-;49258:74;;49341:93;49430:3;49341:93;:::i;:::-;49459:2;49454:3;49450:12;49443:19;;49102:366;;;:::o;49474:419::-;49640:4;49678:2;49667:9;49663:18;49655:26;;49727:9;49721:4;49717:20;49713:1;49702:9;49698:17;49691:47;49755:131;49881:4;49755:131;:::i;:::-;49747:139;;49474:419;;;:::o;49899:220::-;50039:34;50035:1;50027:6;50023:14;50016:58;50108:3;50103:2;50095:6;50091:15;50084:28;49899:220;:::o;50125:366::-;50267:3;50288:67;50352:2;50347:3;50288:67;:::i;:::-;50281:74;;50364:93;50453:3;50364:93;:::i;:::-;50482:2;50477:3;50473:12;50466:19;;50125:366;;;:::o;50497:419::-;50663:4;50701:2;50690:9;50686:18;50678:26;;50750:9;50744:4;50740:20;50736:1;50725:9;50721:17;50714:47;50778:131;50904:4;50778:131;:::i;:::-;50770:139;;50497:419;;;:::o;50922:751::-;51145:4;51183:3;51172:9;51168:19;51160:27;;51197:71;51265:1;51254:9;51250:17;51241:6;51197:71;:::i;:::-;51278:72;51346:2;51335:9;51331:18;51322:6;51278:72;:::i;:::-;51360;51428:2;51417:9;51413:18;51404:6;51360:72;:::i;:::-;51442;51510:2;51499:9;51495:18;51486:6;51442:72;:::i;:::-;51562:9;51556:4;51552:20;51546:3;51535:9;51531:19;51524:49;51590:76;51661:4;51652:6;51590:76;:::i;:::-;51582:84;;50922:751;;;;;;;;:::o

Swarm Source

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