Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 47 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18587648 | 426 days ago | IN | 0 ETH | 0.0013172 | ||||
Safe Transfer Fr... | 18497896 | 439 days ago | IN | 0 ETH | 0.00106124 | ||||
Safe Transfer Fr... | 18497896 | 439 days ago | IN | 0 ETH | 0.00106124 | ||||
Safe Transfer Fr... | 18410857 | 451 days ago | IN | 0 ETH | 0.00058957 | ||||
Set Approval For... | 16962194 | 654 days ago | IN | 0 ETH | 0.00221908 | ||||
Set Approval For... | 16932239 | 659 days ago | IN | 0 ETH | 0.00106239 | ||||
Set Approval For... | 16905848 | 662 days ago | IN | 0 ETH | 0.00098733 | ||||
Set Approval For... | 16877321 | 666 days ago | IN | 0 ETH | 0.00128635 | ||||
Safe Transfer Fr... | 16672046 | 695 days ago | IN | 0 ETH | 0.00229935 | ||||
Safe Transfer Fr... | 16129046 | 771 days ago | IN | 0 ETH | 0.00082084 | ||||
Safe Transfer Fr... | 16129010 | 771 days ago | IN | 0 ETH | 0.0008254 | ||||
Safe Transfer Fr... | 16029597 | 785 days ago | IN | 0 ETH | 0.00076645 | ||||
Safe Transfer Fr... | 16027134 | 785 days ago | IN | 0 ETH | 0.00165081 | ||||
Safe Transfer Fr... | 15991343 | 790 days ago | IN | 0 ETH | 0.00100228 | ||||
Safe Transfer Fr... | 15962136 | 794 days ago | IN | 0 ETH | 0.00112019 | ||||
Safe Transfer Fr... | 15962131 | 794 days ago | IN | 0 ETH | 0.00106124 | ||||
Set Approval For... | 15961825 | 794 days ago | IN | 0 ETH | 0.00070975 | ||||
Safe Transfer Fr... | 15927340 | 799 days ago | IN | 0 ETH | 0.00707493 | ||||
Safe Transfer Fr... | 15912244 | 801 days ago | IN | 0 ETH | 0.00076645 | ||||
Set Approval For... | 15911878 | 801 days ago | IN | 0 ETH | 0.00062087 | ||||
Safe Transfer Fr... | 15911570 | 801 days ago | IN | 0 ETH | 0.00094332 | ||||
Safe Transfer Fr... | 15911567 | 801 days ago | IN | 0 ETH | 0.00100228 | ||||
Safe Transfer Fr... | 15854310 | 809 days ago | IN | 0 ETH | 0.00080975 | ||||
Safe Transfer Fr... | 15792794 | 818 days ago | IN | 0 ETH | 0.0015329 | ||||
Safe Transfer Fr... | 15792787 | 818 days ago | IN | 0 ETH | 0.00159186 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LondonToken
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; import "./Ownable.sol"; import "./ERC1155.sol"; import "./ERC2981PerTokenRoyalties.sol"; /// @custom:security-contact [email protected] contract LondonToken is ERC1155, Ownable, ERC2981PerTokenRoyalties { constructor(string memory uri_, address minter_) ERC1155(uri_) { minter = minter_; } string public constant name = "Verse Works"; uint256 public totalSupply; address public minter; modifier onlyMinter() { require(msg.sender == minter); _; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * In additionit sets the royalties for `royaltyRecipient` of the value `royaltyValue`. * * 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 account, uint256 id, uint256 amount, string memory cid, address royaltyRecipient, uint256 royaltyValue ) public onlyMinter { _mint(account, id, amount, ""); if (royaltyValue > 0) { _setTokenRoyalty(id, royaltyRecipient, royaltyValue); } cids[id] = cid; totalSupply += amount; } /** * @dev Batch version of `mint`. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, string[] memory tokenCids, address[] memory royaltyRecipients, uint256[] memory royaltyValues ) public onlyMinter { require( ids.length == royaltyRecipients.length && ids.length == royaltyValues.length, "ERC1155: Arrays length mismatch" ); _mintBatch(to, ids, amounts, ""); for (uint256 i; i < ids.length; i++) { if (royaltyValues[i] > 0) { _setTokenRoyalty( ids[i], royaltyRecipients[i], royaltyValues[i] ); } // update IPFS CID cids[ids[i]] = tokenCids[i]; } uint256 count; for (uint256 i = 0; i < ids.length; i++) { for (uint256 j = 0; j < amounts.length; j++) { count += ids[i] * amounts[j]; } } totalSupply += count; } /** * @dev Checks for supported interface. * */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, ERC2981Base) returns (bool) { return super.supportsInterface(interfaceId); } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * In additionit sets the royalties for `royaltyRecipient` of the value `royaltyValue`. * Method emits two transfer events. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. */ function mintWithCreator( address creator, address to, uint256 tokenId, string memory cid, address royaltyRecipient, uint256 royaltyValue ) public onlyMinter { require(to != address(0), "mint to the zero address"); balances[tokenId][to] += 1; totalSupply += 1; cids[tokenId] = cid; if (royaltyValue > 0) { _setTokenRoyalty(tokenId, royaltyRecipient, royaltyValue); } address operator = _msgSender(); emit TransferSingle(operator, address(0), creator, tokenId, 1); emit TransferSingle(operator, creator, to, tokenId, 1); } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * In additionit sets the royalties for `royaltyRecipient` of the value `royaltyValue`. * Method emits two transfer events. * * Emits a {TransferSingle} events for intermediate artist. * * 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 batchMintWithCreator( address to, address[] memory creators, uint256[] memory tokenIds, string[] memory tokenCids, address[] memory royaltyRecipients, uint256[] memory royaltyValues ) public onlyMinter { require( tokenIds.length == royaltyRecipients.length && tokenIds.length == royaltyValues.length, "ERC1155: Arrays length mismatch" ); address operator = _msgSender(); for (uint256 i = 0; i < tokenIds.length; i++) { balances[tokenIds[i]][to] += 1; // check if recipient can accept NFT _doSafeTransferAcceptanceCheck( operator, address(0), to, tokenIds[i], 1, "" ); // update royalties if (royaltyValues[i] > 0) { _setTokenRoyalty( tokenIds[i], royaltyRecipients[i], royaltyValues[i] ); } // update IPFS CID cids[tokenIds[i]] = tokenCids[i]; // emit events based on creator provided if (creators[i] == address(0)) { emit TransferSingle(operator, address(0), to, tokenIds[i], 1); } else { emit TransferSingle( operator, address(0), creators[i], tokenIds[i], 1 ); emit TransferSingle(operator, creators[i], to, tokenIds[i], 1); } } // update total supply totalSupply += tokenIds.length; } /** * @dev Sets base URI for metadata. * */ function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } /** * @dev Sets new minter for the contract. * */ function setMinter(address minter_) public onlyOwner { minter = minter_; } /** * @dev Sets royalties for `tokenId` and `tokenRecipient` with royalty value `royaltyValue`. * */ function setRoyalties( uint256 tokenId, address royaltyRecipient, uint256 royaltyValue ) public onlyOwner { _setTokenRoyalty(tokenId, royaltyRecipient, royaltyValue); } /** * @dev Sets IPFS cid metadata hash for token id `tokenId`. * */ function setCID(uint256 tokenId, string memory cid) public onlyOwner { cids[tokenId] = cid; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol) pragma solidity 0.8.13; import "./IERC1155.sol"; import "./IERC1155Receiver.sol"; import "./IERC1155MetadataURI.sol"; import "./Address.sol"; import "./Context.sol"; import "./ERC165.sol"; import "./Strings.sol"; /** * @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)) public balances; // Mapping from token ID to the IPFS cid mapping(uint256 => string) public cids; // 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. string public baseUri; /** * @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 id) public view virtual override returns (string memory) { return string(abi.encodePacked(baseUri, cids[id])); } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require( account != address(0), "ERC1155: balance query for the zero address" ); return balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require( accounts.length == ids.length, "ERC1155: accounts and ids length mismatch" ); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _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 owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); 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 { baseUri = 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}. * * 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 Approve `operator` to operate on all of `owner` tokens * * Emits a {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 `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @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 ) public { 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; import "./ERC165.sol"; import "./IERC2981Royalties.sol"; /// @dev This is a contract used to add ERC2981 support to ERC721 and 1155 abstract contract ERC2981Base is ERC165, IERC2981Royalties { struct RoyaltyInfo { address recipient; uint24 amount; } /// @inheritdoc ERC165 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC2981Royalties).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; import "./ERC165.sol"; import "./ERC2981Base.sol"; /// @dev This is a contract used to add ERC2981 support to ERC721 and 1155 abstract contract ERC2981PerTokenRoyalties is ERC2981Base { mapping(uint256 => RoyaltyInfo) internal _royalties; /// @dev Sets token royalties /// @param tokenId the token id fir which we register the royalties /// @param recipient recipient of the royalties /// @param value percentage (using 2 decimals - 10000 = 100, 0 = 0) function _setTokenRoyalty( uint256 tokenId, address recipient, uint256 value ) internal { require(value <= 10000, "ERC2981Royalties: Too high"); _royalties[tokenId] = RoyaltyInfo(recipient, uint24(value)); } /// @inheritdoc IERC2981Royalties function royaltyInfo(uint256 tokenId, uint256 value) external view override returns (address receiver, uint256 royaltyAmount) { RoyaltyInfo memory royalties = _royalties[tokenId]; receiver = royalties.recipient; royaltyAmount = (value * royalties.amount) / 10000; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // 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); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; /// @title IERC2981Royalties /// @dev Interface for the ERC2981 - Token Royalty standard interface IERC2981Royalties { /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _value - the sale price of the NFT asset specified by _tokenId /// @return _receiver - address of who should be sent the royalty payment /// @return _royaltyAmount - the royalty payment amount for value sale price function royaltyInfo(uint256 _tokenId, uint256 _value) external view returns (address _receiver, uint256 _royaltyAmount); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"uri_","type":"string"},{"internalType":"address","name":"minter_","type":"address"}],"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":"operator","type":"address"},{"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":"_doSafeTransferAcceptanceCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address[]","name":"creators","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"string[]","name":"tokenCids","type":"string[]"},{"internalType":"address[]","name":"royaltyRecipients","type":"address[]"},{"internalType":"uint256[]","name":"royaltyValues","type":"uint256[]"}],"name":"batchMintWithCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cids","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"cid","type":"string"},{"internalType":"address","name":"royaltyRecipient","type":"address"},{"internalType":"uint256","name":"royaltyValue","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"string[]","name":"tokenCids","type":"string[]"},{"internalType":"address[]","name":"royaltyRecipients","type":"address[]"},{"internalType":"uint256[]","name":"royaltyValues","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"cid","type":"string"},{"internalType":"address","name":"royaltyRecipient","type":"address"},{"internalType":"uint256","name":"royaltyValue","type":"uint256"}],"name":"mintWithCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"cid","type":"string"}],"name":"setCID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter_","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"royaltyRecipient","type":"address"},{"internalType":"uint256","name":"royaltyValue","type":"uint256"}],"name":"setRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620052a0380380620052a083398181016040528101906200003791906200044f565b816200004981620000b360201b60201c565b506200006a6200005e620000cf60201b60201c565b620000d760201b60201c565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000519565b8060039080519060200190620000cb9291906200019d565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ab90620004e4565b90600052602060002090601f016020900481019282620001cf57600085556200021b565b82601f10620001ea57805160ff19168380011785556200021b565b828001600101855582156200021b579182015b828111156200021a578251825591602001919060010190620001fd565b5b5090506200022a91906200022e565b5090565b5b80821115620002495760008160009055506001016200022f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002b6826200026b565b810181811067ffffffffffffffff82111715620002d857620002d76200027c565b5b80604052505050565b6000620002ed6200024d565b9050620002fb8282620002ab565b919050565b600067ffffffffffffffff8211156200031e576200031d6200027c565b5b62000329826200026b565b9050602081019050919050565b60005b838110156200035657808201518184015260208101905062000339565b8381111562000366576000848401525b50505050565b6000620003836200037d8462000300565b620002e1565b905082815260208101848484011115620003a257620003a162000266565b5b620003af84828562000336565b509392505050565b600082601f830112620003cf57620003ce62000261565b5b8151620003e18482602086016200036c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041782620003ea565b9050919050565b62000429816200040a565b81146200043557600080fd5b50565b60008151905062000449816200041e565b92915050565b6000806040838503121562000469576200046862000257565b5b600083015167ffffffffffffffff8111156200048a57620004896200025c565b5b6200049885828601620003b7565b9250506020620004ab8582860162000438565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004fd57607f821691505b602082108103620005135762000512620004b5565b5b50919050565b614d7780620005296000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c8063704fe710116100f9578063a22cb46511610097578063e985e9c511610071578063e985e9c5146104b6578063f242432a146104e6578063f2fde38b14610502578063fca3b5aa1461051e576101a8565b8063a22cb46514610462578063af8777071461047e578063e2c7f3381461049a576101a8565b80638d2bb093116100d35780638d2bb093146103ee5780638da5cb5b1461040a57806398faf29b146104285780639abc832014610444576101a8565b8063704fe71014610398578063715018a6146103c857806382295a2d146103d2576101a8565b80630e89341c116101665780632a55205a116101405780632a55205a146102ff5780632eb2c2d6146103305780634e1273f41461034c57806369b520171461037c576101a8565b80630e89341c1461028157806318160ddd146102b15780631f320331146102cf576101a8565b8062fdd58e146101ad57806301ffc9a7146101dd57806302fe53051461020d57806306fdde03146102295780630754617214610247578063084e9e2414610265575b600080fd5b6101c760048036038101906101c29190612f1c565b61053a565b6040516101d49190612f6b565b60405180910390f35b6101f760048036038101906101f29190612fde565b610602565b6040516102049190613026565b60405180910390f35b61022760048036038101906102229190613187565b610614565b005b61023161069c565b60405161023e9190613258565b60405180910390f35b61024f6106d5565b60405161025c9190613289565b60405180910390f35b61027f600480360381019061027a9190613345565b6106fb565b005b61029b600480360381019061029691906133ee565b6108d2565b6040516102a89190613258565b60405180910390f35b6102b9610910565b6040516102c69190612f6b565b60405180910390f35b6102e960048036038101906102e4919061341b565b610916565b6040516102f69190612f6b565b60405180910390f35b6103196004803603810190610314919061345b565b61093b565b60405161032792919061349b565b60405180910390f35b61034a6004803603810190610345919061358c565b610a0c565b005b6103666004803603810190610361919061371e565b610aad565b6040516103739190613854565b60405180910390f35b61039660048036038101906103919190613957565b610bc6565b005b6103b260048036038101906103ad91906133ee565b610e39565b6040516103bf9190613258565b60405180910390f35b6103d0610ed9565b005b6103ec60048036038101906103e79190613a70565b610f61565b005b61040860048036038101906104039190613acc565b611009565b005b6104126112a4565b60405161041f9190613289565b60405180910390f35b610442600480360381019061043d9190613b75565b6112ce565b005b61044c6113a1565b6040516104599190613258565b60405180910390f35b61047c60048036038101906104779190613c4a565b61142f565b005b61049860048036038101906104939190613c8a565b611445565b005b6104b460048036038101906104af9190613da3565b611927565b005b6104d060048036038101906104cb9190613df6565b6119b3565b6040516104dd9190613026565b60405180910390f35b61050060048036038101906104fb9190613e36565b611a47565b005b61051c60048036038101906105179190613ecd565b611ae8565b005b61053860048036038101906105339190613ecd565b611bdf565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a190613f6c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061060d82611c9f565b9050919050565b61061c611d19565b73ffffffffffffffffffffffffffffffffffffffff1661063a6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068790613fd8565b60405180910390fd5b61069981611d21565b50565b6040518060400160405280600b81526020017f566572736520576f726b7300000000000000000000000000000000000000000081525081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61071a8473ffffffffffffffffffffffffffffffffffffffff16611d3b565b156108ca578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161076095949392919061404d565b6020604051808303816000875af192505050801561079c57506040513d601f19601f8201168201806040525081019061079991906140bc565b60015b610841576107a86140f6565b806308c379a00361080457506107bc614118565b806107c75750610806565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb9190613258565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108389061421a565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf906142ac565b60405180910390fd5b505b505050505050565b60606003600160008481526020019081526020016000206040516020016108fa9291906143cb565b6040516020818303038152906040529050919050565b60065481565b6000602052816000526040600020602052806000526040600020600091509150505481565b6000806000600560008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905080600001519250612710816020015162ffffff16856109f8919061441e565b610a0291906144a7565b9150509250929050565b610a14611d19565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a5a5750610a5985610a54611d19565b6119b3565b5b610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a909061454a565b60405180910390fd5b610aa68585858585611d5e565b5050505050565b60608151835114610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea906145dc565b60405180910390fd5b6000835167ffffffffffffffff811115610b1057610b0f61305c565b5b604051908082528060200260200182016040528015610b3e5781602001602082028036833780820191505090505b50905060005b8451811015610bbb57610b8b858281518110610b6357610b626145fc565b5b6020026020010151858381518110610b7e57610b7d6145fc565b5b602002602001015161053a565b828281518110610b9e57610b9d6145fc565b5b60200260200101818152505080610bb49061462b565b9050610b44565b508091505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2057600080fd5b81518551148015610c32575080518551145b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c68906146bf565b60405180910390fd5b610c8c8686866040518060200160405280600081525061207f565b60005b8551811015610d84576000828281518110610cad57610cac6145fc565b5b60200260200101511115610d1557610d14868281518110610cd157610cd06145fc565b5b6020026020010151848381518110610cec57610ceb6145fc565b5b6020026020010151848481518110610d0757610d066145fc565b5b60200260200101516122ab565b5b838181518110610d2857610d276145fc565b5b602002602001015160016000888481518110610d4757610d466145fc565b5b602002602001015181526020019081526020016000209080519060200190610d70929190612dd1565b508080610d7c9061462b565b915050610c8f565b50600080600090505b8651811015610e165760005b8651811015610e0257868181518110610db557610db46145fc565b5b6020026020010151888381518110610dd057610dcf6145fc565b5b6020026020010151610de2919061441e565b83610ded91906146df565b92508080610dfa9061462b565b915050610d99565b508080610e0e9061462b565b915050610d8d565b508060066000828254610e2991906146df565b9250508190555050505050505050565b60016020528060005260406000206000915090508054610e58906142fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e84906142fb565b8015610ed15780601f10610ea657610100808354040283529160200191610ed1565b820191906000526020600020905b815481529060010190602001808311610eb457829003601f168201915b505050505081565b610ee1611d19565b73ffffffffffffffffffffffffffffffffffffffff16610eff6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613fd8565b60405180910390fd5b610f5f60006123a7565b565b610f69611d19565b73ffffffffffffffffffffffffffffffffffffffff16610f876112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490613fd8565b60405180910390fd5b80600160008481526020019081526020016000209080519060200190611004929190612dd1565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461106357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990614781565b60405180910390fd5b600160008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461113291906146df565b9250508190555060016006600082825461114c91906146df565b925050819055508260016000868152602001908152602001600020908051906020019061117a929190612dd1565b5060008111156111905761118f8483836122ab565b5b600061119a611d19565b90508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628860016040516112149291906147e6565b60405180910390a48573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628860016040516112939291906147e6565b60405180910390a450505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461132857600080fd5b6113438686866040518060200160405280600081525061246d565b6000811115611358576113578583836122ab565b5b8260016000878152602001908152602001600020908051906020019061137f929190612dd1565b50836006600082825461139291906146df565b92505081905550505050505050565b600380546113ae906142fb565b80601f01602080910402602001604051908101604052809291908181526020018280546113da906142fb565b80156114275780601f106113fc57610100808354040283529160200191611427565b820191906000526020600020905b81548152906001019060200180831161140a57829003601f168201915b505050505081565b61144161143a611d19565b838361261d565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461149f57600080fd5b815184511480156114b1575080518451145b6114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e7906146bf565b60405180910390fd5b60006114fa611d19565b905060005b85518110156119035760016000808884815181106115205761151f6145fc565b5b6020026020010151815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158291906146df565b925050819055506115c28260008a8985815181106115a3576115a26145fc565b5b60200260200101516001604051806020016040528060008152506106fb565b60008382815181106115d7576115d66145fc565b5b6020026020010151111561163f5761163e8682815181106115fb576115fa6145fc565b5b6020026020010151858381518110611616576116156145fc565b5b6020026020010151858481518110611631576116306145fc565b5b60200260200101516122ab565b5b848181518110611652576116516145fc565b5b602002602001015160016000888481518110611671576116706145fc565b5b60200260200101518152602001908152602001600020908051906020019061169a929190612dd1565b50600073ffffffffffffffffffffffffffffffffffffffff168782815181106116c6576116c56145fc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611788578773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898581518110611763576117626145fc565b5b6020026020010151600160405161177b9291906147e6565b60405180910390a46118f0565b86818151811061179b5761179a6145fc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289858151811061181c5761181b6145fc565b5b602002602001015160016040516118349291906147e6565b60405180910390a48773ffffffffffffffffffffffffffffffffffffffff16878281518110611866576118656145fc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628985815181106118cf576118ce6145fc565b5b602002602001015160016040516118e79291906147e6565b60405180910390a45b80806118fb9061462b565b9150506114ff565b5084516006600082825461191791906146df565b9250508190555050505050505050565b61192f611d19565b73ffffffffffffffffffffffffffffffffffffffff1661194d6112a4565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613fd8565b60405180910390fd5b6119ae8383836122ab565b505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a4f611d19565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611a955750611a9485611a8f611d19565b6119b3565b5b611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90614881565b60405180910390fd5b611ae18585858585612789565b5050505050565b611af0611d19565b73ffffffffffffffffffffffffffffffffffffffff16611b0e6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90613fd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614913565b60405180910390fd5b611bdc816123a7565b50565b611be7611d19565b73ffffffffffffffffffffffffffffffffffffffff16611c056112a4565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613fd8565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d125750611d1182612a24565b5b9050919050565b600033905090565b8060039080519060200190611d37929190612dd1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8151835114611da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d99906149a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890614a37565b60405180910390fd5b6000611e1b611d19565b9050611e2b818787878787612b06565b60005b8451811015611fdc576000858281518110611e4c57611e4b6145fc565b5b602002602001015190506000858381518110611e6b57611e6a6145fc565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390614ac9565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc191906146df565b9250508190555050505080611fd59061462b565b9050611e2e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612053929190614ae9565b60405180910390a4612069818787878787612b0e565b612077818787878787612b16565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590614b92565b60405180910390fd5b8151835114612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906149a5565b60405180910390fd5b600061213c611d19565b905061214d81600087878787612b06565b60005b84518110156122065783818151811061216c5761216b6145fc565b5b602002602001015160008087848151811061218a576121896145fc565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ec91906146df565b9250508190555080806121fe9061462b565b915050612150565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161227e929190614ae9565b60405180910390a461229581600087878787612b0e565b6122a481600087878787612b16565b5050505050565b6127108111156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790614bfe565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152506005600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548162ffffff021916908362ffffff160217905550905050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d390614b92565b60405180910390fd5b60006124e6611d19565b905060006124f385612ced565b9050600061250085612ced565b905061251183600089858589612b06565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461257091906146df565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516125ee929190614c1e565b60405180910390a461260583600089858589612b0e565b612614836000898989896106fb565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614cb9565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161277c9190613026565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90614a37565b60405180910390fd5b6000612802611d19565b9050600061280f85612ced565b9050600061281c85612ced565b905061282c838989858589612b06565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90614ac9565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461297891906146df565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516129f5929190614c1e565b60405180910390a4612a0b848a8a86868a612b0e565b612a19848a8a8a8a8a6106fb565b505050505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612aef57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612aff5750612afe82612d67565b5b9050919050565b505050505050565b505050505050565b612b358473ffffffffffffffffffffffffffffffffffffffff16611d3b565b15612ce5578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612b7b959493929190614cd9565b6020604051808303816000875af1925050508015612bb757506040513d601f19601f82011682018060405250810190612bb491906140bc565b60015b612c5c57612bc36140f6565b806308c379a003612c1f5750612bd7614118565b80612be25750612c21565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c169190613258565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c539061421a565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda906142ac565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612d0c57612d0b61305c565b5b604051908082528060200260200182016040528015612d3a5781602001602082028036833780820191505090505b5090508281600081518110612d5257612d516145fc565b5b60200260200101818152505080915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054612ddd906142fb565b90600052602060002090601f016020900481019282612dff5760008555612e46565b82601f10612e1857805160ff1916838001178555612e46565b82800160010185558215612e46579182015b82811115612e45578251825591602001919060010190612e2a565b5b509050612e539190612e57565b5090565b5b80821115612e70576000816000905550600101612e58565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612eb382612e88565b9050919050565b612ec381612ea8565b8114612ece57600080fd5b50565b600081359050612ee081612eba565b92915050565b6000819050919050565b612ef981612ee6565b8114612f0457600080fd5b50565b600081359050612f1681612ef0565b92915050565b60008060408385031215612f3357612f32612e7e565b5b6000612f4185828601612ed1565b9250506020612f5285828601612f07565b9150509250929050565b612f6581612ee6565b82525050565b6000602082019050612f806000830184612f5c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fbb81612f86565b8114612fc657600080fd5b50565b600081359050612fd881612fb2565b92915050565b600060208284031215612ff457612ff3612e7e565b5b600061300284828501612fc9565b91505092915050565b60008115159050919050565b6130208161300b565b82525050565b600060208201905061303b6000830184613017565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6130948261304b565b810181811067ffffffffffffffff821117156130b3576130b261305c565b5b80604052505050565b60006130c6612e74565b90506130d2828261308b565b919050565b600067ffffffffffffffff8211156130f2576130f161305c565b5b6130fb8261304b565b9050602081019050919050565b82818337600083830152505050565b600061312a613125846130d7565b6130bc565b90508281526020810184848401111561314657613145613046565b5b613151848285613108565b509392505050565b600082601f83011261316e5761316d613041565b5b813561317e848260208601613117565b91505092915050565b60006020828403121561319d5761319c612e7e565b5b600082013567ffffffffffffffff8111156131bb576131ba612e83565b5b6131c784828501613159565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561320a5780820151818401526020810190506131ef565b83811115613219576000848401525b50505050565b600061322a826131d0565b61323481856131db565b93506132448185602086016131ec565b61324d8161304b565b840191505092915050565b60006020820190508181036000830152613272818461321f565b905092915050565b61328381612ea8565b82525050565b600060208201905061329e600083018461327a565b92915050565b600067ffffffffffffffff8211156132bf576132be61305c565b5b6132c88261304b565b9050602081019050919050565b60006132e86132e3846132a4565b6130bc565b90508281526020810184848401111561330457613303613046565b5b61330f848285613108565b509392505050565b600082601f83011261332c5761332b613041565b5b813561333c8482602086016132d5565b91505092915050565b60008060008060008060c0878903121561336257613361612e7e565b5b600061337089828a01612ed1565b965050602061338189828a01612ed1565b955050604061339289828a01612ed1565b94505060606133a389828a01612f07565b93505060806133b489828a01612f07565b92505060a087013567ffffffffffffffff8111156133d5576133d4612e83565b5b6133e189828a01613317565b9150509295509295509295565b60006020828403121561340457613403612e7e565b5b600061341284828501612f07565b91505092915050565b6000806040838503121561343257613431612e7e565b5b600061344085828601612f07565b925050602061345185828601612ed1565b9150509250929050565b6000806040838503121561347257613471612e7e565b5b600061348085828601612f07565b925050602061349185828601612f07565b9150509250929050565b60006040820190506134b0600083018561327a565b6134bd6020830184612f5c565b9392505050565b600067ffffffffffffffff8211156134df576134de61305c565b5b602082029050602081019050919050565b600080fd5b6000613508613503846134c4565b6130bc565b9050808382526020820190506020840283018581111561352b5761352a6134f0565b5b835b8181101561355457806135408882612f07565b84526020840193505060208101905061352d565b5050509392505050565b600082601f83011261357357613572613041565b5b81356135838482602086016134f5565b91505092915050565b600080600080600060a086880312156135a8576135a7612e7e565b5b60006135b688828901612ed1565b95505060206135c788828901612ed1565b945050604086013567ffffffffffffffff8111156135e8576135e7612e83565b5b6135f48882890161355e565b935050606086013567ffffffffffffffff81111561361557613614612e83565b5b6136218882890161355e565b925050608086013567ffffffffffffffff81111561364257613641612e83565b5b61364e88828901613317565b9150509295509295909350565b600067ffffffffffffffff8211156136765761367561305c565b5b602082029050602081019050919050565b600061369a6136958461365b565b6130bc565b905080838252602082019050602084028301858111156136bd576136bc6134f0565b5b835b818110156136e657806136d28882612ed1565b8452602084019350506020810190506136bf565b5050509392505050565b600082601f83011261370557613704613041565b5b8135613715848260208601613687565b91505092915050565b6000806040838503121561373557613734612e7e565b5b600083013567ffffffffffffffff81111561375357613752612e83565b5b61375f858286016136f0565b925050602083013567ffffffffffffffff8111156137805761377f612e83565b5b61378c8582860161355e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137cb81612ee6565b82525050565b60006137dd83836137c2565b60208301905092915050565b6000602082019050919050565b600061380182613796565b61380b81856137a1565b9350613816836137b2565b8060005b8381101561384757815161382e88826137d1565b9750613839836137e9565b92505060018101905061381a565b5085935050505092915050565b6000602082019050818103600083015261386e81846137f6565b905092915050565b600067ffffffffffffffff8211156138915761389061305c565b5b602082029050602081019050919050565b60006138b56138b084613876565b6130bc565b905080838252602082019050602084028301858111156138d8576138d76134f0565b5b835b8181101561391f57803567ffffffffffffffff8111156138fd576138fc613041565b5b80860161390a8982613159565b855260208501945050506020810190506138da565b5050509392505050565b600082601f83011261393e5761393d613041565b5b813561394e8482602086016138a2565b91505092915050565b60008060008060008060c0878903121561397457613973612e7e565b5b600061398289828a01612ed1565b965050602087013567ffffffffffffffff8111156139a3576139a2612e83565b5b6139af89828a0161355e565b955050604087013567ffffffffffffffff8111156139d0576139cf612e83565b5b6139dc89828a0161355e565b945050606087013567ffffffffffffffff8111156139fd576139fc612e83565b5b613a0989828a01613929565b935050608087013567ffffffffffffffff811115613a2a57613a29612e83565b5b613a3689828a016136f0565b92505060a087013567ffffffffffffffff811115613a5757613a56612e83565b5b613a6389828a0161355e565b9150509295509295509295565b60008060408385031215613a8757613a86612e7e565b5b6000613a9585828601612f07565b925050602083013567ffffffffffffffff811115613ab657613ab5612e83565b5b613ac285828601613159565b9150509250929050565b60008060008060008060c08789031215613ae957613ae8612e7e565b5b6000613af789828a01612ed1565b9650506020613b0889828a01612ed1565b9550506040613b1989828a01612f07565b945050606087013567ffffffffffffffff811115613b3a57613b39612e83565b5b613b4689828a01613159565b9350506080613b5789828a01612ed1565b92505060a0613b6889828a01612f07565b9150509295509295509295565b60008060008060008060c08789031215613b9257613b91612e7e565b5b6000613ba089828a01612ed1565b9650506020613bb189828a01612f07565b9550506040613bc289828a01612f07565b945050606087013567ffffffffffffffff811115613be357613be2612e83565b5b613bef89828a01613159565b9350506080613c0089828a01612ed1565b92505060a0613c1189828a01612f07565b9150509295509295509295565b613c278161300b565b8114613c3257600080fd5b50565b600081359050613c4481613c1e565b92915050565b60008060408385031215613c6157613c60612e7e565b5b6000613c6f85828601612ed1565b9250506020613c8085828601613c35565b9150509250929050565b60008060008060008060c08789031215613ca757613ca6612e7e565b5b6000613cb589828a01612ed1565b965050602087013567ffffffffffffffff811115613cd657613cd5612e83565b5b613ce289828a016136f0565b955050604087013567ffffffffffffffff811115613d0357613d02612e83565b5b613d0f89828a0161355e565b945050606087013567ffffffffffffffff811115613d3057613d2f612e83565b5b613d3c89828a01613929565b935050608087013567ffffffffffffffff811115613d5d57613d5c612e83565b5b613d6989828a016136f0565b92505060a087013567ffffffffffffffff811115613d8a57613d89612e83565b5b613d9689828a0161355e565b9150509295509295509295565b600080600060608486031215613dbc57613dbb612e7e565b5b6000613dca86828701612f07565b9350506020613ddb86828701612ed1565b9250506040613dec86828701612f07565b9150509250925092565b60008060408385031215613e0d57613e0c612e7e565b5b6000613e1b85828601612ed1565b9250506020613e2c85828601612ed1565b9150509250929050565b600080600080600060a08688031215613e5257613e51612e7e565b5b6000613e6088828901612ed1565b9550506020613e7188828901612ed1565b9450506040613e8288828901612f07565b9350506060613e9388828901612f07565b925050608086013567ffffffffffffffff811115613eb457613eb3612e83565b5b613ec088828901613317565b9150509295509295909350565b600060208284031215613ee357613ee2612e7e565b5b6000613ef184828501612ed1565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613f56602b836131db565b9150613f6182613efa565b604082019050919050565b60006020820190508181036000830152613f8581613f49565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc26020836131db565b9150613fcd82613f8c565b602082019050919050565b60006020820190508181036000830152613ff181613fb5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061401f82613ff8565b6140298185614003565b93506140398185602086016131ec565b6140428161304b565b840191505092915050565b600060a082019050614062600083018861327a565b61406f602083018761327a565b61407c6040830186612f5c565b6140896060830185612f5c565b818103608083015261409b8184614014565b90509695505050505050565b6000815190506140b681612fb2565b92915050565b6000602082840312156140d2576140d1612e7e565b5b60006140e0848285016140a7565b91505092915050565b60008160e01c9050919050565b600060033d11156141155760046000803e6141126000516140e9565b90505b90565b600060443d106141a55761412a612e74565b60043d036004823e80513d602482011167ffffffffffffffff821117156141525750506141a5565b808201805167ffffffffffffffff81111561417057505050506141a5565b80602083010160043d03850181111561418d5750505050506141a5565b61419c8260200185018661308b565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006142046034836131db565b915061420f826141a8565b604082019050919050565b60006020820190508181036000830152614233816141f7565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006142966028836131db565b91506142a18261423a565b604082019050919050565b600060208201905081810360008301526142c581614289565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061431357607f821691505b602082108103614326576143256142cc565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154614359816142fb565b614363818661432c565b9450600182166000811461437e576001811461438f576143c2565b60ff198316865281860193506143c2565b61439885614337565b60005b838110156143ba5781548189015260018201915060208101905061439b565b838801955050505b50505092915050565b60006143d7828561434c565b91506143e3828461434c565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061442982612ee6565b915061443483612ee6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561446d5761446c6143ef565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144b282612ee6565b91506144bd83612ee6565b9250826144cd576144cc614478565b5b828204905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006145346032836131db565b915061453f826144d8565b604082019050919050565b6000602082019050818103600083015261456381614527565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006145c66029836131db565b91506145d18261456a565b604082019050919050565b600060208201905081810360008301526145f5816145b9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061463682612ee6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614668576146676143ef565b5b600182019050919050565b7f455243313135353a20417272617973206c656e677468206d69736d6174636800600082015250565b60006146a9601f836131db565b91506146b482614673565b602082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b60006146ea82612ee6565b91506146f583612ee6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561472a576147296143ef565b5b828201905092915050565b7f6d696e7420746f20746865207a65726f20616464726573730000000000000000600082015250565b600061476b6018836131db565b915061477682614735565b602082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b6000819050919050565b6000819050919050565b60006147d06147cb6147c6846147a1565b6147ab565b612ee6565b9050919050565b6147e0816147b5565b82525050565b60006040820190506147fb6000830185612f5c565b61480860208301846147d7565b9392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061486b6029836131db565b91506148768261480f565b604082019050919050565b6000602082019050818103600083015261489a8161485e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148fd6026836131db565b9150614908826148a1565b604082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061498f6028836131db565b915061499a82614933565b604082019050919050565b600060208201905081810360008301526149be81614982565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a216025836131db565b9150614a2c826149c5565b604082019050919050565b60006020820190508181036000830152614a5081614a14565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614ab3602a836131db565b9150614abe82614a57565b604082019050919050565b60006020820190508181036000830152614ae281614aa6565b9050919050565b60006040820190508181036000830152614b0381856137f6565b90508181036020830152614b1781846137f6565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7c6021836131db565b9150614b8782614b20565b604082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f45524332393831526f79616c746965733a20546f6f2068696768000000000000600082015250565b6000614be8601a836131db565b9150614bf382614bb2565b602082019050919050565b60006020820190508181036000830152614c1781614bdb565b9050919050565b6000604082019050614c336000830185612f5c565b614c406020830184612f5c565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614ca36029836131db565b9150614cae82614c47565b604082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b600060a082019050614cee600083018861327a565b614cfb602083018761327a565b8181036040830152614d0d81866137f6565b90508181036060830152614d2181856137f6565b90508181036080830152614d358184614014565b9050969550505050505056fea26469706673582212209db10f9e135463c8e3cf412a9d8228f34b7e262c05c010178dfdfaeebe9def5564736f6c634300080d00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e445fb0297f7d1f507df708185946210eb6a9de6000000000000000000000000000000000000000000000000000000000000001568747470733a2f2f697066732e696f2f697066732f0000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a85760003560e01c8063704fe710116100f9578063a22cb46511610097578063e985e9c511610071578063e985e9c5146104b6578063f242432a146104e6578063f2fde38b14610502578063fca3b5aa1461051e576101a8565b8063a22cb46514610462578063af8777071461047e578063e2c7f3381461049a576101a8565b80638d2bb093116100d35780638d2bb093146103ee5780638da5cb5b1461040a57806398faf29b146104285780639abc832014610444576101a8565b8063704fe71014610398578063715018a6146103c857806382295a2d146103d2576101a8565b80630e89341c116101665780632a55205a116101405780632a55205a146102ff5780632eb2c2d6146103305780634e1273f41461034c57806369b520171461037c576101a8565b80630e89341c1461028157806318160ddd146102b15780631f320331146102cf576101a8565b8062fdd58e146101ad57806301ffc9a7146101dd57806302fe53051461020d57806306fdde03146102295780630754617214610247578063084e9e2414610265575b600080fd5b6101c760048036038101906101c29190612f1c565b61053a565b6040516101d49190612f6b565b60405180910390f35b6101f760048036038101906101f29190612fde565b610602565b6040516102049190613026565b60405180910390f35b61022760048036038101906102229190613187565b610614565b005b61023161069c565b60405161023e9190613258565b60405180910390f35b61024f6106d5565b60405161025c9190613289565b60405180910390f35b61027f600480360381019061027a9190613345565b6106fb565b005b61029b600480360381019061029691906133ee565b6108d2565b6040516102a89190613258565b60405180910390f35b6102b9610910565b6040516102c69190612f6b565b60405180910390f35b6102e960048036038101906102e4919061341b565b610916565b6040516102f69190612f6b565b60405180910390f35b6103196004803603810190610314919061345b565b61093b565b60405161032792919061349b565b60405180910390f35b61034a6004803603810190610345919061358c565b610a0c565b005b6103666004803603810190610361919061371e565b610aad565b6040516103739190613854565b60405180910390f35b61039660048036038101906103919190613957565b610bc6565b005b6103b260048036038101906103ad91906133ee565b610e39565b6040516103bf9190613258565b60405180910390f35b6103d0610ed9565b005b6103ec60048036038101906103e79190613a70565b610f61565b005b61040860048036038101906104039190613acc565b611009565b005b6104126112a4565b60405161041f9190613289565b60405180910390f35b610442600480360381019061043d9190613b75565b6112ce565b005b61044c6113a1565b6040516104599190613258565b60405180910390f35b61047c60048036038101906104779190613c4a565b61142f565b005b61049860048036038101906104939190613c8a565b611445565b005b6104b460048036038101906104af9190613da3565b611927565b005b6104d060048036038101906104cb9190613df6565b6119b3565b6040516104dd9190613026565b60405180910390f35b61050060048036038101906104fb9190613e36565b611a47565b005b61051c60048036038101906105179190613ecd565b611ae8565b005b61053860048036038101906105339190613ecd565b611bdf565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a190613f6c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061060d82611c9f565b9050919050565b61061c611d19565b73ffffffffffffffffffffffffffffffffffffffff1661063a6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068790613fd8565b60405180910390fd5b61069981611d21565b50565b6040518060400160405280600b81526020017f566572736520576f726b7300000000000000000000000000000000000000000081525081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61071a8473ffffffffffffffffffffffffffffffffffffffff16611d3b565b156108ca578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161076095949392919061404d565b6020604051808303816000875af192505050801561079c57506040513d601f19601f8201168201806040525081019061079991906140bc565b60015b610841576107a86140f6565b806308c379a00361080457506107bc614118565b806107c75750610806565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb9190613258565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108389061421a565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf906142ac565b60405180910390fd5b505b505050505050565b60606003600160008481526020019081526020016000206040516020016108fa9291906143cb565b6040516020818303038152906040529050919050565b60065481565b6000602052816000526040600020602052806000526040600020600091509150505481565b6000806000600560008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905080600001519250612710816020015162ffffff16856109f8919061441e565b610a0291906144a7565b9150509250929050565b610a14611d19565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a5a5750610a5985610a54611d19565b6119b3565b5b610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a909061454a565b60405180910390fd5b610aa68585858585611d5e565b5050505050565b60608151835114610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea906145dc565b60405180910390fd5b6000835167ffffffffffffffff811115610b1057610b0f61305c565b5b604051908082528060200260200182016040528015610b3e5781602001602082028036833780820191505090505b50905060005b8451811015610bbb57610b8b858281518110610b6357610b626145fc565b5b6020026020010151858381518110610b7e57610b7d6145fc565b5b602002602001015161053a565b828281518110610b9e57610b9d6145fc565b5b60200260200101818152505080610bb49061462b565b9050610b44565b508091505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2057600080fd5b81518551148015610c32575080518551145b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c68906146bf565b60405180910390fd5b610c8c8686866040518060200160405280600081525061207f565b60005b8551811015610d84576000828281518110610cad57610cac6145fc565b5b60200260200101511115610d1557610d14868281518110610cd157610cd06145fc565b5b6020026020010151848381518110610cec57610ceb6145fc565b5b6020026020010151848481518110610d0757610d066145fc565b5b60200260200101516122ab565b5b838181518110610d2857610d276145fc565b5b602002602001015160016000888481518110610d4757610d466145fc565b5b602002602001015181526020019081526020016000209080519060200190610d70929190612dd1565b508080610d7c9061462b565b915050610c8f565b50600080600090505b8651811015610e165760005b8651811015610e0257868181518110610db557610db46145fc565b5b6020026020010151888381518110610dd057610dcf6145fc565b5b6020026020010151610de2919061441e565b83610ded91906146df565b92508080610dfa9061462b565b915050610d99565b508080610e0e9061462b565b915050610d8d565b508060066000828254610e2991906146df565b9250508190555050505050505050565b60016020528060005260406000206000915090508054610e58906142fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e84906142fb565b8015610ed15780601f10610ea657610100808354040283529160200191610ed1565b820191906000526020600020905b815481529060010190602001808311610eb457829003601f168201915b505050505081565b610ee1611d19565b73ffffffffffffffffffffffffffffffffffffffff16610eff6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613fd8565b60405180910390fd5b610f5f60006123a7565b565b610f69611d19565b73ffffffffffffffffffffffffffffffffffffffff16610f876112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490613fd8565b60405180910390fd5b80600160008481526020019081526020016000209080519060200190611004929190612dd1565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461106357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990614781565b60405180910390fd5b600160008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461113291906146df565b9250508190555060016006600082825461114c91906146df565b925050819055508260016000868152602001908152602001600020908051906020019061117a929190612dd1565b5060008111156111905761118f8483836122ab565b5b600061119a611d19565b90508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628860016040516112149291906147e6565b60405180910390a48573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628860016040516112939291906147e6565b60405180910390a450505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461132857600080fd5b6113438686866040518060200160405280600081525061246d565b6000811115611358576113578583836122ab565b5b8260016000878152602001908152602001600020908051906020019061137f929190612dd1565b50836006600082825461139291906146df565b92505081905550505050505050565b600380546113ae906142fb565b80601f01602080910402602001604051908101604052809291908181526020018280546113da906142fb565b80156114275780601f106113fc57610100808354040283529160200191611427565b820191906000526020600020905b81548152906001019060200180831161140a57829003601f168201915b505050505081565b61144161143a611d19565b838361261d565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461149f57600080fd5b815184511480156114b1575080518451145b6114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e7906146bf565b60405180910390fd5b60006114fa611d19565b905060005b85518110156119035760016000808884815181106115205761151f6145fc565b5b6020026020010151815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158291906146df565b925050819055506115c28260008a8985815181106115a3576115a26145fc565b5b60200260200101516001604051806020016040528060008152506106fb565b60008382815181106115d7576115d66145fc565b5b6020026020010151111561163f5761163e8682815181106115fb576115fa6145fc565b5b6020026020010151858381518110611616576116156145fc565b5b6020026020010151858481518110611631576116306145fc565b5b60200260200101516122ab565b5b848181518110611652576116516145fc565b5b602002602001015160016000888481518110611671576116706145fc565b5b60200260200101518152602001908152602001600020908051906020019061169a929190612dd1565b50600073ffffffffffffffffffffffffffffffffffffffff168782815181106116c6576116c56145fc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611788578773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898581518110611763576117626145fc565b5b6020026020010151600160405161177b9291906147e6565b60405180910390a46118f0565b86818151811061179b5761179a6145fc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289858151811061181c5761181b6145fc565b5b602002602001015160016040516118349291906147e6565b60405180910390a48773ffffffffffffffffffffffffffffffffffffffff16878281518110611866576118656145fc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628985815181106118cf576118ce6145fc565b5b602002602001015160016040516118e79291906147e6565b60405180910390a45b80806118fb9061462b565b9150506114ff565b5084516006600082825461191791906146df565b9250508190555050505050505050565b61192f611d19565b73ffffffffffffffffffffffffffffffffffffffff1661194d6112a4565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613fd8565b60405180910390fd5b6119ae8383836122ab565b505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a4f611d19565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611a955750611a9485611a8f611d19565b6119b3565b5b611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90614881565b60405180910390fd5b611ae18585858585612789565b5050505050565b611af0611d19565b73ffffffffffffffffffffffffffffffffffffffff16611b0e6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90613fd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614913565b60405180910390fd5b611bdc816123a7565b50565b611be7611d19565b73ffffffffffffffffffffffffffffffffffffffff16611c056112a4565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613fd8565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d125750611d1182612a24565b5b9050919050565b600033905090565b8060039080519060200190611d37929190612dd1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8151835114611da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d99906149a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890614a37565b60405180910390fd5b6000611e1b611d19565b9050611e2b818787878787612b06565b60005b8451811015611fdc576000858281518110611e4c57611e4b6145fc565b5b602002602001015190506000858381518110611e6b57611e6a6145fc565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390614ac9565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc191906146df565b9250508190555050505080611fd59061462b565b9050611e2e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612053929190614ae9565b60405180910390a4612069818787878787612b0e565b612077818787878787612b16565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590614b92565b60405180910390fd5b8151835114612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906149a5565b60405180910390fd5b600061213c611d19565b905061214d81600087878787612b06565b60005b84518110156122065783818151811061216c5761216b6145fc565b5b602002602001015160008087848151811061218a576121896145fc565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ec91906146df565b9250508190555080806121fe9061462b565b915050612150565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161227e929190614ae9565b60405180910390a461229581600087878787612b0e565b6122a481600087878787612b16565b5050505050565b6127108111156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790614bfe565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152506005600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548162ffffff021916908362ffffff160217905550905050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d390614b92565b60405180910390fd5b60006124e6611d19565b905060006124f385612ced565b9050600061250085612ced565b905061251183600089858589612b06565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461257091906146df565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516125ee929190614c1e565b60405180910390a461260583600089858589612b0e565b612614836000898989896106fb565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614cb9565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161277c9190613026565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90614a37565b60405180910390fd5b6000612802611d19565b9050600061280f85612ced565b9050600061281c85612ced565b905061282c838989858589612b06565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90614ac9565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461297891906146df565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516129f5929190614c1e565b60405180910390a4612a0b848a8a86868a612b0e565b612a19848a8a8a8a8a6106fb565b505050505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612aef57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612aff5750612afe82612d67565b5b9050919050565b505050505050565b505050505050565b612b358473ffffffffffffffffffffffffffffffffffffffff16611d3b565b15612ce5578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612b7b959493929190614cd9565b6020604051808303816000875af1925050508015612bb757506040513d601f19601f82011682018060405250810190612bb491906140bc565b60015b612c5c57612bc36140f6565b806308c379a003612c1f5750612bd7614118565b80612be25750612c21565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c169190613258565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c539061421a565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda906142ac565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612d0c57612d0b61305c565b5b604051908082528060200260200182016040528015612d3a5781602001602082028036833780820191505090505b5090508281600081518110612d5257612d516145fc565b5b60200260200101818152505080915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054612ddd906142fb565b90600052602060002090601f016020900481019282612dff5760008555612e46565b82601f10612e1857805160ff1916838001178555612e46565b82800160010185558215612e46579182015b82811115612e45578251825591602001919060010190612e2a565b5b509050612e539190612e57565b5090565b5b80821115612e70576000816000905550600101612e58565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612eb382612e88565b9050919050565b612ec381612ea8565b8114612ece57600080fd5b50565b600081359050612ee081612eba565b92915050565b6000819050919050565b612ef981612ee6565b8114612f0457600080fd5b50565b600081359050612f1681612ef0565b92915050565b60008060408385031215612f3357612f32612e7e565b5b6000612f4185828601612ed1565b9250506020612f5285828601612f07565b9150509250929050565b612f6581612ee6565b82525050565b6000602082019050612f806000830184612f5c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fbb81612f86565b8114612fc657600080fd5b50565b600081359050612fd881612fb2565b92915050565b600060208284031215612ff457612ff3612e7e565b5b600061300284828501612fc9565b91505092915050565b60008115159050919050565b6130208161300b565b82525050565b600060208201905061303b6000830184613017565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6130948261304b565b810181811067ffffffffffffffff821117156130b3576130b261305c565b5b80604052505050565b60006130c6612e74565b90506130d2828261308b565b919050565b600067ffffffffffffffff8211156130f2576130f161305c565b5b6130fb8261304b565b9050602081019050919050565b82818337600083830152505050565b600061312a613125846130d7565b6130bc565b90508281526020810184848401111561314657613145613046565b5b613151848285613108565b509392505050565b600082601f83011261316e5761316d613041565b5b813561317e848260208601613117565b91505092915050565b60006020828403121561319d5761319c612e7e565b5b600082013567ffffffffffffffff8111156131bb576131ba612e83565b5b6131c784828501613159565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561320a5780820151818401526020810190506131ef565b83811115613219576000848401525b50505050565b600061322a826131d0565b61323481856131db565b93506132448185602086016131ec565b61324d8161304b565b840191505092915050565b60006020820190508181036000830152613272818461321f565b905092915050565b61328381612ea8565b82525050565b600060208201905061329e600083018461327a565b92915050565b600067ffffffffffffffff8211156132bf576132be61305c565b5b6132c88261304b565b9050602081019050919050565b60006132e86132e3846132a4565b6130bc565b90508281526020810184848401111561330457613303613046565b5b61330f848285613108565b509392505050565b600082601f83011261332c5761332b613041565b5b813561333c8482602086016132d5565b91505092915050565b60008060008060008060c0878903121561336257613361612e7e565b5b600061337089828a01612ed1565b965050602061338189828a01612ed1565b955050604061339289828a01612ed1565b94505060606133a389828a01612f07565b93505060806133b489828a01612f07565b92505060a087013567ffffffffffffffff8111156133d5576133d4612e83565b5b6133e189828a01613317565b9150509295509295509295565b60006020828403121561340457613403612e7e565b5b600061341284828501612f07565b91505092915050565b6000806040838503121561343257613431612e7e565b5b600061344085828601612f07565b925050602061345185828601612ed1565b9150509250929050565b6000806040838503121561347257613471612e7e565b5b600061348085828601612f07565b925050602061349185828601612f07565b9150509250929050565b60006040820190506134b0600083018561327a565b6134bd6020830184612f5c565b9392505050565b600067ffffffffffffffff8211156134df576134de61305c565b5b602082029050602081019050919050565b600080fd5b6000613508613503846134c4565b6130bc565b9050808382526020820190506020840283018581111561352b5761352a6134f0565b5b835b8181101561355457806135408882612f07565b84526020840193505060208101905061352d565b5050509392505050565b600082601f83011261357357613572613041565b5b81356135838482602086016134f5565b91505092915050565b600080600080600060a086880312156135a8576135a7612e7e565b5b60006135b688828901612ed1565b95505060206135c788828901612ed1565b945050604086013567ffffffffffffffff8111156135e8576135e7612e83565b5b6135f48882890161355e565b935050606086013567ffffffffffffffff81111561361557613614612e83565b5b6136218882890161355e565b925050608086013567ffffffffffffffff81111561364257613641612e83565b5b61364e88828901613317565b9150509295509295909350565b600067ffffffffffffffff8211156136765761367561305c565b5b602082029050602081019050919050565b600061369a6136958461365b565b6130bc565b905080838252602082019050602084028301858111156136bd576136bc6134f0565b5b835b818110156136e657806136d28882612ed1565b8452602084019350506020810190506136bf565b5050509392505050565b600082601f83011261370557613704613041565b5b8135613715848260208601613687565b91505092915050565b6000806040838503121561373557613734612e7e565b5b600083013567ffffffffffffffff81111561375357613752612e83565b5b61375f858286016136f0565b925050602083013567ffffffffffffffff8111156137805761377f612e83565b5b61378c8582860161355e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137cb81612ee6565b82525050565b60006137dd83836137c2565b60208301905092915050565b6000602082019050919050565b600061380182613796565b61380b81856137a1565b9350613816836137b2565b8060005b8381101561384757815161382e88826137d1565b9750613839836137e9565b92505060018101905061381a565b5085935050505092915050565b6000602082019050818103600083015261386e81846137f6565b905092915050565b600067ffffffffffffffff8211156138915761389061305c565b5b602082029050602081019050919050565b60006138b56138b084613876565b6130bc565b905080838252602082019050602084028301858111156138d8576138d76134f0565b5b835b8181101561391f57803567ffffffffffffffff8111156138fd576138fc613041565b5b80860161390a8982613159565b855260208501945050506020810190506138da565b5050509392505050565b600082601f83011261393e5761393d613041565b5b813561394e8482602086016138a2565b91505092915050565b60008060008060008060c0878903121561397457613973612e7e565b5b600061398289828a01612ed1565b965050602087013567ffffffffffffffff8111156139a3576139a2612e83565b5b6139af89828a0161355e565b955050604087013567ffffffffffffffff8111156139d0576139cf612e83565b5b6139dc89828a0161355e565b945050606087013567ffffffffffffffff8111156139fd576139fc612e83565b5b613a0989828a01613929565b935050608087013567ffffffffffffffff811115613a2a57613a29612e83565b5b613a3689828a016136f0565b92505060a087013567ffffffffffffffff811115613a5757613a56612e83565b5b613a6389828a0161355e565b9150509295509295509295565b60008060408385031215613a8757613a86612e7e565b5b6000613a9585828601612f07565b925050602083013567ffffffffffffffff811115613ab657613ab5612e83565b5b613ac285828601613159565b9150509250929050565b60008060008060008060c08789031215613ae957613ae8612e7e565b5b6000613af789828a01612ed1565b9650506020613b0889828a01612ed1565b9550506040613b1989828a01612f07565b945050606087013567ffffffffffffffff811115613b3a57613b39612e83565b5b613b4689828a01613159565b9350506080613b5789828a01612ed1565b92505060a0613b6889828a01612f07565b9150509295509295509295565b60008060008060008060c08789031215613b9257613b91612e7e565b5b6000613ba089828a01612ed1565b9650506020613bb189828a01612f07565b9550506040613bc289828a01612f07565b945050606087013567ffffffffffffffff811115613be357613be2612e83565b5b613bef89828a01613159565b9350506080613c0089828a01612ed1565b92505060a0613c1189828a01612f07565b9150509295509295509295565b613c278161300b565b8114613c3257600080fd5b50565b600081359050613c4481613c1e565b92915050565b60008060408385031215613c6157613c60612e7e565b5b6000613c6f85828601612ed1565b9250506020613c8085828601613c35565b9150509250929050565b60008060008060008060c08789031215613ca757613ca6612e7e565b5b6000613cb589828a01612ed1565b965050602087013567ffffffffffffffff811115613cd657613cd5612e83565b5b613ce289828a016136f0565b955050604087013567ffffffffffffffff811115613d0357613d02612e83565b5b613d0f89828a0161355e565b945050606087013567ffffffffffffffff811115613d3057613d2f612e83565b5b613d3c89828a01613929565b935050608087013567ffffffffffffffff811115613d5d57613d5c612e83565b5b613d6989828a016136f0565b92505060a087013567ffffffffffffffff811115613d8a57613d89612e83565b5b613d9689828a0161355e565b9150509295509295509295565b600080600060608486031215613dbc57613dbb612e7e565b5b6000613dca86828701612f07565b9350506020613ddb86828701612ed1565b9250506040613dec86828701612f07565b9150509250925092565b60008060408385031215613e0d57613e0c612e7e565b5b6000613e1b85828601612ed1565b9250506020613e2c85828601612ed1565b9150509250929050565b600080600080600060a08688031215613e5257613e51612e7e565b5b6000613e6088828901612ed1565b9550506020613e7188828901612ed1565b9450506040613e8288828901612f07565b9350506060613e9388828901612f07565b925050608086013567ffffffffffffffff811115613eb457613eb3612e83565b5b613ec088828901613317565b9150509295509295909350565b600060208284031215613ee357613ee2612e7e565b5b6000613ef184828501612ed1565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613f56602b836131db565b9150613f6182613efa565b604082019050919050565b60006020820190508181036000830152613f8581613f49565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc26020836131db565b9150613fcd82613f8c565b602082019050919050565b60006020820190508181036000830152613ff181613fb5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061401f82613ff8565b6140298185614003565b93506140398185602086016131ec565b6140428161304b565b840191505092915050565b600060a082019050614062600083018861327a565b61406f602083018761327a565b61407c6040830186612f5c565b6140896060830185612f5c565b818103608083015261409b8184614014565b90509695505050505050565b6000815190506140b681612fb2565b92915050565b6000602082840312156140d2576140d1612e7e565b5b60006140e0848285016140a7565b91505092915050565b60008160e01c9050919050565b600060033d11156141155760046000803e6141126000516140e9565b90505b90565b600060443d106141a55761412a612e74565b60043d036004823e80513d602482011167ffffffffffffffff821117156141525750506141a5565b808201805167ffffffffffffffff81111561417057505050506141a5565b80602083010160043d03850181111561418d5750505050506141a5565b61419c8260200185018661308b565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006142046034836131db565b915061420f826141a8565b604082019050919050565b60006020820190508181036000830152614233816141f7565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006142966028836131db565b91506142a18261423a565b604082019050919050565b600060208201905081810360008301526142c581614289565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061431357607f821691505b602082108103614326576143256142cc565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154614359816142fb565b614363818661432c565b9450600182166000811461437e576001811461438f576143c2565b60ff198316865281860193506143c2565b61439885614337565b60005b838110156143ba5781548189015260018201915060208101905061439b565b838801955050505b50505092915050565b60006143d7828561434c565b91506143e3828461434c565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061442982612ee6565b915061443483612ee6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561446d5761446c6143ef565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144b282612ee6565b91506144bd83612ee6565b9250826144cd576144cc614478565b5b828204905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006145346032836131db565b915061453f826144d8565b604082019050919050565b6000602082019050818103600083015261456381614527565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006145c66029836131db565b91506145d18261456a565b604082019050919050565b600060208201905081810360008301526145f5816145b9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061463682612ee6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614668576146676143ef565b5b600182019050919050565b7f455243313135353a20417272617973206c656e677468206d69736d6174636800600082015250565b60006146a9601f836131db565b91506146b482614673565b602082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b60006146ea82612ee6565b91506146f583612ee6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561472a576147296143ef565b5b828201905092915050565b7f6d696e7420746f20746865207a65726f20616464726573730000000000000000600082015250565b600061476b6018836131db565b915061477682614735565b602082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b6000819050919050565b6000819050919050565b60006147d06147cb6147c6846147a1565b6147ab565b612ee6565b9050919050565b6147e0816147b5565b82525050565b60006040820190506147fb6000830185612f5c565b61480860208301846147d7565b9392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061486b6029836131db565b91506148768261480f565b604082019050919050565b6000602082019050818103600083015261489a8161485e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148fd6026836131db565b9150614908826148a1565b604082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061498f6028836131db565b915061499a82614933565b604082019050919050565b600060208201905081810360008301526149be81614982565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a216025836131db565b9150614a2c826149c5565b604082019050919050565b60006020820190508181036000830152614a5081614a14565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614ab3602a836131db565b9150614abe82614a57565b604082019050919050565b60006020820190508181036000830152614ae281614aa6565b9050919050565b60006040820190508181036000830152614b0381856137f6565b90508181036020830152614b1781846137f6565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7c6021836131db565b9150614b8782614b20565b604082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f45524332393831526f79616c746965733a20546f6f2068696768000000000000600082015250565b6000614be8601a836131db565b9150614bf382614bb2565b602082019050919050565b60006020820190508181036000830152614c1781614bdb565b9050919050565b6000604082019050614c336000830185612f5c565b614c406020830184612f5c565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614ca36029836131db565b9150614cae82614c47565b604082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b600060a082019050614cee600083018861327a565b614cfb602083018761327a565b8181036040830152614d0d81866137f6565b90508181036060830152614d2181856137f6565b90508181036080830152614d358184614014565b9050969550505050505056fea26469706673582212209db10f9e135463c8e3cf412a9d8228f34b7e262c05c010178dfdfaeebe9def5564736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e445fb0297f7d1f507df708185946210eb6a9de6000000000000000000000000000000000000000000000000000000000000001568747470733a2f2f697066732e696f2f697066732f0000000000000000000000
-----Decoded View---------------
Arg [0] : uri_ (string): https://ipfs.io/ipfs/
Arg [1] : minter_ (address): 0xe445Fb0297F7D1f507dF708185946210eB6a9DE6
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000e445fb0297f7d1f507df708185946210eb6a9de6
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [3] : 68747470733a2f2f697066732e696f2f697066732f0000000000000000000000
Deployed Bytecode Sourcemap
196:7053:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2339:305:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2862:217:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6467:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;371:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;454:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13959:870:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2008:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;421:26:11;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;693:63:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;836:329:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;4397:430:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2801:542;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1735:1054:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;808:38:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:12;;;:::i;:::-;;7142:105:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3439:664;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1029:85:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1026:408:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1060:21:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3411:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4634:1764:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6841:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3659:210:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3936:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6629:86:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2339:305:2;2465:7;2528:1;2509:21;;:7;:21;;;2488:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;2616:8;:12;2625:2;2616:12;;;;;;;;;;;:21;2629:7;2616:21;;;;;;;;;;;;;;;;2609:28;;2339:305;;;;:::o;2862:217:11:-;3009:4;3036:36;3060:11;3036:23;:36::i;:::-;3029:43;;2862:217;;;:::o;6467:87::-;1252:12:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6532:15:11::1;6540:6;6532:7;:15::i;:::-;6467:87:::0;:::o;371:43::-;;;;;;;;;;;;;;;;;;;:::o;454:21::-;;;;;;;;;;;;;:::o;13959:870:2:-;14165:15;:2;:13;;;:15::i;:::-;14161:662;;;14233:2;14216:38;;;14276:8;14306:4;14332:2;14356:6;14384:4;14216:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14196:617;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14689:6;14682:14;;;;;;;;;;;:::i;:::-;;;;;;;;14196:617;;;14736:62;;;;;;;;;;:::i;:::-;;;;;;;;14196:617;14479:43;;;14467:55;;;:8;:55;;;;14463:152;;14546:50;;;;;;;;;;:::i;:::-;;;;;;;;14463:152;14419:210;14161:662;13959:870;;;;;;:::o;2008:189::-;2111:13;2171:7;2180:4;:8;2185:2;2180:8;;;;;;;;;;;2154:35;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2140:50;;2008:189;;;:::o;421:26:11:-;;;;:::o;693:63:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;836:329:5:-;953:16;971:21;1008:28;1039:10;:19;1050:7;1039:19;;;;;;;;;;;1008:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1079:9;:19;;;1068:30;;1153:5;1133:9;:16;;;1125:24;;:5;:24;;;;:::i;:::-;1124:34;;;;:::i;:::-;1108:50;;998:167;836:329;;;;;:::o;4397:430:2:-;4630:12;:10;:12::i;:::-;4622:20;;:4;:20;;;:60;;;;4646:36;4663:4;4669:12;:10;:12::i;:::-;4646:16;:36::i;:::-;4622:60;4601:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4768:52;4791:4;4797:2;4801:3;4806:7;4815:4;4768:22;:52::i;:::-;4397:430;;;;;:::o;2801:542::-;2952:16;3024:3;:10;3005:8;:15;:29;2984:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;3112:30;3159:8;:15;3145:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3112:63;;3191:9;3186:120;3210:8;:15;3206:1;:19;3186:120;;;3265:30;3275:8;3284:1;3275:11;;;;;;;;:::i;:::-;;;;;;;;3288:3;3292:1;3288:6;;;;;;;;:::i;:::-;;;;;;;;3265:9;:30::i;:::-;3246:13;3260:1;3246:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;3227:3;;;;:::i;:::-;;;3186:120;;;;3323:13;3316:20;;;2801:542;;;;:::o;1735:1054:11:-;536:6;;;;;;;;;;;522:20;;:10;:20;;;514:29;;;;;;2026:17:::1;:24;2012:3;:10;:38;:92;;;;;2084:13;:20;2070:3;:10;:34;2012:92;1991:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;2171:32;2182:2;2186:3;2191:7;2171:32;;;;;;;;;;;::::0;:10:::1;:32::i;:::-;2219:9;2214:335;2234:3;:10;2230:1;:14;2214:335;;;2288:1;2269:13;2283:1;2269:16;;;;;;;;:::i;:::-;;;;;;;;:20;2265:201;;;2309:142;2347:3;2351:1;2347:6;;;;;;;;:::i;:::-;;;;;;;;2375:17;2393:1;2375:20;;;;;;;;:::i;:::-;;;;;;;;2417:13;2431:1;2417:16;;;;;;;;:::i;:::-;;;;;;;;2309;:142::i;:::-;2265:201;2526:9;2536:1;2526:12;;;;;;;;:::i;:::-;;;;;;;;2511:4;:12;2516:3;2520:1;2516:6;;;;;;;;:::i;:::-;;;;;;;;2511:12;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;2246:3;;;;;:::i;:::-;;;;2214:335;;;;2559:13;2587:9:::0;2599:1:::1;2587:13;;2582:171;2606:3;:10;2602:1;:14;2582:171;;;2642:9;2637:106;2661:7;:14;2657:1;:18;2637:106;;;2718:7;2726:1;2718:10;;;;;;;;:::i;:::-;;;;;;;;2709:3;2713:1;2709:6;;;;;;;;:::i;:::-;;;;;;;;:19;;;;:::i;:::-;2700:28;;;;;:::i;:::-;;;2677:3;;;;;:::i;:::-;;;;2637:106;;;;2618:3;;;;;:::i;:::-;;;;2582:171;;;;2777:5;2762:11;;:20;;;;;;;:::i;:::-;;;;;;;;1981:808;1735:1054:::0;;;;;;:::o;808:38:2:-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1661:101:12:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;7142:105:11:-;1252:12:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7237:3:11::1;7221:4;:13;7226:7;7221:13;;;;;;;;;;;:19;;;;;;;;;;;;:::i;:::-;;7142:105:::0;;:::o;3439:664::-;536:6;;;;;;;;;;;522:20;;:10;:20;;;514:29;;;;;;3681:1:::1;3667:16;;:2;:16;;::::0;3659:53:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3748:1;3723:8;:17:::0;3732:7:::1;3723:17;;;;;;;;;;;:21;3741:2;3723:21;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;3774:1;3759:11;;:16;;;;;;;:::i;:::-;;;;;;;;3801:3;3785:4;:13;3790:7;3785:13;;;;;;;;;;;:19;;;;;;;;;;;;:::i;:::-;;3834:1;3819:12;:16;3815:104;;;3851:57;3868:7;3877:16;3895:12;3851:16;:57::i;:::-;3815:104;3929:16;3948:12;:10;:12::i;:::-;3929:31;;4012:7;3975:57;;4008:1;3975:57;;3990:8;3975:57;;;4021:7;4030:1;3975:57;;;;;;;:::i;:::-;;;;;;;;4081:2;4047:49;;4072:7;4047:49;;4062:8;4047:49;;;4085:7;4094:1;4047:49;;;;;;;:::i;:::-;;;;;;;;3649:454;3439:664:::0;;;;;;:::o;1029:85:12:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;1026:408:11:-;536:6;;;;;;;;;;;522:20;;:10;:20;;;514:29;;;;;;1234:30:::1;1240:7;1249:2;1253:6;1234:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;1293:1;1278:12;:16;1274:99;;;1310:52;1327:2;1331:16;1349:12;1310:16;:52::i;:::-;1274:99;1393:3;1382:4;:8;1387:2;1382:8;;;;;;;;;;;:14;;;;;;;;;;;;:::i;:::-;;1421:6;1406:11;;:21;;;;;;;:::i;:::-;;;;;;;;1026:408:::0;;;;;;:::o;1060:21:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3411:181::-;3533:52;3552:12;:10;:12::i;:::-;3566:8;3576;3533:18;:52::i;:::-;3411:181;;:::o;4634:1764:11:-;536:6;;;;;;;;;;;522:20;;:10;:20;;;514:29;;;;;;4947:17:::1;:24;4928:8;:15;:43;:102;;;;;5010:13;:20;4991:8;:15;:39;4928:102;4907:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;5098:16;5117:12;:10;:12::i;:::-;5098:31;;5145:9;5140:1180;5164:8;:15;5160:1;:19;5140:1180;;;5229:1;5200:8;:21:::0;5209:8:::1;5218:1;5209:11;;;;;;;;:::i;:::-;;;;;;;;5200:21;;;;;;;;;;;:25;5222:2;5200:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5294:186;5342:8;5376:1;5396:2;5416:8;5425:1;5416:11;;;;;;;;:::i;:::-;;;;;;;;5445:1;5294:186;;;;;;;;;;;::::0;:30:::1;:186::i;:::-;5550:1;5531:13;5545:1;5531:16;;;;;;;;:::i;:::-;;;;;;;;:20;5527:206;;;5571:147;5609:8;5618:1;5609:11;;;;;;;;:::i;:::-;;;;;;;;5642:17;5660:1;5642:20;;;;;;;;:::i;:::-;;;;;;;;5684:13;5698:1;5684:16;;;;;;;;:::i;:::-;;;;;;;;5571;:147::i;:::-;5527:206;5798:9;5808:1;5798:12;;;;;;;;:::i;:::-;;;;;;;;5778:4;:17;5783:8;5792:1;5783:11;;;;;;;;:::i;:::-;;;;;;;;5778:17;;;;;;;;;;;:32;;;;;;;;;;;;:::i;:::-;;5905:1;5882:25;;:8;5891:1;5882:11;;;;;;;;:::i;:::-;;;;;;;;:25;;::::0;5878:432:::1;;5969:2;5932:56;;5965:1;5932:56;;5947:8;5932:56;;;5973:8;5982:1;5973:11;;;;;;;;:::i;:::-;;;;;;;;5986:1;5932:56;;;;;;;:::i;:::-;;;;;;;;5878:432;;;6130:8;6139:1;6130:11;;;;;;;;:::i;:::-;;;;;;;;6032:183;;6106:1;6032:183;;6068:8;6032:183;;;6163:8;6172:1;6163:11;;;;;;;;:::i;:::-;;;;;;;;6196:1;6032:183;;;;;;;:::i;:::-;;;;;;;;6276:2;6238:57;;6263:8;6272:1;6263:11;;;;;;;;:::i;:::-;;;;;;;;6238:57;;6253:8;6238:57;;;6280:8;6289:1;6280:11;;;;;;;;:::i;:::-;;;;;;;;6293:1;6238:57;;;;;;;:::i;:::-;;;;;;;;5878:432;5181:3;;;;;:::i;:::-;;;;5140:1180;;;;6376:8;:15;6361:11;;:30;;;;;;;:::i;:::-;;;;;;;;4897:1501;4634:1764:::0;;;;;;:::o;6841:208::-;1252:12:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6985:57:11::1;7002:7;7011:16;7029:12;6985:16;:57::i;:::-;6841:208:::0;;;:::o;3659:210:2:-;3798:4;3825:18;:27;3844:7;3825:27;;;;;;;;;;;;;;;:37;3853:8;3825:37;;;;;;;;;;;;;;;;;;;;;;;;;3818:44;;3659:210;;;;:::o;3936:389::-;4144:12;:10;:12::i;:::-;4136:20;;:4;:20;;;:60;;;;4160:36;4177:4;4183:12;:10;:12::i;:::-;4160:16;:36::i;:::-;4136:60;4115:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;4273:45;4291:4;4297:2;4301;4305:6;4313:4;4273:17;:45::i;:::-;3936:389;;;;;:::o;1911:198:12:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;::::0;1991:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;6629:86:11:-;1252:12:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6701:7:11::1;6692:6;;:16;;;;;;;;;;;;;;;;;;6629:86:::0;:::o;365:273:4:-;490:4;544:35;529:50;;;:11;:50;;;;:102;;;;595:36;619:11;595:23;:36::i;:::-;529:102;510:121;;365:273;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;8698:89:2:-;8774:6;8764:7;:16;;;;;;;;;;;;:::i;:::-;;8698:89;:::o;1175:320:0:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;6601:1274:2:-;6834:7;:14;6820:3;:10;:28;6799:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;6946:1;6932:16;;:2;:16;;;6924:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;7001:16;7020:12;:10;:12::i;:::-;7001:31;;7043:60;7064:8;7074:4;7080:2;7084:3;7089:7;7098:4;7043:20;:60::i;:::-;7119:9;7114:454;7138:3;:10;7134:1;:14;7114:454;;;7169:10;7182:3;7186:1;7182:6;;;;;;;;:::i;:::-;;;;;;;;7169:19;;7202:14;7219:7;7227:1;7219:10;;;;;;;;:::i;:::-;;;;;;;;7202:27;;7244:19;7266:8;:12;7275:2;7266:12;;;;;;;;;;;:18;7279:4;7266:18;;;;;;;;;;;;;;;;7244:40;;7338:6;7323:11;:21;;7298:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7497:6;7483:11;:20;7462:8;:12;7471:2;7462:12;;;;;;;;;;;:18;7475:4;7462:18;;;;;;;;;;;;;;;:41;;;;7551:6;7531:8;:12;7540:2;7531:12;;;;;;;;;;;:16;7544:2;7531:16;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;7155:413;;;7150:3;;;;:::i;:::-;;;7114:454;;;;7613:2;7583:47;;7607:4;7583:47;;7597:8;7583:47;;;7617:3;7622:7;7583:47;;;;;;;:::i;:::-;;;;;;;;7641:59;7661:8;7671:4;7677:2;7681:3;7686:7;7695:4;7641:19;:59::i;:::-;7711:157;7760:8;7782:4;7800:2;7816:3;7833:7;7854:4;7711:35;:157::i;:::-;6789:1086;6601:1274;;;;;:::o;10295:906::-;10481:1;10467:16;;:2;:16;;;10459:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10566:7;:14;10552:3;:10;:28;10531:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;10657:16;10676:12;:10;:12::i;:::-;10657:31;;10699:66;10720:8;10738:1;10742:2;10746:3;10751:7;10760:4;10699:20;:66::i;:::-;10781:9;10776:100;10800:3;:10;10796:1;:14;10776:100;;;10855:7;10863:1;10855:10;;;;;;;;:::i;:::-;;;;;;;;10831:8;:16;10840:3;10844:1;10840:6;;;;;;;;:::i;:::-;;;;;;;;10831:16;;;;;;;;;;;:20;10848:2;10831:20;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;10812:3;;;;;:::i;:::-;;;;10776:100;;;;10927:2;10891:53;;10923:1;10891:53;;10905:8;10891:53;;;10931:3;10936:7;10891:53;;;;;;;:::i;:::-;;;;;;;;10955:65;10975:8;10993:1;10997:2;11001:3;11006:7;11015:4;10955:19;:65::i;:::-;11031:163;11080:8;11110:1;11126:2;11142:3;11159:7;11180:4;11031:35;:163::i;:::-;10449:752;10295:906;;;;:::o;537:255:5:-;680:5;671;:14;;663:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;748:37;;;;;;;;760:9;748:37;;;;;;778:5;748:37;;;;;726:10;:19;737:7;726:19;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;537:255;;;:::o;2263:187:12:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;9160:790:2:-;9321:1;9307:16;;:2;:16;;;9299:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9372:16;9391:12;:10;:12::i;:::-;9372:31;;9413:20;9436:21;9454:2;9436:17;:21::i;:::-;9413:44;;9467:24;9494:25;9512:6;9494:17;:25::i;:::-;9467:52;;9530:66;9551:8;9569:1;9573:2;9577:3;9582:7;9591:4;9530:20;:66::i;:::-;9627:6;9607:8;:12;9616:2;9607:12;;;;;;;;;;;:16;9620:2;9607:16;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;9685:2;9648:52;;9681:1;9648:52;;9663:8;9648:52;;;9689:2;9693:6;9648:52;;;;;;;:::i;:::-;;;;;;;;9711:65;9731:8;9749:1;9753:2;9757:3;9762:7;9771:4;9711:19;:65::i;:::-;9787:156;9831:8;9861:1;9877:2;9893;9909:6;9929:4;9787:30;:156::i;:::-;9289:661;;;9160:790;;;;:::o;11336:323::-;11486:8;11477:17;;:5;:17;;;11469:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11588:8;11550:18;:25;11569:5;11550:25;;;;;;;;;;;;;;;:35;11576:8;11550:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11633:8;11611:41;;11626:5;11611:41;;;11643:8;11611:41;;;;;;:::i;:::-;;;;;;;;11336:323;;;:::o;5277:978::-;5472:1;5458:16;;:2;:16;;;5450:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5527:16;5546:12;:10;:12::i;:::-;5527:31;;5568:20;5591:21;5609:2;5591:17;:21::i;:::-;5568:44;;5622:24;5649:25;5667:6;5649:17;:25::i;:::-;5622:52;;5685:60;5706:8;5716:4;5722:2;5726:3;5731:7;5740:4;5685:20;:60::i;:::-;5756:19;5778:8;:12;5787:2;5778:12;;;;;;;;;;;:18;5791:4;5778:18;;;;;;;;;;;;;;;;5756:40;;5842:6;5827:11;:21;;5806:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5985:6;5971:11;:20;5950:8;:12;5959:2;5950:12;;;;;;;;;;;:18;5963:4;5950:18;;;;;;;;;;;;;;;:41;;;;6031:6;6011:8;:12;6020:2;6011:12;;;;;;;;;;;:16;6024:2;6011:16;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;6084:2;6053:46;;6078:4;6053:46;;6068:8;6053:46;;;6088:2;6092:6;6053:46;;;;;;;:::i;:::-;;;;;;;;6110:59;6130:8;6140:4;6146:2;6150:3;6155:7;6164:4;6110:19;:59::i;:::-;6180:68;6211:8;6221:4;6227:2;6231;6235:6;6243:4;6180:30;:68::i;:::-;5440:815;;;;5277:978;;;;;:::o;1260:349::-;1402:4;1456:26;1441:41;;;:11;:41;;;;:109;;;;1513:37;1498:52;;;:11;:52;;;;1441:109;:161;;;;1566:36;1590:11;1566:23;:36::i;:::-;1441:161;1422:180;;1260:349;;;:::o;12593:214::-;;;;;;;:::o;13740:213::-;;;;;;;:::o;14835:946::-;15067:15;:2;:13;;;:15::i;:::-;15063:712;;;15135:2;15118:43;;;15183:8;15213:4;15239:3;15264:7;15293:4;15118:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15098:667;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15641:6;15634:14;;;;;;;;;;;:::i;:::-;;;;;;;;15098:667;;;15688:62;;;;;;;;;;:::i;:::-;;;;;;;;15098:667;15409:48;;;15397:60;;;:8;:60;;;;15372:195;;15498:50;;;;;;;;;;:::i;:::-;;;;;;;;15372:195;15328:253;15063:712;14835:946;;;;;;:::o;15787:221::-;15877:16;15909:22;15948:1;15934:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15909:41;;15971:7;15960:5;15966:1;15960:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;15996:5;15989:12;;;15787:221;;;:::o;829:155:3:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:14:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:99::-;5994:6;6028:5;6022:12;6012:22;;5942:99;;;:::o;6047:169::-;6131:11;6165:6;6160:3;6153:19;6205:4;6200:3;6196:14;6181:29;;6047:169;;;;:::o;6222:307::-;6290:1;6300:113;6314:6;6311:1;6308:13;6300:113;;;6399:1;6394:3;6390:11;6384:18;6380:1;6375:3;6371:11;6364:39;6336:2;6333:1;6329:10;6324:15;;6300:113;;;6431:6;6428:1;6425:13;6422:101;;;6511:1;6502:6;6497:3;6493:16;6486:27;6422:101;6271:258;6222:307;;;:::o;6535:364::-;6623:3;6651:39;6684:5;6651:39;:::i;:::-;6706:71;6770:6;6765:3;6706:71;:::i;:::-;6699:78;;6786:52;6831:6;6826:3;6819:4;6812:5;6808:16;6786:52;:::i;:::-;6863:29;6885:6;6863:29;:::i;:::-;6858:3;6854:39;6847:46;;6627:272;6535:364;;;;:::o;6905:313::-;7018:4;7056:2;7045:9;7041:18;7033:26;;7105:9;7099:4;7095:20;7091:1;7080:9;7076:17;7069:47;7133:78;7206:4;7197:6;7133:78;:::i;:::-;7125:86;;6905:313;;;;:::o;7224:118::-;7311:24;7329:5;7311:24;:::i;:::-;7306:3;7299:37;7224:118;;:::o;7348:222::-;7441:4;7479:2;7468:9;7464:18;7456:26;;7492:71;7560:1;7549:9;7545:17;7536:6;7492:71;:::i;:::-;7348:222;;;;:::o;7576:307::-;7637:4;7727:18;7719:6;7716:30;7713:56;;;7749:18;;:::i;:::-;7713:56;7787:29;7809:6;7787:29;:::i;:::-;7779:37;;7871:4;7865;7861:15;7853:23;;7576:307;;;:::o;7889:410::-;7966:5;7991:65;8007:48;8048:6;8007:48;:::i;:::-;7991:65;:::i;:::-;7982:74;;8079:6;8072:5;8065:21;8117:4;8110:5;8106:16;8155:3;8146:6;8141:3;8137:16;8134:25;8131:112;;;8162:79;;:::i;:::-;8131:112;8252:41;8286:6;8281:3;8276;8252:41;:::i;:::-;7972:327;7889:410;;;;;:::o;8318:338::-;8373:5;8422:3;8415:4;8407:6;8403:17;8399:27;8389:122;;8430:79;;:::i;:::-;8389:122;8547:6;8534:20;8572:78;8646:3;8638:6;8631:4;8623:6;8619:17;8572:78;:::i;:::-;8563:87;;8379:277;8318:338;;;;:::o;8662:1235::-;8775:6;8783;8791;8799;8807;8815;8864:3;8852:9;8843:7;8839:23;8835:33;8832:120;;;8871:79;;:::i;:::-;8832:120;8991:1;9016:53;9061:7;9052:6;9041:9;9037:22;9016:53;:::i;:::-;9006:63;;8962:117;9118:2;9144:53;9189:7;9180:6;9169:9;9165:22;9144:53;:::i;:::-;9134:63;;9089:118;9246:2;9272:53;9317:7;9308:6;9297:9;9293:22;9272:53;:::i;:::-;9262:63;;9217:118;9374:2;9400:53;9445:7;9436:6;9425:9;9421:22;9400:53;:::i;:::-;9390:63;;9345:118;9502:3;9529:53;9574:7;9565:6;9554:9;9550:22;9529:53;:::i;:::-;9519:63;;9473:119;9659:3;9648:9;9644:19;9631:33;9691:18;9683:6;9680:30;9677:117;;;9713:79;;:::i;:::-;9677:117;9818:62;9872:7;9863:6;9852:9;9848:22;9818:62;:::i;:::-;9808:72;;9602:288;8662:1235;;;;;;;;:::o;9903:329::-;9962:6;10011:2;9999:9;9990:7;9986:23;9982:32;9979:119;;;10017:79;;:::i;:::-;9979:119;10137:1;10162:53;10207:7;10198:6;10187:9;10183:22;10162:53;:::i;:::-;10152:63;;10108:117;9903:329;;;;:::o;10238:474::-;10306:6;10314;10363:2;10351:9;10342:7;10338:23;10334:32;10331:119;;;10369:79;;:::i;:::-;10331:119;10489:1;10514:53;10559:7;10550:6;10539:9;10535:22;10514:53;:::i;:::-;10504:63;;10460:117;10616:2;10642:53;10687:7;10678:6;10667:9;10663:22;10642:53;:::i;:::-;10632:63;;10587:118;10238:474;;;;;:::o;10718:::-;10786:6;10794;10843:2;10831:9;10822:7;10818:23;10814:32;10811:119;;;10849:79;;:::i;:::-;10811:119;10969:1;10994:53;11039:7;11030:6;11019:9;11015:22;10994:53;:::i;:::-;10984:63;;10940:117;11096:2;11122:53;11167:7;11158:6;11147:9;11143:22;11122:53;:::i;:::-;11112:63;;11067:118;10718:474;;;;;:::o;11198:332::-;11319:4;11357:2;11346:9;11342:18;11334:26;;11370:71;11438:1;11427:9;11423:17;11414:6;11370:71;:::i;:::-;11451:72;11519:2;11508:9;11504:18;11495:6;11451:72;:::i;:::-;11198:332;;;;;:::o;11536:311::-;11613:4;11703:18;11695:6;11692:30;11689:56;;;11725:18;;:::i;:::-;11689:56;11775:4;11767:6;11763:17;11755:25;;11835:4;11829;11825:15;11817:23;;11536:311;;;:::o;11853:117::-;11962:1;11959;11952:12;11993:710;12089:5;12114:81;12130:64;12187:6;12130:64;:::i;:::-;12114:81;:::i;:::-;12105:90;;12215:5;12244:6;12237:5;12230:21;12278:4;12271:5;12267:16;12260:23;;12331:4;12323:6;12319:17;12311:6;12307:30;12360:3;12352:6;12349:15;12346:122;;;12379:79;;:::i;:::-;12346:122;12494:6;12477:220;12511:6;12506:3;12503:15;12477:220;;;12586:3;12615:37;12648:3;12636:10;12615:37;:::i;:::-;12610:3;12603:50;12682:4;12677:3;12673:14;12666:21;;12553:144;12537:4;12532:3;12528:14;12521:21;;12477:220;;;12481:21;12095:608;;11993:710;;;;;:::o;12726:370::-;12797:5;12846:3;12839:4;12831:6;12827:17;12823:27;12813:122;;12854:79;;:::i;:::-;12813:122;12971:6;12958:20;12996:94;13086:3;13078:6;13071:4;13063:6;13059:17;12996:94;:::i;:::-;12987:103;;12803:293;12726:370;;;;:::o;13102:1509::-;13256:6;13264;13272;13280;13288;13337:3;13325:9;13316:7;13312:23;13308:33;13305:120;;;13344:79;;:::i;:::-;13305:120;13464:1;13489:53;13534:7;13525:6;13514:9;13510:22;13489:53;:::i;:::-;13479:63;;13435:117;13591:2;13617:53;13662:7;13653:6;13642:9;13638:22;13617:53;:::i;:::-;13607:63;;13562:118;13747:2;13736:9;13732:18;13719:32;13778:18;13770:6;13767:30;13764:117;;;13800:79;;:::i;:::-;13764:117;13905:78;13975:7;13966:6;13955:9;13951:22;13905:78;:::i;:::-;13895:88;;13690:303;14060:2;14049:9;14045:18;14032:32;14091:18;14083:6;14080:30;14077:117;;;14113:79;;:::i;:::-;14077:117;14218:78;14288:7;14279:6;14268:9;14264:22;14218:78;:::i;:::-;14208:88;;14003:303;14373:3;14362:9;14358:19;14345:33;14405:18;14397:6;14394:30;14391:117;;;14427:79;;:::i;:::-;14391:117;14532:62;14586:7;14577:6;14566:9;14562:22;14532:62;:::i;:::-;14522:72;;14316:288;13102:1509;;;;;;;;:::o;14617:311::-;14694:4;14784:18;14776:6;14773:30;14770:56;;;14806:18;;:::i;:::-;14770:56;14856:4;14848:6;14844:17;14836:25;;14916:4;14910;14906:15;14898:23;;14617:311;;;:::o;14951:710::-;15047:5;15072:81;15088:64;15145:6;15088:64;:::i;:::-;15072:81;:::i;:::-;15063:90;;15173:5;15202:6;15195:5;15188:21;15236:4;15229:5;15225:16;15218:23;;15289:4;15281:6;15277:17;15269:6;15265:30;15318:3;15310:6;15307:15;15304:122;;;15337:79;;:::i;:::-;15304:122;15452:6;15435:220;15469:6;15464:3;15461:15;15435:220;;;15544:3;15573:37;15606:3;15594:10;15573:37;:::i;:::-;15568:3;15561:50;15640:4;15635:3;15631:14;15624:21;;15511:144;15495:4;15490:3;15486:14;15479:21;;15435:220;;;15439:21;15053:608;;14951:710;;;;;:::o;15684:370::-;15755:5;15804:3;15797:4;15789:6;15785:17;15781:27;15771:122;;15812:79;;:::i;:::-;15771:122;15929:6;15916:20;15954:94;16044:3;16036:6;16029:4;16021:6;16017:17;15954:94;:::i;:::-;15945:103;;15761:293;15684:370;;;;:::o;16060:894::-;16178:6;16186;16235:2;16223:9;16214:7;16210:23;16206:32;16203:119;;;16241:79;;:::i;:::-;16203:119;16389:1;16378:9;16374:17;16361:31;16419:18;16411:6;16408:30;16405:117;;;16441:79;;:::i;:::-;16405:117;16546:78;16616:7;16607:6;16596:9;16592:22;16546:78;:::i;:::-;16536:88;;16332:302;16701:2;16690:9;16686:18;16673:32;16732:18;16724:6;16721:30;16718:117;;;16754:79;;:::i;:::-;16718:117;16859:78;16929:7;16920:6;16909:9;16905:22;16859:78;:::i;:::-;16849:88;;16644:303;16060:894;;;;;:::o;16960:114::-;17027:6;17061:5;17055:12;17045:22;;16960:114;;;:::o;17080:184::-;17179:11;17213:6;17208:3;17201:19;17253:4;17248:3;17244:14;17229:29;;17080:184;;;;:::o;17270:132::-;17337:4;17360:3;17352:11;;17390:4;17385:3;17381:14;17373:22;;17270:132;;;:::o;17408:108::-;17485:24;17503:5;17485:24;:::i;:::-;17480:3;17473:37;17408:108;;:::o;17522:179::-;17591:10;17612:46;17654:3;17646:6;17612:46;:::i;:::-;17690:4;17685:3;17681:14;17667:28;;17522:179;;;;:::o;17707:113::-;17777:4;17809;17804:3;17800:14;17792:22;;17707:113;;;:::o;17856:732::-;17975:3;18004:54;18052:5;18004:54;:::i;:::-;18074:86;18153:6;18148:3;18074:86;:::i;:::-;18067:93;;18184:56;18234:5;18184:56;:::i;:::-;18263:7;18294:1;18279:284;18304:6;18301:1;18298:13;18279:284;;;18380:6;18374:13;18407:63;18466:3;18451:13;18407:63;:::i;:::-;18400:70;;18493:60;18546:6;18493:60;:::i;:::-;18483:70;;18339:224;18326:1;18323;18319:9;18314:14;;18279:284;;;18283:14;18579:3;18572:10;;17980:608;;;17856:732;;;;:::o;18594:373::-;18737:4;18775:2;18764:9;18760:18;18752:26;;18824:9;18818:4;18814:20;18810:1;18799:9;18795:17;18788:47;18852:108;18955:4;18946:6;18852:108;:::i;:::-;18844:116;;18594:373;;;;:::o;18973:321::-;19060:4;19150:18;19142:6;19139:30;19136:56;;;19172:18;;:::i;:::-;19136:56;19222:4;19214:6;19210:17;19202:25;;19282:4;19276;19272:15;19264:23;;18973:321;;;:::o;19316:945::-;19422:5;19447:91;19463:74;19530:6;19463:74;:::i;:::-;19447:91;:::i;:::-;19438:100;;19558:5;19587:6;19580:5;19573:21;19621:4;19614:5;19610:16;19603:23;;19674:4;19666:6;19662:17;19654:6;19650:30;19703:3;19695:6;19692:15;19689:122;;;19722:79;;:::i;:::-;19689:122;19837:6;19820:435;19854:6;19849:3;19846:15;19820:435;;;19943:3;19930:17;19979:18;19966:11;19963:35;19960:122;;;20001:79;;:::i;:::-;19960:122;20125:11;20117:6;20113:24;20163:47;20206:3;20194:10;20163:47;:::i;:::-;20158:3;20151:60;20240:4;20235:3;20231:14;20224:21;;19896:359;;19880:4;19875:3;19871:14;19864:21;;19820:435;;;19824:21;19428:833;;19316:945;;;;;:::o;20283:390::-;20364:5;20413:3;20406:4;20398:6;20394:17;20390:27;20380:122;;20421:79;;:::i;:::-;20380:122;20538:6;20525:20;20563:104;20663:3;20655:6;20648:4;20640:6;20636:17;20563:104;:::i;:::-;20554:113;;20370:303;20283:390;;;;:::o;20679:2127::-;20918:6;20926;20934;20942;20950;20958;21007:3;20995:9;20986:7;20982:23;20978:33;20975:120;;;21014:79;;:::i;:::-;20975:120;21134:1;21159:53;21204:7;21195:6;21184:9;21180:22;21159:53;:::i;:::-;21149:63;;21105:117;21289:2;21278:9;21274:18;21261:32;21320:18;21312:6;21309:30;21306:117;;;21342:79;;:::i;:::-;21306:117;21447:78;21517:7;21508:6;21497:9;21493:22;21447:78;:::i;:::-;21437:88;;21232:303;21602:2;21591:9;21587:18;21574:32;21633:18;21625:6;21622:30;21619:117;;;21655:79;;:::i;:::-;21619:117;21760:78;21830:7;21821:6;21810:9;21806:22;21760:78;:::i;:::-;21750:88;;21545:303;21915:2;21904:9;21900:18;21887:32;21946:18;21938:6;21935:30;21932:117;;;21968:79;;:::i;:::-;21932:117;22073:88;22153:7;22144:6;22133:9;22129:22;22073:88;:::i;:::-;22063:98;;21858:313;22238:3;22227:9;22223:19;22210:33;22270:18;22262:6;22259:30;22256:117;;;22292:79;;:::i;:::-;22256:117;22397:78;22467:7;22458:6;22447:9;22443:22;22397:78;:::i;:::-;22387:88;;22181:304;22552:3;22541:9;22537:19;22524:33;22584:18;22576:6;22573:30;22570:117;;;22606:79;;:::i;:::-;22570:117;22711:78;22781:7;22772:6;22761:9;22757:22;22711:78;:::i;:::-;22701:88;;22495:304;20679:2127;;;;;;;;:::o;22812:654::-;22890:6;22898;22947:2;22935:9;22926:7;22922:23;22918:32;22915:119;;;22953:79;;:::i;:::-;22915:119;23073:1;23098:53;23143:7;23134:6;23123:9;23119:22;23098:53;:::i;:::-;23088:63;;23044:117;23228:2;23217:9;23213:18;23200:32;23259:18;23251:6;23248:30;23245:117;;;23281:79;;:::i;:::-;23245:117;23386:63;23441:7;23432:6;23421:9;23417:22;23386:63;:::i;:::-;23376:73;;23171:288;22812:654;;;;;:::o;23472:1237::-;23586:6;23594;23602;23610;23618;23626;23675:3;23663:9;23654:7;23650:23;23646:33;23643:120;;;23682:79;;:::i;:::-;23643:120;23802:1;23827:53;23872:7;23863:6;23852:9;23848:22;23827:53;:::i;:::-;23817:63;;23773:117;23929:2;23955:53;24000:7;23991:6;23980:9;23976:22;23955:53;:::i;:::-;23945:63;;23900:118;24057:2;24083:53;24128:7;24119:6;24108:9;24104:22;24083:53;:::i;:::-;24073:63;;24028:118;24213:2;24202:9;24198:18;24185:32;24244:18;24236:6;24233:30;24230:117;;;24266:79;;:::i;:::-;24230:117;24371:63;24426:7;24417:6;24406:9;24402:22;24371:63;:::i;:::-;24361:73;;24156:288;24483:3;24510:53;24555:7;24546:6;24535:9;24531:22;24510:53;:::i;:::-;24500:63;;24454:119;24612:3;24639:53;24684:7;24675:6;24664:9;24660:22;24639:53;:::i;:::-;24629:63;;24583:119;23472:1237;;;;;;;;:::o;24715:::-;24829:6;24837;24845;24853;24861;24869;24918:3;24906:9;24897:7;24893:23;24889:33;24886:120;;;24925:79;;:::i;:::-;24886:120;25045:1;25070:53;25115:7;25106:6;25095:9;25091:22;25070:53;:::i;:::-;25060:63;;25016:117;25172:2;25198:53;25243:7;25234:6;25223:9;25219:22;25198:53;:::i;:::-;25188:63;;25143:118;25300:2;25326:53;25371:7;25362:6;25351:9;25347:22;25326:53;:::i;:::-;25316:63;;25271:118;25456:2;25445:9;25441:18;25428:32;25487:18;25479:6;25476:30;25473:117;;;25509:79;;:::i;:::-;25473:117;25614:63;25669:7;25660:6;25649:9;25645:22;25614:63;:::i;:::-;25604:73;;25399:288;25726:3;25753:53;25798:7;25789:6;25778:9;25774:22;25753:53;:::i;:::-;25743:63;;25697:119;25855:3;25882:53;25927:7;25918:6;25907:9;25903:22;25882:53;:::i;:::-;25872:63;;25826:119;24715:1237;;;;;;;;:::o;25958:116::-;26028:21;26043:5;26028:21;:::i;:::-;26021:5;26018:32;26008:60;;26064:1;26061;26054:12;26008:60;25958:116;:::o;26080:133::-;26123:5;26161:6;26148:20;26139:29;;26177:30;26201:5;26177:30;:::i;:::-;26080:133;;;;:::o;26219:468::-;26284:6;26292;26341:2;26329:9;26320:7;26316:23;26312:32;26309:119;;;26347:79;;:::i;:::-;26309:119;26467:1;26492:53;26537:7;26528:6;26517:9;26513:22;26492:53;:::i;:::-;26482:63;;26438:117;26594:2;26620:50;26662:7;26653:6;26642:9;26638:22;26620:50;:::i;:::-;26610:60;;26565:115;26219:468;;;;;:::o;26693:2127::-;26932:6;26940;26948;26956;26964;26972;27021:3;27009:9;27000:7;26996:23;26992:33;26989:120;;;27028:79;;:::i;:::-;26989:120;27148:1;27173:53;27218:7;27209:6;27198:9;27194:22;27173:53;:::i;:::-;27163:63;;27119:117;27303:2;27292:9;27288:18;27275:32;27334:18;27326:6;27323:30;27320:117;;;27356:79;;:::i;:::-;27320:117;27461:78;27531:7;27522:6;27511:9;27507:22;27461:78;:::i;:::-;27451:88;;27246:303;27616:2;27605:9;27601:18;27588:32;27647:18;27639:6;27636:30;27633:117;;;27669:79;;:::i;:::-;27633:117;27774:78;27844:7;27835:6;27824:9;27820:22;27774:78;:::i;:::-;27764:88;;27559:303;27929:2;27918:9;27914:18;27901:32;27960:18;27952:6;27949:30;27946:117;;;27982:79;;:::i;:::-;27946:117;28087:88;28167:7;28158:6;28147:9;28143:22;28087:88;:::i;:::-;28077:98;;27872:313;28252:3;28241:9;28237:19;28224:33;28284:18;28276:6;28273:30;28270:117;;;28306:79;;:::i;:::-;28270:117;28411:78;28481:7;28472:6;28461:9;28457:22;28411:78;:::i;:::-;28401:88;;28195:304;28566:3;28555:9;28551:19;28538:33;28598:18;28590:6;28587:30;28584:117;;;28620:79;;:::i;:::-;28584:117;28725:78;28795:7;28786:6;28775:9;28771:22;28725:78;:::i;:::-;28715:88;;28509:304;26693:2127;;;;;;;;:::o;28826:619::-;28903:6;28911;28919;28968:2;28956:9;28947:7;28943:23;28939:32;28936:119;;;28974:79;;:::i;:::-;28936:119;29094:1;29119:53;29164:7;29155:6;29144:9;29140:22;29119:53;:::i;:::-;29109:63;;29065:117;29221:2;29247:53;29292:7;29283:6;29272:9;29268:22;29247:53;:::i;:::-;29237:63;;29192:118;29349:2;29375:53;29420:7;29411:6;29400:9;29396:22;29375:53;:::i;:::-;29365:63;;29320:118;28826:619;;;;;:::o;29451:474::-;29519:6;29527;29576:2;29564:9;29555:7;29551:23;29547:32;29544:119;;;29582:79;;:::i;:::-;29544:119;29702:1;29727:53;29772:7;29763:6;29752:9;29748:22;29727:53;:::i;:::-;29717:63;;29673:117;29829:2;29855:53;29900:7;29891:6;29880:9;29876:22;29855:53;:::i;:::-;29845:63;;29800:118;29451:474;;;;;:::o;29931:1089::-;30035:6;30043;30051;30059;30067;30116:3;30104:9;30095:7;30091:23;30087:33;30084:120;;;30123:79;;:::i;:::-;30084:120;30243:1;30268:53;30313:7;30304:6;30293:9;30289:22;30268:53;:::i;:::-;30258:63;;30214:117;30370:2;30396:53;30441:7;30432:6;30421:9;30417:22;30396:53;:::i;:::-;30386:63;;30341:118;30498:2;30524:53;30569:7;30560:6;30549:9;30545:22;30524:53;:::i;:::-;30514:63;;30469:118;30626:2;30652:53;30697:7;30688:6;30677:9;30673:22;30652:53;:::i;:::-;30642:63;;30597:118;30782:3;30771:9;30767:19;30754:33;30814:18;30806:6;30803:30;30800:117;;;30836:79;;:::i;:::-;30800:117;30941:62;30995:7;30986:6;30975:9;30971:22;30941:62;:::i;:::-;30931:72;;30725:288;29931:1089;;;;;;;;:::o;31026:329::-;31085:6;31134:2;31122:9;31113:7;31109:23;31105:32;31102:119;;;31140:79;;:::i;:::-;31102:119;31260:1;31285:53;31330:7;31321:6;31310:9;31306:22;31285:53;:::i;:::-;31275:63;;31231:117;31026:329;;;;:::o;31361:230::-;31501:34;31497:1;31489:6;31485:14;31478:58;31570:13;31565:2;31557:6;31553:15;31546:38;31361:230;:::o;31597:366::-;31739:3;31760:67;31824:2;31819:3;31760:67;:::i;:::-;31753:74;;31836:93;31925:3;31836:93;:::i;:::-;31954:2;31949:3;31945:12;31938:19;;31597:366;;;:::o;31969:419::-;32135:4;32173:2;32162:9;32158:18;32150:26;;32222:9;32216:4;32212:20;32208:1;32197:9;32193:17;32186:47;32250:131;32376:4;32250:131;:::i;:::-;32242:139;;31969:419;;;:::o;32394:182::-;32534:34;32530:1;32522:6;32518:14;32511:58;32394:182;:::o;32582:366::-;32724:3;32745:67;32809:2;32804:3;32745:67;:::i;:::-;32738:74;;32821:93;32910:3;32821:93;:::i;:::-;32939:2;32934:3;32930:12;32923:19;;32582:366;;;:::o;32954:419::-;33120:4;33158:2;33147:9;33143:18;33135:26;;33207:9;33201:4;33197:20;33193:1;33182:9;33178:17;33171:47;33235:131;33361:4;33235:131;:::i;:::-;33227:139;;32954:419;;;:::o;33379:98::-;33430:6;33464:5;33458:12;33448:22;;33379:98;;;:::o;33483:168::-;33566:11;33600:6;33595:3;33588:19;33640:4;33635:3;33631:14;33616:29;;33483:168;;;;:::o;33657:360::-;33743:3;33771:38;33803:5;33771:38;:::i;:::-;33825:70;33888:6;33883:3;33825:70;:::i;:::-;33818:77;;33904:52;33949:6;33944:3;33937:4;33930:5;33926:16;33904:52;:::i;:::-;33981:29;34003:6;33981:29;:::i;:::-;33976:3;33972:39;33965:46;;33747:270;33657:360;;;;:::o;34023:751::-;34246:4;34284:3;34273:9;34269:19;34261:27;;34298:71;34366:1;34355:9;34351:17;34342:6;34298:71;:::i;:::-;34379:72;34447:2;34436:9;34432:18;34423:6;34379:72;:::i;:::-;34461;34529:2;34518:9;34514:18;34505:6;34461:72;:::i;:::-;34543;34611:2;34600:9;34596:18;34587:6;34543:72;:::i;:::-;34663:9;34657:4;34653:20;34647:3;34636:9;34632:19;34625:49;34691:76;34762:4;34753:6;34691:76;:::i;:::-;34683:84;;34023:751;;;;;;;;:::o;34780:141::-;34836:5;34867:6;34861:13;34852:22;;34883:32;34909:5;34883:32;:::i;:::-;34780:141;;;;:::o;34927:349::-;34996:6;35045:2;35033:9;35024:7;35020:23;35016:32;35013:119;;;35051:79;;:::i;:::-;35013:119;35171:1;35196:63;35251:7;35242:6;35231:9;35227:22;35196:63;:::i;:::-;35186:73;;35142:127;34927:349;;;;:::o;35282:106::-;35326:8;35375:5;35370:3;35366:15;35345:36;;35282:106;;;:::o;35394:183::-;35429:3;35467:1;35449:16;35446:23;35443:128;;;35505:1;35502;35499;35484:23;35527:34;35558:1;35552:8;35527:34;:::i;:::-;35520:41;;35443:128;35394:183;:::o;35583:711::-;35622:3;35660:4;35642:16;35639:26;35668:5;35636:39;35697:20;;:::i;:::-;35772:1;35754:16;35750:24;35747:1;35741:4;35726:49;35805:4;35799:11;35904:16;35897:4;35889:6;35885:17;35882:39;35849:18;35841:6;35838:30;35822:113;35819:146;;;35950:5;;;;35819:146;35996:6;35990:4;35986:17;36032:3;36026:10;36059:18;36051:6;36048:30;36045:43;;;36081:5;;;;;;36045:43;36129:6;36122:4;36117:3;36113:14;36109:27;36188:1;36170:16;36166:24;36160:4;36156:35;36151:3;36148:44;36145:57;;;36195:5;;;;;;;36145:57;36212;36260:6;36254:4;36250:17;36242:6;36238:30;36232:4;36212:57;:::i;:::-;36285:3;36278:10;;35626:668;;;;;35583:711;;:::o;36300:239::-;36440:34;36436:1;36428:6;36424:14;36417:58;36509:22;36504:2;36496:6;36492:15;36485:47;36300:239;:::o;36545:366::-;36687:3;36708:67;36772:2;36767:3;36708:67;:::i;:::-;36701:74;;36784:93;36873:3;36784:93;:::i;:::-;36902:2;36897:3;36893:12;36886:19;;36545:366;;;:::o;36917:419::-;37083:4;37121:2;37110:9;37106:18;37098:26;;37170:9;37164:4;37160:20;37156:1;37145:9;37141:17;37134:47;37198:131;37324:4;37198:131;:::i;:::-;37190:139;;36917:419;;;:::o;37342:227::-;37482:34;37478:1;37470:6;37466:14;37459:58;37551:10;37546:2;37538:6;37534:15;37527:35;37342:227;:::o;37575:366::-;37717:3;37738:67;37802:2;37797:3;37738:67;:::i;:::-;37731:74;;37814:93;37903:3;37814:93;:::i;:::-;37932:2;37927:3;37923:12;37916:19;;37575:366;;;:::o;37947:419::-;38113:4;38151:2;38140:9;38136:18;38128:26;;38200:9;38194:4;38190:20;38186:1;38175:9;38171:17;38164:47;38228:131;38354:4;38228:131;:::i;:::-;38220:139;;37947:419;;;:::o;38372:180::-;38420:77;38417:1;38410:88;38517:4;38514:1;38507:15;38541:4;38538:1;38531:15;38558:320;38602:6;38639:1;38633:4;38629:12;38619:22;;38686:1;38680:4;38676:12;38707:18;38697:81;;38763:4;38755:6;38751:17;38741:27;;38697:81;38825:2;38817:6;38814:14;38794:18;38791:38;38788:84;;38844:18;;:::i;:::-;38788:84;38609:269;38558:320;;;:::o;38884:148::-;38986:11;39023:3;39008:18;;38884:148;;;;:::o;39038:141::-;39087:4;39110:3;39102:11;;39133:3;39130:1;39123:14;39167:4;39164:1;39154:18;39146:26;;39038:141;;;:::o;39209:845::-;39312:3;39349:5;39343:12;39378:36;39404:9;39378:36;:::i;:::-;39430:89;39512:6;39507:3;39430:89;:::i;:::-;39423:96;;39550:1;39539:9;39535:17;39566:1;39561:137;;;;39712:1;39707:341;;;;39528:520;;39561:137;39645:4;39641:9;39630;39626:25;39621:3;39614:38;39681:6;39676:3;39672:16;39665:23;;39561:137;;39707:341;39774:38;39806:5;39774:38;:::i;:::-;39834:1;39848:154;39862:6;39859:1;39856:13;39848:154;;;39936:7;39930:14;39926:1;39921:3;39917:11;39910:35;39986:1;39977:7;39973:15;39962:26;;39884:4;39881:1;39877:12;39872:17;;39848:154;;;40031:6;40026:3;40022:16;40015:23;;39714:334;;39528:520;;39316:738;;39209:845;;;;:::o;40060:423::-;40234:3;40256:92;40344:3;40335:6;40256:92;:::i;:::-;40249:99;;40365:92;40453:3;40444:6;40365:92;:::i;:::-;40358:99;;40474:3;40467:10;;40060:423;;;;;:::o;40489:180::-;40537:77;40534:1;40527:88;40634:4;40631:1;40624:15;40658:4;40655:1;40648:15;40675:348;40715:7;40738:20;40756:1;40738:20;:::i;:::-;40733:25;;40772:20;40790:1;40772:20;:::i;:::-;40767:25;;40960:1;40892:66;40888:74;40885:1;40882:81;40877:1;40870:9;40863:17;40859:105;40856:131;;;40967:18;;:::i;:::-;40856:131;41015:1;41012;41008:9;40997:20;;40675:348;;;;:::o;41029:180::-;41077:77;41074:1;41067:88;41174:4;41171:1;41164:15;41198:4;41195:1;41188:15;41215:185;41255:1;41272:20;41290:1;41272:20;:::i;:::-;41267:25;;41306:20;41324:1;41306:20;:::i;:::-;41301:25;;41345:1;41335:35;;41350:18;;:::i;:::-;41335:35;41392:1;41389;41385:9;41380:14;;41215:185;;;;:::o;41406:237::-;41546:34;41542:1;41534:6;41530:14;41523:58;41615:20;41610:2;41602:6;41598:15;41591:45;41406:237;:::o;41649:366::-;41791:3;41812:67;41876:2;41871:3;41812:67;:::i;:::-;41805:74;;41888:93;41977:3;41888:93;:::i;:::-;42006:2;42001:3;41997:12;41990:19;;41649:366;;;:::o;42021:419::-;42187:4;42225:2;42214:9;42210:18;42202:26;;42274:9;42268:4;42264:20;42260:1;42249:9;42245:17;42238:47;42302:131;42428:4;42302:131;:::i;:::-;42294:139;;42021:419;;;:::o;42446:228::-;42586:34;42582:1;42574:6;42570:14;42563:58;42655:11;42650:2;42642:6;42638:15;42631:36;42446:228;:::o;42680:366::-;42822:3;42843:67;42907:2;42902:3;42843:67;:::i;:::-;42836:74;;42919:93;43008:3;42919:93;:::i;:::-;43037:2;43032:3;43028:12;43021:19;;42680:366;;;:::o;43052:419::-;43218:4;43256:2;43245:9;43241:18;43233:26;;43305:9;43299:4;43295:20;43291:1;43280:9;43276:17;43269:47;43333:131;43459:4;43333:131;:::i;:::-;43325:139;;43052:419;;;:::o;43477:180::-;43525:77;43522:1;43515:88;43622:4;43619:1;43612:15;43646:4;43643:1;43636:15;43663:233;43702:3;43725:24;43743:5;43725:24;:::i;:::-;43716:33;;43771:66;43764:5;43761:77;43758:103;;43841:18;;:::i;:::-;43758:103;43888:1;43881:5;43877:13;43870:20;;43663:233;;;:::o;43902:181::-;44042:33;44038:1;44030:6;44026:14;44019:57;43902:181;:::o;44089:366::-;44231:3;44252:67;44316:2;44311:3;44252:67;:::i;:::-;44245:74;;44328:93;44417:3;44328:93;:::i;:::-;44446:2;44441:3;44437:12;44430:19;;44089:366;;;:::o;44461:419::-;44627:4;44665:2;44654:9;44650:18;44642:26;;44714:9;44708:4;44704:20;44700:1;44689:9;44685:17;44678:47;44742:131;44868:4;44742:131;:::i;:::-;44734:139;;44461:419;;;:::o;44886:305::-;44926:3;44945:20;44963:1;44945:20;:::i;:::-;44940:25;;44979:20;44997:1;44979:20;:::i;:::-;44974:25;;45133:1;45065:66;45061:74;45058:1;45055:81;45052:107;;;45139:18;;:::i;:::-;45052:107;45183:1;45180;45176:9;45169:16;;44886:305;;;;:::o;45197:174::-;45337:26;45333:1;45325:6;45321:14;45314:50;45197:174;:::o;45377:366::-;45519:3;45540:67;45604:2;45599:3;45540:67;:::i;:::-;45533:74;;45616:93;45705:3;45616:93;:::i;:::-;45734:2;45729:3;45725:12;45718:19;;45377:366;;;:::o;45749:419::-;45915:4;45953:2;45942:9;45938:18;45930:26;;46002:9;45996:4;45992:20;45988:1;45977:9;45973:17;45966:47;46030:131;46156:4;46030:131;:::i;:::-;46022:139;;45749:419;;;:::o;46174:85::-;46219:7;46248:5;46237:16;;46174:85;;;:::o;46265:60::-;46293:3;46314:5;46307:12;;46265:60;;;:::o;46331:158::-;46389:9;46422:61;46440:42;46449:32;46475:5;46449:32;:::i;:::-;46440:42;:::i;:::-;46422:61;:::i;:::-;46409:74;;46331:158;;;:::o;46495:147::-;46590:45;46629:5;46590:45;:::i;:::-;46585:3;46578:58;46495:147;;:::o;46648:348::-;46777:4;46815:2;46804:9;46800:18;46792:26;;46828:71;46896:1;46885:9;46881:17;46872:6;46828:71;:::i;:::-;46909:80;46985:2;46974:9;46970:18;46961:6;46909:80;:::i;:::-;46648:348;;;;;:::o;47002:228::-;47142:34;47138:1;47130:6;47126:14;47119:58;47211:11;47206:2;47198:6;47194:15;47187:36;47002:228;:::o;47236:366::-;47378:3;47399:67;47463:2;47458:3;47399:67;:::i;:::-;47392:74;;47475:93;47564:3;47475:93;:::i;:::-;47593:2;47588:3;47584:12;47577:19;;47236:366;;;:::o;47608:419::-;47774:4;47812:2;47801:9;47797:18;47789:26;;47861:9;47855:4;47851:20;47847:1;47836:9;47832:17;47825:47;47889:131;48015:4;47889:131;:::i;:::-;47881:139;;47608:419;;;:::o;48033:225::-;48173:34;48169:1;48161:6;48157:14;48150:58;48242:8;48237:2;48229:6;48225:15;48218:33;48033:225;:::o;48264:366::-;48406:3;48427:67;48491:2;48486:3;48427:67;:::i;:::-;48420:74;;48503:93;48592:3;48503:93;:::i;:::-;48621:2;48616:3;48612:12;48605:19;;48264:366;;;:::o;48636:419::-;48802:4;48840:2;48829:9;48825:18;48817:26;;48889:9;48883:4;48879:20;48875:1;48864:9;48860:17;48853:47;48917:131;49043:4;48917:131;:::i;:::-;48909:139;;48636:419;;;:::o;49061:227::-;49201:34;49197:1;49189:6;49185:14;49178:58;49270:10;49265:2;49257:6;49253:15;49246:35;49061:227;:::o;49294:366::-;49436:3;49457:67;49521:2;49516:3;49457:67;:::i;:::-;49450:74;;49533:93;49622:3;49533:93;:::i;:::-;49651:2;49646:3;49642:12;49635:19;;49294:366;;;:::o;49666:419::-;49832:4;49870:2;49859:9;49855:18;49847:26;;49919:9;49913:4;49909:20;49905:1;49894:9;49890:17;49883:47;49947:131;50073:4;49947:131;:::i;:::-;49939:139;;49666:419;;;:::o;50091:224::-;50231:34;50227:1;50219:6;50215:14;50208:58;50300:7;50295:2;50287:6;50283:15;50276:32;50091:224;:::o;50321:366::-;50463:3;50484:67;50548:2;50543:3;50484:67;:::i;:::-;50477:74;;50560:93;50649:3;50560:93;:::i;:::-;50678:2;50673:3;50669:12;50662:19;;50321:366;;;:::o;50693:419::-;50859:4;50897:2;50886:9;50882:18;50874:26;;50946:9;50940:4;50936:20;50932:1;50921:9;50917:17;50910:47;50974:131;51100:4;50974:131;:::i;:::-;50966:139;;50693:419;;;:::o;51118:229::-;51258:34;51254:1;51246:6;51242:14;51235:58;51327:12;51322:2;51314:6;51310:15;51303:37;51118:229;:::o;51353:366::-;51495:3;51516:67;51580:2;51575:3;51516:67;:::i;:::-;51509:74;;51592:93;51681:3;51592:93;:::i;:::-;51710:2;51705:3;51701:12;51694:19;;51353:366;;;:::o;51725:419::-;51891:4;51929:2;51918:9;51914:18;51906:26;;51978:9;51972:4;51968:20;51964:1;51953:9;51949:17;51942:47;52006:131;52132:4;52006:131;:::i;:::-;51998:139;;51725:419;;;:::o;52150:634::-;52371:4;52409:2;52398:9;52394:18;52386:26;;52458:9;52452:4;52448:20;52444:1;52433:9;52429:17;52422:47;52486:108;52589:4;52580:6;52486:108;:::i;:::-;52478:116;;52641:9;52635:4;52631:20;52626:2;52615:9;52611:18;52604:48;52669:108;52772:4;52763:6;52669:108;:::i;:::-;52661:116;;52150:634;;;;;:::o;52790:220::-;52930:34;52926:1;52918:6;52914:14;52907:58;52999:3;52994:2;52986:6;52982:15;52975:28;52790:220;:::o;53016:366::-;53158:3;53179:67;53243:2;53238:3;53179:67;:::i;:::-;53172:74;;53255:93;53344:3;53255:93;:::i;:::-;53373:2;53368:3;53364:12;53357:19;;53016:366;;;:::o;53388:419::-;53554:4;53592:2;53581:9;53577:18;53569:26;;53641:9;53635:4;53631:20;53627:1;53616:9;53612:17;53605:47;53669:131;53795:4;53669:131;:::i;:::-;53661:139;;53388:419;;;:::o;53813:176::-;53953:28;53949:1;53941:6;53937:14;53930:52;53813:176;:::o;53995:366::-;54137:3;54158:67;54222:2;54217:3;54158:67;:::i;:::-;54151:74;;54234:93;54323:3;54234:93;:::i;:::-;54352:2;54347:3;54343:12;54336:19;;53995:366;;;:::o;54367:419::-;54533:4;54571:2;54560:9;54556:18;54548:26;;54620:9;54614:4;54610:20;54606:1;54595:9;54591:17;54584:47;54648:131;54774:4;54648:131;:::i;:::-;54640:139;;54367:419;;;:::o;54792:332::-;54913:4;54951:2;54940:9;54936:18;54928:26;;54964:71;55032:1;55021:9;55017:17;55008:6;54964:71;:::i;:::-;55045:72;55113:2;55102:9;55098:18;55089:6;55045:72;:::i;:::-;54792:332;;;;;:::o;55130:228::-;55270:34;55266:1;55258:6;55254:14;55247:58;55339:11;55334:2;55326:6;55322:15;55315:36;55130:228;:::o;55364:366::-;55506:3;55527:67;55591:2;55586:3;55527:67;:::i;:::-;55520:74;;55603:93;55692:3;55603:93;:::i;:::-;55721:2;55716:3;55712:12;55705:19;;55364:366;;;:::o;55736:419::-;55902:4;55940:2;55929:9;55925:18;55917:26;;55989:9;55983:4;55979:20;55975:1;55964:9;55960:17;55953:47;56017:131;56143:4;56017:131;:::i;:::-;56009:139;;55736:419;;;:::o;56161:1053::-;56484:4;56522:3;56511:9;56507:19;56499:27;;56536:71;56604:1;56593:9;56589:17;56580:6;56536:71;:::i;:::-;56617:72;56685:2;56674:9;56670:18;56661:6;56617:72;:::i;:::-;56736:9;56730:4;56726:20;56721:2;56710:9;56706:18;56699:48;56764:108;56867:4;56858:6;56764:108;:::i;:::-;56756:116;;56919:9;56913:4;56909:20;56904:2;56893:9;56889:18;56882:48;56947:108;57050:4;57041:6;56947:108;:::i;:::-;56939:116;;57103:9;57097:4;57093:20;57087:3;57076:9;57072:19;57065:49;57131:76;57202:4;57193:6;57131:76;:::i;:::-;57123:84;;56161:1053;;;;;;;;:::o
Swarm Source
ipfs://9db10f9e135463c8e3cf412a9d8228f34b7e262c05c010178dfdfaeebe9def55
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.