Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 128 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 19602496 | 290 days ago | IN | 0 ETH | 0.00036039 | ||||
Set Approval For... | 19125610 | 357 days ago | IN | 0 ETH | 0.00051628 | ||||
Set Approval For... | 19125609 | 357 days ago | IN | 0 ETH | 0.00051131 | ||||
Set Approval For... | 19125602 | 357 days ago | IN | 0 ETH | 0.00047693 | ||||
Set Approval For... | 16655438 | 704 days ago | IN | 0 ETH | 0.00197429 | ||||
Set Approval For... | 16552246 | 718 days ago | IN | 0 ETH | 0.0009658 | ||||
Set Approval For... | 16546823 | 719 days ago | IN | 0 ETH | 0.00106787 | ||||
Set Approval For... | 16421066 | 737 days ago | IN | 0 ETH | 0.0013479 | ||||
Safe Transfer Fr... | 16349197 | 747 days ago | IN | 0 ETH | 0.00194605 | ||||
Set Approval For... | 16297310 | 754 days ago | IN | 0 ETH | 0.0015439 | ||||
Set Approval For... | 16150827 | 774 days ago | IN | 0 ETH | 0.00068092 | ||||
Safe Transfer Fr... | 16034174 | 791 days ago | IN | 0 ETH | 0.00075816 | ||||
Safe Transfer Fr... | 16034171 | 791 days ago | IN | 0 ETH | 0.00080676 | ||||
Set Approval For... | 15824657 | 820 days ago | IN | 0 ETH | 0.00048113 | ||||
Set Approval For... | 15808092 | 822 days ago | IN | 0 ETH | 0.00056539 | ||||
Set Approval For... | 15744850 | 831 days ago | IN | 0 ETH | 0.00064365 | ||||
Set Approval For... | 15700457 | 837 days ago | IN | 0 ETH | 0.00034318 | ||||
Set Approval For... | 15679239 | 840 days ago | IN | 0 ETH | 0.00035141 | ||||
Set Approval For... | 15676150 | 841 days ago | IN | 0 ETH | 0.00115952 | ||||
Set Approval For... | 15645840 | 845 days ago | IN | 0 ETH | 0.00036034 | ||||
Set Approval For... | 15644242 | 845 days ago | IN | 0 ETH | 0.00051343 | ||||
Set Approval For... | 15629078 | 847 days ago | IN | 0 ETH | 0.00057655 | ||||
Set Approval For... | 15624259 | 848 days ago | IN | 0 ETH | 0.00048164 | ||||
Set Approval For... | 15608868 | 850 days ago | IN | 0 ETH | 0.00029211 | ||||
Set Approval For... | 15590032 | 853 days ago | IN | 0 ETH | 0.00073235 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MIBQ
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-24 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 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: contracts/1155Test.sol pragma solidity ^0.8.4; contract MIBQ is ERC1155, Ownable { constructor() ERC1155("ipfs://QmXMmxfiwwsNqg4APyDM9Ydk4szLLHGSrkCVQcg7AWwQLd/{id}.json") {} 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 mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(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":"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":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","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":[{"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
60806040523480156200001157600080fd5b506040518060600160405280603f815260200162003578603f91396200003d816200006460201b60201c565b506200005e620000526200008060201b60201c565b6200008860201b60201c565b62000263565b80600290805190602001906200007c9291906200014e565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200015c90620001fe565b90600052602060002090601f016020900481019282620001805760008555620001cc565b82601f106200019b57805160ff1916838001178555620001cc565b82800160010185558215620001cc579182015b82811115620001cb578251825591602001919060010190620001ae565b5b509050620001db9190620001df565b5090565b5b80821115620001fa576000816000905550600101620001e0565b5090565b600060028204905060018216806200021757607f821691505b602082108114156200022e576200022d62000234565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61330580620002736000396000f3fe608060405234801561001057600080fd5b50600436106100e95760003560e01c8063715018a61161008c578063a22cb46511610066578063a22cb46514610246578063e985e9c514610262578063f242432a14610292578063f2fde38b146102ae576100e9565b8063715018a614610202578063731133e91461020c5780638da5cb5b14610228576100e9565b80630e89341c116100c85780630e89341c1461016a5780631f7fdffa1461019a5780632eb2c2d6146101b65780634e1273f4146101d2576100e9565b8062fdd58e146100ee57806301ffc9a71461011e57806302fe53051461014e575b600080fd5b61010860048036038101906101039190612228565b6102ca565b60405161011591906129ee565b60405180910390f35b61013860048036038101906101339190612363565b610393565b6040516101459190612831565b60405180910390f35b610168600480360381019061016391906123bd565b610475565b005b610184600480360381019061017f9190612406565b6104fd565b604051610191919061284c565b60405180910390f35b6101b460048036038101906101af919061212d565b610591565b005b6101d060048036038101906101cb9190611fc7565b61061f565b005b6101ec60048036038101906101e791906122eb565b6106c0565b6040516101f991906127d8565b60405180910390f35b61020a6107d9565b005b61022660048036038101906102219190612268565b610861565b005b6102306108ef565b60405161023d91906126fb565b60405180910390f35b610260600480360381019061025b91906121e8565b610919565b005b61027c60048036038101906102779190611f87565b61092f565b6040516102899190612831565b60405180910390f35b6102ac60048036038101906102a79190612096565b6109c3565b005b6102c860048036038101906102c39190611f5a565b610a64565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561033b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610332906128ee565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046e575061046d82610b5c565b5b9050919050565b61047d610bc6565b73ffffffffffffffffffffffffffffffffffffffff1661049b6108ef565b73ffffffffffffffffffffffffffffffffffffffff16146104f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e89061294e565b60405180910390fd5b6104fa81610bce565b50565b60606002805461050c90612c8e565b80601f016020809104026020016040519081016040528092919081815260200182805461053890612c8e565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050509050919050565b610599610bc6565b73ffffffffffffffffffffffffffffffffffffffff166105b76108ef565b73ffffffffffffffffffffffffffffffffffffffff161461060d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106049061294e565b60405180910390fd5b61061984848484610be8565b50505050565b610627610bc6565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061066d575061066c85610667610bc6565b61092f565b5b6106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a39061288e565b60405180910390fd5b6106b98585858585610e15565b5050505050565b60608151835114610706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fd9061298e565b60405180910390fd5b6000835167ffffffffffffffff81111561072357610722612dc7565b5b6040519080825280602002602001820160405280156107515781602001602082028036833780820191505090505b50905060005b84518110156107ce5761079e85828151811061077657610775612d98565b5b602002602001015185838151811061079157610790612d98565b5b60200260200101516102ca565b8282815181106107b1576107b0612d98565b5b602002602001018181525050806107c790612cf1565b9050610757565b508091505092915050565b6107e1610bc6565b73ffffffffffffffffffffffffffffffffffffffff166107ff6108ef565b73ffffffffffffffffffffffffffffffffffffffff1614610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c9061294e565b60405180910390fd5b61085f6000611137565b565b610869610bc6565b73ffffffffffffffffffffffffffffffffffffffff166108876108ef565b73ffffffffffffffffffffffffffffffffffffffff16146108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d49061294e565b60405180910390fd5b6108e9848484846111fd565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61092b610924610bc6565b83836113ae565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6109cb610bc6565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a115750610a1085610a0b610bc6565b61092f565b5b610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a479061288e565b60405180910390fd5b610a5d858585858561151b565b5050505050565b610a6c610bc6565b73ffffffffffffffffffffffffffffffffffffffff16610a8a6108ef565b73ffffffffffffffffffffffffffffffffffffffff1614610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad79061294e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b47906128ce565b60405180910390fd5b610b5981611137565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190610be4929190611c32565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f906129ce565b60405180910390fd5b8151835114610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c93906129ae565b60405180910390fd5b6000610ca6610bc6565b9050610cb7816000878787876117b7565b60005b8451811015610d7057838181518110610cd657610cd5612d98565b5b6020026020010151600080878481518110610cf457610cf3612d98565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d569190612b82565b925050819055508080610d6890612cf1565b915050610cba565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610de89291906127fa565b60405180910390a4610dff816000878787876117bf565b610e0e816000878787876117c7565b5050505050565b8151835114610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e50906129ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec09061290e565b60405180910390fd5b6000610ed3610bc6565b9050610ee38187878787876117b7565b60005b8451811015611094576000858281518110610f0457610f03612d98565b5b602002602001015190506000858381518110610f2357610f22612d98565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb9061292e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110799190612b82565b925050819055505050508061108d90612cf1565b9050610ee6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161110b9291906127fa565b60405180910390a46111218187878787876117bf565b61112f8187878787876117c7565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561126d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611264906129ce565b60405180910390fd5b6000611277610bc6565b90506000611284856119ae565b90506000611291856119ae565b90506112a2836000898585896117b7565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113019190612b82565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161137f929190612a09565b60405180910390a4611396836000898585896117bf565b6113a583600089898989611a28565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114149061296e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161150e9190612831565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561158b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115829061290e565b60405180910390fd5b6000611595610bc6565b905060006115a2856119ae565b905060006115af856119ae565b90506115bf8389898585896117b7565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d9061292e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461170b9190612b82565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611788929190612a09565b60405180910390a461179e848a8a86868a6117bf565b6117ac848a8a8a8a8a611a28565b505050505050505050565b505050505050565b505050505050565b6117e68473ffffffffffffffffffffffffffffffffffffffff16611c0f565b156119a6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161182c959493929190612716565b602060405180830381600087803b15801561184657600080fd5b505af192505050801561187757506040513d601f19601f820116820180604052508101906118749190612390565b60015b61191d57611883612df6565b806308c379a014156118e057506118986131dd565b806118a357506118e2565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d7919061284c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119149061286e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b906128ae565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156119cd576119cc612dc7565b5b6040519080825280602002602001820160405280156119fb5781602001602082028036833780820191505090505b5090508281600081518110611a1357611a12612d98565b5b60200260200101818152505080915050919050565b611a478473ffffffffffffffffffffffffffffffffffffffff16611c0f565b15611c07578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a8d95949392919061277e565b602060405180830381600087803b158015611aa757600080fd5b505af1925050508015611ad857506040513d601f19601f82011682018060405250810190611ad59190612390565b60015b611b7e57611ae4612df6565b806308c379a01415611b415750611af96131dd565b80611b045750611b43565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38919061284c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b759061286e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc906128ae565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611c3e90612c8e565b90600052602060002090601f016020900481019282611c605760008555611ca7565b82601f10611c7957805160ff1916838001178555611ca7565b82800160010185558215611ca7579182015b82811115611ca6578251825591602001919060010190611c8b565b5b509050611cb49190611cb8565b5090565b5b80821115611cd1576000816000905550600101611cb9565b5090565b6000611ce8611ce384612a57565b612a32565b90508083825260208201905082856020860282011115611d0b57611d0a612e1d565b5b60005b85811015611d3b5781611d218882611e39565b845260208401935060208301925050600181019050611d0e565b5050509392505050565b6000611d58611d5384612a83565b612a32565b90508083825260208201905082856020860282011115611d7b57611d7a612e1d565b5b60005b85811015611dab5781611d918882611f45565b845260208401935060208301925050600181019050611d7e565b5050509392505050565b6000611dc8611dc384612aaf565b612a32565b905082815260208101848484011115611de457611de3612e22565b5b611def848285612c4c565b509392505050565b6000611e0a611e0584612ae0565b612a32565b905082815260208101848484011115611e2657611e25612e22565b5b611e31848285612c4c565b509392505050565b600081359050611e4881613273565b92915050565b600082601f830112611e6357611e62612e18565b5b8135611e73848260208601611cd5565b91505092915050565b600082601f830112611e9157611e90612e18565b5b8135611ea1848260208601611d45565b91505092915050565b600081359050611eb98161328a565b92915050565b600081359050611ece816132a1565b92915050565b600081519050611ee3816132a1565b92915050565b600082601f830112611efe57611efd612e18565b5b8135611f0e848260208601611db5565b91505092915050565b600082601f830112611f2c57611f2b612e18565b5b8135611f3c848260208601611df7565b91505092915050565b600081359050611f54816132b8565b92915050565b600060208284031215611f7057611f6f612e2c565b5b6000611f7e84828501611e39565b91505092915050565b60008060408385031215611f9e57611f9d612e2c565b5b6000611fac85828601611e39565b9250506020611fbd85828601611e39565b9150509250929050565b600080600080600060a08688031215611fe357611fe2612e2c565b5b6000611ff188828901611e39565b955050602061200288828901611e39565b945050604086013567ffffffffffffffff81111561202357612022612e27565b5b61202f88828901611e7c565b935050606086013567ffffffffffffffff8111156120505761204f612e27565b5b61205c88828901611e7c565b925050608086013567ffffffffffffffff81111561207d5761207c612e27565b5b61208988828901611ee9565b9150509295509295909350565b600080600080600060a086880312156120b2576120b1612e2c565b5b60006120c088828901611e39565b95505060206120d188828901611e39565b94505060406120e288828901611f45565b93505060606120f388828901611f45565b925050608086013567ffffffffffffffff81111561211457612113612e27565b5b61212088828901611ee9565b9150509295509295909350565b6000806000806080858703121561214757612146612e2c565b5b600061215587828801611e39565b945050602085013567ffffffffffffffff81111561217657612175612e27565b5b61218287828801611e7c565b935050604085013567ffffffffffffffff8111156121a3576121a2612e27565b5b6121af87828801611e7c565b925050606085013567ffffffffffffffff8111156121d0576121cf612e27565b5b6121dc87828801611ee9565b91505092959194509250565b600080604083850312156121ff576121fe612e2c565b5b600061220d85828601611e39565b925050602061221e85828601611eaa565b9150509250929050565b6000806040838503121561223f5761223e612e2c565b5b600061224d85828601611e39565b925050602061225e85828601611f45565b9150509250929050565b6000806000806080858703121561228257612281612e2c565b5b600061229087828801611e39565b94505060206122a187828801611f45565b93505060406122b287828801611f45565b925050606085013567ffffffffffffffff8111156122d3576122d2612e27565b5b6122df87828801611ee9565b91505092959194509250565b6000806040838503121561230257612301612e2c565b5b600083013567ffffffffffffffff8111156123205761231f612e27565b5b61232c85828601611e4e565b925050602083013567ffffffffffffffff81111561234d5761234c612e27565b5b61235985828601611e7c565b9150509250929050565b60006020828403121561237957612378612e2c565b5b600061238784828501611ebf565b91505092915050565b6000602082840312156123a6576123a5612e2c565b5b60006123b484828501611ed4565b91505092915050565b6000602082840312156123d3576123d2612e2c565b5b600082013567ffffffffffffffff8111156123f1576123f0612e27565b5b6123fd84828501611f17565b91505092915050565b60006020828403121561241c5761241b612e2c565b5b600061242a84828501611f45565b91505092915050565b600061243f83836126dd565b60208301905092915050565b61245481612bd8565b82525050565b600061246582612b21565b61246f8185612b4f565b935061247a83612b11565b8060005b838110156124ab5781516124928882612433565b975061249d83612b42565b92505060018101905061247e565b5085935050505092915050565b6124c181612bea565b82525050565b60006124d282612b2c565b6124dc8185612b60565b93506124ec818560208601612c5b565b6124f581612e31565b840191505092915050565b600061250b82612b37565b6125158185612b71565b9350612525818560208601612c5b565b61252e81612e31565b840191505092915050565b6000612546603483612b71565b915061255182612e4f565b604082019050919050565b6000612569602f83612b71565b915061257482612e9e565b604082019050919050565b600061258c602883612b71565b915061259782612eed565b604082019050919050565b60006125af602683612b71565b91506125ba82612f3c565b604082019050919050565b60006125d2602a83612b71565b91506125dd82612f8b565b604082019050919050565b60006125f5602583612b71565b915061260082612fda565b604082019050919050565b6000612618602a83612b71565b915061262382613029565b604082019050919050565b600061263b602083612b71565b915061264682613078565b602082019050919050565b600061265e602983612b71565b9150612669826130a1565b604082019050919050565b6000612681602983612b71565b915061268c826130f0565b604082019050919050565b60006126a4602883612b71565b91506126af8261313f565b604082019050919050565b60006126c7602183612b71565b91506126d28261318e565b604082019050919050565b6126e681612c42565b82525050565b6126f581612c42565b82525050565b6000602082019050612710600083018461244b565b92915050565b600060a08201905061272b600083018861244b565b612738602083018761244b565b818103604083015261274a818661245a565b9050818103606083015261275e818561245a565b9050818103608083015261277281846124c7565b90509695505050505050565b600060a082019050612793600083018861244b565b6127a0602083018761244b565b6127ad60408301866126ec565b6127ba60608301856126ec565b81810360808301526127cc81846124c7565b90509695505050505050565b600060208201905081810360008301526127f2818461245a565b905092915050565b60006040820190508181036000830152612814818561245a565b90508181036020830152612828818461245a565b90509392505050565b600060208201905061284660008301846124b8565b92915050565b600060208201905081810360008301526128668184612500565b905092915050565b6000602082019050818103600083015261288781612539565b9050919050565b600060208201905081810360008301526128a78161255c565b9050919050565b600060208201905081810360008301526128c78161257f565b9050919050565b600060208201905081810360008301526128e7816125a2565b9050919050565b60006020820190508181036000830152612907816125c5565b9050919050565b60006020820190508181036000830152612927816125e8565b9050919050565b600060208201905081810360008301526129478161260b565b9050919050565b600060208201905081810360008301526129678161262e565b9050919050565b6000602082019050818103600083015261298781612651565b9050919050565b600060208201905081810360008301526129a781612674565b9050919050565b600060208201905081810360008301526129c781612697565b9050919050565b600060208201905081810360008301526129e7816126ba565b9050919050565b6000602082019050612a0360008301846126ec565b92915050565b6000604082019050612a1e60008301856126ec565b612a2b60208301846126ec565b9392505050565b6000612a3c612a4d565b9050612a488282612cc0565b919050565b6000604051905090565b600067ffffffffffffffff821115612a7257612a71612dc7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a9e57612a9d612dc7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612aca57612ac9612dc7565b5b612ad382612e31565b9050602081019050919050565b600067ffffffffffffffff821115612afb57612afa612dc7565b5b612b0482612e31565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b8d82612c42565b9150612b9883612c42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bcd57612bcc612d3a565b5b828201905092915050565b6000612be382612c22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612c79578082015181840152602081019050612c5e565b83811115612c88576000848401525b50505050565b60006002820490506001821680612ca657607f821691505b60208210811415612cba57612cb9612d69565b5b50919050565b612cc982612e31565b810181811067ffffffffffffffff82111715612ce857612ce7612dc7565b5b80604052505050565b6000612cfc82612c42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d2f57612d2e612d3a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612e155760046000803e612e12600051612e42565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156131ed57613270565b6131f5612a4d565b60043d036004823e80513d602482011167ffffffffffffffff8211171561321d575050613270565b808201805167ffffffffffffffff81111561323b5750505050613270565b80602083010160043d038501811115613258575050505050613270565b61326782602001850186612cc0565b82955050505050505b90565b61327c81612bd8565b811461328757600080fd5b50565b61329381612bea565b811461329e57600080fd5b50565b6132aa81612bf6565b81146132b557600080fd5b50565b6132c181612c42565b81146132cc57600080fd5b5056fea264697066735822122057e11402a4c575d4e4c72987bdf5d1c1d82138b25b0da75ba9b37e55e663367464736f6c63430008070033697066733a2f2f516d584d6d7866697777734e716734415079444d3959646b34737a4c4c484753726b435651636737415777514c642f7b69647d2e6a736f6e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100e95760003560e01c8063715018a61161008c578063a22cb46511610066578063a22cb46514610246578063e985e9c514610262578063f242432a14610292578063f2fde38b146102ae576100e9565b8063715018a614610202578063731133e91461020c5780638da5cb5b14610228576100e9565b80630e89341c116100c85780630e89341c1461016a5780631f7fdffa1461019a5780632eb2c2d6146101b65780634e1273f4146101d2576100e9565b8062fdd58e146100ee57806301ffc9a71461011e57806302fe53051461014e575b600080fd5b61010860048036038101906101039190612228565b6102ca565b60405161011591906129ee565b60405180910390f35b61013860048036038101906101339190612363565b610393565b6040516101459190612831565b60405180910390f35b610168600480360381019061016391906123bd565b610475565b005b610184600480360381019061017f9190612406565b6104fd565b604051610191919061284c565b60405180910390f35b6101b460048036038101906101af919061212d565b610591565b005b6101d060048036038101906101cb9190611fc7565b61061f565b005b6101ec60048036038101906101e791906122eb565b6106c0565b6040516101f991906127d8565b60405180910390f35b61020a6107d9565b005b61022660048036038101906102219190612268565b610861565b005b6102306108ef565b60405161023d91906126fb565b60405180910390f35b610260600480360381019061025b91906121e8565b610919565b005b61027c60048036038101906102779190611f87565b61092f565b6040516102899190612831565b60405180910390f35b6102ac60048036038101906102a79190612096565b6109c3565b005b6102c860048036038101906102c39190611f5a565b610a64565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561033b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610332906128ee565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046e575061046d82610b5c565b5b9050919050565b61047d610bc6565b73ffffffffffffffffffffffffffffffffffffffff1661049b6108ef565b73ffffffffffffffffffffffffffffffffffffffff16146104f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e89061294e565b60405180910390fd5b6104fa81610bce565b50565b60606002805461050c90612c8e565b80601f016020809104026020016040519081016040528092919081815260200182805461053890612c8e565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050509050919050565b610599610bc6565b73ffffffffffffffffffffffffffffffffffffffff166105b76108ef565b73ffffffffffffffffffffffffffffffffffffffff161461060d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106049061294e565b60405180910390fd5b61061984848484610be8565b50505050565b610627610bc6565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061066d575061066c85610667610bc6565b61092f565b5b6106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a39061288e565b60405180910390fd5b6106b98585858585610e15565b5050505050565b60608151835114610706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fd9061298e565b60405180910390fd5b6000835167ffffffffffffffff81111561072357610722612dc7565b5b6040519080825280602002602001820160405280156107515781602001602082028036833780820191505090505b50905060005b84518110156107ce5761079e85828151811061077657610775612d98565b5b602002602001015185838151811061079157610790612d98565b5b60200260200101516102ca565b8282815181106107b1576107b0612d98565b5b602002602001018181525050806107c790612cf1565b9050610757565b508091505092915050565b6107e1610bc6565b73ffffffffffffffffffffffffffffffffffffffff166107ff6108ef565b73ffffffffffffffffffffffffffffffffffffffff1614610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c9061294e565b60405180910390fd5b61085f6000611137565b565b610869610bc6565b73ffffffffffffffffffffffffffffffffffffffff166108876108ef565b73ffffffffffffffffffffffffffffffffffffffff16146108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d49061294e565b60405180910390fd5b6108e9848484846111fd565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61092b610924610bc6565b83836113ae565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6109cb610bc6565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a115750610a1085610a0b610bc6565b61092f565b5b610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a479061288e565b60405180910390fd5b610a5d858585858561151b565b5050505050565b610a6c610bc6565b73ffffffffffffffffffffffffffffffffffffffff16610a8a6108ef565b73ffffffffffffffffffffffffffffffffffffffff1614610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad79061294e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b47906128ce565b60405180910390fd5b610b5981611137565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190610be4929190611c32565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f906129ce565b60405180910390fd5b8151835114610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c93906129ae565b60405180910390fd5b6000610ca6610bc6565b9050610cb7816000878787876117b7565b60005b8451811015610d7057838181518110610cd657610cd5612d98565b5b6020026020010151600080878481518110610cf457610cf3612d98565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d569190612b82565b925050819055508080610d6890612cf1565b915050610cba565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610de89291906127fa565b60405180910390a4610dff816000878787876117bf565b610e0e816000878787876117c7565b5050505050565b8151835114610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e50906129ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec09061290e565b60405180910390fd5b6000610ed3610bc6565b9050610ee38187878787876117b7565b60005b8451811015611094576000858281518110610f0457610f03612d98565b5b602002602001015190506000858381518110610f2357610f22612d98565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb9061292e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110799190612b82565b925050819055505050508061108d90612cf1565b9050610ee6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161110b9291906127fa565b60405180910390a46111218187878787876117bf565b61112f8187878787876117c7565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561126d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611264906129ce565b60405180910390fd5b6000611277610bc6565b90506000611284856119ae565b90506000611291856119ae565b90506112a2836000898585896117b7565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113019190612b82565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161137f929190612a09565b60405180910390a4611396836000898585896117bf565b6113a583600089898989611a28565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114149061296e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161150e9190612831565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561158b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115829061290e565b60405180910390fd5b6000611595610bc6565b905060006115a2856119ae565b905060006115af856119ae565b90506115bf8389898585896117b7565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d9061292e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461170b9190612b82565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611788929190612a09565b60405180910390a461179e848a8a86868a6117bf565b6117ac848a8a8a8a8a611a28565b505050505050505050565b505050505050565b505050505050565b6117e68473ffffffffffffffffffffffffffffffffffffffff16611c0f565b156119a6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161182c959493929190612716565b602060405180830381600087803b15801561184657600080fd5b505af192505050801561187757506040513d601f19601f820116820180604052508101906118749190612390565b60015b61191d57611883612df6565b806308c379a014156118e057506118986131dd565b806118a357506118e2565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d7919061284c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119149061286e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b906128ae565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156119cd576119cc612dc7565b5b6040519080825280602002602001820160405280156119fb5781602001602082028036833780820191505090505b5090508281600081518110611a1357611a12612d98565b5b60200260200101818152505080915050919050565b611a478473ffffffffffffffffffffffffffffffffffffffff16611c0f565b15611c07578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a8d95949392919061277e565b602060405180830381600087803b158015611aa757600080fd5b505af1925050508015611ad857506040513d601f19601f82011682018060405250810190611ad59190612390565b60015b611b7e57611ae4612df6565b806308c379a01415611b415750611af96131dd565b80611b045750611b43565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38919061284c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b759061286e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc906128ae565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611c3e90612c8e565b90600052602060002090601f016020900481019282611c605760008555611ca7565b82601f10611c7957805160ff1916838001178555611ca7565b82800160010185558215611ca7579182015b82811115611ca6578251825591602001919060010190611c8b565b5b509050611cb49190611cb8565b5090565b5b80821115611cd1576000816000905550600101611cb9565b5090565b6000611ce8611ce384612a57565b612a32565b90508083825260208201905082856020860282011115611d0b57611d0a612e1d565b5b60005b85811015611d3b5781611d218882611e39565b845260208401935060208301925050600181019050611d0e565b5050509392505050565b6000611d58611d5384612a83565b612a32565b90508083825260208201905082856020860282011115611d7b57611d7a612e1d565b5b60005b85811015611dab5781611d918882611f45565b845260208401935060208301925050600181019050611d7e565b5050509392505050565b6000611dc8611dc384612aaf565b612a32565b905082815260208101848484011115611de457611de3612e22565b5b611def848285612c4c565b509392505050565b6000611e0a611e0584612ae0565b612a32565b905082815260208101848484011115611e2657611e25612e22565b5b611e31848285612c4c565b509392505050565b600081359050611e4881613273565b92915050565b600082601f830112611e6357611e62612e18565b5b8135611e73848260208601611cd5565b91505092915050565b600082601f830112611e9157611e90612e18565b5b8135611ea1848260208601611d45565b91505092915050565b600081359050611eb98161328a565b92915050565b600081359050611ece816132a1565b92915050565b600081519050611ee3816132a1565b92915050565b600082601f830112611efe57611efd612e18565b5b8135611f0e848260208601611db5565b91505092915050565b600082601f830112611f2c57611f2b612e18565b5b8135611f3c848260208601611df7565b91505092915050565b600081359050611f54816132b8565b92915050565b600060208284031215611f7057611f6f612e2c565b5b6000611f7e84828501611e39565b91505092915050565b60008060408385031215611f9e57611f9d612e2c565b5b6000611fac85828601611e39565b9250506020611fbd85828601611e39565b9150509250929050565b600080600080600060a08688031215611fe357611fe2612e2c565b5b6000611ff188828901611e39565b955050602061200288828901611e39565b945050604086013567ffffffffffffffff81111561202357612022612e27565b5b61202f88828901611e7c565b935050606086013567ffffffffffffffff8111156120505761204f612e27565b5b61205c88828901611e7c565b925050608086013567ffffffffffffffff81111561207d5761207c612e27565b5b61208988828901611ee9565b9150509295509295909350565b600080600080600060a086880312156120b2576120b1612e2c565b5b60006120c088828901611e39565b95505060206120d188828901611e39565b94505060406120e288828901611f45565b93505060606120f388828901611f45565b925050608086013567ffffffffffffffff81111561211457612113612e27565b5b61212088828901611ee9565b9150509295509295909350565b6000806000806080858703121561214757612146612e2c565b5b600061215587828801611e39565b945050602085013567ffffffffffffffff81111561217657612175612e27565b5b61218287828801611e7c565b935050604085013567ffffffffffffffff8111156121a3576121a2612e27565b5b6121af87828801611e7c565b925050606085013567ffffffffffffffff8111156121d0576121cf612e27565b5b6121dc87828801611ee9565b91505092959194509250565b600080604083850312156121ff576121fe612e2c565b5b600061220d85828601611e39565b925050602061221e85828601611eaa565b9150509250929050565b6000806040838503121561223f5761223e612e2c565b5b600061224d85828601611e39565b925050602061225e85828601611f45565b9150509250929050565b6000806000806080858703121561228257612281612e2c565b5b600061229087828801611e39565b94505060206122a187828801611f45565b93505060406122b287828801611f45565b925050606085013567ffffffffffffffff8111156122d3576122d2612e27565b5b6122df87828801611ee9565b91505092959194509250565b6000806040838503121561230257612301612e2c565b5b600083013567ffffffffffffffff8111156123205761231f612e27565b5b61232c85828601611e4e565b925050602083013567ffffffffffffffff81111561234d5761234c612e27565b5b61235985828601611e7c565b9150509250929050565b60006020828403121561237957612378612e2c565b5b600061238784828501611ebf565b91505092915050565b6000602082840312156123a6576123a5612e2c565b5b60006123b484828501611ed4565b91505092915050565b6000602082840312156123d3576123d2612e2c565b5b600082013567ffffffffffffffff8111156123f1576123f0612e27565b5b6123fd84828501611f17565b91505092915050565b60006020828403121561241c5761241b612e2c565b5b600061242a84828501611f45565b91505092915050565b600061243f83836126dd565b60208301905092915050565b61245481612bd8565b82525050565b600061246582612b21565b61246f8185612b4f565b935061247a83612b11565b8060005b838110156124ab5781516124928882612433565b975061249d83612b42565b92505060018101905061247e565b5085935050505092915050565b6124c181612bea565b82525050565b60006124d282612b2c565b6124dc8185612b60565b93506124ec818560208601612c5b565b6124f581612e31565b840191505092915050565b600061250b82612b37565b6125158185612b71565b9350612525818560208601612c5b565b61252e81612e31565b840191505092915050565b6000612546603483612b71565b915061255182612e4f565b604082019050919050565b6000612569602f83612b71565b915061257482612e9e565b604082019050919050565b600061258c602883612b71565b915061259782612eed565b604082019050919050565b60006125af602683612b71565b91506125ba82612f3c565b604082019050919050565b60006125d2602a83612b71565b91506125dd82612f8b565b604082019050919050565b60006125f5602583612b71565b915061260082612fda565b604082019050919050565b6000612618602a83612b71565b915061262382613029565b604082019050919050565b600061263b602083612b71565b915061264682613078565b602082019050919050565b600061265e602983612b71565b9150612669826130a1565b604082019050919050565b6000612681602983612b71565b915061268c826130f0565b604082019050919050565b60006126a4602883612b71565b91506126af8261313f565b604082019050919050565b60006126c7602183612b71565b91506126d28261318e565b604082019050919050565b6126e681612c42565b82525050565b6126f581612c42565b82525050565b6000602082019050612710600083018461244b565b92915050565b600060a08201905061272b600083018861244b565b612738602083018761244b565b818103604083015261274a818661245a565b9050818103606083015261275e818561245a565b9050818103608083015261277281846124c7565b90509695505050505050565b600060a082019050612793600083018861244b565b6127a0602083018761244b565b6127ad60408301866126ec565b6127ba60608301856126ec565b81810360808301526127cc81846124c7565b90509695505050505050565b600060208201905081810360008301526127f2818461245a565b905092915050565b60006040820190508181036000830152612814818561245a565b90508181036020830152612828818461245a565b90509392505050565b600060208201905061284660008301846124b8565b92915050565b600060208201905081810360008301526128668184612500565b905092915050565b6000602082019050818103600083015261288781612539565b9050919050565b600060208201905081810360008301526128a78161255c565b9050919050565b600060208201905081810360008301526128c78161257f565b9050919050565b600060208201905081810360008301526128e7816125a2565b9050919050565b60006020820190508181036000830152612907816125c5565b9050919050565b60006020820190508181036000830152612927816125e8565b9050919050565b600060208201905081810360008301526129478161260b565b9050919050565b600060208201905081810360008301526129678161262e565b9050919050565b6000602082019050818103600083015261298781612651565b9050919050565b600060208201905081810360008301526129a781612674565b9050919050565b600060208201905081810360008301526129c781612697565b9050919050565b600060208201905081810360008301526129e7816126ba565b9050919050565b6000602082019050612a0360008301846126ec565b92915050565b6000604082019050612a1e60008301856126ec565b612a2b60208301846126ec565b9392505050565b6000612a3c612a4d565b9050612a488282612cc0565b919050565b6000604051905090565b600067ffffffffffffffff821115612a7257612a71612dc7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a9e57612a9d612dc7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612aca57612ac9612dc7565b5b612ad382612e31565b9050602081019050919050565b600067ffffffffffffffff821115612afb57612afa612dc7565b5b612b0482612e31565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b8d82612c42565b9150612b9883612c42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bcd57612bcc612d3a565b5b828201905092915050565b6000612be382612c22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612c79578082015181840152602081019050612c5e565b83811115612c88576000848401525b50505050565b60006002820490506001821680612ca657607f821691505b60208210811415612cba57612cb9612d69565b5b50919050565b612cc982612e31565b810181811067ffffffffffffffff82111715612ce857612ce7612dc7565b5b80604052505050565b6000612cfc82612c42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d2f57612d2e612d3a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115612e155760046000803e612e12600051612e42565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156131ed57613270565b6131f5612a4d565b60043d036004823e80513d602482011167ffffffffffffffff8211171561321d575050613270565b808201805167ffffffffffffffff81111561323b5750505050613270565b80602083010160043d038501811115613258575050505050613270565b61326782602001850186612cc0565b82955050505050505b90565b61327c81612bd8565b811461328757600080fd5b50565b61329381612bea565b811461329e57600080fd5b50565b6132aa81612bf6565b81146132b557600080fd5b50565b6132c181612c42565b81146132cc57600080fd5b5056fea264697066735822122057e11402a4c575d4e4c72987bdf5d1c1d82138b25b0da75ba9b37e55e663367464736f6c63430008070033
Deployed Bytecode Sourcemap
38999:608:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23404:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22427:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39139:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23148:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39413:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25348:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23800:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2606:103;;;:::i;:::-;;39236:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1955:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24397:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24624:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24864:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23404:230;23490:7;23537:1;23518:21;;:7;:21;;;;23510:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:9;:13;23614:2;23604:13;;;;;;;;;;;:22;23618:7;23604:22;;;;;;;;;;;;;;;;23597:29;;23404:230;;;;:::o;22427:310::-;22529:4;22581:26;22566:41;;;:11;:41;;;;:110;;;;22639:37;22624:52;;;:11;:52;;;;22566:110;:163;;;;22693:36;22717:11;22693:23;:36::i;:::-;22566:163;22546:183;;22427:310;;;:::o;39139:89::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39205:15:::1;39213:6;39205:7;:15::i;:::-;39139:89:::0;:::o;23148:105::-;23208:13;23241:4;23234:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23148:105;;;:::o;39413:191::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39562:34:::1;39573:2;39577:3;39582:7;39591:4;39562:10;:34::i;:::-;39413:191:::0;;;;:::o;25348:439::-;25589:12;:10;:12::i;:::-;25581:20;;:4;:20;;;:60;;;;25605:36;25622:4;25628:12;:10;:12::i;:::-;25605:16;:36::i;:::-;25581:60;25559:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25727:52;25750:4;25756:2;25760:3;25765:7;25774:4;25727:22;:52::i;:::-;25348:439;;;;;:::o;23800:524::-;23956:16;24017:3;:10;23998:8;:15;:29;23990:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24086:30;24133:8;:15;24119:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24086:63;;24167:9;24162:122;24186:8;:15;24182:1;:19;24162:122;;;24242:30;24252:8;24261:1;24252:11;;;;;;;;:::i;:::-;;;;;;;;24265:3;24269:1;24265:6;;;;;;;;:::i;:::-;;;;;;;;24242:9;:30::i;:::-;24223:13;24237:1;24223:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24203:3;;;;:::i;:::-;;;24162:122;;;;24303:13;24296:20;;;23800:524;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;39236:169::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39365:32:::1;39371:7;39380:2;39384:6;39392:4;39365:5;:32::i;:::-;39236:169:::0;;;;:::o;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;24397:155::-;24492:52;24511:12;:10;:12::i;:::-;24525:8;24535;24492:18;:52::i;:::-;24397:155;;:::o;24624:168::-;24723:4;24747:18;:27;24766:7;24747:27;;;;;;;;;;;;;;;:37;24775:8;24747:37;;;;;;;;;;;;;;;;;;;;;;;;;24740:44;;24624:168;;;;:::o;24864:407::-;25080:12;:10;:12::i;:::-;25072:20;;:4;:20;;;:60;;;;25096:36;25113:4;25119:12;:10;:12::i;:::-;25096:16;:36::i;:::-;25072:60;25050:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25218:45;25236:4;25242:2;25246;25250:6;25258:4;25218:17;:45::i;:::-;24864:407;;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;13708:157::-;13793:4;13832:25;13817:40;;;:11;:40;;;;13810:47;;13708:157;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;29573:88::-;29647:6;29640:4;:13;;;;;;;;;;;;:::i;:::-;;29573:88;:::o;31179:813::-;31371:1;31357:16;;:2;:16;;;;31349:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31444:7;:14;31430:3;:10;:28;31422:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31516:16;31535:12;:10;:12::i;:::-;31516:31;;31560:66;31581:8;31599:1;31603:2;31607:3;31612:7;31621:4;31560:20;:66::i;:::-;31644:9;31639:103;31663:3;:10;31659:1;:14;31639:103;;;31720:7;31728:1;31720:10;;;;;;;;:::i;:::-;;;;;;;;31695:9;:17;31705:3;31709:1;31705:6;;;;;;;;:::i;:::-;;;;;;;;31695:17;;;;;;;;;;;:21;31713:2;31695:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;31675:3;;;;;:::i;:::-;;;;31639:103;;;;31795:2;31759:53;;31791:1;31759:53;;31773:8;31759:53;;;31799:3;31804:7;31759:53;;;;;;;:::i;:::-;;;;;;;;31825:65;31845:8;31863:1;31867:2;31871:3;31876:7;31885:4;31825:19;:65::i;:::-;31903:81;31939:8;31957:1;31961:2;31965:3;31970:7;31979:4;31903:35;:81::i;:::-;31338:654;31179:813;;;;:::o;27583:1146::-;27810:7;:14;27796:3;:10;:28;27788:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27902:1;27888:16;;:2;:16;;;;27880:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27959:16;27978:12;:10;:12::i;:::-;27959:31;;28003:60;28024:8;28034:4;28040:2;28044:3;28049:7;28058:4;28003:20;:60::i;:::-;28081:9;28076:421;28100:3;:10;28096:1;:14;28076:421;;;28132:10;28145:3;28149:1;28145:6;;;;;;;;:::i;:::-;;;;;;;;28132:19;;28166:14;28183:7;28191:1;28183:10;;;;;;;;:::i;:::-;;;;;;;;28166:27;;28210:19;28232:9;:13;28242:2;28232:13;;;;;;;;;;;:19;28246:4;28232:19;;;;;;;;;;;;;;;;28210:41;;28289:6;28274:11;:21;;28266:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28422:6;28408:11;:20;28386:9;:13;28396:2;28386:13;;;;;;;;;;;:19;28400:4;28386:19;;;;;;;;;;;;;;;:42;;;;28479:6;28458:9;:13;28468:2;28458:13;;;;;;;;;;;:17;28472:2;28458:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28117:380;;;28112:3;;;;:::i;:::-;;;28076:421;;;;28544:2;28514:47;;28538:4;28514:47;;28528:8;28514:47;;;28548:3;28553:7;28514:47;;;;;;;:::i;:::-;;;;;;;;28574:59;28594:8;28604:4;28610:2;28614:3;28619:7;28628:4;28574:19;:59::i;:::-;28646:75;28682:8;28692:4;28698:2;28702:3;28707:7;28716:4;28646:35;:75::i;:::-;27777:952;27583:1146;;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;30047:729::-;30214:1;30200:16;;:2;:16;;;;30192:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30267:16;30286:12;:10;:12::i;:::-;30267:31;;30309:20;30332:21;30350:2;30332:17;:21::i;:::-;30309:44;;30364:24;30391:25;30409:6;30391:17;:25::i;:::-;30364:52;;30429:66;30450:8;30468:1;30472:2;30476:3;30481:7;30490:4;30429:20;:66::i;:::-;30529:6;30508:9;:13;30518:2;30508:13;;;;;;;;;;;:17;30522:2;30508:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30588:2;30551:52;;30584:1;30551:52;;30566:8;30551:52;;;30592:2;30596:6;30551:52;;;;;;;:::i;:::-;;;;;;;;30616:65;30636:8;30654:1;30658:2;30662:3;30667:7;30676:4;30616:19;:65::i;:::-;30694:74;30725:8;30743:1;30747:2;30751;30755:6;30763:4;30694:30;:74::i;:::-;30181:595;;;30047:729;;;;:::o;34460:331::-;34615:8;34606:17;;:5;:17;;;;34598:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34718:8;34680:18;:25;34699:5;34680:25;;;;;;;;;;;;;;;:35;34706:8;34680:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34764:8;34742:41;;34757:5;34742:41;;;34774:8;34742:41;;;;;;:::i;:::-;;;;;;;;34460:331;;;:::o;26251:974::-;26453:1;26439:16;;:2;:16;;;;26431:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26510:16;26529:12;:10;:12::i;:::-;26510:31;;26552:20;26575:21;26593:2;26575:17;:21::i;:::-;26552:44;;26607:24;26634:25;26652:6;26634:17;:25::i;:::-;26607:52;;26672:60;26693:8;26703:4;26709:2;26713:3;26718:7;26727:4;26672:20;:60::i;:::-;26745:19;26767:9;:13;26777:2;26767:13;;;;;;;;;;;:19;26781:4;26767:19;;;;;;;;;;;;;;;;26745:41;;26820:6;26805:11;:21;;26797:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26945:6;26931:11;:20;26909:9;:13;26919:2;26909:13;;;;;;;;;;;:19;26923:4;26909:19;;;;;;;;;;;;;;;:42;;;;26994:6;26973:9;:13;26983:2;26973:13;;;;;;;;;;;:17;26987:2;26973:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27049:2;27018:46;;27043:4;27018:46;;27033:8;27018:46;;;27053:2;27057:6;27018:46;;;;;;;:::i;:::-;;;;;;;;27077:59;27097:8;27107:4;27113:2;27117:3;27122:7;27131:4;27077:19;:59::i;:::-;27149:68;27180:8;27190:4;27196:2;27200;27204:6;27212:4;27149:30;:68::i;:::-;26420:805;;;;26251:974;;;;;:::o;35749:221::-;;;;;;;:::o;36925:220::-;;;;;;;:::o;37905:813::-;38145:15;:2;:13;;;:15::i;:::-;38141:570;;;38198:2;38181:43;;;38225:8;38235:4;38241:3;38246:7;38255:4;38181:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38177:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38573:6;38566:14;;;;;;;;;;;:::i;:::-;;;;;;;;38177:523;;;38622:62;;;;;;;;;;:::i;:::-;;;;;;;;38177:523;38354:48;;;38342:60;;;:8;:60;;;;38338:159;;38427:50;;;;;;;;;;:::i;:::-;;;;;;;;38338:159;38261:251;38141:570;37905:813;;;;;;:::o;38726:198::-;38792:16;38821:22;38860:1;38846:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38821:41;;38884:7;38873:5;38879:1;38873:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38911:5;38904:12;;;38726:198;;;:::o;37153:744::-;37368:15;:2;:13;;;:15::i;:::-;37364:526;;;37421:2;37404:38;;;37443:8;37453:4;37459:2;37463:6;37471:4;37404:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37400:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37752:6;37745:14;;;;;;;;;;;:::i;:::-;;;;;;;;37400:479;;;37801:62;;;;;;;;;;:::i;:::-;;;;;;;;37400:479;37538:43;;;37526:55;;;:8;:55;;;;37522:154;;37606:50;;;;;;;;;;:::i;:::-;;;;;;;;37522:154;37477:214;37364:526;37153:744;;;;;;:::o;4656:326::-;4716:4;4973:1;4951:7;:19;;;:23;4944:30;;4656:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722: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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1363::-;8123:6;8131;8139;8147;8196:3;8184:9;8175:7;8171:23;8167:33;8164:120;;;8203:79;;:::i;:::-;8164:120;8323:1;8348:53;8393:7;8384:6;8373:9;8369:22;8348:53;:::i;:::-;8338:63;;8294:117;8478:2;8467:9;8463:18;8450:32;8509:18;8501:6;8498:30;8495:117;;;8531:79;;:::i;:::-;8495:117;8636:78;8706:7;8697:6;8686:9;8682:22;8636:78;:::i;:::-;8626:88;;8421:303;8791:2;8780:9;8776:18;8763:32;8822:18;8814:6;8811:30;8808:117;;;8844:79;;:::i;:::-;8808:117;8949:78;9019:7;9010:6;8999:9;8995:22;8949:78;:::i;:::-;8939:88;;8734:303;9104:2;9093:9;9089:18;9076:32;9135:18;9127:6;9124:30;9121:117;;;9157:79;;:::i;:::-;9121:117;9262:62;9316:7;9307:6;9296:9;9292:22;9262:62;:::i;:::-;9252:72;;9047:287;7978:1363;;;;;;;:::o;9347:468::-;9412:6;9420;9469:2;9457:9;9448:7;9444:23;9440:32;9437:119;;;9475:79;;:::i;:::-;9437:119;9595:1;9620:53;9665:7;9656:6;9645:9;9641:22;9620:53;:::i;:::-;9610:63;;9566:117;9722:2;9748:50;9790:7;9781:6;9770:9;9766:22;9748:50;:::i;:::-;9738:60;;9693:115;9347:468;;;;;:::o;9821:474::-;9889:6;9897;9946:2;9934:9;9925:7;9921:23;9917:32;9914:119;;;9952:79;;:::i;:::-;9914:119;10072:1;10097:53;10142:7;10133:6;10122:9;10118:22;10097:53;:::i;:::-;10087:63;;10043:117;10199:2;10225:53;10270:7;10261:6;10250:9;10246:22;10225:53;:::i;:::-;10215:63;;10170:118;9821:474;;;;;:::o;10301:943::-;10396:6;10404;10412;10420;10469:3;10457:9;10448:7;10444:23;10440:33;10437:120;;;10476:79;;:::i;:::-;10437:120;10596:1;10621:53;10666:7;10657:6;10646:9;10642:22;10621:53;:::i;:::-;10611:63;;10567:117;10723:2;10749:53;10794:7;10785:6;10774:9;10770:22;10749:53;:::i;:::-;10739:63;;10694:118;10851:2;10877:53;10922:7;10913:6;10902:9;10898:22;10877:53;:::i;:::-;10867:63;;10822:118;11007:2;10996:9;10992:18;10979:32;11038:18;11030:6;11027:30;11024:117;;;11060:79;;:::i;:::-;11024:117;11165:62;11219:7;11210:6;11199:9;11195:22;11165:62;:::i;:::-;11155:72;;10950:287;10301:943;;;;;;;:::o;11250:894::-;11368:6;11376;11425:2;11413:9;11404:7;11400:23;11396:32;11393:119;;;11431:79;;:::i;:::-;11393:119;11579:1;11568:9;11564:17;11551:31;11609:18;11601:6;11598:30;11595:117;;;11631:79;;:::i;:::-;11595:117;11736:78;11806:7;11797:6;11786:9;11782:22;11736:78;:::i;:::-;11726:88;;11522:302;11891:2;11880:9;11876:18;11863:32;11922:18;11914:6;11911:30;11908:117;;;11944:79;;:::i;:::-;11908:117;12049:78;12119:7;12110:6;12099:9;12095:22;12049:78;:::i;:::-;12039:88;;11834:303;11250:894;;;;;:::o;12150:327::-;12208:6;12257:2;12245:9;12236:7;12232:23;12228:32;12225:119;;;12263:79;;:::i;:::-;12225:119;12383:1;12408:52;12452:7;12443:6;12432:9;12428:22;12408:52;:::i;:::-;12398:62;;12354:116;12150:327;;;;:::o;12483:349::-;12552:6;12601:2;12589:9;12580:7;12576:23;12572:32;12569:119;;;12607:79;;:::i;:::-;12569:119;12727:1;12752:63;12807:7;12798:6;12787:9;12783:22;12752:63;:::i;:::-;12742:73;;12698:127;12483:349;;;;:::o;12838:509::-;12907:6;12956:2;12944:9;12935:7;12931:23;12927:32;12924:119;;;12962:79;;:::i;:::-;12924:119;13110:1;13099:9;13095:17;13082:31;13140:18;13132:6;13129:30;13126:117;;;13162:79;;:::i;:::-;13126:117;13267:63;13322:7;13313:6;13302:9;13298:22;13267:63;:::i;:::-;13257:73;;13053:287;12838:509;;;;:::o;13353:329::-;13412:6;13461:2;13449:9;13440:7;13436:23;13432:32;13429:119;;;13467:79;;:::i;:::-;13429:119;13587:1;13612:53;13657:7;13648:6;13637:9;13633:22;13612:53;:::i;:::-;13602:63;;13558:117;13353:329;;;;:::o;13688:179::-;13757:10;13778:46;13820:3;13812:6;13778:46;:::i;:::-;13856:4;13851:3;13847:14;13833:28;;13688:179;;;;:::o;13873:118::-;13960:24;13978:5;13960:24;:::i;:::-;13955:3;13948:37;13873:118;;:::o;14027:732::-;14146:3;14175:54;14223:5;14175:54;:::i;:::-;14245:86;14324:6;14319:3;14245:86;:::i;:::-;14238:93;;14355:56;14405:5;14355:56;:::i;:::-;14434:7;14465:1;14450:284;14475:6;14472:1;14469:13;14450:284;;;14551:6;14545:13;14578:63;14637:3;14622:13;14578:63;:::i;:::-;14571:70;;14664:60;14717:6;14664:60;:::i;:::-;14654:70;;14510:224;14497:1;14494;14490:9;14485:14;;14450:284;;;14454:14;14750:3;14743:10;;14151:608;;;14027:732;;;;:::o;14765:109::-;14846:21;14861:5;14846:21;:::i;:::-;14841:3;14834:34;14765:109;;:::o;14880:360::-;14966:3;14994:38;15026:5;14994:38;:::i;:::-;15048:70;15111:6;15106:3;15048:70;:::i;:::-;15041:77;;15127:52;15172:6;15167:3;15160:4;15153:5;15149:16;15127:52;:::i;:::-;15204:29;15226:6;15204:29;:::i;:::-;15199:3;15195:39;15188:46;;14970:270;14880:360;;;;:::o;15246:364::-;15334:3;15362:39;15395:5;15362:39;:::i;:::-;15417:71;15481:6;15476:3;15417:71;:::i;:::-;15410:78;;15497:52;15542:6;15537:3;15530:4;15523:5;15519:16;15497:52;:::i;:::-;15574:29;15596:6;15574:29;:::i;:::-;15569:3;15565:39;15558:46;;15338:272;15246:364;;;;:::o;15616:366::-;15758:3;15779:67;15843:2;15838:3;15779:67;:::i;:::-;15772:74;;15855:93;15944:3;15855:93;:::i;:::-;15973:2;15968:3;15964:12;15957:19;;15616:366;;;:::o;15988:::-;16130:3;16151:67;16215:2;16210:3;16151:67;:::i;:::-;16144:74;;16227:93;16316:3;16227:93;:::i;:::-;16345:2;16340:3;16336:12;16329:19;;15988:366;;;:::o;16360:::-;16502:3;16523:67;16587:2;16582:3;16523:67;:::i;:::-;16516:74;;16599:93;16688:3;16599:93;:::i;:::-;16717:2;16712:3;16708:12;16701:19;;16360:366;;;:::o;16732:::-;16874:3;16895:67;16959:2;16954:3;16895:67;:::i;:::-;16888:74;;16971:93;17060:3;16971:93;:::i;:::-;17089:2;17084:3;17080:12;17073:19;;16732:366;;;:::o;17104:::-;17246:3;17267:67;17331:2;17326:3;17267:67;:::i;:::-;17260:74;;17343:93;17432:3;17343:93;:::i;:::-;17461:2;17456:3;17452:12;17445:19;;17104:366;;;:::o;17476:::-;17618:3;17639:67;17703:2;17698:3;17639:67;:::i;:::-;17632:74;;17715:93;17804:3;17715:93;:::i;:::-;17833:2;17828:3;17824:12;17817:19;;17476:366;;;:::o;17848:::-;17990:3;18011:67;18075:2;18070:3;18011:67;:::i;:::-;18004:74;;18087:93;18176:3;18087:93;:::i;:::-;18205:2;18200:3;18196:12;18189:19;;17848:366;;;:::o;18220:::-;18362:3;18383:67;18447:2;18442:3;18383:67;:::i;:::-;18376:74;;18459:93;18548:3;18459:93;:::i;:::-;18577:2;18572:3;18568:12;18561:19;;18220:366;;;:::o;18592:::-;18734:3;18755:67;18819:2;18814:3;18755:67;:::i;:::-;18748:74;;18831:93;18920:3;18831:93;:::i;:::-;18949:2;18944:3;18940:12;18933:19;;18592:366;;;:::o;18964:::-;19106:3;19127:67;19191:2;19186:3;19127:67;:::i;:::-;19120:74;;19203:93;19292:3;19203:93;:::i;:::-;19321:2;19316:3;19312:12;19305:19;;18964:366;;;:::o;19336:::-;19478:3;19499:67;19563:2;19558:3;19499:67;:::i;:::-;19492:74;;19575:93;19664:3;19575:93;:::i;:::-;19693:2;19688:3;19684:12;19677:19;;19336:366;;;:::o;19708:::-;19850:3;19871:67;19935:2;19930:3;19871:67;:::i;:::-;19864:74;;19947:93;20036:3;19947:93;:::i;:::-;20065:2;20060:3;20056:12;20049:19;;19708:366;;;:::o;20080:108::-;20157:24;20175:5;20157:24;:::i;:::-;20152:3;20145:37;20080:108;;:::o;20194:118::-;20281:24;20299:5;20281:24;:::i;:::-;20276:3;20269:37;20194:118;;:::o;20318:222::-;20411:4;20449:2;20438:9;20434:18;20426:26;;20462:71;20530:1;20519:9;20515:17;20506:6;20462:71;:::i;:::-;20318:222;;;;:::o;20546:1053::-;20869:4;20907:3;20896:9;20892:19;20884:27;;20921:71;20989:1;20978:9;20974:17;20965:6;20921:71;:::i;:::-;21002:72;21070:2;21059:9;21055:18;21046:6;21002:72;:::i;:::-;21121:9;21115:4;21111:20;21106:2;21095:9;21091:18;21084:48;21149:108;21252:4;21243:6;21149:108;:::i;:::-;21141:116;;21304:9;21298:4;21294:20;21289:2;21278:9;21274:18;21267:48;21332:108;21435:4;21426:6;21332:108;:::i;:::-;21324:116;;21488:9;21482:4;21478:20;21472:3;21461:9;21457:19;21450:49;21516:76;21587:4;21578:6;21516:76;:::i;:::-;21508:84;;20546:1053;;;;;;;;:::o;21605:751::-;21828:4;21866:3;21855:9;21851:19;21843:27;;21880:71;21948:1;21937:9;21933:17;21924:6;21880:71;:::i;:::-;21961:72;22029:2;22018:9;22014:18;22005:6;21961:72;:::i;:::-;22043;22111:2;22100:9;22096:18;22087:6;22043:72;:::i;:::-;22125;22193:2;22182:9;22178:18;22169:6;22125:72;:::i;:::-;22245:9;22239:4;22235:20;22229:3;22218:9;22214:19;22207:49;22273:76;22344:4;22335:6;22273:76;:::i;:::-;22265:84;;21605:751;;;;;;;;:::o;22362:373::-;22505:4;22543:2;22532:9;22528:18;22520:26;;22592:9;22586:4;22582:20;22578:1;22567:9;22563:17;22556:47;22620:108;22723:4;22714:6;22620:108;:::i;:::-;22612:116;;22362:373;;;;:::o;22741:634::-;22962:4;23000:2;22989:9;22985:18;22977:26;;23049:9;23043:4;23039:20;23035:1;23024:9;23020:17;23013:47;23077:108;23180:4;23171:6;23077:108;:::i;:::-;23069:116;;23232:9;23226:4;23222:20;23217:2;23206:9;23202:18;23195:48;23260:108;23363:4;23354:6;23260:108;:::i;:::-;23252:116;;22741:634;;;;;:::o;23381:210::-;23468:4;23506:2;23495:9;23491:18;23483:26;;23519:65;23581:1;23570:9;23566:17;23557:6;23519:65;:::i;:::-;23381:210;;;;:::o;23597:313::-;23710:4;23748:2;23737:9;23733:18;23725:26;;23797:9;23791:4;23787:20;23783:1;23772:9;23768:17;23761:47;23825:78;23898:4;23889:6;23825:78;:::i;:::-;23817:86;;23597:313;;;;:::o;23916:419::-;24082:4;24120:2;24109:9;24105:18;24097:26;;24169:9;24163:4;24159:20;24155:1;24144:9;24140:17;24133:47;24197:131;24323:4;24197:131;:::i;:::-;24189:139;;23916:419;;;:::o;24341:::-;24507:4;24545:2;24534:9;24530:18;24522:26;;24594:9;24588:4;24584:20;24580:1;24569:9;24565:17;24558:47;24622:131;24748:4;24622:131;:::i;:::-;24614:139;;24341:419;;;:::o;24766:::-;24932:4;24970:2;24959:9;24955:18;24947:26;;25019:9;25013:4;25009:20;25005:1;24994:9;24990:17;24983:47;25047:131;25173:4;25047:131;:::i;:::-;25039:139;;24766:419;;;:::o;25191:::-;25357:4;25395:2;25384:9;25380:18;25372:26;;25444:9;25438:4;25434:20;25430:1;25419:9;25415:17;25408:47;25472:131;25598:4;25472:131;:::i;:::-;25464:139;;25191:419;;;:::o;25616:::-;25782:4;25820:2;25809:9;25805:18;25797:26;;25869:9;25863:4;25859:20;25855:1;25844:9;25840:17;25833:47;25897:131;26023:4;25897:131;:::i;:::-;25889:139;;25616:419;;;:::o;26041:::-;26207:4;26245:2;26234:9;26230:18;26222:26;;26294:9;26288:4;26284:20;26280:1;26269:9;26265:17;26258:47;26322:131;26448:4;26322:131;:::i;:::-;26314:139;;26041:419;;;:::o;26466:::-;26632:4;26670:2;26659:9;26655:18;26647:26;;26719:9;26713:4;26709:20;26705:1;26694:9;26690:17;26683:47;26747:131;26873:4;26747:131;:::i;:::-;26739:139;;26466:419;;;:::o;26891:::-;27057:4;27095:2;27084:9;27080:18;27072:26;;27144:9;27138:4;27134:20;27130:1;27119:9;27115:17;27108:47;27172:131;27298:4;27172:131;:::i;:::-;27164:139;;26891:419;;;:::o;27316:::-;27482:4;27520:2;27509:9;27505:18;27497:26;;27569:9;27563:4;27559:20;27555:1;27544:9;27540:17;27533:47;27597:131;27723:4;27597:131;:::i;:::-;27589:139;;27316:419;;;:::o;27741:::-;27907:4;27945:2;27934:9;27930:18;27922:26;;27994:9;27988:4;27984:20;27980:1;27969:9;27965:17;27958:47;28022:131;28148:4;28022:131;:::i;:::-;28014:139;;27741:419;;;:::o;28166:::-;28332:4;28370:2;28359:9;28355:18;28347:26;;28419:9;28413:4;28409:20;28405:1;28394:9;28390:17;28383:47;28447:131;28573:4;28447:131;:::i;:::-;28439:139;;28166:419;;;:::o;28591:::-;28757:4;28795:2;28784:9;28780:18;28772:26;;28844:9;28838:4;28834:20;28830:1;28819:9;28815:17;28808:47;28872:131;28998:4;28872:131;:::i;:::-;28864:139;;28591:419;;;:::o;29016:222::-;29109:4;29147:2;29136:9;29132:18;29124:26;;29160:71;29228:1;29217:9;29213:17;29204:6;29160:71;:::i;:::-;29016:222;;;;:::o;29244:332::-;29365:4;29403:2;29392:9;29388:18;29380:26;;29416:71;29484:1;29473:9;29469:17;29460:6;29416:71;:::i;:::-;29497:72;29565:2;29554:9;29550:18;29541:6;29497:72;:::i;:::-;29244:332;;;;;:::o;29582:129::-;29616:6;29643:20;;:::i;:::-;29633:30;;29672:33;29700:4;29692:6;29672:33;:::i;:::-;29582:129;;;:::o;29717:75::-;29750:6;29783:2;29777:9;29767:19;;29717:75;:::o;29798:311::-;29875:4;29965:18;29957:6;29954:30;29951:56;;;29987:18;;:::i;:::-;29951:56;30037:4;30029:6;30025:17;30017:25;;30097:4;30091;30087:15;30079:23;;29798:311;;;:::o;30115:::-;30192:4;30282:18;30274:6;30271:30;30268:56;;;30304:18;;:::i;:::-;30268:56;30354:4;30346:6;30342:17;30334:25;;30414:4;30408;30404:15;30396:23;;30115:311;;;:::o;30432:307::-;30493:4;30583:18;30575:6;30572:30;30569:56;;;30605:18;;:::i;:::-;30569:56;30643:29;30665:6;30643:29;:::i;:::-;30635:37;;30727:4;30721;30717:15;30709:23;;30432:307;;;:::o;30745:308::-;30807:4;30897:18;30889:6;30886:30;30883:56;;;30919:18;;:::i;:::-;30883:56;30957:29;30979:6;30957:29;:::i;:::-;30949:37;;31041:4;31035;31031:15;31023:23;;30745:308;;;:::o;31059:132::-;31126:4;31149:3;31141:11;;31179:4;31174:3;31170:14;31162:22;;31059:132;;;:::o;31197:114::-;31264:6;31298:5;31292:12;31282:22;;31197:114;;;:::o;31317:98::-;31368:6;31402:5;31396:12;31386:22;;31317:98;;;:::o;31421:99::-;31473:6;31507:5;31501:12;31491:22;;31421:99;;;:::o;31526:113::-;31596:4;31628;31623:3;31619:14;31611:22;;31526:113;;;:::o;31645:184::-;31744:11;31778:6;31773:3;31766:19;31818:4;31813:3;31809:14;31794:29;;31645:184;;;;:::o;31835:168::-;31918:11;31952:6;31947:3;31940:19;31992:4;31987:3;31983:14;31968:29;;31835:168;;;;:::o;32009:169::-;32093:11;32127:6;32122:3;32115:19;32167:4;32162:3;32158:14;32143:29;;32009:169;;;;:::o;32184:305::-;32224:3;32243:20;32261:1;32243:20;:::i;:::-;32238:25;;32277:20;32295:1;32277:20;:::i;:::-;32272:25;;32431:1;32363:66;32359:74;32356:1;32353:81;32350:107;;;32437:18;;:::i;:::-;32350:107;32481:1;32478;32474:9;32467:16;;32184:305;;;;:::o;32495:96::-;32532:7;32561:24;32579:5;32561:24;:::i;:::-;32550:35;;32495:96;;;:::o;32597:90::-;32631:7;32674:5;32667:13;32660:21;32649:32;;32597:90;;;:::o;32693:149::-;32729:7;32769:66;32762:5;32758:78;32747:89;;32693:149;;;:::o;32848:126::-;32885:7;32925:42;32918:5;32914:54;32903:65;;32848:126;;;:::o;32980:77::-;33017:7;33046:5;33035:16;;32980:77;;;:::o;33063:154::-;33147:6;33142:3;33137;33124:30;33209:1;33200:6;33195:3;33191:16;33184:27;33063:154;;;:::o;33223:307::-;33291:1;33301:113;33315:6;33312:1;33309:13;33301:113;;;33400:1;33395:3;33391:11;33385:18;33381:1;33376:3;33372:11;33365:39;33337:2;33334:1;33330:10;33325:15;;33301:113;;;33432:6;33429:1;33426:13;33423:101;;;33512:1;33503:6;33498:3;33494:16;33487:27;33423:101;33272:258;33223:307;;;:::o;33536:320::-;33580:6;33617:1;33611:4;33607:12;33597:22;;33664:1;33658:4;33654:12;33685:18;33675:81;;33741:4;33733:6;33729:17;33719:27;;33675:81;33803:2;33795:6;33792:14;33772:18;33769:38;33766:84;;;33822:18;;:::i;:::-;33766:84;33587:269;33536:320;;;:::o;33862:281::-;33945:27;33967:4;33945:27;:::i;:::-;33937:6;33933:40;34075:6;34063:10;34060:22;34039:18;34027:10;34024:34;34021:62;34018:88;;;34086:18;;:::i;:::-;34018:88;34126:10;34122:2;34115:22;33905:238;33862:281;;:::o;34149:233::-;34188:3;34211:24;34229:5;34211:24;:::i;:::-;34202:33;;34257:66;34250:5;34247:77;34244:103;;;34327:18;;:::i;:::-;34244:103;34374:1;34367:5;34363:13;34356:20;;34149:233;;;:::o;34388:180::-;34436:77;34433:1;34426:88;34533:4;34530:1;34523:15;34557:4;34554:1;34547:15;34574:180;34622:77;34619:1;34612:88;34719:4;34716:1;34709:15;34743:4;34740:1;34733:15;34760:180;34808:77;34805:1;34798:88;34905:4;34902:1;34895:15;34929:4;34926:1;34919:15;34946:180;34994:77;34991:1;34984:88;35091:4;35088:1;35081:15;35115:4;35112:1;35105:15;35132:183;35167:3;35205:1;35187:16;35184:23;35181:128;;;35243:1;35240;35237;35222:23;35265:34;35296:1;35290:8;35265:34;:::i;:::-;35258:41;;35181:128;35132:183;:::o;35321:117::-;35430:1;35427;35420:12;35444:117;35553:1;35550;35543:12;35567:117;35676:1;35673;35666:12;35690:117;35799:1;35796;35789:12;35813:117;35922:1;35919;35912:12;35936:102;35977:6;36028:2;36024:7;36019:2;36012:5;36008:14;36004:28;35994:38;;35936:102;;;:::o;36044:106::-;36088:8;36137:5;36132:3;36128:15;36107:36;;36044:106;;;:::o;36156:239::-;36296:34;36292:1;36284:6;36280:14;36273:58;36365:22;36360:2;36352:6;36348:15;36341:47;36156:239;:::o;36401:234::-;36541:34;36537:1;36529:6;36525:14;36518:58;36610:17;36605:2;36597:6;36593:15;36586:42;36401:234;:::o;36641:227::-;36781:34;36777:1;36769:6;36765:14;36758:58;36850:10;36845:2;36837:6;36833:15;36826:35;36641:227;:::o;36874:225::-;37014:34;37010:1;37002:6;36998:14;36991:58;37083:8;37078:2;37070:6;37066:15;37059:33;36874:225;:::o;37105:229::-;37245:34;37241:1;37233:6;37229:14;37222:58;37314:12;37309:2;37301:6;37297:15;37290:37;37105:229;:::o;37340:224::-;37480:34;37476:1;37468:6;37464:14;37457:58;37549:7;37544:2;37536:6;37532:15;37525:32;37340:224;:::o;37570:229::-;37710:34;37706:1;37698:6;37694:14;37687:58;37779:12;37774:2;37766:6;37762:15;37755:37;37570:229;:::o;37805:182::-;37945:34;37941:1;37933:6;37929:14;37922:58;37805:182;:::o;37993:228::-;38133:34;38129:1;38121:6;38117:14;38110:58;38202:11;38197:2;38189:6;38185:15;38178:36;37993:228;:::o;38227:::-;38367:34;38363:1;38355:6;38351:14;38344:58;38436:11;38431:2;38423:6;38419:15;38412:36;38227:228;:::o;38461:227::-;38601:34;38597:1;38589:6;38585:14;38578:58;38670:10;38665:2;38657:6;38653:15;38646:35;38461:227;:::o;38694:220::-;38834:34;38830:1;38822:6;38818:14;38811:58;38903:3;38898:2;38890:6;38886:15;38879:28;38694:220;:::o;38920:711::-;38959:3;38997:4;38979:16;38976:26;38973:39;;;39005:5;;38973:39;39034:20;;:::i;:::-;39109:1;39091:16;39087:24;39084:1;39078:4;39063:49;39142:4;39136:11;39241:16;39234:4;39226:6;39222:17;39219:39;39186:18;39178:6;39175:30;39159:113;39156:146;;;39287:5;;;;39156:146;39333:6;39327:4;39323:17;39369:3;39363:10;39396:18;39388:6;39385:30;39382:43;;;39418:5;;;;;;39382:43;39466:6;39459:4;39454:3;39450:14;39446:27;39525:1;39507:16;39503:24;39497:4;39493:35;39488:3;39485:44;39482:57;;;39532:5;;;;;;;39482:57;39549;39597:6;39591:4;39587:17;39579:6;39575:30;39569:4;39549:57;:::i;:::-;39622:3;39615:10;;38963:668;;;;;38920:711;;:::o;39637:122::-;39710:24;39728:5;39710:24;:::i;:::-;39703:5;39700:35;39690:63;;39749:1;39746;39739:12;39690:63;39637:122;:::o;39765:116::-;39835:21;39850:5;39835:21;:::i;:::-;39828:5;39825:32;39815:60;;39871:1;39868;39861:12;39815:60;39765:116;:::o;39887:120::-;39959:23;39976:5;39959:23;:::i;:::-;39952:5;39949:34;39939:62;;39997:1;39994;39987:12;39939:62;39887:120;:::o;40013:122::-;40086:24;40104:5;40086:24;:::i;:::-;40079:5;40076:35;40066:63;;40125:1;40122;40115:12;40066:63;40013:122;:::o
Swarm Source
ipfs://57e11402a4c575d4e4c72987bdf5d1c1d82138b25b0da75ba9b37e55e6633674
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.