ERC-1155
Overview
Max Total Supply
0 USPN
Holders
9,093
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
UniLaunch
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-08-25 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (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. * * NOTE: 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. * * NOTE: 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 // OpenZeppelin Contracts (last updated v4.7.0) (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 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 // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner"); 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 { _setApprovalForAll(_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 token 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: caller is not token 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, 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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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 `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _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); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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 `ids` and `amounts` 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 {} /** * @dev Hook that is called after 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 _afterTokenTransfer( 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: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burnBatch(account, ids, values); } } // File: contracts/UniLaunch.sol pragma solidity ^0.8.4; contract UniLaunch is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply { string public name; string public symbol; constructor() ERC1155("") { name = "UniLaunch"; symbol = "USPN"; } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function mint(address account, uint256 id, uint256 amount, bytes memory data) public onlyOwner { _mint(account, id, amount, data); } function batchMint(address[] memory to, uint256 id, uint256 amount, bytes memory data) public onlyOwner { uint length = to.length; for (uint i = 0; i < length; i++) { _mint(to[i], id, amount, data); } } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"to","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"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":"string","name":"newuri","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f660201b60201c565b5062000054620000486200011260201b60201c565b6200011a60201b60201c565b6040518060400160405280600981526020017f556e694c61756e6368000000000000000000000000000000000000000000000081525060059080519060200190620000a1929190620001e0565b506040518060400160405280600481526020017f5553504e0000000000000000000000000000000000000000000000000000000081525060069080519060200190620000ef929190620001e0565b50620002f5565b80600290805190602001906200010e929190620001e0565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee9062000290565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b60006002820490506001821680620002a957607f821691505b60208210811415620002c057620002bf620002c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613dcb80620003056000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c8063731133e9116100ad578063e985e9c511610071578063e985e9c514610340578063e9c93d2214610370578063f242432a1461038c578063f2fde38b146103a8578063f5298aca146103c45761012b565b8063731133e91461029c5780638da5cb5b146102b857806395d89b41146102d6578063a22cb465146102f4578063bd85b039146103105761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f4146102165780634f558e79146102465780636b20c45414610276578063715018a6146102925761012b565b8062fdd58e1461013057806301ffc9a71461016057806302fe53051461019057806306fdde03146101ac5780630e89341c146101ca575b600080fd5b61014a60048036038101906101459190612aca565b6103e0565b604051610157919061340f565b60405180910390f35b61017a60048036038101906101759190612ccf565b6104a9565b60405161018791906131f2565b60405180910390f35b6101aa60048036038101906101a59190612d21565b61058b565b005b6101b461059f565b6040516101c1919061320d565b60405180910390f35b6101e460048036038101906101df9190612d62565b61062d565b6040516101f1919061320d565b60405180910390f35b610214600480360381019061020f91906128c1565b6106c1565b005b610230600480360381019061022b9190612bd0565b610762565b60405161023d9190613199565b60405180910390f35b610260600480360381019061025b9190612d62565b610913565b60405161026d91906131f2565b60405180910390f35b610290600480360381019061028b9190612a0f565b610927565b005b61029a6109c4565b005b6102b660048036038101906102b19190612b55565b6109d8565b005b6102c06109f2565b6040516102cd91906130bc565b60405180910390f35b6102de610a1c565b6040516102eb919061320d565b60405180910390f35b61030e60048036038101906103099190612a8e565b610aaa565b005b61032a60048036038101906103259190612d62565b610ac0565b604051610337919061340f565b60405180910390f35b61035a60048036038101906103559190612885565b610add565b60405161036791906131f2565b60405180910390f35b61038a60048036038101906103859190612c3c565b610b71565b005b6103a660048036038101906103a19190612980565b610bf1565b005b6103c260048036038101906103bd919061285c565b610c92565b005b6103de60048036038101906103d99190612b06565b610d16565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610448906132cf565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610584575061058382610db3565b5b9050919050565b610593610e1d565b61059c81610e9b565b50565b600580546105ac906136af565b80601f01602080910402602001604051908101604052809291908181526020018280546105d8906136af565b80156106255780601f106105fa57610100808354040283529160200191610625565b820191906000526020600020905b81548152906001019060200180831161060857829003601f168201915b505050505081565b60606002805461063c906136af565b80601f0160208091040260200160405190810160405280929190818152602001828054610668906136af565b80156106b55780601f1061068a576101008083540402835291602001916106b5565b820191906000526020600020905b81548152906001019060200180831161069857829003601f168201915b50505050509050919050565b6106c9610eb5565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061070f575061070e85610709610eb5565b610add565b5b61074e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107459061324f565b60405180910390fd5b61075b8585858585610ebd565b5050505050565b606081518351146107a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079f906133af565b60405180910390fd5b6000835167ffffffffffffffff8111156107eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156108195781602001602082028036833780820191505090505b50905060005b8451811015610908576108b2858281518110610864577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106108a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516103e0565b8282815181106108eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061090190613712565b905061081f565b508091505092915050565b60008061091f83610ac0565b119050919050565b61092f610eb5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061097557506109748361096f610eb5565b610add565b5b6109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab9061324f565b60405180910390fd5b6109bf83838361122b565b505050565b6109cc610e1d565b6109d66000611546565b565b6109e0610e1d565b6109ec8484848461160c565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068054610a29906136af565b80601f0160208091040260200160405190810160405280929190818152602001828054610a55906136af565b8015610aa25780601f10610a7757610100808354040283529160200191610aa2565b820191906000526020600020905b815481529060010190602001808311610a8557829003601f168201915b505050505081565b610abc610ab5610eb5565b83836117bd565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b79610e1d565b60008451905060005b81811015610be957610bd6868281518110610bc6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015186868661160c565b8080610be190613712565b915050610b82565b505050505050565b610bf9610eb5565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c3f5750610c3e85610c39610eb5565b610add565b5b610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c759061324f565b60405180910390fd5b610c8b858585858561192a565b5050505050565b610c9a610e1d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d019061328f565b60405180910390fd5b610d1381611546565b50565b610d1e610eb5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610d645750610d6383610d5e610eb5565b610add565b5b610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a9061324f565b60405180910390fd5b610dae838383611bc6565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610e25610eb5565b73ffffffffffffffffffffffffffffffffffffffff16610e436109f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e909061334f565b60405180910390fd5b565b8060029080519060200190610eb1929190612554565b5050565b600033905090565b8151835114610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef8906133cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f68906132ef565b60405180910390fd5b6000610f7b610eb5565b9050610f8b818787878787611e0d565b60005b8451811015611188576000858281518110610fd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611017577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af9061332f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461116d91906135a3565b925050819055505050508061118190613712565b9050610f8e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516111ff9291906131bb565b60405180910390a4611215818787878787611e23565b611223818787878787611e2b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561129b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112929061330f565b60405180910390fd5b80518251146112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d6906133cf565b60405180910390fd5b60006112e9610eb5565b905061130981856000868660405180602001604052806000815250611e0d565b60005b83518110156114a2576000848281518110611350577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110611395577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d906132af565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061149a90613712565b91505061130c565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161151a9291906131bb565b60405180910390a461154081856000868660405180602001604052806000815250611e23565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561167c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611673906133ef565b60405180910390fd5b6000611686610eb5565b9050600061169385612012565b905060006116a085612012565b90506116b183600089858589611e0d565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461171091906135a3565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161178e92919061342a565b60405180910390a46117a583600089858589611e23565b6117b4836000898989896120d8565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061338f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161191d91906131f2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561199a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611991906132ef565b60405180910390fd5b60006119a4610eb5565b905060006119b185612012565b905060006119be85612012565b90506119ce838989858589611e0d565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c9061332f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b1a91906135a3565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611b9792919061342a565b60405180910390a4611bad848a8a86868a611e23565b611bbb848a8a8a8a8a6120d8565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d9061330f565b60405180910390fd5b6000611c40610eb5565b90506000611c4d84612012565b90506000611c5a84612012565b9050611c7a83876000858560405180602001604052806000815250611e0d565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d08906132af565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611dde92919061342a565b60405180910390a4611e0484886000868660405180602001604052806000815250611e23565b50505050505050565b611e1b8686868686866122bf565b505050505050565b505050505050565b611e4a8473ffffffffffffffffffffffffffffffffffffffff16612529565b1561200a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e909594939291906130d7565b602060405180830381600087803b158015611eaa57600080fd5b505af1925050508015611edb57506040513d601f19601f82011682018060405250810190611ed89190612cf8565b60015b611f8157611ee76137e8565b806308c379a01415611f445750611efc613ca3565b80611f075750611f46565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b919061320d565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f789061322f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff9061326f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612057577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156120855781602001602082028036833780820191505090505b50905082816000815181106120c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6120f78473ffffffffffffffffffffffffffffffffffffffff16612529565b156122b7578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161213d95949392919061313f565b602060405180830381600087803b15801561215757600080fd5b505af192505050801561218857506040513d601f19601f820116820180604052508101906121859190612cf8565b60015b61222e576121946137e8565b806308c379a014156121f157506121a9613ca3565b806121b457506121f3565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8919061320d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122259061322f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac9061326f565b60405180910390fd5b505b505050505050565b6122cd86868686868661254c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156123cb5760005b83518110156123c957828181518110612347577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516004600086848151811061238c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546123b191906135a3565b92505081905550806123c290613712565b9050612305565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125215760005b835181101561251f576000848281518110612447577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061248c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060046000848152602001908152602001600020549050818110156124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061336f565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061251890613712565b9050612403565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054612560906136af565b90600052602060002090601f01602090048101928261258257600085556125c9565b82601f1061259b57805160ff19168380011785556125c9565b828001600101855582156125c9579182015b828111156125c85782518255916020019190600101906125ad565b5b5090506125d691906125da565b5090565b5b808211156125f35760008160009055506001016125db565b5090565b600061260a61260584613478565b613453565b9050808382526020820190508285602086028201111561262957600080fd5b60005b85811015612659578161263f888261274b565b84526020840193506020830192505060018101905061262c565b5050509392505050565b6000612676612671846134a4565b613453565b9050808382526020820190508285602086028201111561269557600080fd5b60005b858110156126c557816126ab8882612847565b845260208401935060208301925050600181019050612698565b5050509392505050565b60006126e26126dd846134d0565b613453565b9050828152602081018484840111156126fa57600080fd5b61270584828561366d565b509392505050565b600061272061271b84613501565b613453565b90508281526020810184848401111561273857600080fd5b61274384828561366d565b509392505050565b60008135905061275a81613d39565b92915050565b600082601f83011261277157600080fd5b81356127818482602086016125f7565b91505092915050565b600082601f83011261279b57600080fd5b81356127ab848260208601612663565b91505092915050565b6000813590506127c381613d50565b92915050565b6000813590506127d881613d67565b92915050565b6000815190506127ed81613d67565b92915050565b600082601f83011261280457600080fd5b81356128148482602086016126cf565b91505092915050565b600082601f83011261282e57600080fd5b813561283e84826020860161270d565b91505092915050565b60008135905061285681613d7e565b92915050565b60006020828403121561286e57600080fd5b600061287c8482850161274b565b91505092915050565b6000806040838503121561289857600080fd5b60006128a68582860161274b565b92505060206128b78582860161274b565b9150509250929050565b600080600080600060a086880312156128d957600080fd5b60006128e78882890161274b565b95505060206128f88882890161274b565b945050604086013567ffffffffffffffff81111561291557600080fd5b6129218882890161278a565b935050606086013567ffffffffffffffff81111561293e57600080fd5b61294a8882890161278a565b925050608086013567ffffffffffffffff81111561296757600080fd5b612973888289016127f3565b9150509295509295909350565b600080600080600060a0868803121561299857600080fd5b60006129a68882890161274b565b95505060206129b78882890161274b565b94505060406129c888828901612847565b93505060606129d988828901612847565b925050608086013567ffffffffffffffff8111156129f657600080fd5b612a02888289016127f3565b9150509295509295909350565b600080600060608486031215612a2457600080fd5b6000612a328682870161274b565b935050602084013567ffffffffffffffff811115612a4f57600080fd5b612a5b8682870161278a565b925050604084013567ffffffffffffffff811115612a7857600080fd5b612a848682870161278a565b9150509250925092565b60008060408385031215612aa157600080fd5b6000612aaf8582860161274b565b9250506020612ac0858286016127b4565b9150509250929050565b60008060408385031215612add57600080fd5b6000612aeb8582860161274b565b9250506020612afc85828601612847565b9150509250929050565b600080600060608486031215612b1b57600080fd5b6000612b298682870161274b565b9350506020612b3a86828701612847565b9250506040612b4b86828701612847565b9150509250925092565b60008060008060808587031215612b6b57600080fd5b6000612b798782880161274b565b9450506020612b8a87828801612847565b9350506040612b9b87828801612847565b925050606085013567ffffffffffffffff811115612bb857600080fd5b612bc4878288016127f3565b91505092959194509250565b60008060408385031215612be357600080fd5b600083013567ffffffffffffffff811115612bfd57600080fd5b612c0985828601612760565b925050602083013567ffffffffffffffff811115612c2657600080fd5b612c328582860161278a565b9150509250929050565b60008060008060808587031215612c5257600080fd5b600085013567ffffffffffffffff811115612c6c57600080fd5b612c7887828801612760565b9450506020612c8987828801612847565b9350506040612c9a87828801612847565b925050606085013567ffffffffffffffff811115612cb757600080fd5b612cc3878288016127f3565b91505092959194509250565b600060208284031215612ce157600080fd5b6000612cef848285016127c9565b91505092915050565b600060208284031215612d0a57600080fd5b6000612d18848285016127de565b91505092915050565b600060208284031215612d3357600080fd5b600082013567ffffffffffffffff811115612d4d57600080fd5b612d598482850161281d565b91505092915050565b600060208284031215612d7457600080fd5b6000612d8284828501612847565b91505092915050565b6000612d97838361309e565b60208301905092915050565b612dac816135f9565b82525050565b6000612dbd82613542565b612dc78185613570565b9350612dd283613532565b8060005b83811015612e03578151612dea8882612d8b565b9750612df583613563565b925050600181019050612dd6565b5085935050505092915050565b612e198161360b565b82525050565b6000612e2a8261354d565b612e348185613581565b9350612e4481856020860161367c565b612e4d8161380a565b840191505092915050565b6000612e6382613558565b612e6d8185613592565b9350612e7d81856020860161367c565b612e868161380a565b840191505092915050565b6000612e9e603483613592565b9150612ea982613828565b604082019050919050565b6000612ec1602f83613592565b9150612ecc82613877565b604082019050919050565b6000612ee4602883613592565b9150612eef826138c6565b604082019050919050565b6000612f07602683613592565b9150612f1282613915565b604082019050919050565b6000612f2a602483613592565b9150612f3582613964565b604082019050919050565b6000612f4d602a83613592565b9150612f58826139b3565b604082019050919050565b6000612f70602583613592565b9150612f7b82613a02565b604082019050919050565b6000612f93602383613592565b9150612f9e82613a51565b604082019050919050565b6000612fb6602a83613592565b9150612fc182613aa0565b604082019050919050565b6000612fd9602083613592565b9150612fe482613aef565b602082019050919050565b6000612ffc602883613592565b915061300782613b18565b604082019050919050565b600061301f602983613592565b915061302a82613b67565b604082019050919050565b6000613042602983613592565b915061304d82613bb6565b604082019050919050565b6000613065602883613592565b915061307082613c05565b604082019050919050565b6000613088602183613592565b915061309382613c54565b604082019050919050565b6130a781613663565b82525050565b6130b681613663565b82525050565b60006020820190506130d16000830184612da3565b92915050565b600060a0820190506130ec6000830188612da3565b6130f96020830187612da3565b818103604083015261310b8186612db2565b9050818103606083015261311f8185612db2565b905081810360808301526131338184612e1f565b90509695505050505050565b600060a0820190506131546000830188612da3565b6131616020830187612da3565b61316e60408301866130ad565b61317b60608301856130ad565b818103608083015261318d8184612e1f565b90509695505050505050565b600060208201905081810360008301526131b38184612db2565b905092915050565b600060408201905081810360008301526131d58185612db2565b905081810360208301526131e98184612db2565b90509392505050565b60006020820190506132076000830184612e10565b92915050565b600060208201905081810360008301526132278184612e58565b905092915050565b6000602082019050818103600083015261324881612e91565b9050919050565b6000602082019050818103600083015261326881612eb4565b9050919050565b6000602082019050818103600083015261328881612ed7565b9050919050565b600060208201905081810360008301526132a881612efa565b9050919050565b600060208201905081810360008301526132c881612f1d565b9050919050565b600060208201905081810360008301526132e881612f40565b9050919050565b6000602082019050818103600083015261330881612f63565b9050919050565b6000602082019050818103600083015261332881612f86565b9050919050565b6000602082019050818103600083015261334881612fa9565b9050919050565b6000602082019050818103600083015261336881612fcc565b9050919050565b6000602082019050818103600083015261338881612fef565b9050919050565b600060208201905081810360008301526133a881613012565b9050919050565b600060208201905081810360008301526133c881613035565b9050919050565b600060208201905081810360008301526133e881613058565b9050919050565b600060208201905081810360008301526134088161307b565b9050919050565b600060208201905061342460008301846130ad565b92915050565b600060408201905061343f60008301856130ad565b61344c60208301846130ad565b9392505050565b600061345d61346e565b905061346982826136e1565b919050565b6000604051905090565b600067ffffffffffffffff821115613493576134926137b9565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134bf576134be6137b9565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134eb576134ea6137b9565b5b6134f48261380a565b9050602081019050919050565b600067ffffffffffffffff82111561351c5761351b6137b9565b5b6135258261380a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135ae82613663565b91506135b983613663565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135ee576135ed61375b565b5b828201905092915050565b600061360482613643565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561369a57808201518184015260208101905061367f565b838111156136a9576000848401525b50505050565b600060028204905060018216806136c757607f821691505b602082108114156136db576136da61378a565b5b50919050565b6136ea8261380a565b810181811067ffffffffffffffff82111715613709576137086137b9565b5b80604052505050565b600061371d82613663565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137505761374f61375b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156138075760046000803e61380460005161381b565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613cb357613d36565b613cbb61346e565b60043d036004823e80513d602482011167ffffffffffffffff82111715613ce3575050613d36565b808201805167ffffffffffffffff811115613d015750505050613d36565b80602083010160043d038501811115613d1e575050505050613d36565b613d2d826020018501866136e1565b82955050505050505b90565b613d42816135f9565b8114613d4d57600080fd5b50565b613d598161360b565b8114613d6457600080fd5b50565b613d7081613617565b8114613d7b57600080fd5b50565b613d8781613663565b8114613d9257600080fd5b5056fea264697066735822122015aa153c4fe37869bdd871871e2725ae0e8705008a301f5ba982ea4b59a01bb764736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012b5760003560e01c8063731133e9116100ad578063e985e9c511610071578063e985e9c514610340578063e9c93d2214610370578063f242432a1461038c578063f2fde38b146103a8578063f5298aca146103c45761012b565b8063731133e91461029c5780638da5cb5b146102b857806395d89b41146102d6578063a22cb465146102f4578063bd85b039146103105761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f4146102165780634f558e79146102465780636b20c45414610276578063715018a6146102925761012b565b8062fdd58e1461013057806301ffc9a71461016057806302fe53051461019057806306fdde03146101ac5780630e89341c146101ca575b600080fd5b61014a60048036038101906101459190612aca565b6103e0565b604051610157919061340f565b60405180910390f35b61017a60048036038101906101759190612ccf565b6104a9565b60405161018791906131f2565b60405180910390f35b6101aa60048036038101906101a59190612d21565b61058b565b005b6101b461059f565b6040516101c1919061320d565b60405180910390f35b6101e460048036038101906101df9190612d62565b61062d565b6040516101f1919061320d565b60405180910390f35b610214600480360381019061020f91906128c1565b6106c1565b005b610230600480360381019061022b9190612bd0565b610762565b60405161023d9190613199565b60405180910390f35b610260600480360381019061025b9190612d62565b610913565b60405161026d91906131f2565b60405180910390f35b610290600480360381019061028b9190612a0f565b610927565b005b61029a6109c4565b005b6102b660048036038101906102b19190612b55565b6109d8565b005b6102c06109f2565b6040516102cd91906130bc565b60405180910390f35b6102de610a1c565b6040516102eb919061320d565b60405180910390f35b61030e60048036038101906103099190612a8e565b610aaa565b005b61032a60048036038101906103259190612d62565b610ac0565b604051610337919061340f565b60405180910390f35b61035a60048036038101906103559190612885565b610add565b60405161036791906131f2565b60405180910390f35b61038a60048036038101906103859190612c3c565b610b71565b005b6103a660048036038101906103a19190612980565b610bf1565b005b6103c260048036038101906103bd919061285c565b610c92565b005b6103de60048036038101906103d99190612b06565b610d16565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610448906132cf565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610584575061058382610db3565b5b9050919050565b610593610e1d565b61059c81610e9b565b50565b600580546105ac906136af565b80601f01602080910402602001604051908101604052809291908181526020018280546105d8906136af565b80156106255780601f106105fa57610100808354040283529160200191610625565b820191906000526020600020905b81548152906001019060200180831161060857829003601f168201915b505050505081565b60606002805461063c906136af565b80601f0160208091040260200160405190810160405280929190818152602001828054610668906136af565b80156106b55780601f1061068a576101008083540402835291602001916106b5565b820191906000526020600020905b81548152906001019060200180831161069857829003601f168201915b50505050509050919050565b6106c9610eb5565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061070f575061070e85610709610eb5565b610add565b5b61074e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107459061324f565b60405180910390fd5b61075b8585858585610ebd565b5050505050565b606081518351146107a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079f906133af565b60405180910390fd5b6000835167ffffffffffffffff8111156107eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156108195781602001602082028036833780820191505090505b50905060005b8451811015610908576108b2858281518110610864577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106108a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516103e0565b8282815181106108eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061090190613712565b905061081f565b508091505092915050565b60008061091f83610ac0565b119050919050565b61092f610eb5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061097557506109748361096f610eb5565b610add565b5b6109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab9061324f565b60405180910390fd5b6109bf83838361122b565b505050565b6109cc610e1d565b6109d66000611546565b565b6109e0610e1d565b6109ec8484848461160c565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068054610a29906136af565b80601f0160208091040260200160405190810160405280929190818152602001828054610a55906136af565b8015610aa25780601f10610a7757610100808354040283529160200191610aa2565b820191906000526020600020905b815481529060010190602001808311610a8557829003601f168201915b505050505081565b610abc610ab5610eb5565b83836117bd565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b79610e1d565b60008451905060005b81811015610be957610bd6868281518110610bc6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015186868661160c565b8080610be190613712565b915050610b82565b505050505050565b610bf9610eb5565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c3f5750610c3e85610c39610eb5565b610add565b5b610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c759061324f565b60405180910390fd5b610c8b858585858561192a565b5050505050565b610c9a610e1d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d019061328f565b60405180910390fd5b610d1381611546565b50565b610d1e610eb5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610d645750610d6383610d5e610eb5565b610add565b5b610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a9061324f565b60405180910390fd5b610dae838383611bc6565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610e25610eb5565b73ffffffffffffffffffffffffffffffffffffffff16610e436109f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e909061334f565b60405180910390fd5b565b8060029080519060200190610eb1929190612554565b5050565b600033905090565b8151835114610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef8906133cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f68906132ef565b60405180910390fd5b6000610f7b610eb5565b9050610f8b818787878787611e0d565b60005b8451811015611188576000858281518110610fd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611017577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af9061332f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461116d91906135a3565b925050819055505050508061118190613712565b9050610f8e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516111ff9291906131bb565b60405180910390a4611215818787878787611e23565b611223818787878787611e2b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561129b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112929061330f565b60405180910390fd5b80518251146112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d6906133cf565b60405180910390fd5b60006112e9610eb5565b905061130981856000868660405180602001604052806000815250611e0d565b60005b83518110156114a2576000848281518110611350577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110611395577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d906132af565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061149a90613712565b91505061130c565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161151a9291906131bb565b60405180910390a461154081856000868660405180602001604052806000815250611e23565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561167c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611673906133ef565b60405180910390fd5b6000611686610eb5565b9050600061169385612012565b905060006116a085612012565b90506116b183600089858589611e0d565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461171091906135a3565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161178e92919061342a565b60405180910390a46117a583600089858589611e23565b6117b4836000898989896120d8565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061338f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161191d91906131f2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561199a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611991906132ef565b60405180910390fd5b60006119a4610eb5565b905060006119b185612012565b905060006119be85612012565b90506119ce838989858589611e0d565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c9061332f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b1a91906135a3565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611b9792919061342a565b60405180910390a4611bad848a8a86868a611e23565b611bbb848a8a8a8a8a6120d8565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d9061330f565b60405180910390fd5b6000611c40610eb5565b90506000611c4d84612012565b90506000611c5a84612012565b9050611c7a83876000858560405180602001604052806000815250611e0d565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d08906132af565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611dde92919061342a565b60405180910390a4611e0484886000868660405180602001604052806000815250611e23565b50505050505050565b611e1b8686868686866122bf565b505050505050565b505050505050565b611e4a8473ffffffffffffffffffffffffffffffffffffffff16612529565b1561200a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e909594939291906130d7565b602060405180830381600087803b158015611eaa57600080fd5b505af1925050508015611edb57506040513d601f19601f82011682018060405250810190611ed89190612cf8565b60015b611f8157611ee76137e8565b806308c379a01415611f445750611efc613ca3565b80611f075750611f46565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b919061320d565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f789061322f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff9061326f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612057577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156120855781602001602082028036833780820191505090505b50905082816000815181106120c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6120f78473ffffffffffffffffffffffffffffffffffffffff16612529565b156122b7578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161213d95949392919061313f565b602060405180830381600087803b15801561215757600080fd5b505af192505050801561218857506040513d601f19601f820116820180604052508101906121859190612cf8565b60015b61222e576121946137e8565b806308c379a014156121f157506121a9613ca3565b806121b457506121f3565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8919061320d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122259061322f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac9061326f565b60405180910390fd5b505b505050505050565b6122cd86868686868661254c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156123cb5760005b83518110156123c957828181518110612347577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516004600086848151811061238c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546123b191906135a3565b92505081905550806123c290613712565b9050612305565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125215760005b835181101561251f576000848281518110612447577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061248c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060046000848152602001908152602001600020549050818110156124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061336f565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061251890613712565b9050612403565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054612560906136af565b90600052602060002090601f01602090048101928261258257600085556125c9565b82601f1061259b57805160ff19168380011785556125c9565b828001600101855582156125c9579182015b828111156125c85782518255916020019190600101906125ad565b5b5090506125d691906125da565b5090565b5b808211156125f35760008160009055506001016125db565b5090565b600061260a61260584613478565b613453565b9050808382526020820190508285602086028201111561262957600080fd5b60005b85811015612659578161263f888261274b565b84526020840193506020830192505060018101905061262c565b5050509392505050565b6000612676612671846134a4565b613453565b9050808382526020820190508285602086028201111561269557600080fd5b60005b858110156126c557816126ab8882612847565b845260208401935060208301925050600181019050612698565b5050509392505050565b60006126e26126dd846134d0565b613453565b9050828152602081018484840111156126fa57600080fd5b61270584828561366d565b509392505050565b600061272061271b84613501565b613453565b90508281526020810184848401111561273857600080fd5b61274384828561366d565b509392505050565b60008135905061275a81613d39565b92915050565b600082601f83011261277157600080fd5b81356127818482602086016125f7565b91505092915050565b600082601f83011261279b57600080fd5b81356127ab848260208601612663565b91505092915050565b6000813590506127c381613d50565b92915050565b6000813590506127d881613d67565b92915050565b6000815190506127ed81613d67565b92915050565b600082601f83011261280457600080fd5b81356128148482602086016126cf565b91505092915050565b600082601f83011261282e57600080fd5b813561283e84826020860161270d565b91505092915050565b60008135905061285681613d7e565b92915050565b60006020828403121561286e57600080fd5b600061287c8482850161274b565b91505092915050565b6000806040838503121561289857600080fd5b60006128a68582860161274b565b92505060206128b78582860161274b565b9150509250929050565b600080600080600060a086880312156128d957600080fd5b60006128e78882890161274b565b95505060206128f88882890161274b565b945050604086013567ffffffffffffffff81111561291557600080fd5b6129218882890161278a565b935050606086013567ffffffffffffffff81111561293e57600080fd5b61294a8882890161278a565b925050608086013567ffffffffffffffff81111561296757600080fd5b612973888289016127f3565b9150509295509295909350565b600080600080600060a0868803121561299857600080fd5b60006129a68882890161274b565b95505060206129b78882890161274b565b94505060406129c888828901612847565b93505060606129d988828901612847565b925050608086013567ffffffffffffffff8111156129f657600080fd5b612a02888289016127f3565b9150509295509295909350565b600080600060608486031215612a2457600080fd5b6000612a328682870161274b565b935050602084013567ffffffffffffffff811115612a4f57600080fd5b612a5b8682870161278a565b925050604084013567ffffffffffffffff811115612a7857600080fd5b612a848682870161278a565b9150509250925092565b60008060408385031215612aa157600080fd5b6000612aaf8582860161274b565b9250506020612ac0858286016127b4565b9150509250929050565b60008060408385031215612add57600080fd5b6000612aeb8582860161274b565b9250506020612afc85828601612847565b9150509250929050565b600080600060608486031215612b1b57600080fd5b6000612b298682870161274b565b9350506020612b3a86828701612847565b9250506040612b4b86828701612847565b9150509250925092565b60008060008060808587031215612b6b57600080fd5b6000612b798782880161274b565b9450506020612b8a87828801612847565b9350506040612b9b87828801612847565b925050606085013567ffffffffffffffff811115612bb857600080fd5b612bc4878288016127f3565b91505092959194509250565b60008060408385031215612be357600080fd5b600083013567ffffffffffffffff811115612bfd57600080fd5b612c0985828601612760565b925050602083013567ffffffffffffffff811115612c2657600080fd5b612c328582860161278a565b9150509250929050565b60008060008060808587031215612c5257600080fd5b600085013567ffffffffffffffff811115612c6c57600080fd5b612c7887828801612760565b9450506020612c8987828801612847565b9350506040612c9a87828801612847565b925050606085013567ffffffffffffffff811115612cb757600080fd5b612cc3878288016127f3565b91505092959194509250565b600060208284031215612ce157600080fd5b6000612cef848285016127c9565b91505092915050565b600060208284031215612d0a57600080fd5b6000612d18848285016127de565b91505092915050565b600060208284031215612d3357600080fd5b600082013567ffffffffffffffff811115612d4d57600080fd5b612d598482850161281d565b91505092915050565b600060208284031215612d7457600080fd5b6000612d8284828501612847565b91505092915050565b6000612d97838361309e565b60208301905092915050565b612dac816135f9565b82525050565b6000612dbd82613542565b612dc78185613570565b9350612dd283613532565b8060005b83811015612e03578151612dea8882612d8b565b9750612df583613563565b925050600181019050612dd6565b5085935050505092915050565b612e198161360b565b82525050565b6000612e2a8261354d565b612e348185613581565b9350612e4481856020860161367c565b612e4d8161380a565b840191505092915050565b6000612e6382613558565b612e6d8185613592565b9350612e7d81856020860161367c565b612e868161380a565b840191505092915050565b6000612e9e603483613592565b9150612ea982613828565b604082019050919050565b6000612ec1602f83613592565b9150612ecc82613877565b604082019050919050565b6000612ee4602883613592565b9150612eef826138c6565b604082019050919050565b6000612f07602683613592565b9150612f1282613915565b604082019050919050565b6000612f2a602483613592565b9150612f3582613964565b604082019050919050565b6000612f4d602a83613592565b9150612f58826139b3565b604082019050919050565b6000612f70602583613592565b9150612f7b82613a02565b604082019050919050565b6000612f93602383613592565b9150612f9e82613a51565b604082019050919050565b6000612fb6602a83613592565b9150612fc182613aa0565b604082019050919050565b6000612fd9602083613592565b9150612fe482613aef565b602082019050919050565b6000612ffc602883613592565b915061300782613b18565b604082019050919050565b600061301f602983613592565b915061302a82613b67565b604082019050919050565b6000613042602983613592565b915061304d82613bb6565b604082019050919050565b6000613065602883613592565b915061307082613c05565b604082019050919050565b6000613088602183613592565b915061309382613c54565b604082019050919050565b6130a781613663565b82525050565b6130b681613663565b82525050565b60006020820190506130d16000830184612da3565b92915050565b600060a0820190506130ec6000830188612da3565b6130f96020830187612da3565b818103604083015261310b8186612db2565b9050818103606083015261311f8185612db2565b905081810360808301526131338184612e1f565b90509695505050505050565b600060a0820190506131546000830188612da3565b6131616020830187612da3565b61316e60408301866130ad565b61317b60608301856130ad565b818103608083015261318d8184612e1f565b90509695505050505050565b600060208201905081810360008301526131b38184612db2565b905092915050565b600060408201905081810360008301526131d58185612db2565b905081810360208301526131e98184612db2565b90509392505050565b60006020820190506132076000830184612e10565b92915050565b600060208201905081810360008301526132278184612e58565b905092915050565b6000602082019050818103600083015261324881612e91565b9050919050565b6000602082019050818103600083015261326881612eb4565b9050919050565b6000602082019050818103600083015261328881612ed7565b9050919050565b600060208201905081810360008301526132a881612efa565b9050919050565b600060208201905081810360008301526132c881612f1d565b9050919050565b600060208201905081810360008301526132e881612f40565b9050919050565b6000602082019050818103600083015261330881612f63565b9050919050565b6000602082019050818103600083015261332881612f86565b9050919050565b6000602082019050818103600083015261334881612fa9565b9050919050565b6000602082019050818103600083015261336881612fcc565b9050919050565b6000602082019050818103600083015261338881612fef565b9050919050565b600060208201905081810360008301526133a881613012565b9050919050565b600060208201905081810360008301526133c881613035565b9050919050565b600060208201905081810360008301526133e881613058565b9050919050565b600060208201905081810360008301526134088161307b565b9050919050565b600060208201905061342460008301846130ad565b92915050565b600060408201905061343f60008301856130ad565b61344c60208301846130ad565b9392505050565b600061345d61346e565b905061346982826136e1565b919050565b6000604051905090565b600067ffffffffffffffff821115613493576134926137b9565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134bf576134be6137b9565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134eb576134ea6137b9565b5b6134f48261380a565b9050602081019050919050565b600067ffffffffffffffff82111561351c5761351b6137b9565b5b6135258261380a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135ae82613663565b91506135b983613663565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135ee576135ed61375b565b5b828201905092915050565b600061360482613643565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561369a57808201518184015260208101905061367f565b838111156136a9576000848401525b50505050565b600060028204905060018216806136c757607f821691505b602082108114156136db576136da61378a565b5b50919050565b6136ea8261380a565b810181811067ffffffffffffffff82111715613709576137086137b9565b5b80604052505050565b600061371d82613663565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137505761374f61375b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156138075760046000803e61380460005161381b565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613cb357613d36565b613cbb61346e565b60043d036004823e80513d602482011167ffffffffffffffff82111715613ce3575050613d36565b808201805167ffffffffffffffff811115613d015750505050613d36565b80602083010160043d038501811115613d1e575050505050613d36565b613d2d826020018501866136e1565b82955050505050505b90565b613d42816135f9565b8114613d4d57600080fd5b50565b613d598161360b565b8114613d6457600080fd5b50565b613d7081613617565b8114613d7b57600080fd5b50565b613d8781613663565b8114613d9257600080fd5b5056fea264697066735822122015aa153c4fe37869bdd871871e2725ae0e8705008a301f5ba982ea4b59a01bb764736f6c63430008040033
Deployed Bytecode Sourcemap
42457:1124:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23624:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22647:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42688:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42537:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23368:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25568:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24020:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40102:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42018:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2776:103;;;:::i;:::-;;42785:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2128:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42562:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24617:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39891:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24844:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42962:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25084:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3034:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41683:327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23624:230;23710:7;23757:1;23738:21;;:7;:21;;;;23730:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23824:9;:13;23834:2;23824:13;;;;;;;;;;;:22;23838:7;23824:22;;;;;;;;;;;;;;;;23817:29;;23624:230;;;;:::o;22647:310::-;22749:4;22801:26;22786:41;;;:11;:41;;;;:110;;;;22859:37;22844:52;;;:11;:52;;;;22786:110;:163;;;;22913:36;22937:11;22913:23;:36::i;:::-;22786:163;22766:183;;22647:310;;;:::o;42688:89::-;2014:13;:11;:13::i;:::-;42754:15:::1;42762:6;42754:7;:15::i;:::-;42688:89:::0;:::o;42537:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23368:105::-;23428:13;23461:4;23454:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23368:105;;;:::o;25568:439::-;25809:12;:10;:12::i;:::-;25801:20;;:4;:20;;;:60;;;;25825:36;25842:4;25848:12;:10;:12::i;:::-;25825:16;:36::i;:::-;25801:60;25779:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25947:52;25970:4;25976:2;25980:3;25985:7;25994:4;25947:22;:52::i;:::-;25568:439;;;;;:::o;24020:524::-;24176:16;24237:3;:10;24218:8;:15;:29;24210:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24306:30;24353:8;:15;24339:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24306:63;;24387:9;24382:122;24406:8;:15;24402:1;:19;24382:122;;;24462:30;24472:8;24481:1;24472:11;;;;;;;;;;;;;;;;;;;;;;24485:3;24489:1;24485:6;;;;;;;;;;;;;;;;;;;;;;24462:9;:30::i;:::-;24443:13;24457:1;24443:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;24423:3;;;;:::i;:::-;;;24382:122;;;;24523:13;24516:20;;;24020:524;;;;:::o;40102:122::-;40159:4;40215:1;40183:29;40209:2;40183:25;:29::i;:::-;:33;40176:40;;40102:122;;;:::o;42018:359::-;42194:12;:10;:12::i;:::-;42183:23;;:7;:23;;;:66;;;;42210:39;42227:7;42236:12;:10;:12::i;:::-;42210:16;:39::i;:::-;42183:66;42161:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;42337:32;42348:7;42357:3;42362:6;42337:10;:32::i;:::-;42018:359;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;42785:169::-;2014:13;:11;:13::i;:::-;42914:32:::1;42920:7;42929:2;42933:6;42941:4;42914:5;:32::i;:::-;42785:169:::0;;;;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;42562:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24617:155::-;24712:52;24731:12;:10;:12::i;:::-;24745:8;24755;24712:18;:52::i;:::-;24617:155;;:::o;39891:113::-;39953:7;39980:12;:16;39993:2;39980:16;;;;;;;;;;;;39973:23;;39891:113;;;:::o;24844:168::-;24943:4;24967:18;:27;24986:7;24967:27;;;;;;;;;;;;;;;:37;24995:8;24967:37;;;;;;;;;;;;;;;;;;;;;;;;;24960:44;;24844:168;;;;:::o;42962:247::-;2014:13;:11;:13::i;:::-;43077:11:::1;43091:2;:9;43077:23;;43116:6;43111:91;43132:6;43128:1;:10;43111:91;;;43160:30;43166:2;43169:1;43166:5;;;;;;;;;;;;;;;;;;;;;;43173:2;43177:6;43185:4;43160:5;:30::i;:::-;43140:3;;;;;:::i;:::-;;;;43111:91;;;;2038:1;42962:247:::0;;;;:::o;25084:407::-;25300:12;:10;:12::i;:::-;25292:20;;:4;:20;;;:60;;;;25316:36;25333:4;25339:12;:10;:12::i;:::-;25316:16;:36::i;:::-;25292:60;25270:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25438:45;25456:4;25462:2;25466;25470:6;25478:4;25438:17;:45::i;:::-;25084:407;;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;;;3115:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;41683:327::-;41834:12;:10;:12::i;:::-;41823:23;;:7;:23;;;:66;;;;41850:39;41867:7;41876:12;:10;:12::i;:::-;41850:16;:39::i;:::-;41823:66;41801:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;41977:25;41983:7;41992:2;41996:5;41977;:25::i;:::-;41683:327;;;:::o;13928:157::-;14013:4;14052:25;14037:40;;;:11;:40;;;;14030:47;;13928:157;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;29793:88::-;29867:6;29860:4;:13;;;;;;;;;;;;:::i;:::-;;29793:88;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;27803:1146::-;28030:7;:14;28016:3;:10;:28;28008:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28122:1;28108:16;;:2;:16;;;;28100:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28179:16;28198:12;:10;:12::i;:::-;28179:31;;28223:60;28244:8;28254:4;28260:2;28264:3;28269:7;28278:4;28223:20;:60::i;:::-;28301:9;28296:421;28320:3;:10;28316:1;:14;28296:421;;;28352:10;28365:3;28369:1;28365:6;;;;;;;;;;;;;;;;;;;;;;28352:19;;28386:14;28403:7;28411:1;28403:10;;;;;;;;;;;;;;;;;;;;;;28386:27;;28430:19;28452:9;:13;28462:2;28452:13;;;;;;;;;;;:19;28466:4;28452:19;;;;;;;;;;;;;;;;28430:41;;28509:6;28494:11;:21;;28486:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28642:6;28628:11;:20;28606:9;:13;28616:2;28606:13;;;;;;;;;;;:19;28620:4;28606:19;;;;;;;;;;;;;;;:42;;;;28699:6;28678:9;:13;28688:2;28678:13;;;;;;;;;;;:17;28692:2;28678:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28296:421;;;28332:3;;;;:::i;:::-;;;28296:421;;;;28764:2;28734:47;;28758:4;28734:47;;28748:8;28734:47;;;28768:3;28773:7;28734:47;;;;;;;:::i;:::-;;;;;;;;28794:59;28814:8;28824:4;28830:2;28834:3;28839:7;28848:4;28794:19;:59::i;:::-;28866:75;28902:8;28912:4;28918:2;28922:3;28927:7;28936:4;28866:35;:75::i;:::-;27803:1146;;;;;;:::o;33568:969::-;33736:1;33720:18;;:4;:18;;;;33712:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33811:7;:14;33797:3;:10;:28;33789:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33883:16;33902:12;:10;:12::i;:::-;33883:31;;33927:66;33948:8;33958:4;33972:1;33976:3;33981:7;33927:66;;;;;;;;;;;;:20;:66::i;:::-;34011:9;34006:373;34030:3;:10;34026:1;:14;34006:373;;;34062:10;34075:3;34079:1;34075:6;;;;;;;;;;;;;;;;;;;;;;34062:19;;34096:14;34113:7;34121:1;34113:10;;;;;;;;;;;;;;;;;;;;;;34096:27;;34140:19;34162:9;:13;34172:2;34162:13;;;;;;;;;;;:19;34176:4;34162:19;;;;;;;;;;;;;;;;34140:41;;34219:6;34204:11;:21;;34196:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34346:6;34332:11;:20;34310:9;:13;34320:2;34310:13;;;;;;;;;;;:19;34324:4;34310:19;;;;;;;;;;;;;;;:42;;;;34006:373;;;34042:3;;;;;:::i;:::-;;;;34006:373;;;;34434:1;34396:55;;34420:4;34396:55;;34410:8;34396:55;;;34438:3;34443:7;34396:55;;;;;;;:::i;:::-;;;;;;;;34464:65;34484:8;34494:4;34508:1;34512:3;34517:7;34464:65;;;;;;;;;;;;:19;:65::i;:::-;33568:969;;;;:::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3395:191;;:::o;30267:729::-;30434:1;30420:16;;:2;:16;;;;30412:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30487:16;30506:12;:10;:12::i;:::-;30487:31;;30529:20;30552:21;30570:2;30552:17;:21::i;:::-;30529:44;;30584:24;30611:25;30629:6;30611:17;:25::i;:::-;30584:52;;30649:66;30670:8;30688:1;30692:2;30696:3;30701:7;30710:4;30649:20;:66::i;:::-;30749:6;30728:9;:13;30738:2;30728:13;;;;;;;;;;;:17;30742:2;30728:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30808:2;30771:52;;30804:1;30771:52;;30786:8;30771:52;;;30812:2;30816:6;30771:52;;;;;;;:::i;:::-;;;;;;;;30836:65;30856:8;30874:1;30878:2;30882:3;30887:7;30896:4;30836:19;:65::i;:::-;30914:74;30945:8;30963:1;30967:2;30971;30975:6;30983:4;30914:30;:74::i;:::-;30267:729;;;;;;;:::o;34680:331::-;34835:8;34826:17;;:5;:17;;;;34818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34938:8;34900:18;:25;34919:5;34900:25;;;;;;;;;;;;;;;:35;34926:8;34900:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34984:8;34962:41;;34977:5;34962:41;;;34994:8;34962:41;;;;;;:::i;:::-;;;;;;;;34680:331;;;:::o;26471:974::-;26673:1;26659:16;;:2;:16;;;;26651:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26730:16;26749:12;:10;:12::i;:::-;26730:31;;26772:20;26795:21;26813:2;26795:17;:21::i;:::-;26772:44;;26827:24;26854:25;26872:6;26854:17;:25::i;:::-;26827:52;;26892:60;26913:8;26923:4;26929:2;26933:3;26938:7;26947:4;26892:20;:60::i;:::-;26965:19;26987:9;:13;26997:2;26987:13;;;;;;;;;;;:19;27001:4;26987:19;;;;;;;;;;;;;;;;26965:41;;27040:6;27025:11;:21;;27017:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27165:6;27151:11;:20;27129:9;:13;27139:2;27129:13;;;;;;;;;;;:19;27143:4;27129:19;;;;;;;;;;;;;;;:42;;;;27214:6;27193:9;:13;27203:2;27193:13;;;;;;;;;;;:17;27207:2;27193:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27269:2;27238:46;;27263:4;27238:46;;27253:8;27238:46;;;27273:2;27277:6;27238:46;;;;;;;:::i;:::-;;;;;;;;27297:59;27317:8;27327:4;27333:2;27337:3;27342:7;27351:4;27297:19;:59::i;:::-;27369:68;27400:8;27410:4;27416:2;27420;27424:6;27432:4;27369:30;:68::i;:::-;26471:974;;;;;;;;;:::o;32510:808::-;32653:1;32637:18;;:4;:18;;;;32629:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32708:16;32727:12;:10;:12::i;:::-;32708:31;;32750:20;32773:21;32791:2;32773:17;:21::i;:::-;32750:44;;32805:24;32832:25;32850:6;32832:17;:25::i;:::-;32805:52;;32870:66;32891:8;32901:4;32915:1;32919:3;32924:7;32870:66;;;;;;;;;;;;:20;:66::i;:::-;32949:19;32971:9;:13;32981:2;32971:13;;;;;;;;;;;:19;32985:4;32971:19;;;;;;;;;;;;;;;;32949:41;;33024:6;33009:11;:21;;33001:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33143:6;33129:11;:20;33107:9;:13;33117:2;33107:13;;;;;;;;;;;:19;33121:4;33107:19;;;;;;;;;;;;;;;:42;;;;33217:1;33178:54;;33203:4;33178:54;;33193:8;33178:54;;;33221:2;33225:6;33178:54;;;;;;;:::i;:::-;;;;;;;;33245:65;33265:8;33275:4;33289:1;33293:3;33298:7;33245:65;;;;;;;;;;;;:19;:65::i;:::-;32510:808;;;;;;;:::o;43287:291::-;43504:66;43531:8;43541:4;43547:2;43551:3;43556:7;43565:4;43504:26;:66::i;:::-;43287:291;;;;;;:::o;37145:220::-;;;;;;;:::o;38125:813::-;38365:15;:2;:13;;;:15::i;:::-;38361:570;;;38418:2;38401:43;;;38445:8;38455:4;38461:3;38466:7;38475:4;38401:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38397:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38793:6;38786:14;;;;;;;;;;;:::i;:::-;;;;;;;;38397:523;;;38842:62;;;;;;;;;;:::i;:::-;;;;;;;;38397:523;38574:48;;;38562:60;;;:8;:60;;;;38558:159;;38647:50;;;;;;;;;;:::i;:::-;;;;;;;;38558:159;38481:251;38361:570;38125:813;;;;;;:::o;38946:198::-;39012:16;39041:22;39080:1;39066:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39041:41;;39104:7;39093:5;39099:1;39093:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;39131:5;39124:12;;;38946:198;;;:::o;37373:744::-;37588:15;:2;:13;;;:15::i;:::-;37584:526;;;37641:2;37624:38;;;37663:8;37673:4;37679:2;37683:6;37691:4;37624:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37620:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37972:6;37965:14;;;;;;;;;;;:::i;:::-;;;;;;;;37620:479;;;38021:62;;;;;;;;;;:::i;:::-;;;;;;;;37620:479;37758:43;;;37746:55;;;:8;:55;;;;37742:154;;37826:50;;;;;;;;;;:::i;:::-;;;;;;;;37742:154;37697:214;37584:526;37373:744;;;;;;:::o;40299:931::-;40538:66;40565:8;40575:4;40581:2;40585:3;40590:7;40599:4;40538:26;:66::i;:::-;40637:1;40621:18;;:4;:18;;;40617:160;;;40661:9;40656:110;40680:3;:10;40676:1;:14;40656:110;;;40740:7;40748:1;40740:10;;;;;;;;;;;;;;;;;;;;;;40716:12;:20;40729:3;40733:1;40729:6;;;;;;;;;;;;;;;;;;;;;;40716:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;40692:3;;;;:::i;:::-;;;40656:110;;;;40617:160;40807:1;40793:16;;:2;:16;;;40789:434;;;40831:9;40826:386;40850:3;:10;40846:1;:14;40826:386;;;40886:10;40899:3;40903:1;40899:6;;;;;;;;;;;;;;;;;;;;;;40886:19;;40924:14;40941:7;40949:1;40941:10;;;;;;;;;;;;;;;;;;;;;;40924:27;;40970:14;40987:12;:16;41000:2;40987:16;;;;;;;;;;;;40970:33;;41040:6;41030;:16;;41022:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41171:6;41162;:15;41143:12;:16;41156:2;41143:16;;;;;;;;;;;:34;;;;40826:386;;;40862:3;;;;:::i;:::-;;;40826:386;;;;40789:434;40299:931;;;;;;:::o;4826:326::-;4886:4;5143:1;5121:7;:19;;;:23;5114:30;;4826:326;;;:::o;35969:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;3050:86;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3204:79;;;;:::o;3302:271::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:2;;3424:1;3421;3414:12;3373:2;3464:6;3451:20;3489:78;3563:3;3555:6;3548:4;3540:6;3536:17;3489:78;:::i;:::-;3480:87;;3363:210;;;;;:::o;3593:273::-;3649:5;3698:3;3691:4;3683:6;3679:17;3675:27;3665:2;;3716:1;3713;3706:12;3665:2;3756:6;3743:20;3781:79;3856:3;3848:6;3841:4;3833:6;3829:17;3781:79;:::i;:::-;3772:88;;3655:211;;;;;:::o;3872:139::-;3918:5;3956:6;3943:20;3934:29;;3972:33;3999:5;3972:33;:::i;:::-;3924:87;;;;:::o;4017:262::-;4076:6;4125:2;4113:9;4104:7;4100:23;4096:32;4093:2;;;4141:1;4138;4131:12;4093:2;4184:1;4209:53;4254:7;4245:6;4234:9;4230:22;4209:53;:::i;:::-;4199:63;;4155:117;4083:196;;;;:::o;4285:407::-;4353:6;4361;4410:2;4398:9;4389:7;4385:23;4381:32;4378:2;;;4426:1;4423;4416:12;4378:2;4469:1;4494:53;4539:7;4530:6;4519:9;4515:22;4494:53;:::i;:::-;4484:63;;4440:117;4596:2;4622:53;4667:7;4658:6;4647:9;4643:22;4622:53;:::i;:::-;4612:63;;4567:118;4368:324;;;;;:::o;4698:1241::-;4852:6;4860;4868;4876;4884;4933:3;4921:9;4912:7;4908:23;4904:33;4901:2;;;4950:1;4947;4940:12;4901:2;4993:1;5018:53;5063:7;5054:6;5043:9;5039:22;5018:53;:::i;:::-;5008:63;;4964:117;5120:2;5146:53;5191:7;5182:6;5171:9;5167:22;5146:53;:::i;:::-;5136:63;;5091:118;5276:2;5265:9;5261:18;5248:32;5307:18;5299:6;5296:30;5293:2;;;5339:1;5336;5329:12;5293:2;5367:78;5437:7;5428:6;5417:9;5413:22;5367:78;:::i;:::-;5357:88;;5219:236;5522:2;5511:9;5507:18;5494:32;5553:18;5545:6;5542:30;5539:2;;;5585:1;5582;5575:12;5539:2;5613:78;5683:7;5674:6;5663:9;5659:22;5613:78;:::i;:::-;5603:88;;5465:236;5768:3;5757:9;5753:19;5740:33;5800:18;5792:6;5789:30;5786:2;;;5832:1;5829;5822:12;5786:2;5860:62;5914:7;5905:6;5894:9;5890:22;5860:62;:::i;:::-;5850:72;;5711:221;4891:1048;;;;;;;;:::o;5945:955::-;6049:6;6057;6065;6073;6081;6130:3;6118:9;6109:7;6105:23;6101:33;6098:2;;;6147:1;6144;6137:12;6098:2;6190:1;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6161:117;6317:2;6343:53;6388:7;6379:6;6368:9;6364:22;6343:53;:::i;:::-;6333:63;;6288:118;6445:2;6471:53;6516:7;6507:6;6496:9;6492:22;6471:53;:::i;:::-;6461:63;;6416:118;6573:2;6599:53;6644:7;6635:6;6624:9;6620:22;6599:53;:::i;:::-;6589:63;;6544:118;6729:3;6718:9;6714:19;6701:33;6761:18;6753:6;6750:30;6747:2;;;6793:1;6790;6783:12;6747:2;6821:62;6875:7;6866:6;6855:9;6851:22;6821:62;:::i;:::-;6811:72;;6672:221;6088:812;;;;;;;;:::o;6906:838::-;7033:6;7041;7049;7098:2;7086:9;7077:7;7073:23;7069:32;7066:2;;;7114:1;7111;7104:12;7066:2;7157:1;7182:53;7227:7;7218:6;7207:9;7203:22;7182:53;:::i;:::-;7172:63;;7128:117;7312:2;7301:9;7297:18;7284:32;7343:18;7335:6;7332:30;7329:2;;;7375:1;7372;7365:12;7329:2;7403:78;7473:7;7464:6;7453:9;7449:22;7403:78;:::i;:::-;7393:88;;7255:236;7558:2;7547:9;7543:18;7530:32;7589:18;7581:6;7578:30;7575:2;;;7621:1;7618;7611:12;7575:2;7649:78;7719:7;7710:6;7699:9;7695:22;7649:78;:::i;:::-;7639:88;;7501:236;7056:688;;;;;:::o;7750:401::-;7815:6;7823;7872:2;7860:9;7851:7;7847:23;7843:32;7840:2;;;7888:1;7885;7878:12;7840:2;7931:1;7956:53;8001:7;7992:6;7981:9;7977:22;7956:53;:::i;:::-;7946:63;;7902:117;8058:2;8084:50;8126:7;8117:6;8106:9;8102:22;8084:50;:::i;:::-;8074:60;;8029:115;7830:321;;;;;:::o;8157:407::-;8225:6;8233;8282:2;8270:9;8261:7;8257:23;8253:32;8250:2;;;8298:1;8295;8288:12;8250:2;8341:1;8366:53;8411:7;8402:6;8391:9;8387:22;8366:53;:::i;:::-;8356:63;;8312:117;8468:2;8494:53;8539:7;8530:6;8519:9;8515:22;8494:53;:::i;:::-;8484:63;;8439:118;8240:324;;;;;:::o;8570:552::-;8647:6;8655;8663;8712:2;8700:9;8691:7;8687:23;8683:32;8680:2;;;8728:1;8725;8718:12;8680:2;8771:1;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8742:117;8898:2;8924:53;8969:7;8960:6;8949:9;8945:22;8924:53;:::i;:::-;8914:63;;8869:118;9026:2;9052:53;9097:7;9088:6;9077:9;9073:22;9052:53;:::i;:::-;9042:63;;8997:118;8670:452;;;;;:::o;9128:809::-;9223:6;9231;9239;9247;9296:3;9284:9;9275:7;9271:23;9267:33;9264:2;;;9313:1;9310;9303:12;9264:2;9356:1;9381:53;9426:7;9417:6;9406:9;9402:22;9381:53;:::i;:::-;9371:63;;9327:117;9483:2;9509:53;9554:7;9545:6;9534:9;9530:22;9509:53;:::i;:::-;9499:63;;9454:118;9611:2;9637:53;9682:7;9673:6;9662:9;9658:22;9637:53;:::i;:::-;9627:63;;9582:118;9767:2;9756:9;9752:18;9739:32;9798:18;9790:6;9787:30;9784:2;;;9830:1;9827;9820:12;9784:2;9858:62;9912:7;9903:6;9892:9;9888:22;9858:62;:::i;:::-;9848:72;;9710:220;9254:683;;;;;;;:::o;9943:693::-;10061:6;10069;10118:2;10106:9;10097:7;10093:23;10089:32;10086:2;;;10134:1;10131;10124:12;10086:2;10205:1;10194:9;10190:17;10177:31;10235:18;10227:6;10224:30;10221:2;;;10267:1;10264;10257:12;10221:2;10295:78;10365:7;10356:6;10345:9;10341:22;10295:78;:::i;:::-;10285:88;;10148:235;10450:2;10439:9;10435:18;10422:32;10481:18;10473:6;10470:30;10467:2;;;10513:1;10510;10503:12;10467:2;10541:78;10611:7;10602:6;10591:9;10587:22;10541:78;:::i;:::-;10531:88;;10393:236;10076:560;;;;;:::o;10642:952::-;10762:6;10770;10778;10786;10835:3;10823:9;10814:7;10810:23;10806:33;10803:2;;;10852:1;10849;10842:12;10803:2;10923:1;10912:9;10908:17;10895:31;10953:18;10945:6;10942:30;10939:2;;;10985:1;10982;10975:12;10939:2;11013:78;11083:7;11074:6;11063:9;11059:22;11013:78;:::i;:::-;11003:88;;10866:235;11140:2;11166:53;11211:7;11202:6;11191:9;11187:22;11166:53;:::i;:::-;11156:63;;11111:118;11268:2;11294:53;11339:7;11330:6;11319:9;11315:22;11294:53;:::i;:::-;11284:63;;11239:118;11424:2;11413:9;11409:18;11396:32;11455:18;11447:6;11444:30;11441:2;;;11487:1;11484;11477:12;11441:2;11515:62;11569:7;11560:6;11549:9;11545:22;11515:62;:::i;:::-;11505:72;;11367:220;10793:801;;;;;;;:::o;11600:260::-;11658:6;11707:2;11695:9;11686:7;11682:23;11678:32;11675:2;;;11723:1;11720;11713:12;11675:2;11766:1;11791:52;11835:7;11826:6;11815:9;11811:22;11791:52;:::i;:::-;11781:62;;11737:116;11665:195;;;;:::o;11866:282::-;11935:6;11984:2;11972:9;11963:7;11959:23;11955:32;11952:2;;;12000:1;11997;11990:12;11952:2;12043:1;12068:63;12123:7;12114:6;12103:9;12099:22;12068:63;:::i;:::-;12058:73;;12014:127;11942:206;;;;:::o;12154:375::-;12223:6;12272:2;12260:9;12251:7;12247:23;12243:32;12240:2;;;12288:1;12285;12278:12;12240:2;12359:1;12348:9;12344:17;12331:31;12389:18;12381:6;12378:30;12375:2;;;12421:1;12418;12411:12;12375:2;12449:63;12504:7;12495:6;12484:9;12480:22;12449:63;:::i;:::-;12439:73;;12302:220;12230:299;;;;:::o;12535:262::-;12594:6;12643:2;12631:9;12622:7;12618:23;12614:32;12611:2;;;12659:1;12656;12649:12;12611:2;12702:1;12727:53;12772:7;12763:6;12752:9;12748:22;12727:53;:::i;:::-;12717:63;;12673:117;12601:196;;;;:::o;12803:179::-;12872:10;12893:46;12935:3;12927:6;12893:46;:::i;:::-;12971:4;12966:3;12962:14;12948:28;;12883:99;;;;:::o;12988:118::-;13075:24;13093:5;13075:24;:::i;:::-;13070:3;13063:37;13053:53;;:::o;13142:732::-;13261:3;13290:54;13338:5;13290:54;:::i;:::-;13360:86;13439:6;13434:3;13360:86;:::i;:::-;13353:93;;13470:56;13520:5;13470:56;:::i;:::-;13549:7;13580:1;13565:284;13590:6;13587:1;13584:13;13565:284;;;13666:6;13660:13;13693:63;13752:3;13737:13;13693:63;:::i;:::-;13686:70;;13779:60;13832:6;13779:60;:::i;:::-;13769:70;;13625:224;13612:1;13609;13605:9;13600:14;;13565:284;;;13569:14;13865:3;13858:10;;13266:608;;;;;;;:::o;13880:109::-;13961:21;13976:5;13961:21;:::i;:::-;13956:3;13949:34;13939:50;;:::o;13995:360::-;14081:3;14109:38;14141:5;14109:38;:::i;:::-;14163:70;14226:6;14221:3;14163:70;:::i;:::-;14156:77;;14242:52;14287:6;14282:3;14275:4;14268:5;14264:16;14242:52;:::i;:::-;14319:29;14341:6;14319:29;:::i;:::-;14314:3;14310:39;14303:46;;14085:270;;;;;:::o;14361:364::-;14449:3;14477:39;14510:5;14477:39;:::i;:::-;14532:71;14596:6;14591:3;14532:71;:::i;:::-;14525:78;;14612:52;14657:6;14652:3;14645:4;14638:5;14634:16;14612:52;:::i;:::-;14689:29;14711:6;14689:29;:::i;:::-;14684:3;14680:39;14673:46;;14453:272;;;;;:::o;14731:366::-;14873:3;14894:67;14958:2;14953:3;14894:67;:::i;:::-;14887:74;;14970:93;15059:3;14970:93;:::i;:::-;15088:2;15083:3;15079:12;15072:19;;14877:220;;;:::o;15103:366::-;15245:3;15266:67;15330:2;15325:3;15266:67;:::i;:::-;15259:74;;15342:93;15431:3;15342:93;:::i;:::-;15460:2;15455:3;15451:12;15444:19;;15249:220;;;:::o;15475:366::-;15617:3;15638:67;15702:2;15697:3;15638:67;:::i;:::-;15631:74;;15714:93;15803:3;15714:93;:::i;:::-;15832:2;15827:3;15823:12;15816:19;;15621:220;;;:::o;15847:366::-;15989:3;16010:67;16074:2;16069:3;16010:67;:::i;:::-;16003:74;;16086:93;16175:3;16086:93;:::i;:::-;16204:2;16199:3;16195:12;16188:19;;15993:220;;;:::o;16219:366::-;16361:3;16382:67;16446:2;16441:3;16382:67;:::i;:::-;16375:74;;16458:93;16547:3;16458:93;:::i;:::-;16576:2;16571:3;16567:12;16560:19;;16365:220;;;:::o;16591:366::-;16733:3;16754:67;16818:2;16813:3;16754:67;:::i;:::-;16747:74;;16830:93;16919:3;16830:93;:::i;:::-;16948:2;16943:3;16939:12;16932:19;;16737:220;;;:::o;16963:366::-;17105:3;17126:67;17190:2;17185:3;17126:67;:::i;:::-;17119:74;;17202:93;17291:3;17202:93;:::i;:::-;17320:2;17315:3;17311:12;17304:19;;17109:220;;;:::o;17335:366::-;17477:3;17498:67;17562:2;17557:3;17498:67;:::i;:::-;17491:74;;17574:93;17663:3;17574:93;:::i;:::-;17692:2;17687:3;17683:12;17676:19;;17481:220;;;:::o;17707:366::-;17849:3;17870:67;17934:2;17929:3;17870:67;:::i;:::-;17863:74;;17946:93;18035:3;17946:93;:::i;:::-;18064:2;18059:3;18055:12;18048:19;;17853:220;;;:::o;18079:366::-;18221:3;18242:67;18306:2;18301:3;18242:67;:::i;:::-;18235:74;;18318:93;18407:3;18318:93;:::i;:::-;18436:2;18431:3;18427:12;18420:19;;18225:220;;;:::o;18451:366::-;18593:3;18614:67;18678:2;18673:3;18614:67;:::i;:::-;18607:74;;18690:93;18779:3;18690:93;:::i;:::-;18808:2;18803:3;18799:12;18792:19;;18597:220;;;:::o;18823:366::-;18965:3;18986:67;19050:2;19045:3;18986:67;:::i;:::-;18979:74;;19062:93;19151:3;19062:93;:::i;:::-;19180:2;19175:3;19171:12;19164:19;;18969:220;;;:::o;19195:366::-;19337:3;19358:67;19422:2;19417:3;19358:67;:::i;:::-;19351:74;;19434:93;19523:3;19434:93;:::i;:::-;19552:2;19547:3;19543:12;19536:19;;19341:220;;;:::o;19567:366::-;19709:3;19730:67;19794:2;19789:3;19730:67;:::i;:::-;19723:74;;19806:93;19895:3;19806:93;:::i;:::-;19924:2;19919:3;19915:12;19908:19;;19713:220;;;:::o;19939:366::-;20081:3;20102:67;20166:2;20161:3;20102:67;:::i;:::-;20095:74;;20178:93;20267:3;20178:93;:::i;:::-;20296:2;20291:3;20287:12;20280:19;;20085:220;;;:::o;20311:108::-;20388:24;20406:5;20388:24;:::i;:::-;20383:3;20376:37;20366:53;;:::o;20425:118::-;20512:24;20530:5;20512:24;:::i;:::-;20507:3;20500:37;20490:53;;:::o;20549:222::-;20642:4;20680:2;20669:9;20665:18;20657:26;;20693:71;20761:1;20750:9;20746:17;20737:6;20693:71;:::i;:::-;20647:124;;;;:::o;20777:1053::-;21100:4;21138:3;21127:9;21123:19;21115:27;;21152:71;21220:1;21209:9;21205:17;21196:6;21152:71;:::i;:::-;21233:72;21301:2;21290:9;21286:18;21277:6;21233:72;:::i;:::-;21352:9;21346:4;21342:20;21337:2;21326:9;21322:18;21315:48;21380:108;21483:4;21474:6;21380:108;:::i;:::-;21372:116;;21535:9;21529:4;21525:20;21520:2;21509:9;21505:18;21498:48;21563:108;21666:4;21657:6;21563:108;:::i;:::-;21555:116;;21719:9;21713:4;21709:20;21703:3;21692:9;21688:19;21681:49;21747:76;21818:4;21809:6;21747:76;:::i;:::-;21739:84;;21105:725;;;;;;;;:::o;21836:751::-;22059:4;22097:3;22086:9;22082:19;22074:27;;22111:71;22179:1;22168:9;22164:17;22155:6;22111:71;:::i;:::-;22192:72;22260:2;22249:9;22245:18;22236:6;22192:72;:::i;:::-;22274;22342:2;22331:9;22327:18;22318:6;22274:72;:::i;:::-;22356;22424:2;22413:9;22409:18;22400:6;22356:72;:::i;:::-;22476:9;22470:4;22466:20;22460:3;22449:9;22445:19;22438:49;22504:76;22575:4;22566:6;22504:76;:::i;:::-;22496:84;;22064:523;;;;;;;;:::o;22593:373::-;22736:4;22774:2;22763:9;22759:18;22751:26;;22823:9;22817:4;22813:20;22809:1;22798:9;22794:17;22787:47;22851:108;22954:4;22945:6;22851:108;:::i;:::-;22843:116;;22741:225;;;;:::o;22972:634::-;23193:4;23231:2;23220:9;23216:18;23208:26;;23280:9;23274:4;23270:20;23266:1;23255:9;23251:17;23244:47;23308:108;23411:4;23402:6;23308:108;:::i;:::-;23300:116;;23463:9;23457:4;23453:20;23448:2;23437:9;23433:18;23426:48;23491:108;23594:4;23585:6;23491:108;:::i;:::-;23483:116;;23198:408;;;;;:::o;23612:210::-;23699:4;23737:2;23726:9;23722:18;23714:26;;23750:65;23812:1;23801:9;23797:17;23788:6;23750:65;:::i;:::-;23704:118;;;;:::o;23828:313::-;23941:4;23979:2;23968:9;23964:18;23956:26;;24028:9;24022:4;24018:20;24014:1;24003:9;23999:17;23992:47;24056:78;24129:4;24120:6;24056:78;:::i;:::-;24048:86;;23946:195;;;;:::o;24147:419::-;24313:4;24351:2;24340:9;24336:18;24328:26;;24400:9;24394:4;24390:20;24386:1;24375:9;24371:17;24364:47;24428:131;24554:4;24428:131;:::i;:::-;24420:139;;24318:248;;;:::o;24572:419::-;24738:4;24776:2;24765:9;24761:18;24753:26;;24825:9;24819:4;24815:20;24811:1;24800:9;24796:17;24789:47;24853:131;24979:4;24853:131;:::i;:::-;24845:139;;24743:248;;;:::o;24997:419::-;25163:4;25201:2;25190:9;25186:18;25178:26;;25250:9;25244:4;25240:20;25236:1;25225:9;25221:17;25214:47;25278:131;25404:4;25278:131;:::i;:::-;25270:139;;25168:248;;;:::o;25422:419::-;25588:4;25626:2;25615:9;25611:18;25603:26;;25675:9;25669:4;25665:20;25661:1;25650:9;25646:17;25639:47;25703:131;25829:4;25703:131;:::i;:::-;25695:139;;25593:248;;;:::o;25847:419::-;26013:4;26051:2;26040:9;26036:18;26028:26;;26100:9;26094:4;26090:20;26086:1;26075:9;26071:17;26064:47;26128:131;26254:4;26128:131;:::i;:::-;26120:139;;26018:248;;;:::o;26272:419::-;26438:4;26476:2;26465:9;26461:18;26453:26;;26525:9;26519:4;26515:20;26511:1;26500:9;26496:17;26489:47;26553:131;26679:4;26553:131;:::i;:::-;26545:139;;26443:248;;;:::o;26697:419::-;26863:4;26901:2;26890:9;26886:18;26878:26;;26950:9;26944:4;26940:20;26936:1;26925:9;26921:17;26914:47;26978:131;27104:4;26978:131;:::i;:::-;26970:139;;26868:248;;;:::o;27122:419::-;27288:4;27326:2;27315:9;27311:18;27303:26;;27375:9;27369:4;27365:20;27361:1;27350:9;27346:17;27339:47;27403:131;27529:4;27403:131;:::i;:::-;27395:139;;27293:248;;;:::o;27547:419::-;27713:4;27751:2;27740:9;27736:18;27728:26;;27800:9;27794:4;27790:20;27786:1;27775:9;27771:17;27764:47;27828:131;27954:4;27828:131;:::i;:::-;27820:139;;27718:248;;;:::o;27972:419::-;28138:4;28176:2;28165:9;28161:18;28153:26;;28225:9;28219:4;28215:20;28211:1;28200:9;28196:17;28189:47;28253:131;28379:4;28253:131;:::i;:::-;28245:139;;28143:248;;;:::o;28397:419::-;28563:4;28601:2;28590:9;28586:18;28578:26;;28650:9;28644:4;28640:20;28636:1;28625:9;28621:17;28614:47;28678:131;28804:4;28678:131;:::i;:::-;28670:139;;28568:248;;;:::o;28822:419::-;28988:4;29026:2;29015:9;29011:18;29003:26;;29075:9;29069:4;29065:20;29061:1;29050:9;29046:17;29039:47;29103:131;29229:4;29103:131;:::i;:::-;29095:139;;28993:248;;;:::o;29247:419::-;29413:4;29451:2;29440:9;29436:18;29428:26;;29500:9;29494:4;29490:20;29486:1;29475:9;29471:17;29464:47;29528:131;29654:4;29528:131;:::i;:::-;29520:139;;29418:248;;;:::o;29672:419::-;29838:4;29876:2;29865:9;29861:18;29853:26;;29925:9;29919:4;29915:20;29911:1;29900:9;29896:17;29889:47;29953:131;30079:4;29953:131;:::i;:::-;29945:139;;29843:248;;;:::o;30097:419::-;30263:4;30301:2;30290:9;30286:18;30278:26;;30350:9;30344:4;30340:20;30336:1;30325:9;30321:17;30314:47;30378:131;30504:4;30378:131;:::i;:::-;30370:139;;30268:248;;;:::o;30522:222::-;30615:4;30653:2;30642:9;30638:18;30630:26;;30666:71;30734:1;30723:9;30719:17;30710:6;30666:71;:::i;:::-;30620:124;;;;:::o;30750:332::-;30871:4;30909:2;30898:9;30894:18;30886:26;;30922:71;30990:1;30979:9;30975:17;30966:6;30922:71;:::i;:::-;31003:72;31071:2;31060:9;31056:18;31047:6;31003:72;:::i;:::-;30876:206;;;;;:::o;31088:129::-;31122:6;31149:20;;:::i;:::-;31139:30;;31178:33;31206:4;31198:6;31178:33;:::i;:::-;31129:88;;;:::o;31223:75::-;31256:6;31289:2;31283:9;31273:19;;31263:35;:::o;31304:311::-;31381:4;31471:18;31463:6;31460:30;31457:2;;;31493:18;;:::i;:::-;31457:2;31543:4;31535:6;31531:17;31523:25;;31603:4;31597;31593:15;31585:23;;31386:229;;;:::o;31621:311::-;31698:4;31788:18;31780:6;31777:30;31774:2;;;31810:18;;:::i;:::-;31774:2;31860:4;31852:6;31848:17;31840:25;;31920:4;31914;31910:15;31902:23;;31703:229;;;:::o;31938:307::-;31999:4;32089:18;32081:6;32078:30;32075:2;;;32111:18;;:::i;:::-;32075:2;32149:29;32171:6;32149:29;:::i;:::-;32141:37;;32233:4;32227;32223:15;32215:23;;32004:241;;;:::o;32251:308::-;32313:4;32403:18;32395:6;32392:30;32389:2;;;32425:18;;:::i;:::-;32389:2;32463:29;32485:6;32463:29;:::i;:::-;32455:37;;32547:4;32541;32537:15;32529:23;;32318:241;;;:::o;32565:132::-;32632:4;32655:3;32647:11;;32685:4;32680:3;32676:14;32668:22;;32637:60;;;:::o;32703:114::-;32770:6;32804:5;32798:12;32788:22;;32777:40;;;:::o;32823:98::-;32874:6;32908:5;32902:12;32892:22;;32881:40;;;:::o;32927:99::-;32979:6;33013:5;33007:12;32997:22;;32986:40;;;:::o;33032:113::-;33102:4;33134;33129:3;33125:14;33117:22;;33107:38;;;:::o;33151:184::-;33250:11;33284:6;33279:3;33272:19;33324:4;33319:3;33315:14;33300:29;;33262:73;;;;:::o;33341:168::-;33424:11;33458:6;33453:3;33446:19;33498:4;33493:3;33489:14;33474:29;;33436:73;;;;:::o;33515:169::-;33599:11;33633:6;33628:3;33621:19;33673:4;33668:3;33664:14;33649:29;;33611:73;;;;:::o;33690:305::-;33730:3;33749:20;33767:1;33749:20;:::i;:::-;33744:25;;33783:20;33801:1;33783:20;:::i;:::-;33778:25;;33937:1;33869:66;33865:74;33862:1;33859:81;33856:2;;;33943:18;;:::i;:::-;33856:2;33987:1;33984;33980:9;33973:16;;33734:261;;;;:::o;34001:96::-;34038:7;34067:24;34085:5;34067:24;:::i;:::-;34056:35;;34046:51;;;:::o;34103:90::-;34137:7;34180:5;34173:13;34166:21;34155:32;;34145:48;;;:::o;34199:149::-;34235:7;34275:66;34268:5;34264:78;34253:89;;34243:105;;;:::o;34354:126::-;34391:7;34431:42;34424:5;34420:54;34409:65;;34399:81;;;:::o;34486:77::-;34523:7;34552:5;34541:16;;34531:32;;;:::o;34569:154::-;34653:6;34648:3;34643;34630:30;34715:1;34706:6;34701:3;34697:16;34690:27;34620:103;;;:::o;34729:307::-;34797:1;34807:113;34821:6;34818:1;34815:13;34807:113;;;34906:1;34901:3;34897:11;34891:18;34887:1;34882:3;34878:11;34871:39;34843:2;34840:1;34836:10;34831:15;;34807:113;;;34938:6;34935:1;34932:13;34929:2;;;35018:1;35009:6;35004:3;35000:16;34993:27;34929:2;34778:258;;;;:::o;35042:320::-;35086:6;35123:1;35117:4;35113:12;35103:22;;35170:1;35164:4;35160:12;35191:18;35181:2;;35247:4;35239:6;35235:17;35225:27;;35181:2;35309;35301:6;35298:14;35278:18;35275:38;35272:2;;;35328:18;;:::i;:::-;35272:2;35093:269;;;;:::o;35368:281::-;35451:27;35473:4;35451:27;:::i;:::-;35443:6;35439:40;35581:6;35569:10;35566:22;35545:18;35533:10;35530:34;35527:62;35524:2;;;35592:18;;:::i;:::-;35524:2;35632:10;35628:2;35621:22;35411:238;;;:::o;35655:233::-;35694:3;35717:24;35735:5;35717:24;:::i;:::-;35708:33;;35763:66;35756:5;35753:77;35750:2;;;35833:18;;:::i;:::-;35750:2;35880:1;35873:5;35869:13;35862:20;;35698:190;;;:::o;35894:180::-;35942:77;35939:1;35932:88;36039:4;36036:1;36029:15;36063:4;36060:1;36053:15;36080:180;36128:77;36125:1;36118:88;36225:4;36222:1;36215:15;36249:4;36246:1;36239:15;36266:180;36314:77;36311:1;36304:88;36411:4;36408:1;36401:15;36435:4;36432:1;36425:15;36452:183;36487:3;36525:1;36507:16;36504:23;36501:2;;;36563:1;36560;36557;36542:23;36585:34;36616:1;36610:8;36585:34;:::i;:::-;36578:41;;36501:2;36491:144;:::o;36641:102::-;36682:6;36733:2;36729:7;36724:2;36717:5;36713:14;36709:28;36699:38;;36689:54;;;:::o;36749:106::-;36793:8;36842:5;36837:3;36833:15;36812:36;;36802:53;;;:::o;36861:239::-;37001:34;36997:1;36989:6;36985:14;36978:58;37070:22;37065:2;37057:6;37053:15;37046:47;36967:133;:::o;37106:234::-;37246:34;37242:1;37234:6;37230:14;37223:58;37315:17;37310:2;37302:6;37298:15;37291:42;37212:128;:::o;37346:227::-;37486:34;37482:1;37474:6;37470:14;37463:58;37555:10;37550:2;37542:6;37538:15;37531:35;37452:121;:::o;37579:225::-;37719:34;37715:1;37707:6;37703:14;37696:58;37788:8;37783:2;37775:6;37771:15;37764:33;37685:119;:::o;37810:223::-;37950:34;37946:1;37938:6;37934:14;37927:58;38019:6;38014:2;38006:6;38002:15;37995:31;37916:117;:::o;38039:229::-;38179:34;38175:1;38167:6;38163:14;38156:58;38248:12;38243:2;38235:6;38231:15;38224:37;38145:123;:::o;38274:224::-;38414:34;38410:1;38402:6;38398:14;38391:58;38483:7;38478:2;38470:6;38466:15;38459:32;38380:118;:::o;38504:222::-;38644:34;38640:1;38632:6;38628:14;38621:58;38713:5;38708:2;38700:6;38696:15;38689:30;38610:116;:::o;38732:229::-;38872:34;38868:1;38860:6;38856:14;38849:58;38941:12;38936:2;38928:6;38924:15;38917:37;38838:123;:::o;38967:182::-;39107:34;39103:1;39095:6;39091:14;39084:58;39073:76;:::o;39155:227::-;39295:34;39291:1;39283:6;39279:14;39272:58;39364:10;39359:2;39351:6;39347:15;39340:35;39261:121;:::o;39388:228::-;39528:34;39524:1;39516:6;39512:14;39505:58;39597:11;39592:2;39584:6;39580:15;39573:36;39494:122;:::o;39622:228::-;39762:34;39758:1;39750:6;39746:14;39739:58;39831:11;39826:2;39818:6;39814:15;39807:36;39728:122;:::o;39856:227::-;39996:34;39992:1;39984:6;39980:14;39973:58;40065:10;40060:2;40052:6;40048:15;40041:35;39962:121;:::o;40089:220::-;40229:34;40225:1;40217:6;40213:14;40206:58;40298:3;40293:2;40285:6;40281:15;40274:28;40195:114;:::o;40315:711::-;40354:3;40392:4;40374:16;40371:26;40368:2;;;40400:5;;40368:2;40429:20;;:::i;:::-;40504:1;40486:16;40482:24;40479:1;40473:4;40458:49;40537:4;40531:11;40636:16;40629:4;40621:6;40617:17;40614:39;40581:18;40573:6;40570:30;40554:113;40551:2;;;40682:5;;;;40551:2;40728:6;40722:4;40718:17;40764:3;40758:10;40791:18;40783:6;40780:30;40777:2;;;40813:5;;;;;;40777:2;40861:6;40854:4;40849:3;40845:14;40841:27;40920:1;40902:16;40898:24;40892:4;40888:35;40883:3;40880:44;40877:2;;;40927:5;;;;;;;40877:2;40944:57;40992:6;40986:4;40982:17;40974:6;40970:30;40964:4;40944:57;:::i;:::-;41017:3;41010:10;;40358:668;;;;;;;:::o;41032:122::-;41105:24;41123:5;41105:24;:::i;:::-;41098:5;41095:35;41085:2;;41144:1;41141;41134:12;41085:2;41075:79;:::o;41160:116::-;41230:21;41245:5;41230:21;:::i;:::-;41223:5;41220:32;41210:2;;41266:1;41263;41256:12;41210:2;41200:76;:::o;41282:120::-;41354:23;41371:5;41354:23;:::i;:::-;41347:5;41344:34;41334:2;;41392:1;41389;41382:12;41334:2;41324:78;:::o;41408:122::-;41481:24;41499:5;41481:24;:::i;:::-;41474:5;41471:35;41461:2;;41520:1;41517;41510:12;41461:2;41451:79;:::o
Swarm Source
ipfs://15aa153c4fe37869bdd871871e2725ae0e8705008a301f5ba982ea4b59a01bb7
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.