ERC-1155
Overview
Max Total Supply
3,232
Holders
3,100
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LoveByBC
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-27 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: t.sol // Blockify Technologies pragma solidity ^0.8.4; contract LoveByBC is ERC1155, Ownable { uint256 public immutable mintEnd; constructor() ERC1155("ipfs://bafkreigyr7sl6usfptvjmvq54k5fujaez5ynkrxuohem7ov2lsc6lbmwci") { mintEnd = block.timestamp + 24 hours; } function mint() public { require(block.timestamp <= mintEnd, "Mint ended!"); require(balanceOf(msg.sender,1) < 1, 'Already Minted!'); _mint(msg.sender, 1, 1, ""); } }
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":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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
60a06040523480156200001157600080fd5b506040518060800160405280604281526020016200309c604291396200003d816200007c60201b60201c565b506200005e620000526200009860201b60201c565b620000a060201b60201c565b62015180426200006f919062000216565b6080818152505062000311565b80600290805190602001906200009492919062000166565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000174906200027d565b90600052602060002090601f016020900481019282620001985760008555620001e4565b82601f10620001b357805160ff1916838001178555620001e4565b82800160010185558215620001e4579182015b82811115620001e3578251825591602001919060010190620001c6565b5b509050620001f39190620001f7565b5090565b5b8082111562000212576000816000905550600101620001f8565b5090565b6000620002238262000273565b9150620002308362000273565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620002685762000267620002b3565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200029657607f821691505b60208210811415620002ad57620002ac620002e2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b608051612d6862000334600039600081816104c401526108340152612d686000f3fe608060405234801561001057600080fd5b50600436106100ce5760003560e01c8063715018a61161008c578063e985e9c511610066578063e985e9c5146101fd578063ea2b4ab21461022d578063f242432a1461024b578063f2fde38b14610267576100ce565b8063715018a6146101b95780638da5cb5b146101c3578063a22cb465146101e1576100ce565b8062fdd58e146100d357806301ffc9a7146101035780630e89341c146101335780631249c58b146101635780632eb2c2d61461016d5780634e1273f414610189575b600080fd5b6100ed60048036038101906100e89190611cb0565b610283565b6040516100fa9190612430565b60405180910390f35b61011d60048036038101906101189190611d68565b61034c565b60405161012a9190612233565b60405180910390f35b61014d60048036038101906101489190611dc2565b61042e565b60405161015a919061224e565b60405180910390f35b61016b6104c2565b005b61018760048036038101906101829190611b0a565b610590565b005b6101a3600480360381019061019e9190611cf0565b610631565b6040516101b091906121da565b60405180910390f35b6101c161074a565b005b6101cb61075e565b6040516101d891906120fd565b60405180910390f35b6101fb60048036038101906101f69190611c70565b610788565b005b61021760048036038101906102129190611aca565b61079e565b6040516102249190612233565b60405180910390f35b610235610832565b6040516102429190612430565b60405180910390f35b61026560048036038101906102609190611bd9565b610856565b005b610281600480360381019061027c9190611a9d565b6108f7565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156102f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102eb90612330565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061041757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061042757506104268261097b565b5b9050919050565b60606002805461043d9061269f565b80601f01602080910402602001604051908101604052809291908181526020018280546104699061269f565b80156104b65780601f1061048b576101008083540402835291602001916104b6565b820191906000526020600020905b81548152906001019060200180831161049957829003601f168201915b50505050509050919050565b7f0000000000000000000000000000000000000000000000000000000000000000421115610525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051c906122d0565b60405180910390fd5b6001610532336001610283565b10610572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056990612310565b60405180910390fd5b61058e33600180604051806020016040528060008152506109e5565b565b610598610b96565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105de57506105dd856105d8610b96565b61079e565b5b61061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490612290565b60405180910390fd5b61062a8585858585610b9e565b5050505050565b60608151835114610677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066e906123d0565b60405180910390fd5b6000835167ffffffffffffffff811115610694576106936127d8565b5b6040519080825280602002602001820160405280156106c25781602001602082028036833780820191505090505b50905060005b845181101561073f5761070f8582815181106106e7576106e66127a9565b5b6020026020010151858381518110610702576107016127a9565b5b6020026020010151610283565b828281518110610722576107216127a9565b5b6020026020010181815250508061073890612702565b90506106c8565b508091505092915050565b610752610ec0565b61075c6000610f3e565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61079a610793610b96565b8383611004565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61085e610b96565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108a457506108a38561089e610b96565b61079e565b5b6108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90612290565b60405180910390fd5b6108f08585858585611171565b5050505050565b6108ff610ec0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610966906122f0565b60405180910390fd5b61097881610f3e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c90612410565b60405180910390fd5b6000610a5f610b96565b90506000610a6c8561140d565b90506000610a798561140d565b9050610a8a83600089858589611487565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ae99190612593565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610b6792919061244b565b60405180910390a4610b7e8360008985858961148f565b610b8d83600089898989611497565b50505050505050565b600033905090565b8151835114610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd9906123f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612350565b60405180910390fd5b6000610c5c610b96565b9050610c6c818787878787611487565b60005b8451811015610e1d576000858281518110610c8d57610c8c6127a9565b5b602002602001015190506000858381518110610cac57610cab6127a9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490612370565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e029190612593565b9250508190555050505080610e1690612702565b9050610c6f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e949291906121fc565b60405180910390a4610eaa81878787878761148f565b610eb881878787878761167e565b505050505050565b610ec8610b96565b73ffffffffffffffffffffffffffffffffffffffff16610ee661075e565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390612390565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a906123b0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111649190612233565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890612350565b60405180910390fd5b60006111eb610b96565b905060006111f88561140d565b905060006112058561140d565b9050611215838989858589611487565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390612370565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113619190612593565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516113de92919061244b565b60405180910390a46113f4848a8a86868a61148f565b611402848a8a8a8a8a611497565b505050505050505050565b60606000600167ffffffffffffffff81111561142c5761142b6127d8565b5b60405190808252806020026020018201604052801561145a5781602001602082028036833780820191505090505b5090508281600081518110611472576114716127a9565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6114b68473ffffffffffffffffffffffffffffffffffffffff16611865565b15611676578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016114fc959493929190612180565b602060405180830381600087803b15801561151657600080fd5b505af192505050801561154757506040513d601f19601f820116820180604052508101906115449190611d95565b60015b6115ed57611553612807565b806308c379a014156115b05750611568612c40565b8061157357506115b2565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a7919061224e565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490612270565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b906122b0565b60405180910390fd5b505b505050505050565b61169d8473ffffffffffffffffffffffffffffffffffffffff16611865565b1561185d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016116e3959493929190612118565b602060405180830381600087803b1580156116fd57600080fd5b505af192505050801561172e57506040513d601f19601f8201168201806040525081019061172b9190611d95565b60015b6117d45761173a612807565b806308c379a01415611797575061174f612c40565b8061175a5750611799565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e919061224e565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90612270565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461185b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611852906122b0565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600061189b61189684612499565b612474565b905080838252602082019050828560208602820111156118be576118bd61282e565b5b60005b858110156118ee57816118d488826119aa565b8452602084019350602083019250506001810190506118c1565b5050509392505050565b600061190b611906846124c5565b612474565b9050808382526020820190508285602086028201111561192e5761192d61282e565b5b60005b8581101561195e57816119448882611a88565b845260208401935060208301925050600181019050611931565b5050509392505050565b600061197b611976846124f1565b612474565b90508281526020810184848401111561199757611996612833565b5b6119a284828561265d565b509392505050565b6000813590506119b981612cd6565b92915050565b600082601f8301126119d4576119d3612829565b5b81356119e4848260208601611888565b91505092915050565b600082601f830112611a0257611a01612829565b5b8135611a128482602086016118f8565b91505092915050565b600081359050611a2a81612ced565b92915050565b600081359050611a3f81612d04565b92915050565b600081519050611a5481612d04565b92915050565b600082601f830112611a6f57611a6e612829565b5b8135611a7f848260208601611968565b91505092915050565b600081359050611a9781612d1b565b92915050565b600060208284031215611ab357611ab261283d565b5b6000611ac1848285016119aa565b91505092915050565b60008060408385031215611ae157611ae061283d565b5b6000611aef858286016119aa565b9250506020611b00858286016119aa565b9150509250929050565b600080600080600060a08688031215611b2657611b2561283d565b5b6000611b34888289016119aa565b9550506020611b45888289016119aa565b945050604086013567ffffffffffffffff811115611b6657611b65612838565b5b611b72888289016119ed565b935050606086013567ffffffffffffffff811115611b9357611b92612838565b5b611b9f888289016119ed565b925050608086013567ffffffffffffffff811115611bc057611bbf612838565b5b611bcc88828901611a5a565b9150509295509295909350565b600080600080600060a08688031215611bf557611bf461283d565b5b6000611c03888289016119aa565b9550506020611c14888289016119aa565b9450506040611c2588828901611a88565b9350506060611c3688828901611a88565b925050608086013567ffffffffffffffff811115611c5757611c56612838565b5b611c6388828901611a5a565b9150509295509295909350565b60008060408385031215611c8757611c8661283d565b5b6000611c95858286016119aa565b9250506020611ca685828601611a1b565b9150509250929050565b60008060408385031215611cc757611cc661283d565b5b6000611cd5858286016119aa565b9250506020611ce685828601611a88565b9150509250929050565b60008060408385031215611d0757611d0661283d565b5b600083013567ffffffffffffffff811115611d2557611d24612838565b5b611d31858286016119bf565b925050602083013567ffffffffffffffff811115611d5257611d51612838565b5b611d5e858286016119ed565b9150509250929050565b600060208284031215611d7e57611d7d61283d565b5b6000611d8c84828501611a30565b91505092915050565b600060208284031215611dab57611daa61283d565b5b6000611db984828501611a45565b91505092915050565b600060208284031215611dd857611dd761283d565b5b6000611de684828501611a88565b91505092915050565b6000611dfb83836120df565b60208301905092915050565b611e10816125e9565b82525050565b6000611e2182612532565b611e2b8185612560565b9350611e3683612522565b8060005b83811015611e67578151611e4e8882611def565b9750611e5983612553565b925050600181019050611e3a565b5085935050505092915050565b611e7d816125fb565b82525050565b6000611e8e8261253d565b611e988185612571565b9350611ea881856020860161266c565b611eb181612842565b840191505092915050565b6000611ec782612548565b611ed18185612582565b9350611ee181856020860161266c565b611eea81612842565b840191505092915050565b6000611f02603483612582565b9150611f0d82612860565b604082019050919050565b6000611f25602f83612582565b9150611f30826128af565b604082019050919050565b6000611f48602883612582565b9150611f53826128fe565b604082019050919050565b6000611f6b600b83612582565b9150611f768261294d565b602082019050919050565b6000611f8e602683612582565b9150611f9982612976565b604082019050919050565b6000611fb1600f83612582565b9150611fbc826129c5565b602082019050919050565b6000611fd4602a83612582565b9150611fdf826129ee565b604082019050919050565b6000611ff7602583612582565b915061200282612a3d565b604082019050919050565b600061201a602a83612582565b915061202582612a8c565b604082019050919050565b600061203d602083612582565b915061204882612adb565b602082019050919050565b6000612060602983612582565b915061206b82612b04565b604082019050919050565b6000612083602983612582565b915061208e82612b53565b604082019050919050565b60006120a6602883612582565b91506120b182612ba2565b604082019050919050565b60006120c9602183612582565b91506120d482612bf1565b604082019050919050565b6120e881612653565b82525050565b6120f781612653565b82525050565b60006020820190506121126000830184611e07565b92915050565b600060a08201905061212d6000830188611e07565b61213a6020830187611e07565b818103604083015261214c8186611e16565b905081810360608301526121608185611e16565b905081810360808301526121748184611e83565b90509695505050505050565b600060a0820190506121956000830188611e07565b6121a26020830187611e07565b6121af60408301866120ee565b6121bc60608301856120ee565b81810360808301526121ce8184611e83565b90509695505050505050565b600060208201905081810360008301526121f48184611e16565b905092915050565b600060408201905081810360008301526122168185611e16565b9050818103602083015261222a8184611e16565b90509392505050565b60006020820190506122486000830184611e74565b92915050565b600060208201905081810360008301526122688184611ebc565b905092915050565b6000602082019050818103600083015261228981611ef5565b9050919050565b600060208201905081810360008301526122a981611f18565b9050919050565b600060208201905081810360008301526122c981611f3b565b9050919050565b600060208201905081810360008301526122e981611f5e565b9050919050565b6000602082019050818103600083015261230981611f81565b9050919050565b6000602082019050818103600083015261232981611fa4565b9050919050565b6000602082019050818103600083015261234981611fc7565b9050919050565b6000602082019050818103600083015261236981611fea565b9050919050565b600060208201905081810360008301526123898161200d565b9050919050565b600060208201905081810360008301526123a981612030565b9050919050565b600060208201905081810360008301526123c981612053565b9050919050565b600060208201905081810360008301526123e981612076565b9050919050565b6000602082019050818103600083015261240981612099565b9050919050565b60006020820190508181036000830152612429816120bc565b9050919050565b600060208201905061244560008301846120ee565b92915050565b600060408201905061246060008301856120ee565b61246d60208301846120ee565b9392505050565b600061247e61248f565b905061248a82826126d1565b919050565b6000604051905090565b600067ffffffffffffffff8211156124b4576124b36127d8565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156124e0576124df6127d8565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561250c5761250b6127d8565b5b61251582612842565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061259e82612653565b91506125a983612653565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125de576125dd61274b565b5b828201905092915050565b60006125f482612633565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561268a57808201518184015260208101905061266f565b83811115612699576000848401525b50505050565b600060028204905060018216806126b757607f821691505b602082108114156126cb576126ca61277a565b5b50919050565b6126da82612842565b810181811067ffffffffffffffff821117156126f9576126f86127d8565b5b80604052505050565b600061270d82612653565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127405761273f61274b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156128265760046000803e612823600051612853565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4d696e7420656e64656421000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479204d696e746564210000000000000000000000000000000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015612c5057612cd3565b612c5861248f565b60043d036004823e80513d602482011167ffffffffffffffff82111715612c80575050612cd3565b808201805167ffffffffffffffff811115612c9e5750505050612cd3565b80602083010160043d038501811115612cbb575050505050612cd3565b612cca826020018501866126d1565b82955050505050505b90565b612cdf816125e9565b8114612cea57600080fd5b50565b612cf6816125fb565b8114612d0157600080fd5b50565b612d0d81612607565b8114612d1857600080fd5b50565b612d2481612653565b8114612d2f57600080fd5b5056fea2646970667358221220c053db26421fea7a5a585618230ef4fc4896f2ada10746e419904fe14b0a3a8464736f6c63430008070033697066733a2f2f6261666b72656967797237736c367573667074766a6d767135346b3566756a61657a35796e6b7278756f68656d376f76326c7363366c626d776369
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ce5760003560e01c8063715018a61161008c578063e985e9c511610066578063e985e9c5146101fd578063ea2b4ab21461022d578063f242432a1461024b578063f2fde38b14610267576100ce565b8063715018a6146101b95780638da5cb5b146101c3578063a22cb465146101e1576100ce565b8062fdd58e146100d357806301ffc9a7146101035780630e89341c146101335780631249c58b146101635780632eb2c2d61461016d5780634e1273f414610189575b600080fd5b6100ed60048036038101906100e89190611cb0565b610283565b6040516100fa9190612430565b60405180910390f35b61011d60048036038101906101189190611d68565b61034c565b60405161012a9190612233565b60405180910390f35b61014d60048036038101906101489190611dc2565b61042e565b60405161015a919061224e565b60405180910390f35b61016b6104c2565b005b61018760048036038101906101829190611b0a565b610590565b005b6101a3600480360381019061019e9190611cf0565b610631565b6040516101b091906121da565b60405180910390f35b6101c161074a565b005b6101cb61075e565b6040516101d891906120fd565b60405180910390f35b6101fb60048036038101906101f69190611c70565b610788565b005b61021760048036038101906102129190611aca565b61079e565b6040516102249190612233565b60405180910390f35b610235610832565b6040516102429190612430565b60405180910390f35b61026560048036038101906102609190611bd9565b610856565b005b610281600480360381019061027c9190611a9d565b6108f7565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156102f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102eb90612330565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061041757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061042757506104268261097b565b5b9050919050565b60606002805461043d9061269f565b80601f01602080910402602001604051908101604052809291908181526020018280546104699061269f565b80156104b65780601f1061048b576101008083540402835291602001916104b6565b820191906000526020600020905b81548152906001019060200180831161049957829003601f168201915b50505050509050919050565b7f00000000000000000000000000000000000000000000000000000000635c1c6b421115610525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051c906122d0565b60405180910390fd5b6001610532336001610283565b10610572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056990612310565b60405180910390fd5b61058e33600180604051806020016040528060008152506109e5565b565b610598610b96565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105de57506105dd856105d8610b96565b61079e565b5b61061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061490612290565b60405180910390fd5b61062a8585858585610b9e565b5050505050565b60608151835114610677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066e906123d0565b60405180910390fd5b6000835167ffffffffffffffff811115610694576106936127d8565b5b6040519080825280602002602001820160405280156106c25781602001602082028036833780820191505090505b50905060005b845181101561073f5761070f8582815181106106e7576106e66127a9565b5b6020026020010151858381518110610702576107016127a9565b5b6020026020010151610283565b828281518110610722576107216127a9565b5b6020026020010181815250508061073890612702565b90506106c8565b508091505092915050565b610752610ec0565b61075c6000610f3e565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61079a610793610b96565b8383611004565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f00000000000000000000000000000000000000000000000000000000635c1c6b81565b61085e610b96565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108a457506108a38561089e610b96565b61079e565b5b6108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90612290565b60405180910390fd5b6108f08585858585611171565b5050505050565b6108ff610ec0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610966906122f0565b60405180910390fd5b61097881610f3e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c90612410565b60405180910390fd5b6000610a5f610b96565b90506000610a6c8561140d565b90506000610a798561140d565b9050610a8a83600089858589611487565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ae99190612593565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610b6792919061244b565b60405180910390a4610b7e8360008985858961148f565b610b8d83600089898989611497565b50505050505050565b600033905090565b8151835114610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd9906123f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612350565b60405180910390fd5b6000610c5c610b96565b9050610c6c818787878787611487565b60005b8451811015610e1d576000858281518110610c8d57610c8c6127a9565b5b602002602001015190506000858381518110610cac57610cab6127a9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490612370565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e029190612593565b9250508190555050505080610e1690612702565b9050610c6f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e949291906121fc565b60405180910390a4610eaa81878787878761148f565b610eb881878787878761167e565b505050505050565b610ec8610b96565b73ffffffffffffffffffffffffffffffffffffffff16610ee661075e565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390612390565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a906123b0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111649190612233565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890612350565b60405180910390fd5b60006111eb610b96565b905060006111f88561140d565b905060006112058561140d565b9050611215838989858589611487565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390612370565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113619190612593565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516113de92919061244b565b60405180910390a46113f4848a8a86868a61148f565b611402848a8a8a8a8a611497565b505050505050505050565b60606000600167ffffffffffffffff81111561142c5761142b6127d8565b5b60405190808252806020026020018201604052801561145a5781602001602082028036833780820191505090505b5090508281600081518110611472576114716127a9565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6114b68473ffffffffffffffffffffffffffffffffffffffff16611865565b15611676578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016114fc959493929190612180565b602060405180830381600087803b15801561151657600080fd5b505af192505050801561154757506040513d601f19601f820116820180604052508101906115449190611d95565b60015b6115ed57611553612807565b806308c379a014156115b05750611568612c40565b8061157357506115b2565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a7919061224e565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490612270565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b906122b0565b60405180910390fd5b505b505050505050565b61169d8473ffffffffffffffffffffffffffffffffffffffff16611865565b1561185d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016116e3959493929190612118565b602060405180830381600087803b1580156116fd57600080fd5b505af192505050801561172e57506040513d601f19601f8201168201806040525081019061172b9190611d95565b60015b6117d45761173a612807565b806308c379a01415611797575061174f612c40565b8061175a5750611799565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e919061224e565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90612270565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461185b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611852906122b0565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600061189b61189684612499565b612474565b905080838252602082019050828560208602820111156118be576118bd61282e565b5b60005b858110156118ee57816118d488826119aa565b8452602084019350602083019250506001810190506118c1565b5050509392505050565b600061190b611906846124c5565b612474565b9050808382526020820190508285602086028201111561192e5761192d61282e565b5b60005b8581101561195e57816119448882611a88565b845260208401935060208301925050600181019050611931565b5050509392505050565b600061197b611976846124f1565b612474565b90508281526020810184848401111561199757611996612833565b5b6119a284828561265d565b509392505050565b6000813590506119b981612cd6565b92915050565b600082601f8301126119d4576119d3612829565b5b81356119e4848260208601611888565b91505092915050565b600082601f830112611a0257611a01612829565b5b8135611a128482602086016118f8565b91505092915050565b600081359050611a2a81612ced565b92915050565b600081359050611a3f81612d04565b92915050565b600081519050611a5481612d04565b92915050565b600082601f830112611a6f57611a6e612829565b5b8135611a7f848260208601611968565b91505092915050565b600081359050611a9781612d1b565b92915050565b600060208284031215611ab357611ab261283d565b5b6000611ac1848285016119aa565b91505092915050565b60008060408385031215611ae157611ae061283d565b5b6000611aef858286016119aa565b9250506020611b00858286016119aa565b9150509250929050565b600080600080600060a08688031215611b2657611b2561283d565b5b6000611b34888289016119aa565b9550506020611b45888289016119aa565b945050604086013567ffffffffffffffff811115611b6657611b65612838565b5b611b72888289016119ed565b935050606086013567ffffffffffffffff811115611b9357611b92612838565b5b611b9f888289016119ed565b925050608086013567ffffffffffffffff811115611bc057611bbf612838565b5b611bcc88828901611a5a565b9150509295509295909350565b600080600080600060a08688031215611bf557611bf461283d565b5b6000611c03888289016119aa565b9550506020611c14888289016119aa565b9450506040611c2588828901611a88565b9350506060611c3688828901611a88565b925050608086013567ffffffffffffffff811115611c5757611c56612838565b5b611c6388828901611a5a565b9150509295509295909350565b60008060408385031215611c8757611c8661283d565b5b6000611c95858286016119aa565b9250506020611ca685828601611a1b565b9150509250929050565b60008060408385031215611cc757611cc661283d565b5b6000611cd5858286016119aa565b9250506020611ce685828601611a88565b9150509250929050565b60008060408385031215611d0757611d0661283d565b5b600083013567ffffffffffffffff811115611d2557611d24612838565b5b611d31858286016119bf565b925050602083013567ffffffffffffffff811115611d5257611d51612838565b5b611d5e858286016119ed565b9150509250929050565b600060208284031215611d7e57611d7d61283d565b5b6000611d8c84828501611a30565b91505092915050565b600060208284031215611dab57611daa61283d565b5b6000611db984828501611a45565b91505092915050565b600060208284031215611dd857611dd761283d565b5b6000611de684828501611a88565b91505092915050565b6000611dfb83836120df565b60208301905092915050565b611e10816125e9565b82525050565b6000611e2182612532565b611e2b8185612560565b9350611e3683612522565b8060005b83811015611e67578151611e4e8882611def565b9750611e5983612553565b925050600181019050611e3a565b5085935050505092915050565b611e7d816125fb565b82525050565b6000611e8e8261253d565b611e988185612571565b9350611ea881856020860161266c565b611eb181612842565b840191505092915050565b6000611ec782612548565b611ed18185612582565b9350611ee181856020860161266c565b611eea81612842565b840191505092915050565b6000611f02603483612582565b9150611f0d82612860565b604082019050919050565b6000611f25602f83612582565b9150611f30826128af565b604082019050919050565b6000611f48602883612582565b9150611f53826128fe565b604082019050919050565b6000611f6b600b83612582565b9150611f768261294d565b602082019050919050565b6000611f8e602683612582565b9150611f9982612976565b604082019050919050565b6000611fb1600f83612582565b9150611fbc826129c5565b602082019050919050565b6000611fd4602a83612582565b9150611fdf826129ee565b604082019050919050565b6000611ff7602583612582565b915061200282612a3d565b604082019050919050565b600061201a602a83612582565b915061202582612a8c565b604082019050919050565b600061203d602083612582565b915061204882612adb565b602082019050919050565b6000612060602983612582565b915061206b82612b04565b604082019050919050565b6000612083602983612582565b915061208e82612b53565b604082019050919050565b60006120a6602883612582565b91506120b182612ba2565b604082019050919050565b60006120c9602183612582565b91506120d482612bf1565b604082019050919050565b6120e881612653565b82525050565b6120f781612653565b82525050565b60006020820190506121126000830184611e07565b92915050565b600060a08201905061212d6000830188611e07565b61213a6020830187611e07565b818103604083015261214c8186611e16565b905081810360608301526121608185611e16565b905081810360808301526121748184611e83565b90509695505050505050565b600060a0820190506121956000830188611e07565b6121a26020830187611e07565b6121af60408301866120ee565b6121bc60608301856120ee565b81810360808301526121ce8184611e83565b90509695505050505050565b600060208201905081810360008301526121f48184611e16565b905092915050565b600060408201905081810360008301526122168185611e16565b9050818103602083015261222a8184611e16565b90509392505050565b60006020820190506122486000830184611e74565b92915050565b600060208201905081810360008301526122688184611ebc565b905092915050565b6000602082019050818103600083015261228981611ef5565b9050919050565b600060208201905081810360008301526122a981611f18565b9050919050565b600060208201905081810360008301526122c981611f3b565b9050919050565b600060208201905081810360008301526122e981611f5e565b9050919050565b6000602082019050818103600083015261230981611f81565b9050919050565b6000602082019050818103600083015261232981611fa4565b9050919050565b6000602082019050818103600083015261234981611fc7565b9050919050565b6000602082019050818103600083015261236981611fea565b9050919050565b600060208201905081810360008301526123898161200d565b9050919050565b600060208201905081810360008301526123a981612030565b9050919050565b600060208201905081810360008301526123c981612053565b9050919050565b600060208201905081810360008301526123e981612076565b9050919050565b6000602082019050818103600083015261240981612099565b9050919050565b60006020820190508181036000830152612429816120bc565b9050919050565b600060208201905061244560008301846120ee565b92915050565b600060408201905061246060008301856120ee565b61246d60208301846120ee565b9392505050565b600061247e61248f565b905061248a82826126d1565b919050565b6000604051905090565b600067ffffffffffffffff8211156124b4576124b36127d8565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156124e0576124df6127d8565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561250c5761250b6127d8565b5b61251582612842565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061259e82612653565b91506125a983612653565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125de576125dd61274b565b5b828201905092915050565b60006125f482612633565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561268a57808201518184015260208101905061266f565b83811115612699576000848401525b50505050565b600060028204905060018216806126b757607f821691505b602082108114156126cb576126ca61277a565b5b50919050565b6126da82612842565b810181811067ffffffffffffffff821117156126f9576126f86127d8565b5b80604052505050565b600061270d82612653565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127405761273f61274b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156128265760046000803e612823600051612853565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4d696e7420656e64656421000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479204d696e746564210000000000000000000000000000000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015612c5057612cd3565b612c5861248f565b60043d036004823e80513d602482011167ffffffffffffffff82111715612c80575050612cd3565b808201805167ffffffffffffffff811115612c9e5750505050612cd3565b80602083010160043d038501811115612cbb575050505050612cd3565b612cca826020018501866126d1565b82955050505050505b90565b612cdf816125e9565b8114612cea57600080fd5b50565b612cf6816125fb565b8114612d0157600080fd5b50565b612d0d81612607565b8114612d1857600080fd5b50565b612d2481612653565b8114612d2f57600080fd5b5056fea2646970667358221220c053db26421fea7a5a585618230ef4fc4896f2ada10746e419904fe14b0a3a8464736f6c63430008070033
Deployed Bytecode Sourcemap
39228:460:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23624:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22647:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23368:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39467:213;;;:::i;:::-;;25568:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24020:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2776:103;;;:::i;:::-;;2128:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24617:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24844:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39273:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25084:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3034:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23624:230;23710:7;23757:1;23738:21;;:7;:21;;;;23730:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23824:9;:13;23834:2;23824:13;;;;;;;;;;;:22;23838:7;23824:22;;;;;;;;;;;;;;;;23817:29;;23624:230;;;;:::o;22647:310::-;22749:4;22801:26;22786:41;;;:11;:41;;;;:110;;;;22859:37;22844:52;;;:11;:52;;;;22786:110;:163;;;;22913:36;22937:11;22913:23;:36::i;:::-;22786:163;22766:183;;22647:310;;;:::o;23368:105::-;23428:13;23461:4;23454:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23368:105;;;:::o;39467:213::-;39545:7;39526:15;:26;;39518:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;39613:1;39587:23;39597:10;39608:1;39587:9;:23::i;:::-;:27;39579:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39645:27;39651:10;39663:1;39666;39645:27;;;;;;;;;;;;:5;:27::i;:::-;39467:213::o;25568:439::-;25809:12;:10;:12::i;:::-;25801:20;;:4;:20;;;:60;;;;25825:36;25842:4;25848:12;:10;:12::i;:::-;25825:16;:36::i;:::-;25801:60;25779:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25947:52;25970:4;25976:2;25980:3;25985:7;25994:4;25947:22;:52::i;:::-;25568:439;;;;;:::o;24020:524::-;24176:16;24237:3;:10;24218:8;:15;:29;24210:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24306:30;24353:8;:15;24339:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24306:63;;24387:9;24382:122;24406:8;:15;24402:1;:19;24382:122;;;24462:30;24472:8;24481:1;24472:11;;;;;;;;:::i;:::-;;;;;;;;24485:3;24489:1;24485:6;;;;;;;;:::i;:::-;;;;;;;;24462:9;:30::i;:::-;24443:13;24457:1;24443:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24423:3;;;;:::i;:::-;;;24382:122;;;;24523:13;24516:20;;;24020:524;;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;24617:155::-;24712:52;24731:12;:10;:12::i;:::-;24745:8;24755;24712:18;:52::i;:::-;24617:155;;:::o;24844:168::-;24943:4;24967:18;:27;24986:7;24967:27;;;;;;;;;;;;;;;:37;24995:8;24967:37;;;;;;;;;;;;;;;;;;;;;;;;;24960:44;;24844:168;;;;:::o;39273:32::-;;;:::o;25084:407::-;25300:12;:10;:12::i;:::-;25292:20;;:4;:20;;;:60;;;;25316:36;25333:4;25339:12;:10;:12::i;:::-;25316:16;:36::i;:::-;25292:60;25270:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25438:45;25456:4;25462:2;25466;25470:6;25478:4;25438:17;:45::i;:::-;25084:407;;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;;;3115:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;13928:157::-;14013:4;14052:25;14037:40;;;:11;:40;;;;14030:47;;13928:157;;;:::o;30267:729::-;30434:1;30420:16;;:2;:16;;;;30412:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30487:16;30506:12;:10;:12::i;:::-;30487:31;;30529:20;30552:21;30570:2;30552:17;:21::i;:::-;30529:44;;30584:24;30611:25;30629:6;30611:17;:25::i;:::-;30584:52;;30649:66;30670:8;30688:1;30692:2;30696:3;30701:7;30710:4;30649:20;:66::i;:::-;30749:6;30728:9;:13;30738:2;30728:13;;;;;;;;;;;:17;30742:2;30728:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30808:2;30771:52;;30804:1;30771:52;;30786:8;30771:52;;;30812:2;30816:6;30771:52;;;;;;;:::i;:::-;;;;;;;;30836:65;30856:8;30874:1;30878:2;30882:3;30887:7;30896:4;30836:19;:65::i;:::-;30914:74;30945:8;30963:1;30967:2;30971;30975:6;30983:4;30914:30;:74::i;:::-;30401:595;;;30267:729;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;27803:1146::-;28030:7;:14;28016:3;:10;:28;28008:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28122:1;28108:16;;:2;:16;;;;28100:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28179:16;28198:12;:10;:12::i;:::-;28179:31;;28223:60;28244:8;28254:4;28260:2;28264:3;28269:7;28278:4;28223:20;:60::i;:::-;28301:9;28296:421;28320:3;:10;28316:1;:14;28296:421;;;28352:10;28365:3;28369:1;28365:6;;;;;;;;:::i;:::-;;;;;;;;28352:19;;28386:14;28403:7;28411:1;28403:10;;;;;;;;:::i;:::-;;;;;;;;28386:27;;28430:19;28452:9;:13;28462:2;28452:13;;;;;;;;;;;:19;28466:4;28452:19;;;;;;;;;;;;;;;;28430:41;;28509:6;28494:11;:21;;28486:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28642:6;28628:11;:20;28606:9;:13;28616:2;28606:13;;;;;;;;;;;:19;28620:4;28606:19;;;;;;;;;;;;;;;:42;;;;28699:6;28678:9;:13;28688:2;28678:13;;;;;;;;;;;:17;28692:2;28678:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28337:380;;;28332:3;;;;:::i;:::-;;;28296:421;;;;28764:2;28734:47;;28758:4;28734:47;;28748:8;28734:47;;;28768:3;28773:7;28734:47;;;;;;;:::i;:::-;;;;;;;;28794:59;28814:8;28824:4;28830:2;28834:3;28839:7;28848:4;28794:19;:59::i;:::-;28866:75;28902:8;28912:4;28918:2;28922:3;28927:7;28936:4;28866:35;:75::i;:::-;27997:952;27803:1146;;;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3458:128;3395:191;:::o;34680:331::-;34835:8;34826:17;;:5;:17;;;;34818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34938:8;34900:18;:25;34919:5;34900:25;;;;;;;;;;;;;;;:35;34926:8;34900:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34984:8;34962:41;;34977:5;34962:41;;;34994:8;34962:41;;;;;;:::i;:::-;;;;;;;;34680:331;;;:::o;26471:974::-;26673:1;26659:16;;:2;:16;;;;26651:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26730:16;26749:12;:10;:12::i;:::-;26730:31;;26772:20;26795:21;26813:2;26795:17;:21::i;:::-;26772:44;;26827:24;26854:25;26872:6;26854:17;:25::i;:::-;26827:52;;26892:60;26913:8;26923:4;26929:2;26933:3;26938:7;26947:4;26892:20;:60::i;:::-;26965:19;26987:9;:13;26997:2;26987:13;;;;;;;;;;;:19;27001:4;26987:19;;;;;;;;;;;;;;;;26965:41;;27040:6;27025:11;:21;;27017:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27165:6;27151:11;:20;27129:9;:13;27139:2;27129:13;;;;;;;;;;;:19;27143:4;27129:19;;;;;;;;;;;;;;;:42;;;;27214:6;27193:9;:13;27203:2;27193:13;;;;;;;;;;;:17;27207:2;27193:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27269:2;27238:46;;27263:4;27238:46;;27253:8;27238:46;;;27273:2;27277:6;27238:46;;;;;;;:::i;:::-;;;;;;;;27297:59;27317:8;27327:4;27333:2;27337:3;27342:7;27351:4;27297:19;:59::i;:::-;27369:68;27400:8;27410:4;27416:2;27420;27424:6;27432:4;27369:30;:68::i;:::-;26640:805;;;;26471:974;;;;;:::o;38946:198::-;39012:16;39041:22;39080:1;39066:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39041:41;;39104:7;39093:5;39099:1;39093:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39131:5;39124:12;;;38946:198;;;:::o;35969:221::-;;;;;;;:::o;37145:220::-;;;;;;;:::o;37373:744::-;37588:15;:2;:13;;;:15::i;:::-;37584:526;;;37641:2;37624:38;;;37663:8;37673:4;37679:2;37683:6;37691:4;37624:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37620:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37972:6;37965:14;;;;;;;;;;;:::i;:::-;;;;;;;;37620:479;;;38021:62;;;;;;;;;;:::i;:::-;;;;;;;;37620:479;37758:43;;;37746:55;;;:8;:55;;;;37742:154;;37826:50;;;;;;;;;;:::i;:::-;;;;;;;;37742:154;37697:214;37584:526;37373:744;;;;;;:::o;38125:813::-;38365:15;:2;:13;;;:15::i;:::-;38361:570;;;38418:2;38401:43;;;38445:8;38455:4;38461:3;38466:7;38475:4;38401:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38397:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38793:6;38786:14;;;;;;;;;;;:::i;:::-;;;;;;;;38397:523;;;38842:62;;;;;;;;;;:::i;:::-;;;;;;;;38397:523;38574:48;;;38562:60;;;:8;:60;;;;38558:159;;38647:50;;;;;;;;;;:::i;:::-;;;;;;;;38558:159;38481:251;38361:570;38125:813;;;;;;:::o;4826:326::-;4886:4;5143:1;5121:7;:19;;;:23;5114:30;;4826:326;;;:::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:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3630:139::-;3676:5;3714:6;3701:20;3692:29;;3730:33;3757:5;3730:33;:::i;:::-;3630:139;;;;:::o;3775:329::-;3834:6;3883:2;3871:9;3862:7;3858:23;3854:32;3851:119;;;3889:79;;:::i;:::-;3851:119;4009:1;4034:53;4079:7;4070:6;4059:9;4055:22;4034:53;:::i;:::-;4024:63;;3980:117;3775:329;;;;:::o;4110:474::-;4178:6;4186;4235:2;4223:9;4214:7;4210:23;4206:32;4203:119;;;4241:79;;:::i;:::-;4203:119;4361:1;4386:53;4431:7;4422:6;4411:9;4407:22;4386:53;:::i;:::-;4376:63;;4332:117;4488:2;4514:53;4559:7;4550:6;4539:9;4535:22;4514:53;:::i;:::-;4504:63;;4459:118;4110:474;;;;;:::o;4590:1509::-;4744:6;4752;4760;4768;4776;4825:3;4813:9;4804:7;4800:23;4796:33;4793:120;;;4832:79;;:::i;:::-;4793:120;4952:1;4977:53;5022:7;5013:6;5002:9;4998:22;4977:53;:::i;:::-;4967:63;;4923:117;5079:2;5105:53;5150:7;5141:6;5130:9;5126:22;5105:53;:::i;:::-;5095:63;;5050:118;5235:2;5224:9;5220:18;5207:32;5266:18;5258:6;5255:30;5252:117;;;5288:79;;:::i;:::-;5252:117;5393:78;5463:7;5454:6;5443:9;5439:22;5393:78;:::i;:::-;5383:88;;5178:303;5548:2;5537:9;5533:18;5520:32;5579:18;5571:6;5568:30;5565:117;;;5601:79;;:::i;:::-;5565:117;5706:78;5776:7;5767:6;5756:9;5752:22;5706:78;:::i;:::-;5696:88;;5491:303;5861:3;5850:9;5846:19;5833:33;5893:18;5885:6;5882:30;5879:117;;;5915:79;;:::i;:::-;5879:117;6020:62;6074:7;6065:6;6054:9;6050:22;6020:62;:::i;:::-;6010:72;;5804:288;4590:1509;;;;;;;;:::o;6105:1089::-;6209:6;6217;6225;6233;6241;6290:3;6278:9;6269:7;6265:23;6261:33;6258:120;;;6297:79;;:::i;:::-;6258:120;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6544:2;6570:53;6615:7;6606:6;6595:9;6591:22;6570:53;:::i;:::-;6560:63;;6515:118;6672:2;6698:53;6743:7;6734:6;6723:9;6719:22;6698:53;:::i;:::-;6688:63;;6643:118;6800:2;6826:53;6871:7;6862:6;6851:9;6847:22;6826:53;:::i;:::-;6816:63;;6771:118;6956:3;6945:9;6941:19;6928:33;6988:18;6980:6;6977:30;6974:117;;;7010:79;;:::i;:::-;6974:117;7115:62;7169:7;7160:6;7149:9;7145:22;7115:62;:::i;:::-;7105:72;;6899:288;6105:1089;;;;;;;;:::o;7200:468::-;7265:6;7273;7322:2;7310:9;7301:7;7297:23;7293:32;7290:119;;;7328:79;;:::i;:::-;7290:119;7448:1;7473:53;7518:7;7509:6;7498:9;7494:22;7473:53;:::i;:::-;7463:63;;7419:117;7575:2;7601:50;7643:7;7634:6;7623:9;7619:22;7601:50;:::i;:::-;7591:60;;7546:115;7200:468;;;;;:::o;7674:474::-;7742:6;7750;7799:2;7787:9;7778:7;7774:23;7770:32;7767:119;;;7805:79;;:::i;:::-;7767:119;7925:1;7950:53;7995:7;7986:6;7975:9;7971:22;7950:53;:::i;:::-;7940:63;;7896:117;8052:2;8078:53;8123:7;8114:6;8103:9;8099:22;8078:53;:::i;:::-;8068:63;;8023:118;7674:474;;;;;:::o;8154:894::-;8272:6;8280;8329:2;8317:9;8308:7;8304:23;8300:32;8297:119;;;8335:79;;:::i;:::-;8297:119;8483:1;8472:9;8468:17;8455:31;8513:18;8505:6;8502:30;8499:117;;;8535:79;;:::i;:::-;8499:117;8640:78;8710:7;8701:6;8690:9;8686:22;8640:78;:::i;:::-;8630:88;;8426:302;8795:2;8784:9;8780:18;8767:32;8826:18;8818:6;8815:30;8812:117;;;8848:79;;:::i;:::-;8812:117;8953:78;9023:7;9014:6;9003:9;8999:22;8953:78;:::i;:::-;8943:88;;8738:303;8154:894;;;;;:::o;9054:327::-;9112:6;9161:2;9149:9;9140:7;9136:23;9132:32;9129:119;;;9167:79;;:::i;:::-;9129:119;9287:1;9312:52;9356:7;9347:6;9336:9;9332:22;9312:52;:::i;:::-;9302:62;;9258:116;9054:327;;;;:::o;9387:349::-;9456:6;9505:2;9493:9;9484:7;9480:23;9476:32;9473:119;;;9511:79;;:::i;:::-;9473:119;9631:1;9656:63;9711:7;9702:6;9691:9;9687:22;9656:63;:::i;:::-;9646:73;;9602:127;9387:349;;;;:::o;9742:329::-;9801:6;9850:2;9838:9;9829:7;9825:23;9821:32;9818:119;;;9856:79;;:::i;:::-;9818:119;9976:1;10001:53;10046:7;10037:6;10026:9;10022:22;10001:53;:::i;:::-;9991:63;;9947:117;9742:329;;;;:::o;10077:179::-;10146:10;10167:46;10209:3;10201:6;10167:46;:::i;:::-;10245:4;10240:3;10236:14;10222:28;;10077:179;;;;:::o;10262:118::-;10349:24;10367:5;10349:24;:::i;:::-;10344:3;10337:37;10262:118;;:::o;10416:732::-;10535:3;10564:54;10612:5;10564:54;:::i;:::-;10634:86;10713:6;10708:3;10634:86;:::i;:::-;10627:93;;10744:56;10794:5;10744:56;:::i;:::-;10823:7;10854:1;10839:284;10864:6;10861:1;10858:13;10839:284;;;10940:6;10934:13;10967:63;11026:3;11011:13;10967:63;:::i;:::-;10960:70;;11053:60;11106:6;11053:60;:::i;:::-;11043:70;;10899:224;10886:1;10883;10879:9;10874:14;;10839:284;;;10843:14;11139:3;11132:10;;10540:608;;;10416:732;;;;:::o;11154:109::-;11235:21;11250:5;11235:21;:::i;:::-;11230:3;11223:34;11154:109;;:::o;11269:360::-;11355:3;11383:38;11415:5;11383:38;:::i;:::-;11437:70;11500:6;11495:3;11437:70;:::i;:::-;11430:77;;11516:52;11561:6;11556:3;11549:4;11542:5;11538:16;11516:52;:::i;:::-;11593:29;11615:6;11593:29;:::i;:::-;11588:3;11584:39;11577:46;;11359:270;11269:360;;;;:::o;11635:364::-;11723:3;11751:39;11784:5;11751:39;:::i;:::-;11806:71;11870:6;11865:3;11806:71;:::i;:::-;11799:78;;11886:52;11931:6;11926:3;11919:4;11912:5;11908:16;11886:52;:::i;:::-;11963:29;11985:6;11963:29;:::i;:::-;11958:3;11954:39;11947:46;;11727:272;11635:364;;;;:::o;12005:366::-;12147:3;12168:67;12232:2;12227:3;12168:67;:::i;:::-;12161:74;;12244:93;12333:3;12244:93;:::i;:::-;12362:2;12357:3;12353:12;12346:19;;12005:366;;;:::o;12377:::-;12519:3;12540:67;12604:2;12599:3;12540:67;:::i;:::-;12533:74;;12616:93;12705:3;12616:93;:::i;:::-;12734:2;12729:3;12725:12;12718:19;;12377:366;;;:::o;12749:::-;12891:3;12912:67;12976:2;12971:3;12912:67;:::i;:::-;12905:74;;12988:93;13077:3;12988:93;:::i;:::-;13106:2;13101:3;13097:12;13090:19;;12749:366;;;:::o;13121:::-;13263:3;13284:67;13348:2;13343:3;13284:67;:::i;:::-;13277:74;;13360:93;13449:3;13360:93;:::i;:::-;13478:2;13473:3;13469:12;13462:19;;13121:366;;;:::o;13493:::-;13635:3;13656:67;13720:2;13715:3;13656:67;:::i;:::-;13649:74;;13732:93;13821:3;13732:93;:::i;:::-;13850:2;13845:3;13841:12;13834:19;;13493:366;;;:::o;13865:::-;14007:3;14028:67;14092:2;14087:3;14028:67;:::i;:::-;14021:74;;14104:93;14193:3;14104:93;:::i;:::-;14222:2;14217:3;14213:12;14206:19;;13865:366;;;:::o;14237:::-;14379:3;14400:67;14464:2;14459:3;14400:67;:::i;:::-;14393:74;;14476:93;14565:3;14476:93;:::i;:::-;14594:2;14589:3;14585:12;14578:19;;14237:366;;;:::o;14609:::-;14751:3;14772:67;14836:2;14831:3;14772:67;:::i;:::-;14765:74;;14848:93;14937:3;14848:93;:::i;:::-;14966:2;14961:3;14957:12;14950:19;;14609:366;;;:::o;14981:::-;15123:3;15144:67;15208:2;15203:3;15144:67;:::i;:::-;15137:74;;15220:93;15309:3;15220:93;:::i;:::-;15338:2;15333:3;15329:12;15322:19;;14981:366;;;:::o;15353:::-;15495:3;15516:67;15580:2;15575:3;15516:67;:::i;:::-;15509:74;;15592:93;15681:3;15592:93;:::i;:::-;15710:2;15705:3;15701:12;15694:19;;15353:366;;;:::o;15725:::-;15867:3;15888:67;15952:2;15947:3;15888:67;:::i;:::-;15881:74;;15964:93;16053:3;15964:93;:::i;:::-;16082:2;16077:3;16073:12;16066:19;;15725:366;;;:::o;16097:::-;16239:3;16260:67;16324:2;16319:3;16260:67;:::i;:::-;16253:74;;16336:93;16425:3;16336:93;:::i;:::-;16454:2;16449:3;16445:12;16438:19;;16097:366;;;:::o;16469:::-;16611:3;16632:67;16696:2;16691:3;16632:67;:::i;:::-;16625:74;;16708:93;16797:3;16708:93;:::i;:::-;16826:2;16821:3;16817:12;16810:19;;16469:366;;;:::o;16841:::-;16983:3;17004:67;17068:2;17063:3;17004:67;:::i;:::-;16997:74;;17080:93;17169:3;17080:93;:::i;:::-;17198:2;17193:3;17189:12;17182:19;;16841:366;;;:::o;17213:108::-;17290:24;17308:5;17290:24;:::i;:::-;17285:3;17278:37;17213:108;;:::o;17327:118::-;17414:24;17432:5;17414:24;:::i;:::-;17409:3;17402:37;17327:118;;:::o;17451:222::-;17544:4;17582:2;17571:9;17567:18;17559:26;;17595:71;17663:1;17652:9;17648:17;17639:6;17595:71;:::i;:::-;17451:222;;;;:::o;17679:1053::-;18002:4;18040:3;18029:9;18025:19;18017:27;;18054:71;18122:1;18111:9;18107:17;18098:6;18054:71;:::i;:::-;18135:72;18203:2;18192:9;18188:18;18179:6;18135:72;:::i;:::-;18254:9;18248:4;18244:20;18239:2;18228:9;18224:18;18217:48;18282:108;18385:4;18376:6;18282:108;:::i;:::-;18274:116;;18437:9;18431:4;18427:20;18422:2;18411:9;18407:18;18400:48;18465:108;18568:4;18559:6;18465:108;:::i;:::-;18457:116;;18621:9;18615:4;18611:20;18605:3;18594:9;18590:19;18583:49;18649:76;18720:4;18711:6;18649:76;:::i;:::-;18641:84;;17679:1053;;;;;;;;:::o;18738:751::-;18961:4;18999:3;18988:9;18984:19;18976:27;;19013:71;19081:1;19070:9;19066:17;19057:6;19013:71;:::i;:::-;19094:72;19162:2;19151:9;19147:18;19138:6;19094:72;:::i;:::-;19176;19244:2;19233:9;19229:18;19220:6;19176:72;:::i;:::-;19258;19326:2;19315:9;19311:18;19302:6;19258:72;:::i;:::-;19378:9;19372:4;19368:20;19362:3;19351:9;19347:19;19340:49;19406:76;19477:4;19468:6;19406:76;:::i;:::-;19398:84;;18738:751;;;;;;;;:::o;19495:373::-;19638:4;19676:2;19665:9;19661:18;19653:26;;19725:9;19719:4;19715:20;19711:1;19700:9;19696:17;19689:47;19753:108;19856:4;19847:6;19753:108;:::i;:::-;19745:116;;19495:373;;;;:::o;19874:634::-;20095:4;20133:2;20122:9;20118:18;20110:26;;20182:9;20176:4;20172:20;20168:1;20157:9;20153:17;20146:47;20210:108;20313:4;20304:6;20210:108;:::i;:::-;20202:116;;20365:9;20359:4;20355:20;20350:2;20339:9;20335:18;20328:48;20393:108;20496:4;20487:6;20393:108;:::i;:::-;20385:116;;19874:634;;;;;:::o;20514:210::-;20601:4;20639:2;20628:9;20624:18;20616:26;;20652:65;20714:1;20703:9;20699:17;20690:6;20652:65;:::i;:::-;20514:210;;;;:::o;20730:313::-;20843:4;20881:2;20870:9;20866:18;20858:26;;20930:9;20924:4;20920:20;20916:1;20905:9;20901:17;20894:47;20958:78;21031:4;21022:6;20958:78;:::i;:::-;20950:86;;20730:313;;;;:::o;21049:419::-;21215:4;21253:2;21242:9;21238:18;21230:26;;21302:9;21296:4;21292:20;21288:1;21277:9;21273:17;21266:47;21330:131;21456:4;21330:131;:::i;:::-;21322:139;;21049:419;;;:::o;21474:::-;21640:4;21678:2;21667:9;21663:18;21655:26;;21727:9;21721:4;21717:20;21713:1;21702:9;21698:17;21691:47;21755:131;21881:4;21755:131;:::i;:::-;21747:139;;21474:419;;;:::o;21899:::-;22065:4;22103:2;22092:9;22088:18;22080:26;;22152:9;22146:4;22142:20;22138:1;22127:9;22123:17;22116:47;22180:131;22306:4;22180:131;:::i;:::-;22172:139;;21899:419;;;:::o;22324:::-;22490:4;22528:2;22517:9;22513:18;22505:26;;22577:9;22571:4;22567:20;22563:1;22552:9;22548:17;22541:47;22605:131;22731:4;22605:131;:::i;:::-;22597:139;;22324:419;;;:::o;22749:::-;22915:4;22953:2;22942:9;22938:18;22930:26;;23002:9;22996:4;22992:20;22988:1;22977:9;22973:17;22966:47;23030:131;23156:4;23030:131;:::i;:::-;23022:139;;22749:419;;;:::o;23174:::-;23340:4;23378:2;23367:9;23363:18;23355:26;;23427:9;23421:4;23417:20;23413:1;23402:9;23398:17;23391:47;23455:131;23581:4;23455:131;:::i;:::-;23447:139;;23174:419;;;:::o;23599:::-;23765:4;23803:2;23792:9;23788:18;23780:26;;23852:9;23846:4;23842:20;23838:1;23827:9;23823:17;23816:47;23880:131;24006:4;23880:131;:::i;:::-;23872:139;;23599:419;;;:::o;24024:::-;24190:4;24228:2;24217:9;24213:18;24205:26;;24277:9;24271:4;24267:20;24263:1;24252:9;24248:17;24241:47;24305:131;24431:4;24305:131;:::i;:::-;24297:139;;24024:419;;;:::o;24449:::-;24615:4;24653:2;24642:9;24638:18;24630:26;;24702:9;24696:4;24692:20;24688:1;24677:9;24673:17;24666:47;24730:131;24856:4;24730:131;:::i;:::-;24722:139;;24449:419;;;:::o;24874:::-;25040:4;25078:2;25067:9;25063:18;25055:26;;25127:9;25121:4;25117:20;25113:1;25102:9;25098:17;25091:47;25155:131;25281:4;25155:131;:::i;:::-;25147:139;;24874:419;;;:::o;25299:::-;25465:4;25503:2;25492:9;25488:18;25480:26;;25552:9;25546:4;25542:20;25538:1;25527:9;25523:17;25516:47;25580:131;25706:4;25580:131;:::i;:::-;25572:139;;25299:419;;;:::o;25724:::-;25890:4;25928:2;25917:9;25913:18;25905:26;;25977:9;25971:4;25967:20;25963:1;25952:9;25948:17;25941:47;26005:131;26131:4;26005:131;:::i;:::-;25997:139;;25724:419;;;:::o;26149:::-;26315:4;26353:2;26342:9;26338:18;26330:26;;26402:9;26396:4;26392:20;26388:1;26377:9;26373:17;26366:47;26430:131;26556:4;26430:131;:::i;:::-;26422:139;;26149:419;;;:::o;26574:::-;26740:4;26778:2;26767:9;26763:18;26755:26;;26827:9;26821:4;26817:20;26813:1;26802:9;26798:17;26791:47;26855:131;26981:4;26855:131;:::i;:::-;26847:139;;26574:419;;;:::o;26999:222::-;27092:4;27130:2;27119:9;27115:18;27107:26;;27143:71;27211:1;27200:9;27196:17;27187:6;27143:71;:::i;:::-;26999:222;;;;:::o;27227:332::-;27348:4;27386:2;27375:9;27371:18;27363:26;;27399:71;27467:1;27456:9;27452:17;27443:6;27399:71;:::i;:::-;27480:72;27548:2;27537:9;27533:18;27524:6;27480:72;:::i;:::-;27227:332;;;;;:::o;27565:129::-;27599:6;27626:20;;:::i;:::-;27616:30;;27655:33;27683:4;27675:6;27655:33;:::i;:::-;27565:129;;;:::o;27700:75::-;27733:6;27766:2;27760:9;27750:19;;27700:75;:::o;27781:311::-;27858:4;27948:18;27940:6;27937:30;27934:56;;;27970:18;;:::i;:::-;27934:56;28020:4;28012:6;28008:17;28000:25;;28080:4;28074;28070:15;28062:23;;27781:311;;;:::o;28098:::-;28175:4;28265:18;28257:6;28254:30;28251:56;;;28287:18;;:::i;:::-;28251:56;28337:4;28329:6;28325:17;28317:25;;28397:4;28391;28387:15;28379:23;;28098:311;;;:::o;28415:307::-;28476:4;28566:18;28558:6;28555:30;28552:56;;;28588:18;;:::i;:::-;28552:56;28626:29;28648:6;28626:29;:::i;:::-;28618:37;;28710:4;28704;28700:15;28692:23;;28415:307;;;:::o;28728:132::-;28795:4;28818:3;28810:11;;28848:4;28843:3;28839:14;28831:22;;28728:132;;;:::o;28866:114::-;28933:6;28967:5;28961:12;28951:22;;28866:114;;;:::o;28986:98::-;29037:6;29071:5;29065:12;29055:22;;28986:98;;;:::o;29090:99::-;29142:6;29176:5;29170:12;29160:22;;29090:99;;;:::o;29195:113::-;29265:4;29297;29292:3;29288:14;29280:22;;29195:113;;;:::o;29314:184::-;29413:11;29447:6;29442:3;29435:19;29487:4;29482:3;29478:14;29463:29;;29314:184;;;;:::o;29504:168::-;29587:11;29621:6;29616:3;29609:19;29661:4;29656:3;29652:14;29637:29;;29504:168;;;;:::o;29678:169::-;29762:11;29796:6;29791:3;29784:19;29836:4;29831:3;29827:14;29812:29;;29678:169;;;;:::o;29853:305::-;29893:3;29912:20;29930:1;29912:20;:::i;:::-;29907:25;;29946:20;29964:1;29946:20;:::i;:::-;29941:25;;30100:1;30032:66;30028:74;30025:1;30022:81;30019:107;;;30106:18;;:::i;:::-;30019:107;30150:1;30147;30143:9;30136:16;;29853:305;;;;:::o;30164:96::-;30201:7;30230:24;30248:5;30230:24;:::i;:::-;30219:35;;30164:96;;;:::o;30266:90::-;30300:7;30343:5;30336:13;30329:21;30318:32;;30266:90;;;:::o;30362:149::-;30398:7;30438:66;30431:5;30427:78;30416:89;;30362:149;;;:::o;30517:126::-;30554:7;30594:42;30587:5;30583:54;30572:65;;30517:126;;;:::o;30649:77::-;30686:7;30715:5;30704:16;;30649:77;;;:::o;30732:154::-;30816:6;30811:3;30806;30793:30;30878:1;30869:6;30864:3;30860:16;30853:27;30732:154;;;:::o;30892:307::-;30960:1;30970:113;30984:6;30981:1;30978:13;30970:113;;;31069:1;31064:3;31060:11;31054:18;31050:1;31045:3;31041:11;31034:39;31006:2;31003:1;30999:10;30994:15;;30970:113;;;31101:6;31098:1;31095:13;31092:101;;;31181:1;31172:6;31167:3;31163:16;31156:27;31092:101;30941:258;30892:307;;;:::o;31205:320::-;31249:6;31286:1;31280:4;31276:12;31266:22;;31333:1;31327:4;31323:12;31354:18;31344:81;;31410:4;31402:6;31398:17;31388:27;;31344:81;31472:2;31464:6;31461:14;31441:18;31438:38;31435:84;;;31491:18;;:::i;:::-;31435:84;31256:269;31205:320;;;:::o;31531:281::-;31614:27;31636:4;31614:27;:::i;:::-;31606:6;31602:40;31744:6;31732:10;31729:22;31708:18;31696:10;31693:34;31690:62;31687:88;;;31755:18;;:::i;:::-;31687:88;31795:10;31791:2;31784:22;31574:238;31531:281;;:::o;31818:233::-;31857:3;31880:24;31898:5;31880:24;:::i;:::-;31871:33;;31926:66;31919:5;31916:77;31913:103;;;31996:18;;:::i;:::-;31913:103;32043:1;32036:5;32032:13;32025:20;;31818:233;;;:::o;32057:180::-;32105:77;32102:1;32095:88;32202:4;32199:1;32192:15;32226:4;32223:1;32216:15;32243:180;32291:77;32288:1;32281:88;32388:4;32385:1;32378:15;32412:4;32409:1;32402:15;32429:180;32477:77;32474:1;32467:88;32574:4;32571:1;32564:15;32598:4;32595:1;32588:15;32615:180;32663:77;32660:1;32653:88;32760:4;32757:1;32750:15;32784:4;32781:1;32774:15;32801:183;32836:3;32874:1;32856:16;32853:23;32850:128;;;32912:1;32909;32906;32891:23;32934:34;32965:1;32959:8;32934:34;:::i;:::-;32927:41;;32850:128;32801:183;:::o;32990:117::-;33099:1;33096;33089:12;33113:117;33222:1;33219;33212:12;33236:117;33345:1;33342;33335:12;33359:117;33468:1;33465;33458:12;33482:117;33591:1;33588;33581:12;33605:102;33646:6;33697:2;33693:7;33688:2;33681:5;33677:14;33673:28;33663:38;;33605:102;;;:::o;33713:106::-;33757:8;33806:5;33801:3;33797:15;33776:36;;33713:106;;;:::o;33825:239::-;33965:34;33961:1;33953:6;33949:14;33942:58;34034:22;34029:2;34021:6;34017:15;34010:47;33825:239;:::o;34070:234::-;34210:34;34206:1;34198:6;34194:14;34187:58;34279:17;34274:2;34266:6;34262:15;34255:42;34070:234;:::o;34310:227::-;34450:34;34446:1;34438:6;34434:14;34427:58;34519:10;34514:2;34506:6;34502:15;34495:35;34310:227;:::o;34543:161::-;34683:13;34679:1;34671:6;34667:14;34660:37;34543:161;:::o;34710:225::-;34850:34;34846:1;34838:6;34834:14;34827:58;34919:8;34914:2;34906:6;34902:15;34895:33;34710:225;:::o;34941:165::-;35081:17;35077:1;35069:6;35065:14;35058:41;34941:165;:::o;35112:229::-;35252:34;35248:1;35240:6;35236:14;35229:58;35321:12;35316:2;35308:6;35304:15;35297:37;35112:229;:::o;35347:224::-;35487:34;35483:1;35475:6;35471:14;35464:58;35556:7;35551:2;35543:6;35539:15;35532:32;35347:224;:::o;35577:229::-;35717:34;35713:1;35705:6;35701:14;35694:58;35786:12;35781:2;35773:6;35769:15;35762:37;35577:229;:::o;35812:182::-;35952:34;35948:1;35940:6;35936:14;35929:58;35812:182;:::o;36000:228::-;36140:34;36136:1;36128:6;36124:14;36117:58;36209:11;36204:2;36196:6;36192:15;36185:36;36000:228;:::o;36234:::-;36374:34;36370:1;36362:6;36358:14;36351:58;36443:11;36438:2;36430:6;36426:15;36419:36;36234:228;:::o;36468:227::-;36608:34;36604:1;36596:6;36592:14;36585:58;36677:10;36672:2;36664:6;36660:15;36653:35;36468:227;:::o;36701:220::-;36841:34;36837:1;36829:6;36825:14;36818:58;36910:3;36905:2;36897:6;36893:15;36886:28;36701:220;:::o;36927:711::-;36966:3;37004:4;36986:16;36983:26;36980:39;;;37012:5;;36980:39;37041:20;;:::i;:::-;37116:1;37098:16;37094:24;37091:1;37085:4;37070:49;37149:4;37143:11;37248:16;37241:4;37233:6;37229:17;37226:39;37193:18;37185:6;37182:30;37166:113;37163:146;;;37294:5;;;;37163:146;37340:6;37334:4;37330:17;37376:3;37370:10;37403:18;37395:6;37392:30;37389:43;;;37425:5;;;;;;37389:43;37473:6;37466:4;37461:3;37457:14;37453:27;37532:1;37514:16;37510:24;37504:4;37500:35;37495:3;37492:44;37489:57;;;37539:5;;;;;;;37489:57;37556;37604:6;37598:4;37594:17;37586:6;37582:30;37576:4;37556:57;:::i;:::-;37629:3;37622:10;;36970:668;;;;;36927:711;;:::o;37644:122::-;37717:24;37735:5;37717:24;:::i;:::-;37710:5;37707:35;37697:63;;37756:1;37753;37746:12;37697:63;37644:122;:::o;37772:116::-;37842:21;37857:5;37842:21;:::i;:::-;37835:5;37832:32;37822:60;;37878:1;37875;37868:12;37822:60;37772:116;:::o;37894:120::-;37966:23;37983:5;37966:23;:::i;:::-;37959:5;37956:34;37946:62;;38004:1;38001;37994:12;37946:62;37894:120;:::o;38020:122::-;38093:24;38111:5;38093:24;:::i;:::-;38086:5;38083:35;38073:63;;38132:1;38129;38122:12;38073:63;38020:122;:::o
Swarm Source
ipfs://c053db26421fea7a5a585618230ef4fc4896f2ada10746e419904fe14b0a3a84
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.