diff --git a/packages/contracts/deployments/ethereum/CyberDestinationUtilityFactoryFacet.json b/packages/contracts/deployments/ethereum/CyberDestinationUtilityFactoryFacet.json index c92192b..3fa4407 100644 --- a/packages/contracts/deployments/ethereum/CyberDestinationUtilityFactoryFacet.json +++ b/packages/contracts/deployments/ethereum/CyberDestinationUtilityFactoryFacet.json @@ -1,5 +1,5 @@ { - "address": "0xf90fd2bF6E375f9B9528C67329e3cA103Bca2C72", + "address": "0xb36C5BED1B3A1a4aC35066B16C92a60b0a9db7b5", "abi": [ { "anonymous": false, @@ -42,7 +42,7 @@ "type": "uint256" } ], - "name": "DestinationMinted", + "name": "DropCreated", "type": "event" }, { @@ -156,13 +156,32 @@ { "indexed": true, "internalType": "uint256", - "name": "id", + "name": "tokenId", "type": "uint256" } ], "name": "URI", "type": "event" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "accountsByToken", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -211,62 +230,206 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_timeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_timeEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_priceStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_priceEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_stepDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amountCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_shareCyber", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "createDrop", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" + }, + { + "internalType": "address", + "name": "_minter", + "type": "address" } ], - "name": "getDrop", + "name": "dropMintCounter", "outputs": [ { - "components": [ - { - "internalType": "uint256", - "name": "timeStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timeEnd", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "shareCyber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "price", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minted", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "creator", - "type": "address" - } - ], - "internalType": "struct LibUtilityStorage.Drop", + "internalType": "uint256", "name": "", - "type": "tuple" + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getDrop", + "outputs": [ + { + "internalType": "uint256", + "name": "timeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "priceStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "priceEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stepDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shareCyber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minted", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getMintPriceForToken", + "outputs": [ + { + "internalType": "uint256", + "name": "mintPrice", + "type": "uint256" } ], "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_timeSpent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_priceStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_priceEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_stepDuration", + "type": "uint256" + } + ], + "name": "getPriceFor", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, { "inputs": [ { @@ -358,34 +521,9 @@ }, { "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_timeStart", - "type": "uint256" - }, { "internalType": "uint256", - "name": "_timeEnd", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_price", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amountCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_shareCyber", + "name": "_tokenId", "type": "uint256" }, { @@ -395,29 +533,10 @@ } ], "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "mintEdition", "outputs": [ { "internalType": "bool", - "name": "", + "name": "success", "type": "bool" } ], @@ -559,6 +678,44 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "tokensByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "totalHolders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "totalSupply", @@ -572,6 +729,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -592,30 +768,38 @@ "type": "function" } ], - "transactionHash": "0x8adc1cd43d69f0b1cd51099ac9f1adf6a1ff033e8f962f534670b1e0d7ece6d1", + "transactionHash": "0xc64ed5e0d35f67e159a27c506955d1a72ff53bde78f226ef5434a892bc6f2302", "receipt": { "to": null, "from": "0x1D8298B03E96cA6294A22ff9F1139eB6D13D11eb", - "contractAddress": "0xf90fd2bF6E375f9B9528C67329e3cA103Bca2C72", - "transactionIndex": 194, - "gasUsed": "4133388", + "contractAddress": "0xb36C5BED1B3A1a4aC35066B16C92a60b0a9db7b5", + "transactionIndex": 269, + "gasUsed": "5213954", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x07512023d2f6188f4e17b712d793263bf6f976b08bc9cb63da6fb32077b2e124", - "transactionHash": "0x8adc1cd43d69f0b1cd51099ac9f1adf6a1ff033e8f962f534670b1e0d7ece6d1", + "blockHash": "0xca33b77726814db2c93f75ee72bb3f9bbc2d7c5439360e79036f00fab7d222c9", + "transactionHash": "0xc64ed5e0d35f67e159a27c506955d1a72ff53bde78f226ef5434a892bc6f2302", "logs": [], - "blockNumber": 13222810, - "cumulativeGasUsed": "17273828", + "blockNumber": 13850199, + "cumulativeGasUsed": "23141669", "status": 1, "byzantium": true }, "args": [], - "solcInputHash": "3cb65e12ff1025ebb89a59fb90ee3cc2", - "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"DestinationMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getDrop\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeEnd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareCyber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minted\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"creator\",\"type\":\"address\"}],\"internalType\":\"struct LibUtilityStorage.Drop\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_uri\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_manager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_trustedForwarder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_opensea\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oncyber\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_uri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_timeStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeEnd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amountCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_shareCyber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"mintEdition\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"minterNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oncyber\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"status\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"params\":{\"account\":\"address to query\",\"id\":\"token to query\"},\"returns\":{\"_0\":\"token balance\"}},\"balanceOfBatch(address[],uint256[])\":{\"params\":{\"accounts\":\"addresss to query\",\"ids\":\"tokens to query\"},\"returns\":{\"_0\":\"token balances\"}},\"isApprovedForAll(address,address)\":{\"params\":{\"account\":\"address to query for approval granted\",\"operator\":\"address to query for approval received\"},\"returns\":{\"_0\":\"whether operator is approved to spend tokens held by account\"}},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"params\":{\"amounts\":\"list of quantities of tokens to transfer\",\"data\":\"data payload\",\"from\":\"sender of tokens\",\"ids\":\"list of token IDs\",\"to\":\"receiver of tokens\"}},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"params\":{\"amount\":\"quantity of tokens to transfer\",\"data\":\"data payload\",\"from\":\"sender of tokens\",\"id\":\"token ID\",\"to\":\"receiver of tokens\"}},\"setApprovalForAll(address,bool)\":{\"params\":{\"operator\":\"address whose approval status to update\",\"status\":\"whether operator should be considered approved\"}},\"supportsInterface(bytes4)\":{\"params\":{\"interfaceId\":\"interface id\"},\"returns\":{\"_0\":\"bool whether interface is supported\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"balanceOf(address,uint256)\":{\"notice\":\"query the balance of given token held by given address\"},\"balanceOfBatch(address[],uint256[])\":{\"notice\":\"query the balances of given tokens held by given addresses\"},\"isApprovedForAll(address,address)\":{\"notice\":\"query approval status of given operator with respect to given address\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"transfer batch of tokens between given addresses, checking for ERC1155Receiver implementation if applicable\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"notice\":\"transfer tokens between given addresses, checking for ERC1155Receiver implementation if applicable\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"grant approval to or revoke approval from given operator to spend held tokens\"},\"supportsInterface(bytes4)\":{\"notice\":\"query whether contract has registered support for given interface\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/DestinationUtility/CyberDestinationUtilityFactoryFacet.sol\":\"CyberDestinationUtilityFactoryFacet\"},\"evmVersion\":\"london\",\"libraries\":{\":__CACHE_BREAKER__\":\"0x00000000d41867734bbee4c6863d9255b2b06ac1\"},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n struct Counter {\\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n // this feature: see https://github.com/ethereum/solidity/issues/4637\\n uint256 _value; // default: 0\\n }\\n\\n function current(Counter storage counter) internal view returns (uint256) {\\n return counter._value;\\n }\\n\\n function increment(Counter storage counter) internal {\\n unchecked {\\n counter._value += 1;\\n }\\n }\\n\\n function decrement(Counter storage counter) internal {\\n uint256 value = counter._value;\\n require(value > 0, \\\"Counter: decrement overflow\\\");\\n unchecked {\\n counter._value = value - 1;\\n }\\n }\\n\\n function reset(Counter storage counter) internal {\\n counter._value = 0;\\n }\\n}\\n\",\"keccak256\":\"0x78450f4e3b722cce467b21e285f72ce5eaf361e9ba9dd2241a413926246773cd\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n } else if (error == RecoverError.InvalidSignatureV) {\\n revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n // Check the signature length\\n // - case 65: r,s,v signature (standard)\\n // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else if (signature.length == 64) {\\n bytes32 r;\\n bytes32 vs;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n assembly {\\n r := mload(add(signature, 0x20))\\n vs := mload(add(signature, 0x40))\\n }\\n return tryRecover(hash, r, vs);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s;\\n uint8 v;\\n assembly {\\n s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\\n v := add(shr(255, vs), 27)\\n }\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n if (v != 27 && v != 28) {\\n return (address(0), RecoverError.InvalidSignatureV);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xbc991a1cf357ce19480831a40792c814238a3b5458134703682abd8aa39719fb\",\"license\":\"MIT\"},\"@solidstate/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport {IERC165} from './IERC165.sol';\\nimport {ERC165Storage} from './ERC165Storage.sol';\\n\\n/**\\n * @title ERC165 implementation\\n */\\nabstract contract ERC165 is IERC165 {\\n using ERC165Storage for ERC165Storage.Layout;\\n\\n /**\\n * @inheritdoc IERC165\\n */\\n function supportsInterface (bytes4 interfaceId) override public view returns (bool) {\\n return ERC165Storage.layout().isSupportedInterface(interfaceId);\\n }\\n}\\n\",\"keccak256\":\"0x2aa8ab9053a94582dfad1c0af0a538d833d07e7924832d2b78d2725751d24546\",\"license\":\"MIT\"},\"@solidstate/contracts/introspection/ERC165Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nlibrary ERC165Storage {\\n struct Layout {\\n // TODO: use EnumerableSet to allow post-diamond-cut auditing\\n mapping (bytes4 => bool) supportedInterfaces;\\n }\\n\\n bytes32 internal constant STORAGE_SLOT = keccak256(\\n 'solidstate.contracts.storage.ERC165'\\n );\\n\\n function layout () internal pure returns (Layout storage l) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly { l.slot := slot }\\n }\\n\\n function isSupportedInterface (\\n Layout storage l,\\n bytes4 interfaceId\\n ) internal view returns (bool) {\\n return l.supportedInterfaces[interfaceId];\\n }\\n\\n function setSupportedInterface (\\n Layout storage l,\\n bytes4 interfaceId,\\n bool status\\n ) internal {\\n require(interfaceId != 0xffffffff, 'ERC165: invalid interface id');\\n l.supportedInterfaces[interfaceId] = status;\\n }\\n}\\n\",\"keccak256\":\"0x57b30797dfe88e6a6d967f04c0558de6f2d8f020d1bd556c627171182d3e876a\",\"license\":\"MIT\"},\"@solidstate/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC165 interface registration interface\\n * @dev see https://eips.ethereum.org/EIPS/eip-165\\n */\\ninterface IERC165 {\\n /**\\n * @notice query whether contract has registered support for given interface\\n * @param interfaceId interface id\\n * @return bool whether interface is supported\\n */\\n function supportsInterface (\\n bytes4 interfaceId\\n ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5f02fe7fd9a29f831067e8ab4b4b003ae4f14b4922cf1ce09959d53bbd86dba7\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/ERC1155.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport {ERC165} from '../../introspection/ERC165.sol';\\nimport {ERC1155Base} from './base/ERC1155Base.sol';\\n\\n/**\\n * @title SolidState ERC1155 implementation\\n */\\nabstract contract ERC1155 is ERC1155Base, ERC165 {}\\n\",\"keccak256\":\"0x3f0a1a9a6e66a52c98313b653fce3876fbb441f473ed4dca2df162a78444d898\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/IERC1155.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport {IERC1155Internal} from './IERC1155Internal.sol';\\nimport {IERC165} from '../../introspection/IERC165.sol';\\n\\n/**\\n * @notice ERC1155 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/1155\\n */\\ninterface IERC1155 is IERC1155Internal, IERC165 {\\n /**\\n * @notice query the balance of given token held by given address\\n * @param account address to query\\n * @param id token to query\\n * @return token balance\\n */\\n function balanceOf (\\n address account,\\n uint256 id\\n ) external view returns (uint256);\\n\\n /**\\n * @notice query the balances of given tokens held by given addresses\\n * @param accounts addresss to query\\n * @param ids tokens to query\\n * @return token balances\\n */\\n function balanceOfBatch (\\n address[] calldata accounts,\\n uint256[] calldata ids\\n ) external view returns (uint256[] memory);\\n\\n /**\\n * @notice query approval status of given operator with respect to given address\\n * @param account address to query for approval granted\\n * @param operator address to query for approval received\\n * @return whether operator is approved to spend tokens held by account\\n */\\n function isApprovedForAll (\\n address account,\\n address operator\\n ) external view returns (bool);\\n\\n /**\\n * @notice grant approval to or revoke approval from given operator to spend held tokens\\n * @param operator address whose approval status to update\\n * @param status whether operator should be considered approved\\n */\\n function setApprovalForAll (\\n address operator,\\n bool status\\n ) external;\\n\\n /**\\n * @notice transfer tokens between given addresses, checking for ERC1155Receiver implementation if applicable\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param id token ID\\n * @param amount quantity of tokens to transfer\\n * @param data data payload\\n */\\n function safeTransferFrom (\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes calldata data\\n ) external;\\n\\n /**\\n * @notice transfer batch of tokens between given addresses, checking for ERC1155Receiver implementation if applicable\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param ids list of token IDs\\n * @param amounts list of quantities of tokens to transfer\\n * @param data data payload\\n */\\n function safeBatchTransferFrom (\\n address from,\\n address to,\\n uint256[] calldata ids,\\n uint256[] calldata amounts,\\n bytes calldata data\\n ) external;\\n}\\n\",\"keccak256\":\"0xd97d31e9117e9faab15fae36e021729e4efb19bdc3af0c731abd1b79e3ef633b\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/IERC1155Internal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport {IERC165} from '../../introspection/IERC165.sol';\\n\\n/**\\n * @notice Partial ERC1155 interface needed by internal functions\\n */\\ninterface IERC1155Internal {\\n event TransferSingle (\\n address indexed operator,\\n address indexed from,\\n address indexed to,\\n uint256 id,\\n uint256 value\\n );\\n\\n event TransferBatch (\\n address indexed operator,\\n address indexed from,\\n address indexed to,\\n uint256[] ids,\\n uint256[] values\\n );\\n\\n event ApprovalForAll (\\n address indexed account,\\n address indexed operator,\\n bool approved\\n );\\n\\n event URI (\\n string value,\\n uint256 indexed id\\n );\\n}\\n\",\"keccak256\":\"0x0da086e86ca59401ceb4d96261e0a82a2aaf3d945d40b8b4e21469bdcad910e1\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport {IERC165} from '../../introspection/IERC165.sol';\\n\\n/**\\n * @title ERC1155 transfer receiver interface\\n */\\ninterface IERC1155Receiver is IERC165 {\\n /**\\n * @notice validate receipt of ERC1155 transfer\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param id token ID received\\n * @param value quantity of tokens received\\n * @param data data payload\\n * @return function's own selector if transfer is accepted\\n */\\n function onERC1155Received (\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n ) external returns (bytes4);\\n\\n /**\\n * @notice validate receipt of ERC1155 batch transfer\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param ids token IDs received\\n * @param values quantities of tokens received\\n * @param data data payload\\n * @return function's own selector if transfer is accepted\\n */\\n function onERC1155BatchReceived (\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0xb7ce066e4f5be5bec5451cc613118cc75a56205bb1a339abb1c27321f2dc7010\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/base/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport {IERC1155} from '../IERC1155.sol';\\nimport {IERC1155Receiver} from '../IERC1155Receiver.sol';\\nimport {ERC1155BaseInternal, ERC1155BaseStorage} from './ERC1155BaseInternal.sol';\\n\\n/**\\n * @title Base ERC1155 contract\\n * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license)\\n */\\nabstract contract ERC1155Base is IERC1155, ERC1155BaseInternal {\\n /**\\n * @inheritdoc IERC1155\\n */\\n function balanceOf (\\n address account,\\n uint id\\n ) virtual override public view returns (uint) {\\n return _balanceOf(account, id);\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function balanceOfBatch (\\n address[] memory accounts,\\n uint[] memory ids\\n ) virtual override public view returns (uint[] memory) {\\n require(accounts.length == ids.length, 'ERC1155: accounts and ids length mismatch');\\n\\n mapping (uint => mapping (address => uint)) storage balances = ERC1155BaseStorage.layout().balances;\\n\\n uint[] memory batchBalances = new uint[](accounts.length);\\n\\n unchecked {\\n for (uint i; i < accounts.length; i++) {\\n require(accounts[i] != address(0), 'ERC1155: batch balance query for the zero address');\\n batchBalances[i] = balances[ids[i]][accounts[i]];\\n }\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function isApprovedForAll (\\n address account,\\n address operator\\n ) virtual override public view returns (bool) {\\n return ERC1155BaseStorage.layout().operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function setApprovalForAll (\\n address operator,\\n bool status\\n ) virtual override public {\\n require(msg.sender != operator, 'ERC1155: setting approval status for self');\\n ERC1155BaseStorage.layout().operatorApprovals[msg.sender][operator] = status;\\n emit ApprovalForAll(msg.sender, operator, status);\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function safeTransferFrom (\\n address from,\\n address to,\\n uint id,\\n uint amount,\\n bytes memory data\\n ) virtual override public {\\n require(from == msg.sender || isApprovedForAll(from, msg.sender), 'ERC1155: caller is not owner nor approved');\\n _safeTransfer(msg.sender, from, to, id, amount, data);\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function safeBatchTransferFrom (\\n address from,\\n address to,\\n uint[] memory ids,\\n uint[] memory amounts,\\n bytes memory data\\n ) virtual override public {\\n require(from == msg.sender || isApprovedForAll(from, msg.sender), 'ERC1155: caller is not owner nor approved');\\n _safeTransferBatch(msg.sender, from, to, ids, amounts, data);\\n }\\n}\\n\",\"keccak256\":\"0xa56953b95f1cab0b265e261946daa989bef81ebbb6d706604d42d0aaeae8b1cd\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/base/ERC1155BaseInternal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport {AddressUtils} from '../../../utils/AddressUtils.sol';\\nimport {IERC1155Internal} from '../IERC1155Internal.sol';\\nimport {IERC1155Receiver} from '../IERC1155Receiver.sol';\\nimport {ERC1155BaseStorage} from './ERC1155BaseStorage.sol';\\n\\n/**\\n * @title Base ERC1155 internal functions\\n * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license)\\n */\\nabstract contract ERC1155BaseInternal is IERC1155Internal {\\n using AddressUtils for address;\\n\\n /**\\n * @notice query the balance of given token held by given address\\n * @param account address to query\\n * @param id token to query\\n * @return token balance\\n */\\n function _balanceOf (\\n address account,\\n uint id\\n ) virtual internal view returns (uint) {\\n require(account != address(0), 'ERC1155: balance query for the zero address');\\n return ERC1155BaseStorage.layout().balances[id][account];\\n }\\n\\n /**\\n * @notice mint given quantity of tokens for given address\\n * @dev ERC1155Receiver implementation is not checked\\n * @param account beneficiary of minting\\n * @param id token ID\\n * @param amount quantity of tokens to mint\\n * @param data data payload\\n */\\n function _mint (\\n address account,\\n uint id,\\n uint amount,\\n bytes memory data\\n ) virtual internal {\\n require(account != address(0), 'ERC1155: mint to the zero address');\\n\\n _beforeTokenTransfer(msg.sender, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n mapping (address => uint) storage balances = ERC1155BaseStorage.layout().balances[id];\\n balances[account] += amount;\\n\\n emit TransferSingle(msg.sender, address(0), account, id, amount);\\n }\\n\\n /**\\n * @notice mint given quantity of tokens for given address\\n * @param account beneficiary of minting\\n * @param id token ID\\n * @param amount quantity of tokens to mint\\n * @param data data payload\\n */\\n function _safeMint (\\n address account,\\n uint id,\\n uint amount,\\n bytes memory data\\n ) virtual internal {\\n _doSafeTransferAcceptanceCheck(msg.sender, address(0), account, id, amount, data);\\n _mint(account, id, amount, data);\\n }\\n\\n /**\\n * @notice mint batch of tokens for given address\\n * @dev ERC1155Receiver implementation is not checked\\n * @param account beneficiary of minting\\n * @param ids list of token IDs\\n * @param amounts list of quantities of tokens to mint\\n * @param data data payload\\n */\\n function _mintBatch (\\n address account,\\n uint[] memory ids,\\n uint[] memory amounts,\\n bytes memory data\\n ) virtual internal {\\n require(account != address(0), 'ERC1155: mint to the zero address');\\n require(ids.length == amounts.length, 'ERC1155: ids and amounts length mismatch');\\n\\n _beforeTokenTransfer(msg.sender, address(0), account, ids, amounts, data);\\n\\n mapping (uint => mapping (address => uint)) storage balances = ERC1155BaseStorage.layout().balances;\\n\\n for (uint i; i < ids.length; i++) {\\n balances[ids[i]][account] += amounts[i];\\n }\\n\\n emit TransferBatch(msg.sender, address(0), account, ids, amounts);\\n }\\n\\n /**\\n * @notice mint batch of tokens for given address\\n * @param account beneficiary of minting\\n * @param ids list of token IDs\\n * @param amounts list of quantities of tokens to mint\\n * @param data data payload\\n */\\n function _safeMintBatch (\\n address account,\\n uint[] memory ids,\\n uint[] memory amounts,\\n bytes memory data\\n ) virtual internal {\\n _doSafeBatchTransferAcceptanceCheck(msg.sender, address(0), account, ids, amounts, data);\\n _mintBatch(account, ids, amounts, data);\\n }\\n\\n /**\\n * @notice burn given quantity of tokens held by given address\\n * @param account holder of tokens to burn\\n * @param id token ID\\n * @param amount quantity of tokens to burn\\n */\\n function _burn (\\n address account,\\n uint id,\\n uint amount\\n ) virtual internal {\\n require(account != address(0), 'ERC1155: burn from the zero address');\\n\\n _beforeTokenTransfer(msg.sender, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), '');\\n\\n mapping (address => uint) storage balances = ERC1155BaseStorage.layout().balances[id];\\n\\n unchecked {\\n require(balances[account] >= amount, 'ERC1155: burn amount exceeds balances');\\n balances[account] -= amount;\\n }\\n\\n emit TransferSingle(msg.sender, account, address(0), id, amount);\\n }\\n\\n /**\\n * @notice burn given batch of tokens held by given address\\n * @param account holder of tokens to burn\\n * @param ids token IDs\\n * @param amounts quantities of tokens to burn\\n */\\n function _burnBatch (\\n address account,\\n uint[] memory ids,\\n uint[] memory amounts\\n ) virtual internal {\\n require(account != address(0), 'ERC1155: burn from the zero address');\\n require(ids.length == amounts.length, 'ERC1155: ids and amounts length mismatch');\\n\\n _beforeTokenTransfer(msg.sender, account, address(0), ids, amounts, '');\\n\\n mapping (uint => mapping (address => uint)) storage balances = ERC1155BaseStorage.layout().balances;\\n\\n unchecked {\\n for (uint i; i < ids.length; i++) {\\n uint id = ids[i];\\n require(balances[id][account] >= amounts[i], 'ERC1155: burn amount exceeds balance');\\n balances[id][account] -= amounts[i];\\n }\\n }\\n\\n emit TransferBatch(msg.sender, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @notice transfer tokens between given addresses\\n * @dev ERC1155Receiver implementation is not checked\\n * @param operator executor of transfer\\n * @param sender sender of tokens\\n * @param recipient receiver of tokens\\n * @param id token ID\\n * @param amount quantity of tokens to transfer\\n * @param data data payload\\n */\\n function _transfer (\\n address operator,\\n address sender,\\n address recipient,\\n uint id,\\n uint amount,\\n bytes memory data\\n ) virtual internal {\\n require(recipient != address(0), 'ERC1155: transfer to the zero address');\\n\\n _beforeTokenTransfer(operator, sender, recipient, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n mapping (uint => mapping (address => uint)) storage balances = ERC1155BaseStorage.layout().balances;\\n\\n unchecked {\\n uint256 senderBalance = balances[id][sender];\\n require(senderBalance >= amount, 'ERC1155: insufficient balances for transfer');\\n balances[id][sender] = senderBalance - amount;\\n }\\n\\n balances[id][recipient] += amount;\\n\\n emit TransferSingle(operator, sender, recipient, id, amount);\\n }\\n\\n /**\\n * @notice transfer tokens between given addresses\\n * @param operator executor of transfer\\n * @param sender sender of tokens\\n * @param recipient receiver of tokens\\n * @param id token ID\\n * @param amount quantity of tokens to transfer\\n * @param data data payload\\n */\\n function _safeTransfer (\\n address operator,\\n address sender,\\n address recipient,\\n uint id,\\n uint amount,\\n bytes memory data\\n ) virtual internal {\\n _doSafeTransferAcceptanceCheck(operator, sender, recipient, id, amount, data);\\n _transfer(operator, sender, recipient, id, amount, data);\\n }\\n\\n /**\\n * @notice transfer batch of tokens between given addresses\\n * @dev ERC1155Receiver implementation is not checked\\n * @param operator executor of transfer\\n * @param sender sender of tokens\\n * @param recipient receiver of tokens\\n * @param ids token IDs\\n * @param amounts quantities of tokens to transfer\\n * @param data data payload\\n */\\n function _transferBatch (\\n address operator,\\n address sender,\\n address recipient,\\n uint[] memory ids,\\n uint[] memory amounts,\\n bytes memory data\\n ) virtual internal {\\n require(recipient != address(0), 'ERC1155: transfer to the zero address');\\n require(ids.length == amounts.length, 'ERC1155: ids and amounts length mismatch');\\n\\n _beforeTokenTransfer(operator, sender, recipient, ids, amounts, data);\\n\\n mapping (uint => mapping (address => uint)) storage balances = ERC1155BaseStorage.layout().balances;\\n\\n for (uint i; i < ids.length; i++) {\\n uint token = ids[i];\\n uint amount = amounts[i];\\n\\n unchecked {\\n uint256 senderBalance = balances[token][sender];\\n require(senderBalance >= amount, 'ERC1155: insufficient balances for transfer');\\n balances[token][sender] = senderBalance - amount;\\n }\\n\\n balances[token][recipient] += amount;\\n }\\n\\n emit TransferBatch(operator, sender, recipient, ids, amounts);\\n }\\n\\n /**\\n * @notice transfer batch of tokens between given addresses\\n * @param operator executor of transfer\\n * @param sender sender of tokens\\n * @param recipient receiver of tokens\\n * @param ids token IDs\\n * @param amounts quantities of tokens to transfer\\n * @param data data payload\\n */\\n function _safeTransferBatch (\\n address operator,\\n address sender,\\n address recipient,\\n uint[] memory ids,\\n uint[] memory amounts,\\n bytes memory data\\n ) virtual internal {\\n _doSafeBatchTransferAcceptanceCheck(operator, sender, recipient, ids, amounts, data);\\n _transferBatch(operator, sender, recipient, ids, amounts, data);\\n }\\n\\n /**\\n * @notice wrap given element in array of length 1\\n * @param element element to wrap\\n * @return singleton array\\n */\\n function _asSingletonArray (\\n uint element\\n ) private pure returns (uint[] memory) {\\n uint[] memory array = new uint[](1);\\n array[0] = element;\\n return array;\\n }\\n\\n /**\\n * @notice revert if applicable transfer recipient is not valid ERC1155Receiver\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param id token ID\\n * @param amount quantity of tokens to transfer\\n * @param data data payload\\n */\\n function _doSafeTransferAcceptanceCheck (\\n address operator,\\n address from,\\n address to,\\n uint id,\\n uint amount,\\n bytes memory data\\n ) private {\\n if (to.isContract()) {\\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n require(\\n response == IERC1155Receiver.onERC1155Received.selector,\\n 'ERC1155: ERC1155Receiver rejected tokens'\\n );\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert('ERC1155: transfer to non ERC1155Receiver implementer');\\n }\\n }\\n }\\n\\n /**\\n * @notice revert if applicable transfer recipient is not valid ERC1155Receiver\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param ids token IDs\\n * @param amounts quantities of tokens to transfer\\n * @param data data payload\\n */\\n function _doSafeBatchTransferAcceptanceCheck (\\n address operator,\\n address from,\\n address to,\\n uint[] memory ids,\\n uint[] memory amounts,\\n bytes memory data\\n ) private {\\n if (to.isContract()) {\\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n require(\\n response == IERC1155Receiver.onERC1155BatchReceived.selector,\\n 'ERC1155: ERC1155Receiver rejected tokens'\\n );\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert('ERC1155: transfer to non ERC1155Receiver implementer');\\n }\\n }\\n }\\n\\n /**\\n * @notice ERC1155 hook, called before all transfers including mint and burn\\n * @dev function should be overridden and new implementation must call super\\n * @dev called for both single and batch transfers\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param ids token IDs\\n * @param amounts quantities of tokens to transfer\\n * @param data data payload\\n */\\n function _beforeTokenTransfer (\\n address operator,\\n address from,\\n address to,\\n uint[] memory ids,\\n uint[] memory amounts,\\n bytes memory data\\n ) virtual internal {}\\n}\\n\",\"keccak256\":\"0xf0fc32f5e2aa90bcb6f1b226a5827c8311c3693f7ae2f4827b9e4830c815bfe1\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/base/ERC1155BaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nlibrary ERC1155BaseStorage {\\n struct Layout {\\n mapping (uint => mapping (address => uint)) balances;\\n mapping (address => mapping (address => bool)) operatorApprovals;\\n }\\n\\n bytes32 internal constant STORAGE_SLOT = keccak256(\\n 'solidstate.contracts.storage.ERC1155Base'\\n );\\n\\n function layout () internal pure returns (Layout storage l) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly { l.slot := slot }\\n }\\n}\\n\",\"keccak256\":\"0x5ff4bf10621b611225bfd1cb2e2b6e2c4fffd404cffcd0246d666f944c245b61\",\"license\":\"MIT\"},\"@solidstate/contracts/utils/AddressUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nlibrary AddressUtils {\\n function toString (address account) internal pure returns (string memory) {\\n bytes32 value = bytes32(uint256(uint160(account)));\\n bytes memory alphabet = '0123456789abcdef';\\n bytes memory chars = new bytes(42);\\n\\n chars[0] = '0';\\n chars[1] = 'x';\\n\\n for (uint256 i = 0; i < 20; i++) {\\n chars[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];\\n chars[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];\\n }\\n\\n return string(chars);\\n }\\n\\n function isContract (address account) internal view returns (bool) {\\n uint size;\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n function sendValue (address payable account, uint amount) internal {\\n (bool success, ) = account.call{ value: amount }('');\\n require(success, 'AddressUtils: failed to send value');\\n }\\n\\n function functionCall (address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, 'AddressUtils: failed low-level call');\\n }\\n\\n function functionCall (address target, bytes memory data, string memory error) internal returns (bytes memory) {\\n return _functionCallWithValue(target, data, 0, error);\\n }\\n\\n function functionCallWithValue (address target, bytes memory data, uint value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, 'AddressUtils: failed low-level call with value');\\n }\\n\\n function functionCallWithValue (address target, bytes memory data, uint value, string memory error) internal returns (bytes memory) {\\n require(address(this).balance >= value, 'AddressUtils: insufficient balance for call');\\n return _functionCallWithValue(target, data, value, error);\\n }\\n\\n function _functionCallWithValue (address target, bytes memory data, uint value, string memory error) private returns (bytes memory) {\\n require(isContract(target), 'AddressUtils: function call to non-contract');\\n\\n (bool success, bytes memory returnData) = target.call{ value: value }(data);\\n\\n if (success) {\\n return returnData;\\n } else if (returnData.length > 0) {\\n assembly {\\n let returnData_size := mload(returnData)\\n revert(add(32, returnData), returnData_size)\\n }\\n } else {\\n revert(error);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x49c456abdfeec4082581e81731233d2a686c85d75c6bc48c2e685a62c03adb9f\",\"license\":\"MIT\"},\"contracts/BaseRelayRecipient/BaseRelayRecipient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.7;\\n\\nimport '@openzeppelin/contracts/utils/Context.sol';\\nimport './BaseRelayRecipientStorage.sol';\\n\\n/**\\n * A base contract to be inherited by any contract that want to receive relayed transactions\\n * A subclass must use \\\"_msgSender()\\\" instead of \\\"msg.sender\\\"\\n */\\n\\nabstract contract BaseRelayRecipient is Context {\\n /*\\n * require a function to be called through GSN only\\n */\\n // modifier trustedForwarderOnly() {\\n // require(msg.sender == address(s.trustedForwarder), \\\"Function can only be called through the trusted Forwarder\\\");\\n // _;\\n // }\\n\\n function isTrustedForwarder(address forwarder) public view returns (bool) {\\n return forwarder == BaseRelayRecipientStorage.layout().trustedForwarder;\\n }\\n\\n /**\\n * return the sender of this call.\\n * if the call came through our trusted forwarder, return the original sender.\\n * otherwise, return `msg.sender`.\\n * should be used in the contract anywhere instead of msg.sender\\n */\\n function _msgSender() internal view virtual override returns (address ret) {\\n if (msg.data.length >= 24 && isTrustedForwarder(msg.sender)) {\\n // At this point we know that the sender is a trusted forwarder,\\n // so we trust that the last bytes of msg.data are the verified sender address.\\n // extract sender address from the end of msg.data\\n assembly {\\n ret := shr(96, calldataload(sub(calldatasize(), 20)))\\n }\\n } else {\\n return msg.sender;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x7027136386ad3f40df6c165f5eefbe067562bdf0b15342548c49c20fd0eac959\",\"license\":\"MIT\"},\"contracts/BaseRelayRecipient/BaseRelayRecipientStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.7;\\n\\nlibrary BaseRelayRecipientStorage {\\n bytes32 internal constant STORAGE_SLOT =\\n keccak256('diamond.storage.BaseRelayRecipientStorage');\\n\\n struct Layout {\\n /*\\n * Forwarder singleton we accept calls from\\n */\\n address trustedForwarder;\\n }\\n\\n function layout() internal pure returns (Layout storage layout) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n layout.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x381dc70290cbe2527df495c9bf6c1356145024cd533e80136f3f95acd59981e1\",\"license\":\"MIT\"},\"contracts/CyberDestinationFactoryBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.7;\\n\\n//\\nimport '@solidstate/contracts/token/ERC1155/IERC1155.sol';\\nimport './ERC1155URI/ERC1155URI.sol';\\nimport './BaseRelayRecipient/BaseRelayRecipient.sol';\\n\\nimport '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';\\nimport './Diamond/LibDiamond.sol';\\nimport './BaseRelayRecipient/BaseRelayRecipientStorage.sol';\\nimport './libraries/LibAppStorage.sol';\\n\\ncontract CyberDestinationFactoryBase is BaseRelayRecipient, ERC1155URI {\\n using ECDSA for bytes32;\\n using Counters for Counters.Counter;\\n\\n event Minted(\\n address indexed account,\\n uint256 indexed tokenId,\\n uint256 indexed amount\\n );\\n\\n function initialize(\\n string memory _uri,\\n address _manager,\\n address _trustedForwarder,\\n address _opensea,\\n address _oncyber\\n ) public virtual {\\n require(LibDiamond.diamondStorage().contractOwner == msg.sender, 'NO');\\n\\n BaseRelayRecipientStorage.layout().trustedForwarder = _trustedForwarder;\\n LibDiamond.diamondStorage().supportedInterfaces[\\n type(IERC1155).interfaceId\\n ] = true;\\n setURI(_uri);\\n LibAppStorage.layout().manager = _manager;\\n LibAppStorage.layout().opensea = _opensea;\\n LibAppStorage.layout().oncyber = _oncyber;\\n }\\n\\n function totalSupply() public view returns (uint256) {\\n return LibAppStorage.layout().totalSupply.current();\\n }\\n\\n function manager() public view returns (address) {\\n return LibAppStorage.layout().manager;\\n }\\n\\n function oncyber() public view returns (address) {\\n return LibAppStorage.layout().oncyber;\\n }\\n\\n function minterNonce(address _minter) public view returns (uint256) {\\n return LibAppStorage.layout().minterNonce[_minter].current();\\n }\\n}\\n\",\"keccak256\":\"0xcee6828468f14e3ae0a5e4e0f879932df3550d6c8c1804dd656c4e215a75b528\",\"license\":\"MIT\"},\"contracts/DestinationUtility/CyberDestinationUtilityFactoryFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.7;\\n\\n//\\nimport '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';\\nimport '../CyberDestinationFactoryBase.sol';\\nimport '../libraries/LibAppStorage.sol';\\nimport './LibUtilityStorage.sol';\\n\\ncontract CyberDestinationUtilityFactoryFacet is CyberDestinationFactoryBase {\\n using ECDSA for bytes32;\\n using Counters for Counters.Counter;\\n\\n event DestinationMinted(address indexed account, uint256 indexed tokenId);\\n\\n function getDrop(uint256 _tokenId)\\n public\\n view\\n returns (LibUtilityStorage.Drop memory)\\n {\\n LibUtilityStorage.Drop memory drop = LibUtilityStorage.layout().drops[\\n _tokenId\\n ];\\n require(drop.timeStart != 0, 'DNE');\\n\\n return drop;\\n }\\n\\n function mint(\\n string memory _uri,\\n uint256 _timeStart,\\n uint256 _timeEnd,\\n uint256 _price,\\n uint256 _amountCap,\\n uint256 _shareCyber,\\n bytes memory _signature\\n ) public returns (uint256 _tokenId) {\\n address sender = _msgSender();\\n uint256 nonce = minterNonce(sender);\\n require(_shareCyber <= 100, 'ISO');\\n require(_timeStart < _timeEnd, 'IT');\\n\\n bytes memory _message = abi.encodePacked(\\n _uri,\\n _timeStart,\\n _timeEnd,\\n _price,\\n _amountCap,\\n _shareCyber,\\n nonce,\\n sender\\n );\\n address recoveredAddress = keccak256(_message)\\n .toEthSignedMessageHash()\\n .recover(_signature);\\n require(recoveredAddress == LibAppStorage.layout().manager, 'NM');\\n\\n // Mint token\\n _tokenId = LibAppStorage.layout().totalSupply.current();\\n setTokenURI(_tokenId, _uri);\\n LibAppStorage.layout().totalSupply.increment();\\n LibAppStorage.layout().minterNonce[sender].increment();\\n LibUtilityStorage.Drop memory drop = LibUtilityStorage.Drop({\\n timeStart: _timeStart,\\n timeEnd: _timeEnd,\\n amountCap: _amountCap,\\n shareCyber: _shareCyber,\\n creator: payable(sender),\\n price: _price,\\n minted: 0\\n });\\n LibUtilityStorage.layout().drops[_tokenId] = drop;\\n\\n emit DestinationMinted(sender, _tokenId);\\n\\n return _tokenId;\\n }\\n\\n function mintEdition(uint256 _tokenId) public payable returns (bool) {\\n address sender = _msgSender();\\n LibUtilityStorage.Drop storage drop = LibUtilityStorage.layout().drops[\\n _tokenId\\n ];\\n\\n require(\\n block.timestamp >= drop.timeStart && block.timestamp <= drop.timeEnd,\\n 'OOT'\\n );\\n\\n require(msg.value == drop.price, 'IA');\\n\\n if (drop.amountCap != 0) {\\n require(drop.minted < drop.amountCap, 'CR');\\n }\\n\\n _safeMint(sender, _tokenId, 1, '');\\n drop.minted += 1;\\n emit Minted(sender, _tokenId, 1);\\n\\n uint256 amountOnCyber = (msg.value * drop.shareCyber) / 100;\\n uint256 amountCreator = msg.value - amountOnCyber;\\n\\n drop.creator.transfer(amountCreator);\\n payable(LibAppStorage.layout().oncyber).transfer(amountOnCyber);\\n return true;\\n }\\n}\\n\",\"keccak256\":\"0xb85705ba92cf57b7283a9bd178c50fd9023611189529dabbd4ac966e83850304\",\"license\":\"MIT\"},\"contracts/DestinationUtility/LibUtilityStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.7;\\n\\n//\\n\\nlibrary LibUtilityStorage {\\n bytes32 public constant STORAGE_SLOT = keccak256('utility.app.storage');\\n struct Drop {\\n uint256 timeStart;\\n uint256 timeEnd;\\n uint256 shareCyber;\\n uint256 price;\\n uint256 amountCap;\\n uint256 minted;\\n address payable creator;\\n }\\n\\n struct Layout {\\n mapping(uint256 => Drop) drops;\\n }\\n\\n function layout() internal pure returns (Layout storage layout) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n layout.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9a54262c9bfba6fef2a4ab573ee85ac40fb0de7f842e059734f543ac23096a5d\",\"license\":\"MIT\"},\"contracts/Diamond/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\npragma experimental ABIEncoderV2;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nlibrary LibDiamond {\\n bytes32 public constant DIAMOND_STORAGE_POSITION =\\n keccak256('diamond.standard.diamond.storage');\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint16 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n}\\n\",\"keccak256\":\"0x781cc8c5b1178471e307e8457f38b5b07926573a0c97c2debf4e567bd99e8981\",\"license\":\"MIT\"},\"contracts/ERC1155URI/ERC1155URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.7;\\n\\nimport '@solidstate/contracts/token/ERC1155/ERC1155.sol';\\nimport './ERC1155URIStorage.sol';\\n\\nabstract contract ERC1155URI is ERC1155 {\\n function uri(uint256 _tokenId) public view virtual returns (string memory) {\\n string memory tokenURI = ERC1155URIStorage.layout().tokenURIs[_tokenId];\\n require(bytes(tokenURI).length != 0, 'ERC1155URI: tokenId not exist');\\n return string(abi.encodePacked(ERC1155URIStorage.layout().uri, tokenURI));\\n }\\n\\n function setURI(string memory newUri) internal virtual {\\n ERC1155URIStorage.layout().uri = newUri;\\n }\\n\\n function setTokenURI(uint256 tokenId, string memory _tokenURI)\\n internal\\n virtual\\n {\\n ERC1155URIStorage.layout().tokenURIs[tokenId] = _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x194c68e0d43aaea92a8c7532938ac6edb187362c6470712c22eda93e06b1db1b\",\"license\":\"MIT\"},\"contracts/ERC1155URI/ERC1155URIStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.7;\\n\\nlibrary ERC1155URIStorage {\\n bytes32 internal constant STORAGESLOT =\\n keccak256('diamond.storage.ERC1155URI');\\n\\n struct Layout {\\n mapping(uint256 => string) tokenURIs;\\n string uri;\\n }\\n\\n function layout() internal pure returns (Layout storage layout) {\\n bytes32 slot = STORAGESLOT;\\n assembly {\\n layout.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xee43e0931dd075804623e8d0a677fe1e1baa58e165d3f74f27703d6280960a71\",\"license\":\"MIT\"},\"contracts/libraries/LibAppStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.7;\\n\\nimport '@openzeppelin/contracts/utils/Counters.sol';\\n\\n//\\n\\nlibrary LibAppStorage {\\n bytes32 public constant STORAGE_SLOT = keccak256('app.storage');\\n\\n struct Layout {\\n address manager;\\n address opensea;\\n Counters.Counter totalSupply;\\n mapping(address => Counters.Counter) minterNonce;\\n address oncyber;\\n }\\n\\n function layout() internal pure returns (Layout storage layout) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n layout.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x98da8b9c3132f35030fc4c79eafc54923cdf8e131c4143375a1a65be4706ac53\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50614a2d806100206000396000f3fe6080604052600436106100fd5760003560e01c8063481c6a7511610095578063a22cb46511610064578063a22cb46514610385578063bc01188e146103ae578063dcf2cad4146103d9578063e985e9c514610416578063f242432a14610453576100fd565b8063481c6a75146102a35780634e1273f4146102ce578063572b6c051461030b5780636787d44914610348576100fd565b80630e89341c116100d15780630e89341c146101d557806318160ddd146102125780631b0239471461023d5780632eb2c2d61461027a576100fd565b8062fdd58e1461010257806301ffc9a71461013f57806305322b741461017c5780630b885ac3146101ac575b600080fd5b34801561010e57600080fd5b5061012960048036038101906101249190612e70565b61047c565b6040516101369190613d0a565b60405180910390f35b34801561014b57600080fd5b5061016660048036038101906101619190612f28565b610490565b604051610173919061396d565b60405180910390f35b610196600480360381019061019191906130f3565b6104b3565b6040516101a3919061396d565b60405180910390f35b3480156101b857600080fd5b506101d360048036038101906101ce9190612f82565b61076c565b005b3480156101e157600080fd5b506101fc60048036038101906101f791906130f3565b6109d0565b60405161020991906139cd565b60405180910390f35b34801561021e57600080fd5b50610227610af4565b6040516102349190613d0a565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612c5d565b610b0e565b6040516102719190613d0a565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c9190612cca565b610b67565b005b3480156102af57600080fd5b506102b8610bfb565b6040516102c59190613837565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190612eb0565b610c2e565b6040516103029190613914565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190612c5d565b610e23565b60405161033f919061396d565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906130f3565b610e86565b60405161037c9190613cef565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612e30565b610f9c565b005b3480156103ba57600080fd5b506103c3611111565b6040516103d09190613837565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190613019565b611144565b60405161040d9190613d0a565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190612c8a565b61149c565b60405161044a919061396d565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190612d99565b611539565b005b600061048883836115cd565b905092915050565b60006104ac8261049e6116a0565b6116cd90919063ffffffff16565b9050919050565b6000806104be611738565b905060006104ca611774565b60000160008581526020019081526020016000209050806000015442101580156104f8575080600101544211155b610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90613b4f565b60405180910390fd5b8060030154341461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057490613bef565b60405180910390fd5b60008160040154146105d45780600401548160050154106105d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ca90613b8f565b60405180910390fd5b5b6105f082856001604051806020016040528060008152506117a1565b60018160050160008282546106059190613ebe565b925050819055506001848373ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4600060648260020154346106669190613f45565b6106709190613f14565b9050600081346106809190613f9f565b90508260060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156106ec573d6000803e3d6000fd5b506106f56117c2565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561075e573d6000803e3d6000fd5b506001945050505050919050565b3373ffffffffffffffffffffffffffffffffffffffff1661078b6117ef565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fc90613a4f565b60405180910390fd5b8261080e61181c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016108596117ef565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506108eb85611849565b836108f46117c2565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161093e6117c2565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806109886117c2565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b606060006109dc61186c565b600001600084815260200190815260200160002080546109fb906140b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a27906140b2565b8015610a745780601f10610a4957610100808354040283529160200191610a74565b820191906000526020600020905b815481529060010190602001808311610a5757829003601f168201915b50505050509050600081511415610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790613c2f565b60405180910390fd5b610ac861186c565b60010181604051602001610add9291906137ed565b604051602081830303815290604052915050919050565b6000610b09610b016117c2565b600201611899565b905090565b6000610b60610b1b6117c2565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611899565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ba75750610ba6853361149c565b5b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613b0f565b60405180910390fd5b610bf43386868686866118a7565b5050505050565b6000610c056117c2565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90613c6f565b60405180910390fd5b6000610c7e6118cb565b60000190506000845167ffffffffffffffff811115610ca057610c9f614281565b5b604051908082528060200260200182016040528015610cce5781602001602082028036833780820191505090505b50905060005b8551811015610e1757600073ffffffffffffffffffffffffffffffffffffffff16868281518110610d0857610d07614252565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e90613acf565b60405180910390fd5b826000868381518110610d7d57610d7c614252565b5b602002602001015181526020019081526020016000206000878381518110610da857610da7614252565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610dfe57610dfd614252565b5b6020026020010181815250508080600101915050610cd4565b50809250505092915050565b6000610e2d61181c565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b610e8e6128e2565b6000610e98611774565b60000160008481526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600081600001511415610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90613ccf565b60405180910390fd5b80915050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613c4f565b60405180910390fd5b806110146118cb565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611105919061396d565b60405180910390a35050565b600061111b6117c2565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008061114f611738565b9050600061115c82610b0e565b905060648511156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613baf565b60405180910390fd5b8789106111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90613c0f565b60405180910390fd5b60008a8a8a8a8a8a878960405160200161120598979695949392919061375f565b6040516020818303038152906040529050600061123a8661122c84805190602001206118f8565b61192890919063ffffffff16565b90506112446117c2565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613a8f565b60405180910390fd5b6112e86112e06117c2565b600201611899565b94506112f4858d61194f565b6113076112ff6117c2565b600201611984565b6113576113126117c2565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611984565b60006040518060e001604052808d81526020018c81526020018981526020018b81526020018a8152602001600081526020018673ffffffffffffffffffffffffffffffffffffffff168152509050806113ae611774565b6000016000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050858573ffffffffffffffffffffffffffffffffffffffff167f889de1a576ddf6ed9570e1a2354ffe87302c20bd8af57b5bd4e3bbc84240e7f660405160405180910390a35050505050979650505050505050565b60006114a66118cb565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806115795750611578853361149c565b5b6115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90613b0f565b60405180910390fd5b6115c633868686868661199a565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613aaf565b60405180910390fd5b6116466118cb565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006018600036905010158015611754575061175333610e23565b5b1561176857601436033560601c9050611770565b339050611771565b5b90565b6000807f75bce7b27cc8f04e7a4282e725010cbd105f602d082c4b02f7d958135d62562e90508091505090565b6117b0336000868686866119be565b6117bc84848484611ba5565b50505050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061185261186c565b6001019080519060200190611868929190612935565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b600081600001549050919050565b6118b5868686868686611d2f565b6118c3868686868686611f16565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b60008160405160200161190b9190613811565b604051602081830303815290604052805190602001209050919050565b60008060006119378585612222565b91509150611944816122a5565b819250505092915050565b8061195861186c565b6000016000848152602001908152602001600020908051906020019061197f929190612935565b505050565b6001816000016000828254019250508190555050565b6119a88686868686866119be565b6119b686868686868661247a565b505050505050565b6119dd8473ffffffffffffffffffffffffffffffffffffffff166126f2565b15611b9d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a239594939291906138ba565b602060405180830381600087803b158015611a3d57600080fd5b505af1925050508015611a6e57506040513d601f19601f82011682018060405250810190611a6b9190612f55565b60015b611b1457611a7a6142b0565b806308c379a01415611ad75750611a8f614905565b80611a9a5750611ad9565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace91906139cd565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613a0f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290613a2f565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c90613caf565b60405180910390fd5b611c3433600086611c2587612705565b611c2e87612705565b8661277f565b6000611c3e6118cb565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ca29190613ebe565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611d20929190613d25565b60405180910390a45050505050565b611d4e8473ffffffffffffffffffffffffffffffffffffffff166126f2565b15611f0e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d94959493929190613852565b602060405180830381600087803b158015611dae57600080fd5b505af1925050508015611ddf57506040513d601f19601f82011682018060405250810190611ddc9190612f55565b60015b611e8557611deb6142b0565b806308c379a01415611e485750611e00614905565b80611e0b5750611e4a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f91906139cd565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90613a0f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390613a2f565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613b6f565b60405180910390fd5b8151835114611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc190613c8f565b60405180910390fd5b611fd886868686868661277f565b6000611fe26118cb565b600001905060005b845181101561219a57600085828151811061200857612007614252565b5b60200260200101519050600085838151811061202757612026614252565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90613aef565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461217e9190613ebe565b925050819055505050808061219290614115565b915050611fea565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612211929190613936565b60405180910390a450505050505050565b6000806041835114156122645760008060006020860151925060408601519150606086015160001a905061225887828585612787565b9450945050505061229e565b60408351141561229557600080602085015191506040850151905061228a868383612894565b93509350505061229e565b60006002915091505b9250929050565b600060048111156122b9576122b86141f4565b5b8160048111156122cc576122cb6141f4565b5b14156122d757612477565b600160048111156122eb576122ea6141f4565b5b8160048111156122fe576122fd6141f4565b5b141561233f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612336906139ef565b60405180910390fd5b60026004811115612353576123526141f4565b5b816004811115612366576123656141f4565b5b14156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613a6f565b60405180910390fd5b600360048111156123bb576123ba6141f4565b5b8160048111156123ce576123cd6141f4565b5b141561240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690613b2f565b60405180910390fd5b600480811115612422576124216141f4565b5b816004811115612435576124346141f4565b5b1415612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90613bcf565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190613b6f565b60405180910390fd5b6125088686866124f987612705565b61250287612705565b8661277f565b60006125126118cb565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590613aef565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126649190613ebe565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516126e1929190613d25565b60405180910390a450505050505050565b600080823b905060008111915050919050565b60606000600167ffffffffffffffff81111561272457612723614281565b5b6040519080825280602002602001820160405280156127525781602001602082028036833780820191505090505b509050828160008151811061276a57612769614252565b5b60200260200101818152505080915050919050565b505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156127c257600060039150915061288b565b601b8560ff16141580156127da5750601c8560ff1614155b156127ec57600060049150915061288b565b6000600187878787604051600081526020016040526040516128119493929190613988565b6020604051602081039080840390855afa158015612833573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128825760006001925092505061288b565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c0190506128d487828885612787565b935093505050935093915050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b828054612941906140b2565b90600052602060002090601f01602090048101928261296357600085556129aa565b82601f1061297c57805160ff19168380011785556129aa565b828001600101855582156129aa579182015b828111156129a957825182559160200191906001019061298e565b5b5090506129b791906129bb565b5090565b5b808211156129d45760008160009055506001016129bc565b5090565b60006129eb6129e684613d73565b613d4e565b90508083825260208201905082856020860282011115612a0e57612a0d6142d7565b5b60005b85811015612a3e5781612a248882612b3c565b845260208401935060208301925050600181019050612a11565b5050509392505050565b6000612a5b612a5684613d9f565b613d4e565b90508083825260208201905082856020860282011115612a7e57612a7d6142d7565b5b60005b85811015612aae5781612a948882612c48565b845260208401935060208301925050600181019050612a81565b5050509392505050565b6000612acb612ac684613dcb565b613d4e565b905082815260208101848484011115612ae757612ae66142dc565b5b612af2848285614070565b509392505050565b6000612b0d612b0884613dfc565b613d4e565b905082815260208101848484011115612b2957612b286142dc565b5b612b34848285614070565b509392505050565b600081359050612b4b8161499b565b92915050565b600082601f830112612b6657612b656142d2565b5b8135612b768482602086016129d8565b91505092915050565b600082601f830112612b9457612b936142d2565b5b8135612ba4848260208601612a48565b91505092915050565b600081359050612bbc816149b2565b92915050565b600081359050612bd1816149c9565b92915050565b600081519050612be6816149c9565b92915050565b600082601f830112612c0157612c006142d2565b5b8135612c11848260208601612ab8565b91505092915050565b600082601f830112612c2f57612c2e6142d2565b5b8135612c3f848260208601612afa565b91505092915050565b600081359050612c57816149e0565b92915050565b600060208284031215612c7357612c726142e6565b5b6000612c8184828501612b3c565b91505092915050565b60008060408385031215612ca157612ca06142e6565b5b6000612caf85828601612b3c565b9250506020612cc085828601612b3c565b9150509250929050565b600080600080600060a08688031215612ce657612ce56142e6565b5b6000612cf488828901612b3c565b9550506020612d0588828901612b3c565b945050604086013567ffffffffffffffff811115612d2657612d256142e1565b5b612d3288828901612b7f565b935050606086013567ffffffffffffffff811115612d5357612d526142e1565b5b612d5f88828901612b7f565b925050608086013567ffffffffffffffff811115612d8057612d7f6142e1565b5b612d8c88828901612bec565b9150509295509295909350565b600080600080600060a08688031215612db557612db46142e6565b5b6000612dc388828901612b3c565b9550506020612dd488828901612b3c565b9450506040612de588828901612c48565b9350506060612df688828901612c48565b925050608086013567ffffffffffffffff811115612e1757612e166142e1565b5b612e2388828901612bec565b9150509295509295909350565b60008060408385031215612e4757612e466142e6565b5b6000612e5585828601612b3c565b9250506020612e6685828601612bad565b9150509250929050565b60008060408385031215612e8757612e866142e6565b5b6000612e9585828601612b3c565b9250506020612ea685828601612c48565b9150509250929050565b60008060408385031215612ec757612ec66142e6565b5b600083013567ffffffffffffffff811115612ee557612ee46142e1565b5b612ef185828601612b51565b925050602083013567ffffffffffffffff811115612f1257612f116142e1565b5b612f1e85828601612b7f565b9150509250929050565b600060208284031215612f3e57612f3d6142e6565b5b6000612f4c84828501612bc2565b91505092915050565b600060208284031215612f6b57612f6a6142e6565b5b6000612f7984828501612bd7565b91505092915050565b600080600080600060a08688031215612f9e57612f9d6142e6565b5b600086013567ffffffffffffffff811115612fbc57612fbb6142e1565b5b612fc888828901612c1a565b9550506020612fd988828901612b3c565b9450506040612fea88828901612b3c565b9350506060612ffb88828901612b3c565b925050608061300c88828901612b3c565b9150509295509295909350565b600080600080600080600060e0888a031215613038576130376142e6565b5b600088013567ffffffffffffffff811115613056576130556142e1565b5b6130628a828b01612c1a565b97505060206130738a828b01612c48565b96505060406130848a828b01612c48565b95505060606130958a828b01612c48565b94505060806130a68a828b01612c48565b93505060a06130b78a828b01612c48565b92505060c088013567ffffffffffffffff8111156130d8576130d76142e1565b5b6130e48a828b01612bec565b91505092959891949750929550565b600060208284031215613109576131086142e6565b5b600061311784828501612c48565b91505092915050565b600061312c838361371b565b60208301905092915050565b61314181613fe5565b82525050565b61315081613fd3565b82525050565b61316761316282613fd3565b61415e565b82525050565b600061317882613e52565b6131828185613e80565b935061318d83613e2d565b8060005b838110156131be5781516131a58882613120565b97506131b083613e73565b925050600181019050613191565b5085935050505092915050565b6131d481613ff7565b82525050565b6131e381614003565b82525050565b6131fa6131f582614003565b614170565b82525050565b600061320b82613e5d565b6132158185613e91565b935061322581856020860161407f565b61322e816142eb565b840191505092915050565b600061324482613e68565b61324e8185613ea2565b935061325e81856020860161407f565b613267816142eb565b840191505092915050565b600061327d82613e68565b6132878185613eb3565b935061329781856020860161407f565b80840191505092915050565b600081546132b0816140b2565b6132ba8186613eb3565b945060018216600081146132d557600181146132e657613319565b60ff19831686528186019350613319565b6132ef85613e3d565b60005b83811015613311578154818901526001820191506020810190506132f2565b838801955050505b50505092915050565b600061332f601883613ea2565b915061333a82614316565b602082019050919050565b6000613352603483613ea2565b915061335d8261433f565b604082019050919050565b6000613375602883613ea2565b91506133808261438e565b604082019050919050565b6000613398600283613ea2565b91506133a3826143dd565b602082019050919050565b60006133bb601f83613ea2565b91506133c682614406565b602082019050919050565b60006133de601c83613eb3565b91506133e98261442f565b601c82019050919050565b6000613401600283613ea2565b915061340c82614458565b602082019050919050565b6000613424602b83613ea2565b915061342f82614481565b604082019050919050565b6000613447603183613ea2565b9150613452826144d0565b604082019050919050565b600061346a602b83613ea2565b91506134758261451f565b604082019050919050565b600061348d602983613ea2565b91506134988261456e565b604082019050919050565b60006134b0602283613ea2565b91506134bb826145bd565b604082019050919050565b60006134d3600383613ea2565b91506134de8261460c565b602082019050919050565b60006134f6602583613ea2565b915061350182614635565b604082019050919050565b6000613519600283613ea2565b915061352482614684565b602082019050919050565b600061353c600383613ea2565b9150613547826146ad565b602082019050919050565b600061355f602283613ea2565b915061356a826146d6565b604082019050919050565b6000613582600283613ea2565b915061358d82614725565b602082019050919050565b60006135a5600283613ea2565b91506135b08261474e565b602082019050919050565b60006135c8601d83613ea2565b91506135d382614777565b602082019050919050565b60006135eb602983613ea2565b91506135f6826147a0565b604082019050919050565b600061360e602983613ea2565b9150613619826147ef565b604082019050919050565b6000613631602883613ea2565b915061363c8261483e565b604082019050919050565b6000613654602183613ea2565b915061365f8261488d565b604082019050919050565b6000613677600383613ea2565b9150613682826148dc565b602082019050919050565b60e0820160008201516136a3600085018261371b565b5060208201516136b6602085018261371b565b5060408201516136c9604085018261371b565b5060608201516136dc606085018261371b565b5060808201516136ef608085018261371b565b5060a082015161370260a085018261371b565b5060c082015161371560c0850182613138565b50505050565b61372481614059565b82525050565b61373381614059565b82525050565b61374a61374582614059565b61418c565b82525050565b61375981614063565b82525050565b600061376b828b613272565b9150613777828a613739565b6020820191506137878289613739565b6020820191506137978288613739565b6020820191506137a78287613739565b6020820191506137b78286613739565b6020820191506137c78285613739565b6020820191506137d78284613156565b6014820191508190509998505050505050505050565b60006137f982856132a3565b91506138058284613272565b91508190509392505050565b600061381c826133d1565b915061382882846131e9565b60208201915081905092915050565b600060208201905061384c6000830184613147565b92915050565b600060a0820190506138676000830188613147565b6138746020830187613147565b8181036040830152613886818661316d565b9050818103606083015261389a818561316d565b905081810360808301526138ae8184613200565b90509695505050505050565b600060a0820190506138cf6000830188613147565b6138dc6020830187613147565b6138e9604083018661372a565b6138f6606083018561372a565b81810360808301526139088184613200565b90509695505050505050565b6000602082019050818103600083015261392e818461316d565b905092915050565b60006040820190508181036000830152613950818561316d565b90508181036020830152613964818461316d565b90509392505050565b600060208201905061398260008301846131cb565b92915050565b600060808201905061399d60008301876131da565b6139aa6020830186613750565b6139b760408301856131da565b6139c460608301846131da565b95945050505050565b600060208201905081810360008301526139e78184613239565b905092915050565b60006020820190508181036000830152613a0881613322565b9050919050565b60006020820190508181036000830152613a2881613345565b9050919050565b60006020820190508181036000830152613a4881613368565b9050919050565b60006020820190508181036000830152613a688161338b565b9050919050565b60006020820190508181036000830152613a88816133ae565b9050919050565b60006020820190508181036000830152613aa8816133f4565b9050919050565b60006020820190508181036000830152613ac881613417565b9050919050565b60006020820190508181036000830152613ae88161343a565b9050919050565b60006020820190508181036000830152613b088161345d565b9050919050565b60006020820190508181036000830152613b2881613480565b9050919050565b60006020820190508181036000830152613b48816134a3565b9050919050565b60006020820190508181036000830152613b68816134c6565b9050919050565b60006020820190508181036000830152613b88816134e9565b9050919050565b60006020820190508181036000830152613ba88161350c565b9050919050565b60006020820190508181036000830152613bc88161352f565b9050919050565b60006020820190508181036000830152613be881613552565b9050919050565b60006020820190508181036000830152613c0881613575565b9050919050565b60006020820190508181036000830152613c2881613598565b9050919050565b60006020820190508181036000830152613c48816135bb565b9050919050565b60006020820190508181036000830152613c68816135de565b9050919050565b60006020820190508181036000830152613c8881613601565b9050919050565b60006020820190508181036000830152613ca881613624565b9050919050565b60006020820190508181036000830152613cc881613647565b9050919050565b60006020820190508181036000830152613ce88161366a565b9050919050565b600060e082019050613d04600083018461368d565b92915050565b6000602082019050613d1f600083018461372a565b92915050565b6000604082019050613d3a600083018561372a565b613d47602083018461372a565b9392505050565b6000613d58613d69565b9050613d6482826140e4565b919050565b6000604051905090565b600067ffffffffffffffff821115613d8e57613d8d614281565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613dba57613db9614281565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613de657613de5614281565b5b613def826142eb565b9050602081019050919050565b600067ffffffffffffffff821115613e1757613e16614281565b5b613e20826142eb565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ec982614059565b9150613ed483614059565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f0957613f08614196565b5b828201905092915050565b6000613f1f82614059565b9150613f2a83614059565b925082613f3a57613f396141c5565b5b828204905092915050565b6000613f5082614059565b9150613f5b83614059565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f9457613f93614196565b5b828202905092915050565b6000613faa82614059565b9150613fb583614059565b925082821015613fc857613fc7614196565b5b828203905092915050565b6000613fde82614039565b9050919050565b6000613ff082614039565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561409d578082015181840152602081019050614082565b838111156140ac576000848401525b50505050565b600060028204905060018216806140ca57607f821691505b602082108114156140de576140dd614223565b5b50919050565b6140ed826142eb565b810181811067ffffffffffffffff8211171561410c5761410b614281565b5b80604052505050565b600061412082614059565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561415357614152614196565b5b600182019050919050565b60006141698261417a565b9050919050565b6000819050919050565b6000614185826142fc565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156142cf5760046000803e6142cc600051614309565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b600060443d101561491557614998565b61491d613d69565b60043d036004823e80513d602482011167ffffffffffffffff82111715614945575050614998565b808201805167ffffffffffffffff8111156149635750505050614998565b80602083010160043d038501811115614980575050505050614998565b61498f826020018501866140e4565b82955050505050505b90565b6149a481613fd3565b81146149af57600080fd5b50565b6149bb81613ff7565b81146149c657600080fd5b50565b6149d28161400d565b81146149dd57600080fd5b50565b6149e981614059565b81146149f457600080fd5b5056fea2646970667358221220827d885abee5a15f33289585f9e1db0e2156411fc6402b7a8705aeb0f551601164736f6c63430008070033", - "deployedBytecode": "0x6080604052600436106100fd5760003560e01c8063481c6a7511610095578063a22cb46511610064578063a22cb46514610385578063bc01188e146103ae578063dcf2cad4146103d9578063e985e9c514610416578063f242432a14610453576100fd565b8063481c6a75146102a35780634e1273f4146102ce578063572b6c051461030b5780636787d44914610348576100fd565b80630e89341c116100d15780630e89341c146101d557806318160ddd146102125780631b0239471461023d5780632eb2c2d61461027a576100fd565b8062fdd58e1461010257806301ffc9a71461013f57806305322b741461017c5780630b885ac3146101ac575b600080fd5b34801561010e57600080fd5b5061012960048036038101906101249190612e70565b61047c565b6040516101369190613d0a565b60405180910390f35b34801561014b57600080fd5b5061016660048036038101906101619190612f28565b610490565b604051610173919061396d565b60405180910390f35b610196600480360381019061019191906130f3565b6104b3565b6040516101a3919061396d565b60405180910390f35b3480156101b857600080fd5b506101d360048036038101906101ce9190612f82565b61076c565b005b3480156101e157600080fd5b506101fc60048036038101906101f791906130f3565b6109d0565b60405161020991906139cd565b60405180910390f35b34801561021e57600080fd5b50610227610af4565b6040516102349190613d0a565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612c5d565b610b0e565b6040516102719190613d0a565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c9190612cca565b610b67565b005b3480156102af57600080fd5b506102b8610bfb565b6040516102c59190613837565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190612eb0565b610c2e565b6040516103029190613914565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190612c5d565b610e23565b60405161033f919061396d565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906130f3565b610e86565b60405161037c9190613cef565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612e30565b610f9c565b005b3480156103ba57600080fd5b506103c3611111565b6040516103d09190613837565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190613019565b611144565b60405161040d9190613d0a565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190612c8a565b61149c565b60405161044a919061396d565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190612d99565b611539565b005b600061048883836115cd565b905092915050565b60006104ac8261049e6116a0565b6116cd90919063ffffffff16565b9050919050565b6000806104be611738565b905060006104ca611774565b60000160008581526020019081526020016000209050806000015442101580156104f8575080600101544211155b610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90613b4f565b60405180910390fd5b8060030154341461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057490613bef565b60405180910390fd5b60008160040154146105d45780600401548160050154106105d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ca90613b8f565b60405180910390fd5b5b6105f082856001604051806020016040528060008152506117a1565b60018160050160008282546106059190613ebe565b925050819055506001848373ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4600060648260020154346106669190613f45565b6106709190613f14565b9050600081346106809190613f9f565b90508260060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156106ec573d6000803e3d6000fd5b506106f56117c2565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561075e573d6000803e3d6000fd5b506001945050505050919050565b3373ffffffffffffffffffffffffffffffffffffffff1661078b6117ef565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fc90613a4f565b60405180910390fd5b8261080e61181c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016108596117ef565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506108eb85611849565b836108f46117c2565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161093e6117c2565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806109886117c2565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b606060006109dc61186c565b600001600084815260200190815260200160002080546109fb906140b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a27906140b2565b8015610a745780601f10610a4957610100808354040283529160200191610a74565b820191906000526020600020905b815481529060010190602001808311610a5757829003601f168201915b50505050509050600081511415610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790613c2f565b60405180910390fd5b610ac861186c565b60010181604051602001610add9291906137ed565b604051602081830303815290604052915050919050565b6000610b09610b016117c2565b600201611899565b905090565b6000610b60610b1b6117c2565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611899565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ba75750610ba6853361149c565b5b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613b0f565b60405180910390fd5b610bf43386868686866118a7565b5050505050565b6000610c056117c2565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90613c6f565b60405180910390fd5b6000610c7e6118cb565b60000190506000845167ffffffffffffffff811115610ca057610c9f614281565b5b604051908082528060200260200182016040528015610cce5781602001602082028036833780820191505090505b50905060005b8551811015610e1757600073ffffffffffffffffffffffffffffffffffffffff16868281518110610d0857610d07614252565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e90613acf565b60405180910390fd5b826000868381518110610d7d57610d7c614252565b5b602002602001015181526020019081526020016000206000878381518110610da857610da7614252565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610dfe57610dfd614252565b5b6020026020010181815250508080600101915050610cd4565b50809250505092915050565b6000610e2d61181c565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b610e8e6128e2565b6000610e98611774565b60000160008481526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600081600001511415610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90613ccf565b60405180910390fd5b80915050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613c4f565b60405180910390fd5b806110146118cb565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611105919061396d565b60405180910390a35050565b600061111b6117c2565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008061114f611738565b9050600061115c82610b0e565b905060648511156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613baf565b60405180910390fd5b8789106111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90613c0f565b60405180910390fd5b60008a8a8a8a8a8a878960405160200161120598979695949392919061375f565b6040516020818303038152906040529050600061123a8661122c84805190602001206118f8565b61192890919063ffffffff16565b90506112446117c2565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613a8f565b60405180910390fd5b6112e86112e06117c2565b600201611899565b94506112f4858d61194f565b6113076112ff6117c2565b600201611984565b6113576113126117c2565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611984565b60006040518060e001604052808d81526020018c81526020018981526020018b81526020018a8152602001600081526020018673ffffffffffffffffffffffffffffffffffffffff168152509050806113ae611774565b6000016000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050858573ffffffffffffffffffffffffffffffffffffffff167f889de1a576ddf6ed9570e1a2354ffe87302c20bd8af57b5bd4e3bbc84240e7f660405160405180910390a35050505050979650505050505050565b60006114a66118cb565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806115795750611578853361149c565b5b6115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90613b0f565b60405180910390fd5b6115c633868686868661199a565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613aaf565b60405180910390fd5b6116466118cb565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006018600036905010158015611754575061175333610e23565b5b1561176857601436033560601c9050611770565b339050611771565b5b90565b6000807f75bce7b27cc8f04e7a4282e725010cbd105f602d082c4b02f7d958135d62562e90508091505090565b6117b0336000868686866119be565b6117bc84848484611ba5565b50505050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061185261186c565b6001019080519060200190611868929190612935565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b600081600001549050919050565b6118b5868686868686611d2f565b6118c3868686868686611f16565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b60008160405160200161190b9190613811565b604051602081830303815290604052805190602001209050919050565b60008060006119378585612222565b91509150611944816122a5565b819250505092915050565b8061195861186c565b6000016000848152602001908152602001600020908051906020019061197f929190612935565b505050565b6001816000016000828254019250508190555050565b6119a88686868686866119be565b6119b686868686868661247a565b505050505050565b6119dd8473ffffffffffffffffffffffffffffffffffffffff166126f2565b15611b9d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a239594939291906138ba565b602060405180830381600087803b158015611a3d57600080fd5b505af1925050508015611a6e57506040513d601f19601f82011682018060405250810190611a6b9190612f55565b60015b611b1457611a7a6142b0565b806308c379a01415611ad75750611a8f614905565b80611a9a5750611ad9565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace91906139cd565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613a0f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290613a2f565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c90613caf565b60405180910390fd5b611c3433600086611c2587612705565b611c2e87612705565b8661277f565b6000611c3e6118cb565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ca29190613ebe565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611d20929190613d25565b60405180910390a45050505050565b611d4e8473ffffffffffffffffffffffffffffffffffffffff166126f2565b15611f0e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d94959493929190613852565b602060405180830381600087803b158015611dae57600080fd5b505af1925050508015611ddf57506040513d601f19601f82011682018060405250810190611ddc9190612f55565b60015b611e8557611deb6142b0565b806308c379a01415611e485750611e00614905565b80611e0b5750611e4a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f91906139cd565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90613a0f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390613a2f565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613b6f565b60405180910390fd5b8151835114611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc190613c8f565b60405180910390fd5b611fd886868686868661277f565b6000611fe26118cb565b600001905060005b845181101561219a57600085828151811061200857612007614252565b5b60200260200101519050600085838151811061202757612026614252565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90613aef565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461217e9190613ebe565b925050819055505050808061219290614115565b915050611fea565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612211929190613936565b60405180910390a450505050505050565b6000806041835114156122645760008060006020860151925060408601519150606086015160001a905061225887828585612787565b9450945050505061229e565b60408351141561229557600080602085015191506040850151905061228a868383612894565b93509350505061229e565b60006002915091505b9250929050565b600060048111156122b9576122b86141f4565b5b8160048111156122cc576122cb6141f4565b5b14156122d757612477565b600160048111156122eb576122ea6141f4565b5b8160048111156122fe576122fd6141f4565b5b141561233f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612336906139ef565b60405180910390fd5b60026004811115612353576123526141f4565b5b816004811115612366576123656141f4565b5b14156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613a6f565b60405180910390fd5b600360048111156123bb576123ba6141f4565b5b8160048111156123ce576123cd6141f4565b5b141561240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690613b2f565b60405180910390fd5b600480811115612422576124216141f4565b5b816004811115612435576124346141f4565b5b1415612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90613bcf565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190613b6f565b60405180910390fd5b6125088686866124f987612705565b61250287612705565b8661277f565b60006125126118cb565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590613aef565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126649190613ebe565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516126e1929190613d25565b60405180910390a450505050505050565b600080823b905060008111915050919050565b60606000600167ffffffffffffffff81111561272457612723614281565b5b6040519080825280602002602001820160405280156127525781602001602082028036833780820191505090505b509050828160008151811061276a57612769614252565b5b60200260200101818152505080915050919050565b505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156127c257600060039150915061288b565b601b8560ff16141580156127da5750601c8560ff1614155b156127ec57600060049150915061288b565b6000600187878787604051600081526020016040526040516128119493929190613988565b6020604051602081039080840390855afa158015612833573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128825760006001925092505061288b565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c0190506128d487828885612787565b935093505050935093915050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b828054612941906140b2565b90600052602060002090601f01602090048101928261296357600085556129aa565b82601f1061297c57805160ff19168380011785556129aa565b828001600101855582156129aa579182015b828111156129a957825182559160200191906001019061298e565b5b5090506129b791906129bb565b5090565b5b808211156129d45760008160009055506001016129bc565b5090565b60006129eb6129e684613d73565b613d4e565b90508083825260208201905082856020860282011115612a0e57612a0d6142d7565b5b60005b85811015612a3e5781612a248882612b3c565b845260208401935060208301925050600181019050612a11565b5050509392505050565b6000612a5b612a5684613d9f565b613d4e565b90508083825260208201905082856020860282011115612a7e57612a7d6142d7565b5b60005b85811015612aae5781612a948882612c48565b845260208401935060208301925050600181019050612a81565b5050509392505050565b6000612acb612ac684613dcb565b613d4e565b905082815260208101848484011115612ae757612ae66142dc565b5b612af2848285614070565b509392505050565b6000612b0d612b0884613dfc565b613d4e565b905082815260208101848484011115612b2957612b286142dc565b5b612b34848285614070565b509392505050565b600081359050612b4b8161499b565b92915050565b600082601f830112612b6657612b656142d2565b5b8135612b768482602086016129d8565b91505092915050565b600082601f830112612b9457612b936142d2565b5b8135612ba4848260208601612a48565b91505092915050565b600081359050612bbc816149b2565b92915050565b600081359050612bd1816149c9565b92915050565b600081519050612be6816149c9565b92915050565b600082601f830112612c0157612c006142d2565b5b8135612c11848260208601612ab8565b91505092915050565b600082601f830112612c2f57612c2e6142d2565b5b8135612c3f848260208601612afa565b91505092915050565b600081359050612c57816149e0565b92915050565b600060208284031215612c7357612c726142e6565b5b6000612c8184828501612b3c565b91505092915050565b60008060408385031215612ca157612ca06142e6565b5b6000612caf85828601612b3c565b9250506020612cc085828601612b3c565b9150509250929050565b600080600080600060a08688031215612ce657612ce56142e6565b5b6000612cf488828901612b3c565b9550506020612d0588828901612b3c565b945050604086013567ffffffffffffffff811115612d2657612d256142e1565b5b612d3288828901612b7f565b935050606086013567ffffffffffffffff811115612d5357612d526142e1565b5b612d5f88828901612b7f565b925050608086013567ffffffffffffffff811115612d8057612d7f6142e1565b5b612d8c88828901612bec565b9150509295509295909350565b600080600080600060a08688031215612db557612db46142e6565b5b6000612dc388828901612b3c565b9550506020612dd488828901612b3c565b9450506040612de588828901612c48565b9350506060612df688828901612c48565b925050608086013567ffffffffffffffff811115612e1757612e166142e1565b5b612e2388828901612bec565b9150509295509295909350565b60008060408385031215612e4757612e466142e6565b5b6000612e5585828601612b3c565b9250506020612e6685828601612bad565b9150509250929050565b60008060408385031215612e8757612e866142e6565b5b6000612e9585828601612b3c565b9250506020612ea685828601612c48565b9150509250929050565b60008060408385031215612ec757612ec66142e6565b5b600083013567ffffffffffffffff811115612ee557612ee46142e1565b5b612ef185828601612b51565b925050602083013567ffffffffffffffff811115612f1257612f116142e1565b5b612f1e85828601612b7f565b9150509250929050565b600060208284031215612f3e57612f3d6142e6565b5b6000612f4c84828501612bc2565b91505092915050565b600060208284031215612f6b57612f6a6142e6565b5b6000612f7984828501612bd7565b91505092915050565b600080600080600060a08688031215612f9e57612f9d6142e6565b5b600086013567ffffffffffffffff811115612fbc57612fbb6142e1565b5b612fc888828901612c1a565b9550506020612fd988828901612b3c565b9450506040612fea88828901612b3c565b9350506060612ffb88828901612b3c565b925050608061300c88828901612b3c565b9150509295509295909350565b600080600080600080600060e0888a031215613038576130376142e6565b5b600088013567ffffffffffffffff811115613056576130556142e1565b5b6130628a828b01612c1a565b97505060206130738a828b01612c48565b96505060406130848a828b01612c48565b95505060606130958a828b01612c48565b94505060806130a68a828b01612c48565b93505060a06130b78a828b01612c48565b92505060c088013567ffffffffffffffff8111156130d8576130d76142e1565b5b6130e48a828b01612bec565b91505092959891949750929550565b600060208284031215613109576131086142e6565b5b600061311784828501612c48565b91505092915050565b600061312c838361371b565b60208301905092915050565b61314181613fe5565b82525050565b61315081613fd3565b82525050565b61316761316282613fd3565b61415e565b82525050565b600061317882613e52565b6131828185613e80565b935061318d83613e2d565b8060005b838110156131be5781516131a58882613120565b97506131b083613e73565b925050600181019050613191565b5085935050505092915050565b6131d481613ff7565b82525050565b6131e381614003565b82525050565b6131fa6131f582614003565b614170565b82525050565b600061320b82613e5d565b6132158185613e91565b935061322581856020860161407f565b61322e816142eb565b840191505092915050565b600061324482613e68565b61324e8185613ea2565b935061325e81856020860161407f565b613267816142eb565b840191505092915050565b600061327d82613e68565b6132878185613eb3565b935061329781856020860161407f565b80840191505092915050565b600081546132b0816140b2565b6132ba8186613eb3565b945060018216600081146132d557600181146132e657613319565b60ff19831686528186019350613319565b6132ef85613e3d565b60005b83811015613311578154818901526001820191506020810190506132f2565b838801955050505b50505092915050565b600061332f601883613ea2565b915061333a82614316565b602082019050919050565b6000613352603483613ea2565b915061335d8261433f565b604082019050919050565b6000613375602883613ea2565b91506133808261438e565b604082019050919050565b6000613398600283613ea2565b91506133a3826143dd565b602082019050919050565b60006133bb601f83613ea2565b91506133c682614406565b602082019050919050565b60006133de601c83613eb3565b91506133e98261442f565b601c82019050919050565b6000613401600283613ea2565b915061340c82614458565b602082019050919050565b6000613424602b83613ea2565b915061342f82614481565b604082019050919050565b6000613447603183613ea2565b9150613452826144d0565b604082019050919050565b600061346a602b83613ea2565b91506134758261451f565b604082019050919050565b600061348d602983613ea2565b91506134988261456e565b604082019050919050565b60006134b0602283613ea2565b91506134bb826145bd565b604082019050919050565b60006134d3600383613ea2565b91506134de8261460c565b602082019050919050565b60006134f6602583613ea2565b915061350182614635565b604082019050919050565b6000613519600283613ea2565b915061352482614684565b602082019050919050565b600061353c600383613ea2565b9150613547826146ad565b602082019050919050565b600061355f602283613ea2565b915061356a826146d6565b604082019050919050565b6000613582600283613ea2565b915061358d82614725565b602082019050919050565b60006135a5600283613ea2565b91506135b08261474e565b602082019050919050565b60006135c8601d83613ea2565b91506135d382614777565b602082019050919050565b60006135eb602983613ea2565b91506135f6826147a0565b604082019050919050565b600061360e602983613ea2565b9150613619826147ef565b604082019050919050565b6000613631602883613ea2565b915061363c8261483e565b604082019050919050565b6000613654602183613ea2565b915061365f8261488d565b604082019050919050565b6000613677600383613ea2565b9150613682826148dc565b602082019050919050565b60e0820160008201516136a3600085018261371b565b5060208201516136b6602085018261371b565b5060408201516136c9604085018261371b565b5060608201516136dc606085018261371b565b5060808201516136ef608085018261371b565b5060a082015161370260a085018261371b565b5060c082015161371560c0850182613138565b50505050565b61372481614059565b82525050565b61373381614059565b82525050565b61374a61374582614059565b61418c565b82525050565b61375981614063565b82525050565b600061376b828b613272565b9150613777828a613739565b6020820191506137878289613739565b6020820191506137978288613739565b6020820191506137a78287613739565b6020820191506137b78286613739565b6020820191506137c78285613739565b6020820191506137d78284613156565b6014820191508190509998505050505050505050565b60006137f982856132a3565b91506138058284613272565b91508190509392505050565b600061381c826133d1565b915061382882846131e9565b60208201915081905092915050565b600060208201905061384c6000830184613147565b92915050565b600060a0820190506138676000830188613147565b6138746020830187613147565b8181036040830152613886818661316d565b9050818103606083015261389a818561316d565b905081810360808301526138ae8184613200565b90509695505050505050565b600060a0820190506138cf6000830188613147565b6138dc6020830187613147565b6138e9604083018661372a565b6138f6606083018561372a565b81810360808301526139088184613200565b90509695505050505050565b6000602082019050818103600083015261392e818461316d565b905092915050565b60006040820190508181036000830152613950818561316d565b90508181036020830152613964818461316d565b90509392505050565b600060208201905061398260008301846131cb565b92915050565b600060808201905061399d60008301876131da565b6139aa6020830186613750565b6139b760408301856131da565b6139c460608301846131da565b95945050505050565b600060208201905081810360008301526139e78184613239565b905092915050565b60006020820190508181036000830152613a0881613322565b9050919050565b60006020820190508181036000830152613a2881613345565b9050919050565b60006020820190508181036000830152613a4881613368565b9050919050565b60006020820190508181036000830152613a688161338b565b9050919050565b60006020820190508181036000830152613a88816133ae565b9050919050565b60006020820190508181036000830152613aa8816133f4565b9050919050565b60006020820190508181036000830152613ac881613417565b9050919050565b60006020820190508181036000830152613ae88161343a565b9050919050565b60006020820190508181036000830152613b088161345d565b9050919050565b60006020820190508181036000830152613b2881613480565b9050919050565b60006020820190508181036000830152613b48816134a3565b9050919050565b60006020820190508181036000830152613b68816134c6565b9050919050565b60006020820190508181036000830152613b88816134e9565b9050919050565b60006020820190508181036000830152613ba88161350c565b9050919050565b60006020820190508181036000830152613bc88161352f565b9050919050565b60006020820190508181036000830152613be881613552565b9050919050565b60006020820190508181036000830152613c0881613575565b9050919050565b60006020820190508181036000830152613c2881613598565b9050919050565b60006020820190508181036000830152613c48816135bb565b9050919050565b60006020820190508181036000830152613c68816135de565b9050919050565b60006020820190508181036000830152613c8881613601565b9050919050565b60006020820190508181036000830152613ca881613624565b9050919050565b60006020820190508181036000830152613cc881613647565b9050919050565b60006020820190508181036000830152613ce88161366a565b9050919050565b600060e082019050613d04600083018461368d565b92915050565b6000602082019050613d1f600083018461372a565b92915050565b6000604082019050613d3a600083018561372a565b613d47602083018461372a565b9392505050565b6000613d58613d69565b9050613d6482826140e4565b919050565b6000604051905090565b600067ffffffffffffffff821115613d8e57613d8d614281565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613dba57613db9614281565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613de657613de5614281565b5b613def826142eb565b9050602081019050919050565b600067ffffffffffffffff821115613e1757613e16614281565b5b613e20826142eb565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ec982614059565b9150613ed483614059565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f0957613f08614196565b5b828201905092915050565b6000613f1f82614059565b9150613f2a83614059565b925082613f3a57613f396141c5565b5b828204905092915050565b6000613f5082614059565b9150613f5b83614059565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f9457613f93614196565b5b828202905092915050565b6000613faa82614059565b9150613fb583614059565b925082821015613fc857613fc7614196565b5b828203905092915050565b6000613fde82614039565b9050919050565b6000613ff082614039565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561409d578082015181840152602081019050614082565b838111156140ac576000848401525b50505050565b600060028204905060018216806140ca57607f821691505b602082108114156140de576140dd614223565b5b50919050565b6140ed826142eb565b810181811067ffffffffffffffff8211171561410c5761410b614281565b5b80604052505050565b600061412082614059565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561415357614152614196565b5b600182019050919050565b60006141698261417a565b9050919050565b6000819050919050565b6000614185826142fc565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156142cf5760046000803e6142cc600051614309565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b600060443d101561491557614998565b61491d613d69565b60043d036004823e80513d602482011167ffffffffffffffff82111715614945575050614998565b808201805167ffffffffffffffff8111156149635750505050614998565b80602083010160043d038501811115614980575050505050614998565b61498f826020018501866140e4565b82955050505050505b90565b6149a481613fd3565b81146149af57600080fd5b50565b6149bb81613ff7565b81146149c657600080fd5b50565b6149d28161400d565b81146149dd57600080fd5b50565b6149e981614059565b81146149f457600080fd5b5056fea2646970667358221220827d885abee5a15f33289585f9e1db0e2156411fc6402b7a8705aeb0f551601164736f6c63430008070033", + "solcInputHash": "73ba99ade12a3bc48cccd3ddc0c9f9bb", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"DropCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"accountsByToken\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"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\":\"string\",\"name\":\"_uri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_timeStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeEnd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_priceStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_priceEnd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_stepDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amountCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_shareCyber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"createDrop\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"dropMintCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getDrop\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timeStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeEnd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceEnd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stepDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"shareCyber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minted\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getMintPriceForToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"mintPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_timeSpent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_priceStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_priceEnd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_stepDuration\",\"type\":\"uint256\"}],\"name\":\"getPriceFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_uri\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_manager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_trustedForwarder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_opensea\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oncyber\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"minterNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oncyber\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"status\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"tokensByAccount\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"totalHolders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountsByToken(uint256)\":{\"params\":{\"id\":\"token id to query\"},\"returns\":{\"_0\":\"list of holder addresses\"}},\"balanceOf(address,uint256)\":{\"params\":{\"account\":\"address to query\",\"id\":\"token to query\"},\"returns\":{\"_0\":\"token balance\"}},\"balanceOfBatch(address[],uint256[])\":{\"params\":{\"accounts\":\"addresss to query\",\"ids\":\"tokens to query\"},\"returns\":{\"_0\":\"token balances\"}},\"isApprovedForAll(address,address)\":{\"params\":{\"account\":\"address to query for approval granted\",\"operator\":\"address to query for approval received\"},\"returns\":{\"_0\":\"whether operator is approved to spend tokens held by account\"}},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"params\":{\"amounts\":\"list of quantities of tokens to transfer\",\"data\":\"data payload\",\"from\":\"sender of tokens\",\"ids\":\"list of token IDs\",\"to\":\"receiver of tokens\"}},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"params\":{\"amount\":\"quantity of tokens to transfer\",\"data\":\"data payload\",\"from\":\"sender of tokens\",\"id\":\"token ID\",\"to\":\"receiver of tokens\"}},\"setApprovalForAll(address,bool)\":{\"params\":{\"operator\":\"address whose approval status to update\",\"status\":\"whether operator should be considered approved\"}},\"supportsInterface(bytes4)\":{\"params\":{\"interfaceId\":\"interface id\"},\"returns\":{\"_0\":\"bool whether interface is supported\"}},\"tokensByAccount(address)\":{\"params\":{\"account\":\"address to query\"},\"returns\":{\"_0\":\"list of token ids\"}},\"totalHolders(uint256)\":{\"params\":{\"id\":\"token id to query\"},\"returns\":{\"_0\":\"quantity of holders\"}},\"totalSupply(uint256)\":{\"params\":{\"id\":\"token id to query\"},\"returns\":{\"_0\":\"token supply\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accountsByToken(uint256)\":{\"notice\":\"query holders of given token\"},\"balanceOf(address,uint256)\":{\"notice\":\"query the balance of given token held by given address\"},\"balanceOfBatch(address[],uint256[])\":{\"notice\":\"query the balances of given tokens held by given addresses\"},\"isApprovedForAll(address,address)\":{\"notice\":\"query approval status of given operator with respect to given address\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"transfer batch of tokens between given addresses, checking for ERC1155Receiver implementation if applicable\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"notice\":\"transfer tokens between given addresses, checking for ERC1155Receiver implementation if applicable\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"grant approval to or revoke approval from given operator to spend held tokens\"},\"supportsInterface(bytes4)\":{\"notice\":\"query whether contract has registered support for given interface\"},\"tokensByAccount(address)\":{\"notice\":\"query tokens held by given address\"},\"totalHolders(uint256)\":{\"notice\":\"query total number of holders for given token\"},\"totalSupply(uint256)\":{\"notice\":\"query total minted supply of given token\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Diamantaires/DestinationUtility/CyberDestinationUtilityFactoryFacet.sol\":\"CyberDestinationUtilityFactoryFacet\"},\"evmVersion\":\"london\",\"libraries\":{\":__CACHE_BREAKER__\":\"0x00000000d41867734bbee4c6863d9255b2b06ac1\"},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x7736c187e6f1358c1ea9350a2a21aa8528dec1c2f43b374a9067465a3a51f5d3\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.0 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n struct Counter {\\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n // this feature: see https://github.com/ethereum/solidity/issues/4637\\n uint256 _value; // default: 0\\n }\\n\\n function current(Counter storage counter) internal view returns (uint256) {\\n return counter._value;\\n }\\n\\n function increment(Counter storage counter) internal {\\n unchecked {\\n counter._value += 1;\\n }\\n }\\n\\n function decrement(Counter storage counter) internal {\\n uint256 value = counter._value;\\n require(value > 0, \\\"Counter: decrement overflow\\\");\\n unchecked {\\n counter._value = value - 1;\\n }\\n }\\n\\n function reset(Counter storage counter) internal {\\n counter._value = 0;\\n }\\n}\\n\",\"keccak256\":\"0x74f630d2664c1581a1cbd0730d4ba119b3a184ef90c65f3a934be4d16d0e58a1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _HEX_SYMBOLS = \\\"0123456789abcdef\\\";\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n while (value != 0) {\\n digits -= 1;\\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n value /= 10;\\n }\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n if (value == 0) {\\n return \\\"0x00\\\";\\n }\\n uint256 temp = value;\\n uint256 length = 0;\\n while (temp != 0) {\\n length++;\\n temp >>= 8;\\n }\\n return toHexString(value, length);\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _HEX_SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x5fa25f305839292fab713256214f2868e0257d29826b14282bbd7f1e34f5af38\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n } else if (error == RecoverError.InvalidSignatureV) {\\n revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n // Check the signature length\\n // - case 65: r,s,v signature (standard)\\n // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else if (signature.length == 64) {\\n bytes32 r;\\n bytes32 vs;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n assembly {\\n r := mload(add(signature, 0x20))\\n vs := mload(add(signature, 0x40))\\n }\\n return tryRecover(hash, r, vs);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s;\\n uint8 v;\\n assembly {\\n s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\\n v := add(shr(255, vs), 27)\\n }\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n if (v != 27 && v != 28) {\\n return (address(0), RecoverError.InvalidSignatureV);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0x594efd2fa154f4fbe0fa92c2356cb2a9531ef3902e35784c2bc69764d0d8886a\",\"license\":\"MIT\"},\"@solidstate/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { IERC165 } from './IERC165.sol';\\nimport { ERC165Storage } from './ERC165Storage.sol';\\n\\n/**\\n * @title ERC165 implementation\\n */\\nabstract contract ERC165 is IERC165 {\\n using ERC165Storage for ERC165Storage.Layout;\\n\\n /**\\n * @inheritdoc IERC165\\n */\\n function supportsInterface(bytes4 interfaceId)\\n public\\n view\\n override\\n returns (bool)\\n {\\n return ERC165Storage.layout().isSupportedInterface(interfaceId);\\n }\\n}\\n\",\"keccak256\":\"0xc4a0b280ce381af99e8be8d7fb59f3c71690230d12d07c7beffe5594ceac7cf7\",\"license\":\"MIT\"},\"@solidstate/contracts/introspection/ERC165Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nlibrary ERC165Storage {\\n struct Layout {\\n mapping(bytes4 => bool) supportedInterfaces;\\n }\\n\\n bytes32 internal constant STORAGE_SLOT =\\n keccak256('solidstate.contracts.storage.ERC165');\\n\\n function layout() internal pure returns (Layout storage l) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n l.slot := slot\\n }\\n }\\n\\n function isSupportedInterface(Layout storage l, bytes4 interfaceId)\\n internal\\n view\\n returns (bool)\\n {\\n return l.supportedInterfaces[interfaceId];\\n }\\n\\n function setSupportedInterface(\\n Layout storage l,\\n bytes4 interfaceId,\\n bool status\\n ) internal {\\n require(interfaceId != 0xffffffff, 'ERC165: invalid interface id');\\n l.supportedInterfaces[interfaceId] = status;\\n }\\n}\\n\",\"keccak256\":\"0x61f281af116b703f31c0fdd8616cab9c5ad71f7d5d0038b60ec1512587b2f91d\",\"license\":\"MIT\"},\"@solidstate/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC165 interface registration interface\\n * @dev see https://eips.ethereum.org/EIPS/eip-165\\n */\\ninterface IERC165 {\\n /**\\n * @notice query whether contract has registered support for given interface\\n * @param interfaceId interface id\\n * @return bool whether interface is supported\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x19d0bf328e3ea589cd4fa37a487cc33aa7ac293656e11a268f46161470b111c6\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/ERC1155.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { ERC165 } from '../../introspection/ERC165.sol';\\nimport { ERC1155Base, ERC1155BaseInternal } from './base/ERC1155Base.sol';\\nimport { ERC1155Enumerable } from './enumerable/ERC1155Enumerable.sol';\\nimport { ERC1155Metadata } from './metadata/ERC1155Metadata.sol';\\n\\n/**\\n * @title SolidState ERC1155 implementation\\n */\\nabstract contract ERC1155 is\\n ERC1155Base,\\n ERC1155Enumerable,\\n ERC1155Metadata,\\n ERC165\\n{\\n /**\\n * @inheritdoc ERC1155BaseInternal\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) internal virtual override(ERC1155BaseInternal, ERC1155Enumerable) {\\n super._beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n }\\n}\\n\",\"keccak256\":\"0xa71dcd8a1f1a488db7e1cbf073bb0bcd2a5a24af061043f3b9284481d99056d8\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/IERC1155.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { IERC1155Internal } from './IERC1155Internal.sol';\\nimport { IERC165 } from '../../introspection/IERC165.sol';\\n\\n/**\\n * @notice ERC1155 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/1155\\n */\\ninterface IERC1155 is IERC1155Internal, IERC165 {\\n /**\\n * @notice query the balance of given token held by given address\\n * @param account address to query\\n * @param id token to query\\n * @return token balance\\n */\\n function balanceOf(address account, uint256 id)\\n external\\n view\\n returns (uint256);\\n\\n /**\\n * @notice query the balances of given tokens held by given addresses\\n * @param accounts addresss to query\\n * @param ids tokens to query\\n * @return token balances\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)\\n external\\n view\\n returns (uint256[] memory);\\n\\n /**\\n * @notice query approval status of given operator with respect to given address\\n * @param account address to query for approval granted\\n * @param operator address to query for approval received\\n * @return whether operator is approved to spend tokens held by account\\n */\\n function isApprovedForAll(address account, address operator)\\n external\\n view\\n returns (bool);\\n\\n /**\\n * @notice grant approval to or revoke approval from given operator to spend held tokens\\n * @param operator address whose approval status to update\\n * @param status whether operator should be considered approved\\n */\\n function setApprovalForAll(address operator, bool status) external;\\n\\n /**\\n * @notice transfer tokens between given addresses, checking for ERC1155Receiver implementation if applicable\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param id token ID\\n * @param amount quantity of tokens to transfer\\n * @param data data payload\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes calldata data\\n ) external;\\n\\n /**\\n * @notice transfer batch of tokens between given addresses, checking for ERC1155Receiver implementation if applicable\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param ids list of token IDs\\n * @param amounts list of quantities of tokens to transfer\\n * @param data data payload\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] calldata ids,\\n uint256[] calldata amounts,\\n bytes calldata data\\n ) external;\\n}\\n\",\"keccak256\":\"0x8f5d42093f86830f6e7d2a8875eac8c2d7ff064859c13f9ffe237e4ccc2951c4\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/IERC1155Internal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { IERC165 } from '../../introspection/IERC165.sol';\\n\\n/**\\n * @notice Partial ERC1155 interface needed by internal functions\\n */\\ninterface IERC1155Internal {\\n event TransferSingle(\\n address indexed operator,\\n address indexed from,\\n address indexed to,\\n uint256 id,\\n uint256 value\\n );\\n\\n event TransferBatch(\\n address indexed operator,\\n address indexed from,\\n address indexed to,\\n uint256[] ids,\\n uint256[] values\\n );\\n\\n event ApprovalForAll(\\n address indexed account,\\n address indexed operator,\\n bool approved\\n );\\n}\\n\",\"keccak256\":\"0x770e5cbe555d00fb78405e2d8c74ec6cdc9b84dcb5f73f4efa2cdc20cf57e026\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { IERC165 } from '../../introspection/IERC165.sol';\\n\\n/**\\n * @title ERC1155 transfer receiver interface\\n */\\ninterface IERC1155Receiver is IERC165 {\\n /**\\n * @notice validate receipt of ERC1155 transfer\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param id token ID received\\n * @param value quantity of tokens received\\n * @param data data payload\\n * @return function's own selector if transfer is accepted\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n ) external returns (bytes4);\\n\\n /**\\n * @notice validate receipt of ERC1155 batch transfer\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param ids token IDs received\\n * @param values quantities of tokens received\\n * @param data data payload\\n * @return function's own selector if transfer is accepted\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x31fcdbc3c885a95d0449d9b5f20a7ef0cae2fa63bd82195995d05a7eecaa5f74\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/base/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { IERC1155 } from '../IERC1155.sol';\\nimport { IERC1155Receiver } from '../IERC1155Receiver.sol';\\nimport { ERC1155BaseInternal, ERC1155BaseStorage } from './ERC1155BaseInternal.sol';\\n\\n/**\\n * @title Base ERC1155 contract\\n * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license)\\n */\\nabstract contract ERC1155Base is IERC1155, ERC1155BaseInternal {\\n /**\\n * @inheritdoc IERC1155\\n */\\n function balanceOf(address account, uint256 id)\\n public\\n view\\n virtual\\n override\\n returns (uint256)\\n {\\n return _balanceOf(account, id);\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function balanceOfBatch(address[] memory accounts, uint256[] memory ids)\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(\\n accounts.length == ids.length,\\n 'ERC1155: accounts and ids length mismatch'\\n );\\n\\n mapping(uint256 => mapping(address => uint256))\\n storage balances = ERC1155BaseStorage.layout().balances;\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n unchecked {\\n for (uint256 i; i < accounts.length; i++) {\\n require(\\n accounts[i] != address(0),\\n 'ERC1155: batch balance query for the zero address'\\n );\\n batchBalances[i] = balances[ids[i]][accounts[i]];\\n }\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function isApprovedForAll(address account, address operator)\\n public\\n view\\n virtual\\n override\\n returns (bool)\\n {\\n return ERC1155BaseStorage.layout().operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function setApprovalForAll(address operator, bool status)\\n public\\n virtual\\n override\\n {\\n require(\\n msg.sender != operator,\\n 'ERC1155: setting approval status for self'\\n );\\n ERC1155BaseStorage.layout().operatorApprovals[msg.sender][\\n operator\\n ] = status;\\n emit ApprovalForAll(msg.sender, operator, status);\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n ) public virtual override {\\n require(\\n from == msg.sender || isApprovedForAll(from, msg.sender),\\n 'ERC1155: caller is not owner nor approved'\\n );\\n _safeTransfer(msg.sender, from, to, id, amount, data);\\n }\\n\\n /**\\n * @inheritdoc IERC1155\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) public virtual override {\\n require(\\n from == msg.sender || isApprovedForAll(from, msg.sender),\\n 'ERC1155: caller is not owner nor approved'\\n );\\n _safeTransferBatch(msg.sender, from, to, ids, amounts, data);\\n }\\n}\\n\",\"keccak256\":\"0xe2e044ac6fc81e938ae06bea0350352472c8a77ff29ac09263d268c6610f9b00\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/base/ERC1155BaseInternal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { AddressUtils } from '../../../utils/AddressUtils.sol';\\nimport { IERC1155Internal } from '../IERC1155Internal.sol';\\nimport { IERC1155Receiver } from '../IERC1155Receiver.sol';\\nimport { ERC1155BaseStorage } from './ERC1155BaseStorage.sol';\\n\\n/**\\n * @title Base ERC1155 internal functions\\n * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license)\\n */\\nabstract contract ERC1155BaseInternal is IERC1155Internal {\\n using AddressUtils for address;\\n\\n /**\\n * @notice query the balance of given token held by given address\\n * @param account address to query\\n * @param id token to query\\n * @return token balance\\n */\\n function _balanceOf(address account, uint256 id)\\n internal\\n view\\n virtual\\n returns (uint256)\\n {\\n require(\\n account != address(0),\\n 'ERC1155: balance query for the zero address'\\n );\\n return ERC1155BaseStorage.layout().balances[id][account];\\n }\\n\\n /**\\n * @notice mint given quantity of tokens for given address\\n * @dev ERC1155Receiver implementation is not checked\\n * @param account beneficiary of minting\\n * @param id token ID\\n * @param amount quantity of tokens to mint\\n * @param data data payload\\n */\\n function _mint(\\n address account,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n ) internal virtual {\\n require(account != address(0), 'ERC1155: mint to the zero address');\\n\\n _beforeTokenTransfer(\\n msg.sender,\\n address(0),\\n account,\\n _asSingletonArray(id),\\n _asSingletonArray(amount),\\n data\\n );\\n\\n mapping(address => uint256) storage balances = ERC1155BaseStorage\\n .layout()\\n .balances[id];\\n balances[account] += amount;\\n\\n emit TransferSingle(msg.sender, address(0), account, id, amount);\\n }\\n\\n /**\\n * @notice mint given quantity of tokens for given address\\n * @param account beneficiary of minting\\n * @param id token ID\\n * @param amount quantity of tokens to mint\\n * @param data data payload\\n */\\n function _safeMint(\\n address account,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n ) internal virtual {\\n _mint(account, id, amount, data);\\n\\n _doSafeTransferAcceptanceCheck(\\n msg.sender,\\n address(0),\\n account,\\n id,\\n amount,\\n data\\n );\\n }\\n\\n /**\\n * @notice mint batch of tokens for given address\\n * @dev ERC1155Receiver implementation is not checked\\n * @param account beneficiary of minting\\n * @param ids list of token IDs\\n * @param amounts list of quantities of tokens to mint\\n * @param data data payload\\n */\\n function _mintBatch(\\n address account,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) internal virtual {\\n require(account != address(0), 'ERC1155: mint to the zero address');\\n require(\\n ids.length == amounts.length,\\n 'ERC1155: ids and amounts length mismatch'\\n );\\n\\n _beforeTokenTransfer(\\n msg.sender,\\n address(0),\\n account,\\n ids,\\n amounts,\\n data\\n );\\n\\n mapping(uint256 => mapping(address => uint256))\\n storage balances = ERC1155BaseStorage.layout().balances;\\n\\n for (uint256 i; i < ids.length; i++) {\\n balances[ids[i]][account] += amounts[i];\\n }\\n\\n emit TransferBatch(msg.sender, address(0), account, ids, amounts);\\n }\\n\\n /**\\n * @notice mint batch of tokens for given address\\n * @param account beneficiary of minting\\n * @param ids list of token IDs\\n * @param amounts list of quantities of tokens to mint\\n * @param data data payload\\n */\\n function _safeMintBatch(\\n address account,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) internal virtual {\\n _mintBatch(account, ids, amounts, data);\\n\\n _doSafeBatchTransferAcceptanceCheck(\\n msg.sender,\\n address(0),\\n account,\\n ids,\\n amounts,\\n data\\n );\\n }\\n\\n /**\\n * @notice burn given quantity of tokens held by given address\\n * @param account holder of tokens to burn\\n * @param id token ID\\n * @param amount quantity of tokens to burn\\n */\\n function _burn(\\n address account,\\n uint256 id,\\n uint256 amount\\n ) internal virtual {\\n require(account != address(0), 'ERC1155: burn from the zero address');\\n\\n _beforeTokenTransfer(\\n msg.sender,\\n account,\\n address(0),\\n _asSingletonArray(id),\\n _asSingletonArray(amount),\\n ''\\n );\\n\\n mapping(address => uint256) storage balances = ERC1155BaseStorage\\n .layout()\\n .balances[id];\\n\\n unchecked {\\n require(\\n balances[account] >= amount,\\n 'ERC1155: burn amount exceeds balances'\\n );\\n balances[account] -= amount;\\n }\\n\\n emit TransferSingle(msg.sender, account, address(0), id, amount);\\n }\\n\\n /**\\n * @notice burn given batch of tokens held by given address\\n * @param account holder of tokens to burn\\n * @param ids token IDs\\n * @param amounts quantities of tokens to burn\\n */\\n function _burnBatch(\\n address account,\\n uint256[] memory ids,\\n uint256[] memory amounts\\n ) internal virtual {\\n require(account != address(0), 'ERC1155: burn from the zero address');\\n require(\\n ids.length == amounts.length,\\n 'ERC1155: ids and amounts length mismatch'\\n );\\n\\n _beforeTokenTransfer(msg.sender, account, address(0), ids, amounts, '');\\n\\n mapping(uint256 => mapping(address => uint256))\\n storage balances = ERC1155BaseStorage.layout().balances;\\n\\n unchecked {\\n for (uint256 i; i < ids.length; i++) {\\n uint256 id = ids[i];\\n require(\\n balances[id][account] >= amounts[i],\\n 'ERC1155: burn amount exceeds balance'\\n );\\n balances[id][account] -= amounts[i];\\n }\\n }\\n\\n emit TransferBatch(msg.sender, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @notice transfer tokens between given addresses\\n * @dev ERC1155Receiver implementation is not checked\\n * @param operator executor of transfer\\n * @param sender sender of tokens\\n * @param recipient receiver of tokens\\n * @param id token ID\\n * @param amount quantity of tokens to transfer\\n * @param data data payload\\n */\\n function _transfer(\\n address operator,\\n address sender,\\n address recipient,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n ) internal virtual {\\n require(\\n recipient != address(0),\\n 'ERC1155: transfer to the zero address'\\n );\\n\\n _beforeTokenTransfer(\\n operator,\\n sender,\\n recipient,\\n _asSingletonArray(id),\\n _asSingletonArray(amount),\\n data\\n );\\n\\n mapping(uint256 => mapping(address => uint256))\\n storage balances = ERC1155BaseStorage.layout().balances;\\n\\n unchecked {\\n uint256 senderBalance = balances[id][sender];\\n require(\\n senderBalance >= amount,\\n 'ERC1155: insufficient balances for transfer'\\n );\\n balances[id][sender] = senderBalance - amount;\\n }\\n\\n balances[id][recipient] += amount;\\n\\n emit TransferSingle(operator, sender, recipient, id, amount);\\n }\\n\\n /**\\n * @notice transfer tokens between given addresses\\n * @param operator executor of transfer\\n * @param sender sender of tokens\\n * @param recipient receiver of tokens\\n * @param id token ID\\n * @param amount quantity of tokens to transfer\\n * @param data data payload\\n */\\n function _safeTransfer(\\n address operator,\\n address sender,\\n address recipient,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n ) internal virtual {\\n _transfer(operator, sender, recipient, id, amount, data);\\n\\n _doSafeTransferAcceptanceCheck(\\n operator,\\n sender,\\n recipient,\\n id,\\n amount,\\n data\\n );\\n }\\n\\n /**\\n * @notice transfer batch of tokens between given addresses\\n * @dev ERC1155Receiver implementation is not checked\\n * @param operator executor of transfer\\n * @param sender sender of tokens\\n * @param recipient receiver of tokens\\n * @param ids token IDs\\n * @param amounts quantities of tokens to transfer\\n * @param data data payload\\n */\\n function _transferBatch(\\n address operator,\\n address sender,\\n address recipient,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) internal virtual {\\n require(\\n recipient != address(0),\\n 'ERC1155: transfer to the zero address'\\n );\\n require(\\n ids.length == amounts.length,\\n 'ERC1155: ids and amounts length mismatch'\\n );\\n\\n _beforeTokenTransfer(operator, sender, recipient, ids, amounts, data);\\n\\n mapping(uint256 => mapping(address => uint256))\\n storage balances = ERC1155BaseStorage.layout().balances;\\n\\n for (uint256 i; i < ids.length; i++) {\\n uint256 token = ids[i];\\n uint256 amount = amounts[i];\\n\\n unchecked {\\n uint256 senderBalance = balances[token][sender];\\n require(\\n senderBalance >= amount,\\n 'ERC1155: insufficient balances for transfer'\\n );\\n balances[token][sender] = senderBalance - amount;\\n }\\n\\n balances[token][recipient] += amount;\\n }\\n\\n emit TransferBatch(operator, sender, recipient, ids, amounts);\\n }\\n\\n /**\\n * @notice transfer batch of tokens between given addresses\\n * @param operator executor of transfer\\n * @param sender sender of tokens\\n * @param recipient receiver of tokens\\n * @param ids token IDs\\n * @param amounts quantities of tokens to transfer\\n * @param data data payload\\n */\\n function _safeTransferBatch(\\n address operator,\\n address sender,\\n address recipient,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) internal virtual {\\n _transferBatch(operator, sender, recipient, ids, amounts, data);\\n\\n _doSafeBatchTransferAcceptanceCheck(\\n operator,\\n sender,\\n recipient,\\n ids,\\n amounts,\\n data\\n );\\n }\\n\\n /**\\n * @notice wrap given element in array of length 1\\n * @param element element to wrap\\n * @return singleton array\\n */\\n function _asSingletonArray(uint256 element)\\n private\\n pure\\n returns (uint256[] memory)\\n {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n return array;\\n }\\n\\n /**\\n * @notice revert if applicable transfer recipient is not valid ERC1155Receiver\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param id token ID\\n * @param amount quantity of tokens to transfer\\n * @param data data payload\\n */\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n ) private {\\n if (to.isContract()) {\\n try\\n IERC1155Receiver(to).onERC1155Received(\\n operator,\\n from,\\n id,\\n amount,\\n data\\n )\\n returns (bytes4 response) {\\n require(\\n response == IERC1155Receiver.onERC1155Received.selector,\\n 'ERC1155: ERC1155Receiver rejected tokens'\\n );\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert('ERC1155: transfer to non ERC1155Receiver implementer');\\n }\\n }\\n }\\n\\n /**\\n * @notice revert if applicable transfer recipient is not valid ERC1155Receiver\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param ids token IDs\\n * @param amounts quantities of tokens to transfer\\n * @param data data payload\\n */\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) private {\\n if (to.isContract()) {\\n try\\n IERC1155Receiver(to).onERC1155BatchReceived(\\n operator,\\n from,\\n ids,\\n amounts,\\n data\\n )\\n returns (bytes4 response) {\\n require(\\n response ==\\n IERC1155Receiver.onERC1155BatchReceived.selector,\\n 'ERC1155: ERC1155Receiver rejected tokens'\\n );\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert('ERC1155: transfer to non ERC1155Receiver implementer');\\n }\\n }\\n }\\n\\n /**\\n * @notice ERC1155 hook, called before all transfers including mint and burn\\n * @dev function should be overridden and new implementation must call super\\n * @dev called for both single and batch transfers\\n * @param operator executor of transfer\\n * @param from sender of tokens\\n * @param to receiver of tokens\\n * @param ids token IDs\\n * @param amounts quantities of tokens to transfer\\n * @param data data payload\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) internal virtual {}\\n}\\n\",\"keccak256\":\"0x16e4fd77dcb8f4cd933b209137560afb59b4e7bec7b64ee39cc24f1594b356a9\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/base/ERC1155BaseStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nlibrary ERC1155BaseStorage {\\n struct Layout {\\n mapping(uint256 => mapping(address => uint256)) balances;\\n mapping(address => mapping(address => bool)) operatorApprovals;\\n }\\n\\n bytes32 internal constant STORAGE_SLOT =\\n keccak256('solidstate.contracts.storage.ERC1155Base');\\n\\n function layout() internal pure returns (Layout storage l) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n l.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x8db92a910e779b41952ea8c28ee143ccdf6d4bc43b0ca984ceda9ef67956493d\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/enumerable/ERC1155Enumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { EnumerableSet } from '../../../utils/EnumerableSet.sol';\\nimport { ERC1155Base, ERC1155BaseInternal } from '../base/ERC1155Base.sol';\\nimport { IERC1155Enumerable } from './IERC1155Enumerable.sol';\\nimport { ERC1155EnumerableInternal, ERC1155EnumerableStorage } from './ERC1155EnumerableInternal.sol';\\n\\n/**\\n * @title ERC1155 implementation including enumerable and aggregate functions\\n */\\nabstract contract ERC1155Enumerable is\\n IERC1155Enumerable,\\n ERC1155Base,\\n ERC1155EnumerableInternal\\n{\\n using EnumerableSet for EnumerableSet.AddressSet;\\n using EnumerableSet for EnumerableSet.UintSet;\\n\\n /**\\n * @inheritdoc IERC1155Enumerable\\n */\\n function totalSupply(uint256 id)\\n public\\n view\\n virtual\\n override\\n returns (uint256)\\n {\\n return ERC1155EnumerableStorage.layout().totalSupply[id];\\n }\\n\\n /**\\n * @inheritdoc IERC1155Enumerable\\n */\\n function totalHolders(uint256 id)\\n public\\n view\\n virtual\\n override\\n returns (uint256)\\n {\\n return ERC1155EnumerableStorage.layout().accountsByToken[id].length();\\n }\\n\\n /**\\n * @inheritdoc IERC1155Enumerable\\n */\\n function accountsByToken(uint256 id)\\n public\\n view\\n virtual\\n override\\n returns (address[] memory)\\n {\\n EnumerableSet.AddressSet storage accounts = ERC1155EnumerableStorage\\n .layout()\\n .accountsByToken[id];\\n\\n address[] memory addresses = new address[](accounts.length());\\n\\n for (uint256 i; i < accounts.length(); i++) {\\n addresses[i] = accounts.at(i);\\n }\\n\\n return addresses;\\n }\\n\\n /**\\n * @inheritdoc IERC1155Enumerable\\n */\\n function tokensByAccount(address account)\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n EnumerableSet.UintSet storage tokens = ERC1155EnumerableStorage\\n .layout()\\n .tokensByAccount[account];\\n\\n uint256[] memory ids = new uint256[](tokens.length());\\n\\n for (uint256 i; i < tokens.length(); i++) {\\n ids[i] = tokens.at(i);\\n }\\n\\n return ids;\\n }\\n\\n /**\\n * @notice ERC1155 hook: update aggregate values\\n * @inheritdoc ERC1155EnumerableInternal\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n override(ERC1155BaseInternal, ERC1155EnumerableInternal)\\n {\\n super._beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n }\\n}\\n\",\"keccak256\":\"0xcb9cfd2b1663c96f6eada653fb403b27362a8fe23e5f8eaf4c8ffd6c9e4a446e\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/enumerable/ERC1155EnumerableInternal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { EnumerableSet } from '../../../utils/EnumerableSet.sol';\\nimport { ERC1155BaseInternal, ERC1155BaseStorage } from '../base/ERC1155BaseInternal.sol';\\nimport { ERC1155EnumerableStorage } from './ERC1155EnumerableStorage.sol';\\n\\n/**\\n * @title ERC1155Enumerable internal functions\\n */\\nabstract contract ERC1155EnumerableInternal is ERC1155BaseInternal {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n using EnumerableSet for EnumerableSet.UintSet;\\n\\n /**\\n * @notice ERC1155 hook: update aggregate values\\n * @inheritdoc ERC1155BaseInternal\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n ) internal virtual override {\\n super._beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n if (from != to) {\\n ERC1155EnumerableStorage.Layout storage l = ERC1155EnumerableStorage\\n .layout();\\n mapping(uint256 => EnumerableSet.AddressSet)\\n storage tokenAccounts = l.accountsByToken;\\n EnumerableSet.UintSet storage fromTokens = l.tokensByAccount[from];\\n EnumerableSet.UintSet storage toTokens = l.tokensByAccount[to];\\n\\n for (uint256 i; i < ids.length; i++) {\\n uint256 amount = amounts[i];\\n\\n if (amount > 0) {\\n uint256 id = ids[i];\\n\\n if (from == address(0)) {\\n l.totalSupply[id] += amount;\\n } else if (_balanceOf(from, id) == amount) {\\n tokenAccounts[id].remove(from);\\n fromTokens.remove(id);\\n }\\n\\n if (to == address(0)) {\\n l.totalSupply[id] -= amount;\\n } else if (_balanceOf(to, id) == 0) {\\n tokenAccounts[id].add(to);\\n toTokens.add(id);\\n }\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2ff538c74c04001dadf6fe1b4d8d1f028d09f75edb52b1f21dd0c2aff688ba45\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/enumerable/ERC1155EnumerableStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { EnumerableSet } from '../../../utils/EnumerableSet.sol';\\n\\nlibrary ERC1155EnumerableStorage {\\n struct Layout {\\n mapping(uint256 => uint256) totalSupply;\\n mapping(uint256 => EnumerableSet.AddressSet) accountsByToken;\\n mapping(address => EnumerableSet.UintSet) tokensByAccount;\\n }\\n\\n bytes32 internal constant STORAGE_SLOT =\\n keccak256('solidstate.contracts.storage.ERC1155Enumerable');\\n\\n function layout() internal pure returns (Layout storage l) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n l.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x33c415a72189dd74fcccf1a3737ed6a6991edb4ec410952adef1410a22bce57a\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/enumerable/IERC1155Enumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC1155 enumerable and aggregate function interface\\n */\\ninterface IERC1155Enumerable {\\n /**\\n * @notice query total minted supply of given token\\n * @param id token id to query\\n * @return token supply\\n */\\n function totalSupply(uint256 id) external view returns (uint256);\\n\\n /**\\n * @notice query total number of holders for given token\\n * @param id token id to query\\n * @return quantity of holders\\n */\\n function totalHolders(uint256 id) external view returns (uint256);\\n\\n /**\\n * @notice query holders of given token\\n * @param id token id to query\\n * @return list of holder addresses\\n */\\n function accountsByToken(uint256 id)\\n external\\n view\\n returns (address[] memory);\\n\\n /**\\n * @notice query tokens held by given address\\n * @param account address to query\\n * @return list of token ids\\n */\\n function tokensByAccount(address account)\\n external\\n view\\n returns (uint256[] memory);\\n}\\n\",\"keccak256\":\"0xbef598a8755a36981932f7cf4ada1d25890971ab7144a117c0ed88cab0511e04\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/metadata/ERC1155Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { UintUtils } from '../../../utils/UintUtils.sol';\\nimport { IERC1155Metadata } from './IERC1155Metadata.sol';\\nimport { ERC1155MetadataInternal } from './ERC1155MetadataInternal.sol';\\nimport { ERC1155MetadataStorage } from './ERC1155MetadataStorage.sol';\\n\\n/**\\n * @notice ERC1155 metadata extensions\\n */\\nabstract contract ERC1155Metadata is IERC1155Metadata, ERC1155MetadataInternal {\\n using UintUtils for uint256;\\n\\n /**\\n * @notice inheritdoc IERC1155Metadata\\n */\\n function uri(uint256 tokenId)\\n public\\n view\\n virtual\\n override\\n returns (string memory)\\n {\\n ERC1155MetadataStorage.Layout storage l = ERC1155MetadataStorage\\n .layout();\\n\\n string memory tokenIdURI = l.tokenURIs[tokenId];\\n string memory baseURI = l.baseURI;\\n\\n if (bytes(baseURI).length == 0) {\\n return tokenIdURI;\\n } else if (bytes(tokenIdURI).length > 0) {\\n return string(abi.encodePacked(baseURI, tokenIdURI));\\n } else {\\n return string(abi.encodePacked(baseURI, tokenId.toString()));\\n }\\n }\\n}\\n\",\"keccak256\":\"0x6322c9474aa916850b855eb9bce0e56e85705740e78b9e9028fccca907d235bb\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/metadata/ERC1155MetadataInternal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { IERC1155MetadataInternal } from './IERC1155MetadataInternal.sol';\\nimport { ERC1155MetadataStorage } from './ERC1155MetadataStorage.sol';\\n\\n/**\\n * @notice ERC1155Metadata internal functions\\n */\\nabstract contract ERC1155MetadataInternal is IERC1155MetadataInternal {\\n /**\\n * @notice set base metadata URI\\n * @dev base URI is a non-standard feature adapted from the ERC721 specification\\n * @param baseURI base URI\\n */\\n function _setBaseURI(string memory baseURI) internal {\\n ERC1155MetadataStorage.layout().baseURI = baseURI;\\n }\\n\\n /**\\n * @notice set per-token metadata URI\\n * @param tokenId token whose metadata URI to set\\n * @param tokenURI per-token URI\\n */\\n function _setTokenURI(uint256 tokenId, string memory tokenURI) internal {\\n ERC1155MetadataStorage.layout().tokenURIs[tokenId] = tokenURI;\\n emit URI(tokenURI, tokenId);\\n }\\n}\\n\",\"keccak256\":\"0x922b91abc8972541855e56fd93468ee9f0178a68551c6b4ece6df639accf6d68\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/metadata/ERC1155MetadataStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @notice ERC1155 metadata extensions\\n */\\nlibrary ERC1155MetadataStorage {\\n bytes32 internal constant STORAGE_SLOT =\\n keccak256('solidstate.contracts.storage.ERC1155Metadata');\\n\\n struct Layout {\\n string baseURI;\\n mapping(uint256 => string) tokenURIs;\\n }\\n\\n function layout() internal pure returns (Layout storage l) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n l.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbb01fdd26dbaf6423ff6b208fd58cfefd84dbaf9a0bebcd64f3ff7467e691c6a\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/metadata/IERC1155Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC1155Metadata interface\\n */\\ninterface IERC1155Metadata {\\n /**\\n * @notice get generated URI for given token\\n * @return token URI\\n */\\n function uri(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xf0fcc6093a6eb3c0254814f365cc11cb5ec8e7b66493d52a02d9892de2fc198c\",\"license\":\"MIT\"},\"@solidstate/contracts/token/ERC1155/metadata/IERC1155MetadataInternal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Partial ERC1155Metadata interface needed by internal functions\\n */\\ninterface IERC1155MetadataInternal {\\n event URI(string value, uint256 indexed tokenId);\\n}\\n\",\"keccak256\":\"0xe379314dbf1cfb48fc693a904e845a56d88056376b571a52f5a54a14a390c475\",\"license\":\"MIT\"},\"@solidstate/contracts/utils/AddressUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nlibrary AddressUtils {\\n function toString(address account) internal pure returns (string memory) {\\n bytes32 value = bytes32(uint256(uint160(account)));\\n bytes memory alphabet = '0123456789abcdef';\\n bytes memory chars = new bytes(42);\\n\\n chars[0] = '0';\\n chars[1] = 'x';\\n\\n for (uint256 i = 0; i < 20; i++) {\\n chars[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];\\n chars[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];\\n }\\n\\n return string(chars);\\n }\\n\\n function isContract(address account) internal view returns (bool) {\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n function sendValue(address payable account, uint256 amount) internal {\\n (bool success, ) = account.call{ value: amount }('');\\n require(success, 'AddressUtils: failed to send value');\\n }\\n\\n function functionCall(address target, bytes memory data)\\n internal\\n returns (bytes memory)\\n {\\n return\\n functionCall(target, data, 'AddressUtils: failed low-level call');\\n }\\n\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory error\\n ) internal returns (bytes memory) {\\n return _functionCallWithValue(target, data, 0, error);\\n }\\n\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return\\n functionCallWithValue(\\n target,\\n data,\\n value,\\n 'AddressUtils: failed low-level call with value'\\n );\\n }\\n\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory error\\n ) internal returns (bytes memory) {\\n require(\\n address(this).balance >= value,\\n 'AddressUtils: insufficient balance for call'\\n );\\n return _functionCallWithValue(target, data, value, error);\\n }\\n\\n function _functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory error\\n ) private returns (bytes memory) {\\n require(\\n isContract(target),\\n 'AddressUtils: function call to non-contract'\\n );\\n\\n (bool success, bytes memory returnData) = target.call{ value: value }(\\n data\\n );\\n\\n if (success) {\\n return returnData;\\n } else if (returnData.length > 0) {\\n assembly {\\n let returnData_size := mload(returnData)\\n revert(add(32, returnData), returnData_size)\\n }\\n } else {\\n revert(error);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x427b64d138edb39914556505367376c7d5ad00ecca42db79dca8276404393e0b\",\"license\":\"MIT\"},\"@solidstate/contracts/utils/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Set implementation with enumeration functions\\n * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts (MIT license)\\n */\\nlibrary EnumerableSet {\\n struct Set {\\n bytes32[] _values;\\n // 1-indexed to allow 0 to signify nonexistence\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n function at(Bytes32Set storage set, uint256 index)\\n internal\\n view\\n returns (bytes32)\\n {\\n return _at(set._inner, index);\\n }\\n\\n function at(AddressSet storage set, uint256 index)\\n internal\\n view\\n returns (address)\\n {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n function at(UintSet storage set, uint256 index)\\n internal\\n view\\n returns (uint256)\\n {\\n return uint256(_at(set._inner, index));\\n }\\n\\n function contains(Bytes32Set storage set, bytes32 value)\\n internal\\n view\\n returns (bool)\\n {\\n return _contains(set._inner, value);\\n }\\n\\n function contains(AddressSet storage set, address value)\\n internal\\n view\\n returns (bool)\\n {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n function contains(UintSet storage set, uint256 value)\\n internal\\n view\\n returns (bool)\\n {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n function indexOf(Bytes32Set storage set, bytes32 value)\\n internal\\n view\\n returns (uint256)\\n {\\n return _indexOf(set._inner, value);\\n }\\n\\n function indexOf(AddressSet storage set, address value)\\n internal\\n view\\n returns (uint256)\\n {\\n return _indexOf(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n function indexOf(UintSet storage set, uint256 value)\\n internal\\n view\\n returns (uint256)\\n {\\n return _indexOf(set._inner, bytes32(value));\\n }\\n\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n function add(Bytes32Set storage set, bytes32 value)\\n internal\\n returns (bool)\\n {\\n return _add(set._inner, value);\\n }\\n\\n function add(AddressSet storage set, address value)\\n internal\\n returns (bool)\\n {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n function remove(Bytes32Set storage set, bytes32 value)\\n internal\\n returns (bool)\\n {\\n return _remove(set._inner, value);\\n }\\n\\n function remove(AddressSet storage set, address value)\\n internal\\n returns (bool)\\n {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n function remove(UintSet storage set, uint256 value)\\n internal\\n returns (bool)\\n {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n function _at(Set storage set, uint256 index)\\n private\\n view\\n returns (bytes32)\\n {\\n require(\\n set._values.length > index,\\n 'EnumerableSet: index out of bounds'\\n );\\n return set._values[index];\\n }\\n\\n function _contains(Set storage set, bytes32 value)\\n private\\n view\\n returns (bool)\\n {\\n return set._indexes[value] != 0;\\n }\\n\\n function _indexOf(Set storage set, bytes32 value)\\n private\\n view\\n returns (uint256)\\n {\\n unchecked {\\n return set._indexes[value] - 1;\\n }\\n }\\n\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n uint256 index = valueIndex - 1;\\n bytes32 last = set._values[set._values.length - 1];\\n\\n // move last value to now-vacant index\\n\\n set._values[index] = last;\\n set._indexes[last] = index + 1;\\n\\n // clear last index\\n\\n set._values.pop();\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x42e1b641451347b1f3b7dc523fbea5c50e99793f56e3d7b11561fb56f00bc432\",\"license\":\"MIT\"},\"@solidstate/contracts/utils/UintUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nlibrary UintUtils {\\n function toString(uint256 value) internal pure returns (string memory) {\\n if (value == 0) {\\n return '0';\\n }\\n\\n uint256 temp = value;\\n uint256 digits;\\n\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n\\n bytes memory buffer = new bytes(digits);\\n\\n while (value != 0) {\\n digits -= 1;\\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n value /= 10;\\n }\\n\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x58c2a621bfa49d032bee277f6f1803b95567cb42178e33d3c0e0a04066991b62\",\"license\":\"MIT\"},\"contracts/BaseRelayRecipient/BaseRelayRecipient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.10;\\n\\nimport '@openzeppelin/contracts/utils/Context.sol';\\nimport './BaseRelayRecipientStorage.sol';\\n\\n/**\\n * A base contract to be inherited by any contract that want to receive relayed transactions\\n * A subclass must use \\\"_msgSender()\\\" instead of \\\"msg.sender\\\"\\n */\\n\\nabstract contract BaseRelayRecipient is Context {\\n /*\\n * require a function to be called through GSN only\\n */\\n // modifier trustedForwarderOnly() {\\n // require(msg.sender == address(s.trustedForwarder), \\\"Function can only be called through the trusted Forwarder\\\");\\n // _;\\n // }\\n\\n function isTrustedForwarder(address forwarder) public view returns (bool) {\\n return forwarder == BaseRelayRecipientStorage.layout().trustedForwarder;\\n }\\n\\n /**\\n * return the sender of this call.\\n * if the call came through our trusted forwarder, return the original sender.\\n * otherwise, return `msg.sender`.\\n * should be used in the contract anywhere instead of msg.sender\\n */\\n function _msgSender() internal view virtual override returns (address ret) {\\n if (msg.data.length >= 24 && isTrustedForwarder(msg.sender)) {\\n // At this point we know that the sender is a trusted forwarder,\\n // so we trust that the last bytes of msg.data are the verified sender address.\\n // extract sender address from the end of msg.data\\n assembly {\\n ret := shr(96, calldataload(sub(calldatasize(), 20)))\\n }\\n } else {\\n return msg.sender;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0824ec3b425fb86a5c95a02831e59d1b7e48087f877dfc18d0cddcd8304b6356\",\"license\":\"MIT\"},\"contracts/BaseRelayRecipient/BaseRelayRecipientStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.10;\\n\\nlibrary BaseRelayRecipientStorage {\\n bytes32 internal constant STORAGE_SLOT =\\n keccak256('diamond.storage.BaseRelayRecipientStorage');\\n\\n struct Layout {\\n /*\\n * Forwarder singleton we accept calls from\\n */\\n address trustedForwarder;\\n }\\n\\n function layout() internal pure returns (Layout storage lay) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n lay.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x99036b699b65aaf1cbff71d9d0acc9e91c472befa241dd06cec6ee1f494b3e8a\",\"license\":\"MIT\"},\"contracts/CyberDropBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.10;\\n\\n//\\nimport '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';\\nimport '@openzeppelin/contracts/utils/Counters.sol';\\n\\nimport './libraries/LibAppStorage.sol';\\nimport './libraries/LibDropStorage.sol';\\nimport './CyberTokenBase.sol';\\n\\ncontract CyberDropBase is CyberTokenBase {\\n using ECDSA for bytes32;\\n using Counters for Counters.Counter;\\n\\n event DropCreated(address indexed account, uint256 indexed tokenId);\\n\\n function dropMintCounter(uint256 _tokenId, address _minter)\\n public\\n view\\n returns (uint256)\\n {\\n LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId];\\n require(drop.priceStart != 0, 'DNE');\\n return drop.mintCounter[_minter].current();\\n }\\n\\n function getDrop(uint256 _tokenId)\\n public\\n view\\n returns (\\n uint256 timeStart,\\n uint256 timeEnd,\\n uint256 priceStart,\\n uint256 priceEnd,\\n uint256 stepDuration,\\n uint256 amountCap,\\n uint256 shareCyber,\\n address creator,\\n uint256 minted\\n )\\n {\\n LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId];\\n require(drop.priceStart != 0, 'DNE');\\n\\n return (\\n drop.timeStart,\\n drop.timeEnd,\\n drop.priceStart,\\n drop.priceEnd,\\n drop.stepDuration,\\n drop.amountCap,\\n drop.shareCyber,\\n drop.creator,\\n drop.minted.current()\\n );\\n }\\n\\n function createDrop(\\n string memory _uri,\\n uint256 _timeStart,\\n uint256 _timeEnd,\\n uint256 _priceStart,\\n uint256 _priceEnd,\\n uint256 _stepDuration,\\n uint256 _amountCap,\\n uint256 _shareCyber,\\n bytes memory _signature\\n ) public returns (uint256 tokenId) {\\n require(_timeEnd - _timeStart >= _stepDuration && _stepDuration > 0, 'IT');\\n require(_priceStart >= _priceEnd && _priceStart > 0, 'IP');\\n require(_shareCyber <= 100, 'ISO');\\n\\n address sender = _msgSender();\\n uint256 nonce = minterNonce(sender);\\n bytes memory _message = abi.encodePacked(\\n _uri,\\n _timeStart,\\n _timeEnd,\\n _priceStart,\\n _priceEnd,\\n _stepDuration,\\n _amountCap,\\n _shareCyber,\\n sender,\\n nonce\\n );\\n address recoveredAddress = keccak256(_message)\\n .toEthSignedMessageHash()\\n .recover(_signature);\\n require(recoveredAddress == LibAppStorage.layout().manager, 'NM');\\n tokenId = LibAppStorage.layout().totalSupply.current();\\n\\n // Effects\\n setTokenURI(tokenId, _uri);\\n LibAppStorage.layout().totalSupply.increment();\\n LibAppStorage.layout().minterNonce[sender].increment();\\n\\n LibDropStorage.layout().drops[tokenId].timeStart = _timeStart;\\n LibDropStorage.layout().drops[tokenId].timeEnd = _timeEnd;\\n LibDropStorage.layout().drops[tokenId].priceStart = _priceStart;\\n LibDropStorage.layout().drops[tokenId].priceEnd = _priceEnd;\\n LibDropStorage.layout().drops[tokenId].stepDuration = _stepDuration;\\n LibDropStorage.layout().drops[tokenId].amountCap = _amountCap;\\n LibDropStorage.layout().drops[tokenId].shareCyber = _shareCyber;\\n LibDropStorage.layout().drops[tokenId].creator = payable(sender);\\n\\n // Mint for creator\\n LibDropStorage.layout().drops[tokenId].minted.increment();\\n LibDropStorage.layout().drops[tokenId].mintCounter[sender].increment();\\n _safeMint(sender, tokenId, 1, '');\\n\\n emit DropCreated(sender, tokenId);\\n emit Minted(sender, tokenId, 1);\\n }\\n\\n function mint(uint256 _tokenId, bytes memory _signature)\\n public\\n payable\\n returns (bool success)\\n {\\n address sender = _msgSender();\\n LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId];\\n\\n if (drop.amountCap != 0) {\\n require(drop.minted.current() < drop.amountCap, 'CR');\\n }\\n\\n require(\\n block.timestamp > drop.timeStart && block.timestamp <= drop.timeEnd,\\n 'OOT'\\n );\\n uint256 timeSpent = block.timestamp - drop.timeStart;\\n uint256 duration = drop.timeEnd - drop.timeStart;\\n uint256 price = getPriceFor(\\n timeSpent,\\n duration,\\n drop.priceStart,\\n drop.priceEnd,\\n drop.stepDuration\\n );\\n require(msg.value >= price, 'IA');\\n uint256 amountOnCyber = (msg.value * drop.shareCyber) / 100;\\n uint256 amountCreator = msg.value - amountOnCyber;\\n\\n uint256 senderDropNonce = drop.mintCounter[sender].current();\\n bytes memory _message = abi.encodePacked(_tokenId, sender, senderDropNonce);\\n address recoveredAddress = keccak256(_message)\\n .toEthSignedMessageHash()\\n .recover(_signature);\\n require(recoveredAddress == LibAppStorage.layout().manager, 'NM');\\n\\n // Effects\\n drop.minted.increment();\\n drop.mintCounter[sender].increment();\\n _safeMint(sender, _tokenId, 1, '');\\n drop.creator.transfer(amountCreator);\\n payable(LibAppStorage.layout().oncyber).transfer(amountOnCyber);\\n\\n emit Minted(sender, _tokenId, 1);\\n\\n return true;\\n }\\n\\n function getMintPriceForToken(uint256 _tokenId)\\n public\\n view\\n returns (uint256 mintPrice)\\n {\\n LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId];\\n require(drop.priceStart != 0, 'DNE');\\n\\n if (drop.amountCap != 0) {\\n require(drop.minted.current() < drop.amountCap, 'CR');\\n }\\n\\n require(\\n block.timestamp > drop.timeStart && block.timestamp <= drop.timeEnd,\\n 'OOT'\\n );\\n uint256 timeSpent = block.timestamp - drop.timeStart;\\n uint256 duration = drop.timeEnd - drop.timeStart;\\n\\n return\\n getPriceFor(\\n timeSpent,\\n duration,\\n drop.priceStart,\\n drop.priceEnd,\\n drop.stepDuration\\n );\\n }\\n\\n function getPriceFor(\\n uint256 _timeSpent,\\n uint256 _duration,\\n uint256 _priceStart,\\n uint256 _priceEnd,\\n uint256 _stepDuration\\n ) public pure returns (uint256 price) {\\n // https://www.desmos.com/calculator/oajpdvew5q\\n // f\\\\left(x\\\\right)=\\\\frac{s\\\\ \\\\cdot d\\\\ +\\\\ \\\\operatorname{mod}\\\\left(x,\\\\ g\\\\right)\\\\ \\\\cdot\\\\ \\\\left(s\\\\ -\\\\ l\\\\right)\\\\ -\\\\ x\\\\ \\\\cdot\\\\ \\\\left(s\\\\ -\\\\ l\\\\right)\\\\ \\\\ }{d}\\n // (s * d + (x % g) * (s - l) - x * (s - l) / d\\n return\\n (_duration *\\n _priceStart +\\n (_timeSpent % _stepDuration) *\\n (_priceStart - _priceEnd) -\\n _timeSpent *\\n (_priceStart - _priceEnd)) / _duration;\\n }\\n}\\n\",\"keccak256\":\"0x20536002026faaedcbbcd79eee198740f79d0ca526a3e9536e2ea9791f7ecce5\",\"license\":\"MIT\"},\"contracts/CyberTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.10;\\n\\n//\\nimport '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';\\nimport '@openzeppelin/contracts/utils/Counters.sol';\\nimport '@solidstate/contracts/token/ERC1155/IERC1155.sol';\\nimport './BaseRelayRecipient/BaseRelayRecipient.sol';\\nimport './BaseRelayRecipient/BaseRelayRecipientStorage.sol';\\nimport './Diamond/LibDiamond.sol';\\nimport './ERC1155URI/ERC1155URI.sol';\\n\\nimport './libraries/LibAppStorage.sol';\\n\\ncontract CyberTokenBase is BaseRelayRecipient, ERC1155URI {\\n using ECDSA for bytes32;\\n using Counters for Counters.Counter;\\n\\n event Minted(\\n address indexed account,\\n uint256 indexed tokenId,\\n uint256 indexed amount\\n );\\n\\n function initialize(\\n string memory _uri,\\n address _manager,\\n address _trustedForwarder,\\n address _opensea,\\n address _oncyber\\n ) public virtual {\\n require(LibDiamond.diamondStorage().contractOwner == msg.sender, 'NO');\\n\\n BaseRelayRecipientStorage.layout().trustedForwarder = _trustedForwarder;\\n LibDiamond.diamondStorage().supportedInterfaces[\\n type(IERC1155).interfaceId\\n ] = true;\\n setURI(_uri);\\n LibAppStorage.layout().manager = _manager;\\n LibAppStorage.layout().opensea = _opensea;\\n LibAppStorage.layout().oncyber = _oncyber;\\n }\\n\\n function totalSupply() public view returns (uint256) {\\n return LibAppStorage.layout().totalSupply.current();\\n }\\n\\n function manager() public view returns (address) {\\n return LibAppStorage.layout().manager;\\n }\\n\\n function oncyber() public view returns (address) {\\n return LibAppStorage.layout().oncyber;\\n }\\n\\n function minterNonce(address _minter) public view returns (uint256) {\\n return LibAppStorage.layout().minterNonce[_minter].current();\\n }\\n}\\n\",\"keccak256\":\"0x746a9153342e62a00612cd9936bf900a5635d55e1b0d7210291f3a878d1c658d\",\"license\":\"MIT\"},\"contracts/Diamantaires/DestinationUtility/CyberDestinationUtilityFactoryFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.10;\\n\\n//\\nimport '../../CyberDropBase.sol';\\n\\ncontract CyberDestinationUtilityFactoryFacet is CyberDropBase {}\\n\",\"keccak256\":\"0x275fdba1290e96d8de31a71b86225ab18b26c897f2f7ba9fd7cd4db9b26125d1\",\"license\":\"MIT\"},\"contracts/Diamond/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\npragma experimental ABIEncoderV2;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nlibrary LibDiamond {\\n bytes32 public constant DIAMOND_STORAGE_POSITION =\\n keccak256('diamond.standard.diamond.storage');\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint16 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n}\\n\",\"keccak256\":\"0x781cc8c5b1178471e307e8457f38b5b07926573a0c97c2debf4e567bd99e8981\",\"license\":\"MIT\"},\"contracts/ERC1155URI/ERC1155URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.10;\\n\\nimport '@solidstate/contracts/token/ERC1155/ERC1155.sol';\\nimport './ERC1155URIStorage.sol';\\n\\nabstract contract ERC1155URI is ERC1155 {\\n function uri(uint256 _tokenId)\\n public\\n view\\n virtual\\n override\\n returns (string memory)\\n {\\n string memory tokenURI = ERC1155URIStorage.layout().tokenURIs[_tokenId];\\n require(bytes(tokenURI).length != 0, 'ERC1155URI: tokenId not exist');\\n return string(abi.encodePacked(ERC1155URIStorage.layout().uri, tokenURI));\\n }\\n\\n function setURI(string memory newUri) internal virtual {\\n ERC1155URIStorage.layout().uri = newUri;\\n }\\n\\n function setTokenURI(uint256 tokenId, string memory _tokenURI)\\n internal\\n virtual\\n {\\n ERC1155URIStorage.layout().tokenURIs[tokenId] = _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0xe1092bd7c2f8977fc3d727ffe5f5c96d54ee4601c879fd2050253b4fef40fd9b\",\"license\":\"MIT\"},\"contracts/ERC1155URI/ERC1155URIStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.10;\\n\\nlibrary ERC1155URIStorage {\\n bytes32 internal constant STORAGESLOT =\\n keccak256('diamond.storage.ERC1155URI');\\n\\n struct Layout {\\n mapping(uint256 => string) tokenURIs;\\n string uri;\\n }\\n\\n function layout() internal pure returns (Layout storage lay) {\\n bytes32 slot = STORAGESLOT;\\n assembly {\\n lay.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x74e8dff46eb3fe537622d3f1a3b5fbcd10abdedbe69243ecb072daf49e5f82c9\",\"license\":\"MIT\"},\"contracts/libraries/LibAppStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.10;\\n\\nimport '@openzeppelin/contracts/utils/Counters.sol';\\n\\n//\\n\\nlibrary LibAppStorage {\\n bytes32 public constant STORAGE_SLOT = keccak256('app.storage');\\n\\n struct Layout {\\n address manager;\\n address opensea;\\n Counters.Counter totalSupply;\\n mapping(address => Counters.Counter) minterNonce;\\n address oncyber;\\n }\\n\\n function layout() internal pure returns (Layout storage lay) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n lay.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf810e2a2a2416d6da530b539bc6a7736d70345620a4a3ab43b16caf5949a9e16\",\"license\":\"MIT\"},\"contracts/libraries/LibDropStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.10;\\n\\n//\\nimport '@openzeppelin/contracts/utils/Counters.sol';\\n\\nlibrary LibDropStorage {\\n bytes32 public constant STORAGE_SLOT = keccak256('drop.app.storage');\\n struct Drop {\\n uint256 timeStart;\\n uint256 timeEnd;\\n uint256 priceStart;\\n uint256 priceEnd;\\n uint256 stepDuration;\\n uint256 amountCap;\\n uint256 shareCyber;\\n address payable creator;\\n Counters.Counter minted;\\n mapping(address => Counters.Counter) mintCounter;\\n }\\n\\n struct Layout {\\n mapping(uint256 => Drop) drops;\\n }\\n\\n function layout() internal pure returns (Layout storage lay) {\\n bytes32 slot = STORAGE_SLOT;\\n assembly {\\n lay.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x4ebec65487f58e8ba4eb648c749c25ecfd3e44cb3c63db804be7f5447150fa71\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615dcc80620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063bc01188e1161006f578063bc01188e14610541578063bd85b0391461056c578063d61b0c82146105a9578063db7fd408146105e6578063e985e9c514610616578063f242432a146106535761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461046157806385bff2e71461049e578063a22cb465146104db578063b3a721d1146105045761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190613a8e565b61067c565b6040516101839190613add565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190613b50565b610690565b6040516101c09190613b98565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613d9a565b6106b3565b6040516101fd9190613add565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613e9c565b610bce565b005b34801561023b57600080fd5b5061025660048036038101906102519190613f33565b610e32565b6040516102639190613fe8565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613f33565b610f56565b6040516102a09190613add565b60405180910390f35b3480156102b557600080fd5b506102be610f83565b6040516102cb9190613add565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061400a565b610f9d565b6040516103089190613add565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906140ff565b610ff6565b005b34801561034657600080fd5b5061034f61108a565b60405161035c91906141dd565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906142bb565b6110bd565b60405161039991906143f1565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c4919061400a565b6112b2565b6040516103d69190613b98565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613f33565b611315565b6040516104139190613add565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613f33565b611481565b60405161045899989796959493929190614413565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613f33565b61156a565b604051610495919061455e565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061400a565b611672565b6040516104d291906143f1565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd91906145ac565b611778565b005b34801561051057600080fd5b5061052b600480360381019061052691906145ec565b6118ed565b6040516105389190613add565b60405180910390f35b34801561054d57600080fd5b506105566119a8565b60405161056391906141dd565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613f33565b6119db565b6040516105a09190613add565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061462c565b611a01565b6040516105dd9190613add565b60405180910390f35b61060060048036038101906105fb91906146a7565b611a72565b60405161060d9190613b98565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614703565b611eeb565b60405161064a9190613b98565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190614743565b611f88565b005b6000610688838361201c565b905092915050565b60006106ac8261069e6120ef565b61211c90919063ffffffff16565b9050919050565b60008489896106c29190614809565b101580156106d05750600085115b61070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690614889565b60405180910390fd5b85871015801561071f5750600087115b61075e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610755906148f5565b60405180910390fd5b60648311156107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990614961565b60405180910390fd5b60006107ac612187565b905060006107b982610f9d565b905060008c8c8c8c8c8c8c8c8a8a6040516020016107e09a99989796959493929190614a26565b604051602081830303815290604052905060006108158661080784805190602001206121c3565b6121f390919063ffffffff16565b905061081f61221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790614b22565b60405180910390fd5b6108c36108bb61221a565b600201612247565b94506108cf858f612255565b6108e26108da61221a565b60020161228a565b6109326108ed61221a565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b8c61093b6122a0565b6000016000878152602001908152602001600020600001819055508b61095f6122a0565b6000016000878152602001908152602001600020600101819055508a6109836122a0565b600001600087815260200190815260200160002060020181905550896109a76122a0565b600001600087815260200190815260200160002060030181905550886109cb6122a0565b600001600087815260200190815260200160002060040181905550876109ef6122a0565b60000160008781526020019081526020016000206005018190555086610a136122a0565b60000160008781526020019081526020016000206006018190555083610a376122a0565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ab3610a976122a0565b600001600087815260200190815260200160002060080161228a565b610b17610abe6122a0565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b610b3384866001604051806020016040528060008152506122cd565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bed6122ee565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614b8e565b60405180910390fd5b82610c7061231b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610cbb6122ee565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610d4d85612348565b83610d5661221a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610da061221a565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610dea61221a565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610e3e61236b565b60000160008481526020019081526020016000208054610e5d90614bdd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8990614bdd565b8015610ed65780601f10610eab57610100808354040283529160200191610ed6565b820191906000526020600020905b815481529060010190602001808311610eb957829003601f168201915b50505050509050600081511415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990614c5b565b60405180910390fd5b610f2a61236b565b60010181604051602001610f3f929190614d0f565b604051602081830303815290604052915050919050565b6000610f7c610f63612398565b60010160008481526020019081526020016000206123c5565b9050919050565b6000610f98610f9061221a565b600201612247565b905090565b6000610fef610faa61221a565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061103657506110358533611eeb565b5b611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90614da5565b60405180910390fd5b6110833386868686866123da565b5050505050565b600061109461221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614e37565b60405180910390fd5b600061110d6123fe565b60000190506000845167ffffffffffffffff81111561112f5761112e613bce565b5b60405190808252806020026020018201604052801561115d5781602001602082028036833780820191505090505b50905060005b85518110156112a657600073ffffffffffffffffffffffffffffffffffffffff1686828151811061119757611196614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614ef8565b60405180910390fd5b82600086838151811061120c5761120b614e57565b5b60200260200101518152602001908152602001600020600087838151811061123757611236614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061128d5761128c614e57565b5b6020026020010181815250508080600101915050611163565b50809250505092915050565b60006112bc61231b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000806113206122a0565b6000016000848152602001908152602001600020905060008160020154141561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590614f64565b60405180910390fd5b60008160050154146113dc57806005015461139b82600801612247565b106113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614fd0565b60405180910390fd5b5b8060000154421180156113f3575080600101544211155b611432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114299061503c565b60405180910390fd5b60008160000154426114449190614809565b905060008260000154836001015461145c9190614809565b90506114778282856002015486600301548760040154611a01565b9350505050919050565b6000806000806000806000806000806114986122a0565b60000160008c815260200190815260200160002090506000816002015414156114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed90614f64565b60405180910390fd5b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661154a89600801612247565b995099509950995099509950995099509950509193959799909294969850565b60606000611576612398565b600101600084815260200190815260200160002090506000611597826123c5565b67ffffffffffffffff8111156115b0576115af613bce565b5b6040519080825280602002602001820160405280156115de5781602001602082028036833780820191505090505b50905060005b6115ed836123c5565b81101561166757611607818461242b90919063ffffffff16565b82828151811061161a57611619614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061165f9061505c565b9150506115e4565b508092505050919050565b6060600061167e612398565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006116cb82612445565b67ffffffffffffffff8111156116e4576116e3613bce565b5b6040519080825280602002602001820160405280156117125781602001602082028036833780820191505090505b50905060005b61172183612445565b81101561176d5761173b818461245a90919063ffffffff16565b82828151811061174e5761174d614e57565b5b60200260200101818152505080806117659061505c565b915050611718565b508092505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90615117565b60405180910390fd5b806117f06123fe565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e19190613b98565b60405180910390a35050565b6000806118f86122a0565b60000160008581526020019081526020016000209050600081600201541415611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90614f64565b60405180910390fd5b61199f8160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b91505092915050565b60006119b261221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006119e5612398565b6000016000838152602001908152602001600020549050919050565b6000848385611a109190614809565b87611a1b9190615137565b8486611a279190614809565b8489611a3391906151c0565b611a3d9190615137565b8688611a499190615137565b611a5391906151f1565b611a5d9190614809565b611a679190615247565b905095945050505050565b600080611a7d612187565b90506000611a896122a0565b600001600086815260200190815260200160002090506000816005015414611afd578060050154611abc82600801612247565b10611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614fd0565b60405180910390fd5b5b806000015442118015611b14575080600101544211155b611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a9061503c565b60405180910390fd5b6000816000015442611b659190614809565b9050600082600001548360010154611b7d9190614809565b90506000611b9a8383866002015487600301548860040154611a01565b905080341015611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906152c4565b60405180910390fd5b60006064856006015434611bf39190615137565b611bfd9190615247565b905060008134611c0d9190614809565b90506000611c5a8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b905060008b8983604051602001611c73939291906152e4565b60405160208183030381529060405290506000611ca88c611c9a84805190602001206121c3565b6121f390919063ffffffff16565b9050611cb261221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90614b22565b60405180910390fd5b611d4f8960080161228a565b611d988960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b611db48a8e6001604051806020016040528060008152506122cd565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611e1e573d6000803e3d6000fd5b50611e2761221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015611e90573d6000803e3d6000fd5b5060018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a460019a505050505050505050505092915050565b6000611ef56123fe565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611fc85750611fc78533611eeb565b5b612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe90614da5565b60405180910390fd5b612015338686868686612474565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615393565b60405180910390fd5b6120956123fe565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b600060186000369050101580156121a357506121a2336112b2565b5b156121b757601436033560601c90506121bf565b3390506121c0565b5b90565b6000816040516020016121d6919061542a565b604051602081830303815290604052805190602001209050919050565b60008060006122028585612498565b9150915061220f8161251b565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061225e61236b565b60000160008481526020019081526020016000209080519060200190612285929190613943565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6122d9848484846126f0565b6122e83360008686868661287a565b50505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061235161236b565b6001019080519060200190612367929190613943565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b60006123d382600001612a52565b9050919050565b6123e8868686868686612a63565b6123f6868686868686612d6f565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b600061243a8360000183612f47565b60001c905092915050565b600061245382600001612a52565b9050919050565b60006124698360000183612f47565b60001c905092915050565b612482868686868686612fbb565b61249086868686868661287a565b505050505050565b6000806041835114156124da5760008060006020860151925060408601519150606086015160001a90506124ce87828585613233565b94509450505050612514565b60408351141561250b576000806020850151915060408501519050612500868383613340565b935093505050612514565b60006002915091505b9250929050565b6000600481111561252f5761252e615450565b5b81600481111561254257612541615450565b5b141561254d576126ed565b6001600481111561256157612560615450565b5b81600481111561257457612573615450565b5b14156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906154cb565b60405180910390fd5b600260048111156125c9576125c8615450565b5b8160048111156125dc576125db615450565b5b141561261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490615537565b60405180910390fd5b6003600481111561263157612630615450565b5b81600481111561264457612643615450565b5b1415612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c906155c9565b60405180910390fd5b60048081111561269857612697615450565b5b8160048111156126ab576126aa615450565b5b14156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e39061565b565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612757906156ed565b60405180910390fd5b61277f336000866127708761338e565b6127798761338e565b86613408565b60006127896123fe565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ed91906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161286b92919061570d565b60405180910390a45050505050565b6128998473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612a4a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128df95949392919061578b565b6020604051808303816000875af192505050801561291b57506040513d601f19601f8201168201806040525081019061291891906157fa565b60015b6129c157612927615834565b806308c379a01415612984575061293c615856565b806129475750612986565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b9190613fe8565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061595e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f906159f0565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90615a82565b60405180910390fd5b8151835114612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90615b14565b60405180910390fd5b612b25868686868686613408565b6000612b2f6123fe565b600001905060005b8451811015612ce7576000858281518110612b5557612b54614e57565b5b602002602001015190506000858381518110612b7457612b73614e57565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90615ba6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccb91906151f1565b9250508190555050508080612cdf9061505c565b915050612b37565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612d5e929190615bc6565b60405180910390a450505050505050565b612d8e8473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612f3f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612dd4959493929190615bfd565b6020604051808303816000875af1925050508015612e1057506040513d601f19601f82011682018060405250810190612e0d91906157fa565b60015b612eb657612e1c615834565b806308c379a01415612e795750612e31615856565b80612e3c5750612e7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e709190613fe8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead9061595e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f34906159f0565b60405180910390fd5b505b505050505050565b600081836000018054905011612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8990615cd7565b60405180910390fd5b826000018281548110612fa857612fa7614e57565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290615a82565b60405180910390fd5b61304986868661303a8761338e565b6130438761338e565b86613408565b60006130536123fe565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e690615ba6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a591906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161322292919061570d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561326e576000600391509150613337565b601b8560ff16141580156132865750601c8560ff1614155b15613298576000600491509150613337565b6000600187878787604051600081526020016040526040516132bd9493929190615d22565b6020604051602081039080840390855afa1580156132df573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332e57600060019250925050613337565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061338087828885613233565b935093505050935093915050565b60606000600167ffffffffffffffff8111156133ad576133ac613bce565b5b6040519080825280602002602001820160405280156133db5781602001602082028036833780820191505090505b50905082816000815181106133f3576133f2614e57565b5b60200260200101818152505080915050919050565b613416868686868686613431565b505050505050565b600080823b905060008111915050919050565b61343f868686868686613447565b505050505050565b613455868686868686613702565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146136fa576000613492612398565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156136f457600087828151811061354757613546614e57565b5b6020026020010151905060008111156136e057600089838151811061356f5761356e614e57565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156135df578187600001600083815260200190815260200160002060008282546135d391906151f1565b9250508190555061362b565b816135ea8d8361201c565b141561362a576136148c87600084815260200190815260200160002061370a90919063ffffffff16565b50613628818661373a90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415613691578187600001600083815260200190815260200160002060008282546136859190614809565b925050819055506136de565b600061369d8c8361201c565b14156136dd576136c78b87600084815260200190815260200160002061375490919063ffffffff16565b506136db818561378490919063ffffffff16565b505b5b505b5080806136ec9061505c565b915050613529565b50505050505b505050505050565b505050505050565b6000613732836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61379e565b905092915050565b600061374c836000018360001b61379e565b905092915050565b600061377c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6138b0565b905092915050565b6000613796836000018360001b6138b0565b905092915050565b600080836001016000848152602001908152602001600020549050600081146138a45760006001826137d09190614809565b9050600085600001600187600001805490506137ec9190614809565b815481106137fd576137fc614e57565b5b906000526020600020015490508086600001838154811061382157613820614e57565b5b906000526020600020018190555060018261383c91906151f1565b866001016000838152602001908152602001600020819055508560000180548061386957613868615d67565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506138aa565b60009150505b92915050565b60006138bc8383613920565b61391557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061391a565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461394f90614bdd565b90600052602060002090601f01602090048101928261397157600085556139b8565b82601f1061398a57805160ff19168380011785556139b8565b828001600101855582156139b8579182015b828111156139b757825182559160200191906001019061399c565b5b5090506139c591906139c9565b5090565b5b808211156139e25760008160009055506001016139ca565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a25826139fa565b9050919050565b613a3581613a1a565b8114613a4057600080fd5b50565b600081359050613a5281613a2c565b92915050565b6000819050919050565b613a6b81613a58565b8114613a7657600080fd5b50565b600081359050613a8881613a62565b92915050565b60008060408385031215613aa557613aa46139f0565b5b6000613ab385828601613a43565b9250506020613ac485828601613a79565b9150509250929050565b613ad781613a58565b82525050565b6000602082019050613af26000830184613ace565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b2d81613af8565b8114613b3857600080fd5b50565b600081359050613b4a81613b24565b92915050565b600060208284031215613b6657613b656139f0565b5b6000613b7484828501613b3b565b91505092915050565b60008115159050919050565b613b9281613b7d565b82525050565b6000602082019050613bad6000830184613b89565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c0682613bbd565b810181811067ffffffffffffffff82111715613c2557613c24613bce565b5b80604052505050565b6000613c386139e6565b9050613c448282613bfd565b919050565b600067ffffffffffffffff821115613c6457613c63613bce565b5b613c6d82613bbd565b9050602081019050919050565b82818337600083830152505050565b6000613c9c613c9784613c49565b613c2e565b905082815260208101848484011115613cb857613cb7613bb8565b5b613cc3848285613c7a565b509392505050565b600082601f830112613ce057613cdf613bb3565b5b8135613cf0848260208601613c89565b91505092915050565b600067ffffffffffffffff821115613d1457613d13613bce565b5b613d1d82613bbd565b9050602081019050919050565b6000613d3d613d3884613cf9565b613c2e565b905082815260208101848484011115613d5957613d58613bb8565b5b613d64848285613c7a565b509392505050565b600082601f830112613d8157613d80613bb3565b5b8135613d91848260208601613d2a565b91505092915050565b60008060008060008060008060006101208a8c031215613dbd57613dbc6139f0565b5b60008a013567ffffffffffffffff811115613ddb57613dda6139f5565b5b613de78c828d01613ccb565b9950506020613df88c828d01613a79565b9850506040613e098c828d01613a79565b9750506060613e1a8c828d01613a79565b9650506080613e2b8c828d01613a79565b95505060a0613e3c8c828d01613a79565b94505060c0613e4d8c828d01613a79565b93505060e0613e5e8c828d01613a79565b9250506101008a013567ffffffffffffffff811115613e8057613e7f6139f5565b5b613e8c8c828d01613d6c565b9150509295985092959850929598565b600080600080600060a08688031215613eb857613eb76139f0565b5b600086013567ffffffffffffffff811115613ed657613ed56139f5565b5b613ee288828901613ccb565b9550506020613ef388828901613a43565b9450506040613f0488828901613a43565b9350506060613f1588828901613a43565b9250506080613f2688828901613a43565b9150509295509295909350565b600060208284031215613f4957613f486139f0565b5b6000613f5784828501613a79565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f9a578082015181840152602081019050613f7f565b83811115613fa9576000848401525b50505050565b6000613fba82613f60565b613fc48185613f6b565b9350613fd4818560208601613f7c565b613fdd81613bbd565b840191505092915050565b600060208201905081810360008301526140028184613faf565b905092915050565b6000602082840312156140205761401f6139f0565b5b600061402e84828501613a43565b91505092915050565b600067ffffffffffffffff82111561405257614051613bce565b5b602082029050602081019050919050565b600080fd5b600061407b61407684614037565b613c2e565b9050808382526020820190506020840283018581111561409e5761409d614063565b5b835b818110156140c757806140b38882613a79565b8452602084019350506020810190506140a0565b5050509392505050565b600082601f8301126140e6576140e5613bb3565b5b81356140f6848260208601614068565b91505092915050565b600080600080600060a0868803121561411b5761411a6139f0565b5b600061412988828901613a43565b955050602061413a88828901613a43565b945050604086013567ffffffffffffffff81111561415b5761415a6139f5565b5b614167888289016140d1565b935050606086013567ffffffffffffffff811115614188576141876139f5565b5b614194888289016140d1565b925050608086013567ffffffffffffffff8111156141b5576141b46139f5565b5b6141c188828901613d6c565b9150509295509295909350565b6141d781613a1a565b82525050565b60006020820190506141f260008301846141ce565b92915050565b600067ffffffffffffffff82111561421357614212613bce565b5b602082029050602081019050919050565b6000614237614232846141f8565b613c2e565b9050808382526020820190506020840283018581111561425a57614259614063565b5b835b81811015614283578061426f8882613a43565b84526020840193505060208101905061425c565b5050509392505050565b600082601f8301126142a2576142a1613bb3565b5b81356142b2848260208601614224565b91505092915050565b600080604083850312156142d2576142d16139f0565b5b600083013567ffffffffffffffff8111156142f0576142ef6139f5565b5b6142fc8582860161428d565b925050602083013567ffffffffffffffff81111561431d5761431c6139f5565b5b614329858286016140d1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436881613a58565b82525050565b600061437a838361435f565b60208301905092915050565b6000602082019050919050565b600061439e82614333565b6143a8818561433e565b93506143b38361434f565b8060005b838110156143e45781516143cb888261436e565b97506143d683614386565b9250506001810190506143b7565b5085935050505092915050565b6000602082019050818103600083015261440b8184614393565b905092915050565b600061012082019050614429600083018c613ace565b614436602083018b613ace565b614443604083018a613ace565b6144506060830189613ace565b61445d6080830188613ace565b61446a60a0830187613ace565b61447760c0830186613ace565b61448460e08301856141ce565b614492610100830184613ace565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144d581613a1a565b82525050565b60006144e783836144cc565b60208301905092915050565b6000602082019050919050565b600061450b826144a0565b61451581856144ab565b9350614520836144bc565b8060005b8381101561455157815161453888826144db565b9750614543836144f3565b925050600181019050614524565b5085935050505092915050565b600060208201905081810360008301526145788184614500565b905092915050565b61458981613b7d565b811461459457600080fd5b50565b6000813590506145a681614580565b92915050565b600080604083850312156145c3576145c26139f0565b5b60006145d185828601613a43565b92505060206145e285828601614597565b9150509250929050565b60008060408385031215614603576146026139f0565b5b600061461185828601613a79565b925050602061462285828601613a43565b9150509250929050565b600080600080600060a08688031215614648576146476139f0565b5b600061465688828901613a79565b955050602061466788828901613a79565b945050604061467888828901613a79565b935050606061468988828901613a79565b925050608061469a88828901613a79565b9150509295509295909350565b600080604083850312156146be576146bd6139f0565b5b60006146cc85828601613a79565b925050602083013567ffffffffffffffff8111156146ed576146ec6139f5565b5b6146f985828601613d6c565b9150509250929050565b6000806040838503121561471a576147196139f0565b5b600061472885828601613a43565b925050602061473985828601613a43565b9150509250929050565b600080600080600060a0868803121561475f5761475e6139f0565b5b600061476d88828901613a43565b955050602061477e88828901613a43565b945050604061478f88828901613a79565b93505060606147a088828901613a79565b925050608086013567ffffffffffffffff8111156147c1576147c06139f5565b5b6147cd88828901613d6c565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481482613a58565b915061481f83613a58565b925082821015614832576148316147da565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b6000614873600283613f6b565b915061487e8261483d565b602082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148df600283613f6b565b91506148ea826148a9565b602082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b600061494b600383613f6b565b915061495682614915565b602082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b600081905092915050565b600061499782613f60565b6149a18185614981565b93506149b1818560208601613f7c565b80840191505092915050565b6000819050919050565b6149d86149d382613a58565b6149bd565b82525050565b60008160601b9050919050565b60006149f6826149de565b9050919050565b6000614a08826149eb565b9050919050565b614a20614a1b82613a1a565b6149fd565b82525050565b6000614a32828d61498c565b9150614a3e828c6149c7565b602082019150614a4e828b6149c7565b602082019150614a5e828a6149c7565b602082019150614a6e82896149c7565b602082019150614a7e82886149c7565b602082019150614a8e82876149c7565b602082019150614a9e82866149c7565b602082019150614aae8285614a0f565b601482019150614abe82846149c7565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b0c600283613f6b565b9150614b1782614ad6565b602082019050919050565b60006020820190508181036000830152614b3b81614aff565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b78600283613f6b565b9150614b8382614b42565b602082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf557607f821691505b60208210811415614c0957614c08614bae565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c45601d83613f6b565b9150614c5082614c0f565b602082019050919050565b60006020820190508181036000830152614c7481614c38565b9050919050565b60008190508160005260206000209050919050565b60008154614c9d81614bdd565b614ca78186614981565b94506001821660008114614cc25760018114614cd357614d06565b60ff19831686528186019350614d06565b614cdc85614c7b565b60005b83811015614cfe57815481890152600182019150602081019050614cdf565b838801955050505b50505092915050565b6000614d1b8285614c90565b9150614d27828461498c565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d8f602983613f6b565b9150614d9a82614d33565b604082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614e21602983613f6b565b9150614e2c82614dc5565b604082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ee2603183613f6b565b9150614eed82614e86565b604082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000614f4e600383613f6b565b9150614f5982614f18565b602082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fba600283613f6b565b9150614fc582614f84565b602082019050919050565b60006020820190508181036000830152614fe981614fad565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000615026600383613f6b565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561509a576150996147da565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615101602983613f6b565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b600061514282613a58565b915061514d83613a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615186576151856147da565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151cb82613a58565b91506151d683613a58565b9250826151e6576151e5615191565b5b828206905092915050565b60006151fc82613a58565b915061520783613a58565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523c5761523b6147da565b5b828201905092915050565b600061525282613a58565b915061525d83613a58565b92508261526d5761526c615191565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006152ae600283613f6b565b91506152b982615278565b602082019050919050565b600060208201905081810360008301526152dd816152a1565b9050919050565b60006152f082866149c7565b6020820191506153008285614a0f565b60148201915061531082846149c7565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061537d602b83613f6b565b915061538882615321565b604082019050919050565b600060208201905081810360008301526153ac81615370565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006153e9601c83614981565b91506153f4826153b3565b601c82019050919050565b6000819050919050565b6000819050919050565b61542461541f826153ff565b615409565b82525050565b6000615435826153dc565b91506154418284615413565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006154b5601883613f6b565b91506154c08261547f565b602082019050919050565b600060208201905081810360008301526154e4816154a8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615521601f83613f6b565b915061552c826154eb565b602082019050919050565b6000602082019050818103600083015261555081615514565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155b3602283613f6b565b91506155be82615557565b604082019050919050565b600060208201905081810360008301526155e2816155a6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615645602283613f6b565b9150615650826155e9565b604082019050919050565b6000602082019050818103600083015261567481615638565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156d7602183613f6b565b91506156e28261567b565b604082019050919050565b60006020820190508181036000830152615706816156ca565b9050919050565b60006040820190506157226000830185613ace565b61572f6020830184613ace565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061575d82615736565b6157678185615741565b9350615777818560208601613f7c565b61578081613bbd565b840191505092915050565b600060a0820190506157a060008301886141ce565b6157ad60208301876141ce565b6157ba6040830186613ace565b6157c76060830185613ace565b81810360808301526157d98184615752565b90509695505050505050565b6000815190506157f481613b24565b92915050565b6000602082840312156158105761580f6139f0565b5b600061581e848285016157e5565b91505092915050565b60008160e01c9050919050565b600060033d11156158535760046000803e615850600051615827565b90505b90565b600060443d1015615866576158e9565b61586e6139e6565b60043d036004823e80513d602482011167ffffffffffffffff821117156158965750506158e9565b808201805167ffffffffffffffff8111156158b457505050506158e9565b80602083010160043d0385018111156158d15750505050506158e9565b6158e082602001850186613bfd565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615948603483613f6b565b9150615953826158ec565b604082019050919050565b600060208201905081810360008301526159778161593b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006159da602883613f6b565b91506159e58261597e565b604082019050919050565b60006020820190508181036000830152615a09816159cd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615a6c602583613f6b565b9150615a7782615a10565b604082019050919050565b60006020820190508181036000830152615a9b81615a5f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000615afe602883613f6b565b9150615b0982615aa2565b604082019050919050565b60006020820190508181036000830152615b2d81615af1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615b90602b83613f6b565b9150615b9b82615b34565b604082019050919050565b60006020820190508181036000830152615bbf81615b83565b9050919050565b60006040820190508181036000830152615be08185614393565b90508181036020830152615bf48184614393565b90509392505050565b600060a082019050615c1260008301886141ce565b615c1f60208301876141ce565b8181036040830152615c318186614393565b90508181036060830152615c458185614393565b90508181036080830152615c598184615752565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cc1602283613f6b565b9150615ccc82615c65565b604082019050919050565b60006020820190508181036000830152615cf081615cb4565b9050919050565b615d00816153ff565b82525050565b600060ff82169050919050565b615d1c81615d06565b82525050565b6000608082019050615d376000830187615cf7565b615d446020830186615d13565b615d516040830185615cf7565b615d5e6060830184615cf7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122070a523ab2c79fc0dac7c47f68ed21e72e433da6b7ff716ac513e8e6e0f6aaeaf64736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063bc01188e1161006f578063bc01188e14610541578063bd85b0391461056c578063d61b0c82146105a9578063db7fd408146105e6578063e985e9c514610616578063f242432a146106535761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461046157806385bff2e71461049e578063a22cb465146104db578063b3a721d1146105045761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190613a8e565b61067c565b6040516101839190613add565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190613b50565b610690565b6040516101c09190613b98565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613d9a565b6106b3565b6040516101fd9190613add565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613e9c565b610bce565b005b34801561023b57600080fd5b5061025660048036038101906102519190613f33565b610e32565b6040516102639190613fe8565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613f33565b610f56565b6040516102a09190613add565b60405180910390f35b3480156102b557600080fd5b506102be610f83565b6040516102cb9190613add565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061400a565b610f9d565b6040516103089190613add565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906140ff565b610ff6565b005b34801561034657600080fd5b5061034f61108a565b60405161035c91906141dd565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906142bb565b6110bd565b60405161039991906143f1565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c4919061400a565b6112b2565b6040516103d69190613b98565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613f33565b611315565b6040516104139190613add565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613f33565b611481565b60405161045899989796959493929190614413565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613f33565b61156a565b604051610495919061455e565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061400a565b611672565b6040516104d291906143f1565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd91906145ac565b611778565b005b34801561051057600080fd5b5061052b600480360381019061052691906145ec565b6118ed565b6040516105389190613add565b60405180910390f35b34801561054d57600080fd5b506105566119a8565b60405161056391906141dd565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613f33565b6119db565b6040516105a09190613add565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061462c565b611a01565b6040516105dd9190613add565b60405180910390f35b61060060048036038101906105fb91906146a7565b611a72565b60405161060d9190613b98565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614703565b611eeb565b60405161064a9190613b98565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190614743565b611f88565b005b6000610688838361201c565b905092915050565b60006106ac8261069e6120ef565b61211c90919063ffffffff16565b9050919050565b60008489896106c29190614809565b101580156106d05750600085115b61070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690614889565b60405180910390fd5b85871015801561071f5750600087115b61075e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610755906148f5565b60405180910390fd5b60648311156107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990614961565b60405180910390fd5b60006107ac612187565b905060006107b982610f9d565b905060008c8c8c8c8c8c8c8c8a8a6040516020016107e09a99989796959493929190614a26565b604051602081830303815290604052905060006108158661080784805190602001206121c3565b6121f390919063ffffffff16565b905061081f61221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790614b22565b60405180910390fd5b6108c36108bb61221a565b600201612247565b94506108cf858f612255565b6108e26108da61221a565b60020161228a565b6109326108ed61221a565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b8c61093b6122a0565b6000016000878152602001908152602001600020600001819055508b61095f6122a0565b6000016000878152602001908152602001600020600101819055508a6109836122a0565b600001600087815260200190815260200160002060020181905550896109a76122a0565b600001600087815260200190815260200160002060030181905550886109cb6122a0565b600001600087815260200190815260200160002060040181905550876109ef6122a0565b60000160008781526020019081526020016000206005018190555086610a136122a0565b60000160008781526020019081526020016000206006018190555083610a376122a0565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ab3610a976122a0565b600001600087815260200190815260200160002060080161228a565b610b17610abe6122a0565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b610b3384866001604051806020016040528060008152506122cd565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bed6122ee565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614b8e565b60405180910390fd5b82610c7061231b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610cbb6122ee565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610d4d85612348565b83610d5661221a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610da061221a565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610dea61221a565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610e3e61236b565b60000160008481526020019081526020016000208054610e5d90614bdd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8990614bdd565b8015610ed65780601f10610eab57610100808354040283529160200191610ed6565b820191906000526020600020905b815481529060010190602001808311610eb957829003601f168201915b50505050509050600081511415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990614c5b565b60405180910390fd5b610f2a61236b565b60010181604051602001610f3f929190614d0f565b604051602081830303815290604052915050919050565b6000610f7c610f63612398565b60010160008481526020019081526020016000206123c5565b9050919050565b6000610f98610f9061221a565b600201612247565b905090565b6000610fef610faa61221a565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061103657506110358533611eeb565b5b611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90614da5565b60405180910390fd5b6110833386868686866123da565b5050505050565b600061109461221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614e37565b60405180910390fd5b600061110d6123fe565b60000190506000845167ffffffffffffffff81111561112f5761112e613bce565b5b60405190808252806020026020018201604052801561115d5781602001602082028036833780820191505090505b50905060005b85518110156112a657600073ffffffffffffffffffffffffffffffffffffffff1686828151811061119757611196614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614ef8565b60405180910390fd5b82600086838151811061120c5761120b614e57565b5b60200260200101518152602001908152602001600020600087838151811061123757611236614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061128d5761128c614e57565b5b6020026020010181815250508080600101915050611163565b50809250505092915050565b60006112bc61231b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000806113206122a0565b6000016000848152602001908152602001600020905060008160020154141561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590614f64565b60405180910390fd5b60008160050154146113dc57806005015461139b82600801612247565b106113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614fd0565b60405180910390fd5b5b8060000154421180156113f3575080600101544211155b611432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114299061503c565b60405180910390fd5b60008160000154426114449190614809565b905060008260000154836001015461145c9190614809565b90506114778282856002015486600301548760040154611a01565b9350505050919050565b6000806000806000806000806000806114986122a0565b60000160008c815260200190815260200160002090506000816002015414156114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed90614f64565b60405180910390fd5b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661154a89600801612247565b995099509950995099509950995099509950509193959799909294969850565b60606000611576612398565b600101600084815260200190815260200160002090506000611597826123c5565b67ffffffffffffffff8111156115b0576115af613bce565b5b6040519080825280602002602001820160405280156115de5781602001602082028036833780820191505090505b50905060005b6115ed836123c5565b81101561166757611607818461242b90919063ffffffff16565b82828151811061161a57611619614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061165f9061505c565b9150506115e4565b508092505050919050565b6060600061167e612398565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006116cb82612445565b67ffffffffffffffff8111156116e4576116e3613bce565b5b6040519080825280602002602001820160405280156117125781602001602082028036833780820191505090505b50905060005b61172183612445565b81101561176d5761173b818461245a90919063ffffffff16565b82828151811061174e5761174d614e57565b5b60200260200101818152505080806117659061505c565b915050611718565b508092505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90615117565b60405180910390fd5b806117f06123fe565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e19190613b98565b60405180910390a35050565b6000806118f86122a0565b60000160008581526020019081526020016000209050600081600201541415611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90614f64565b60405180910390fd5b61199f8160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b91505092915050565b60006119b261221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006119e5612398565b6000016000838152602001908152602001600020549050919050565b6000848385611a109190614809565b87611a1b9190615137565b8486611a279190614809565b8489611a3391906151c0565b611a3d9190615137565b8688611a499190615137565b611a5391906151f1565b611a5d9190614809565b611a679190615247565b905095945050505050565b600080611a7d612187565b90506000611a896122a0565b600001600086815260200190815260200160002090506000816005015414611afd578060050154611abc82600801612247565b10611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614fd0565b60405180910390fd5b5b806000015442118015611b14575080600101544211155b611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a9061503c565b60405180910390fd5b6000816000015442611b659190614809565b9050600082600001548360010154611b7d9190614809565b90506000611b9a8383866002015487600301548860040154611a01565b905080341015611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906152c4565b60405180910390fd5b60006064856006015434611bf39190615137565b611bfd9190615247565b905060008134611c0d9190614809565b90506000611c5a8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b905060008b8983604051602001611c73939291906152e4565b60405160208183030381529060405290506000611ca88c611c9a84805190602001206121c3565b6121f390919063ffffffff16565b9050611cb261221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90614b22565b60405180910390fd5b611d4f8960080161228a565b611d988960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b611db48a8e6001604051806020016040528060008152506122cd565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611e1e573d6000803e3d6000fd5b50611e2761221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015611e90573d6000803e3d6000fd5b5060018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a460019a505050505050505050505092915050565b6000611ef56123fe565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611fc85750611fc78533611eeb565b5b612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe90614da5565b60405180910390fd5b612015338686868686612474565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615393565b60405180910390fd5b6120956123fe565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b600060186000369050101580156121a357506121a2336112b2565b5b156121b757601436033560601c90506121bf565b3390506121c0565b5b90565b6000816040516020016121d6919061542a565b604051602081830303815290604052805190602001209050919050565b60008060006122028585612498565b9150915061220f8161251b565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061225e61236b565b60000160008481526020019081526020016000209080519060200190612285929190613943565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6122d9848484846126f0565b6122e83360008686868661287a565b50505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061235161236b565b6001019080519060200190612367929190613943565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b60006123d382600001612a52565b9050919050565b6123e8868686868686612a63565b6123f6868686868686612d6f565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b600061243a8360000183612f47565b60001c905092915050565b600061245382600001612a52565b9050919050565b60006124698360000183612f47565b60001c905092915050565b612482868686868686612fbb565b61249086868686868661287a565b505050505050565b6000806041835114156124da5760008060006020860151925060408601519150606086015160001a90506124ce87828585613233565b94509450505050612514565b60408351141561250b576000806020850151915060408501519050612500868383613340565b935093505050612514565b60006002915091505b9250929050565b6000600481111561252f5761252e615450565b5b81600481111561254257612541615450565b5b141561254d576126ed565b6001600481111561256157612560615450565b5b81600481111561257457612573615450565b5b14156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906154cb565b60405180910390fd5b600260048111156125c9576125c8615450565b5b8160048111156125dc576125db615450565b5b141561261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490615537565b60405180910390fd5b6003600481111561263157612630615450565b5b81600481111561264457612643615450565b5b1415612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c906155c9565b60405180910390fd5b60048081111561269857612697615450565b5b8160048111156126ab576126aa615450565b5b14156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e39061565b565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612757906156ed565b60405180910390fd5b61277f336000866127708761338e565b6127798761338e565b86613408565b60006127896123fe565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ed91906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161286b92919061570d565b60405180910390a45050505050565b6128998473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612a4a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128df95949392919061578b565b6020604051808303816000875af192505050801561291b57506040513d601f19601f8201168201806040525081019061291891906157fa565b60015b6129c157612927615834565b806308c379a01415612984575061293c615856565b806129475750612986565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b9190613fe8565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061595e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f906159f0565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90615a82565b60405180910390fd5b8151835114612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90615b14565b60405180910390fd5b612b25868686868686613408565b6000612b2f6123fe565b600001905060005b8451811015612ce7576000858281518110612b5557612b54614e57565b5b602002602001015190506000858381518110612b7457612b73614e57565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90615ba6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccb91906151f1565b9250508190555050508080612cdf9061505c565b915050612b37565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612d5e929190615bc6565b60405180910390a450505050505050565b612d8e8473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612f3f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612dd4959493929190615bfd565b6020604051808303816000875af1925050508015612e1057506040513d601f19601f82011682018060405250810190612e0d91906157fa565b60015b612eb657612e1c615834565b806308c379a01415612e795750612e31615856565b80612e3c5750612e7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e709190613fe8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead9061595e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f34906159f0565b60405180910390fd5b505b505050505050565b600081836000018054905011612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8990615cd7565b60405180910390fd5b826000018281548110612fa857612fa7614e57565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290615a82565b60405180910390fd5b61304986868661303a8761338e565b6130438761338e565b86613408565b60006130536123fe565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e690615ba6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a591906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161322292919061570d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561326e576000600391509150613337565b601b8560ff16141580156132865750601c8560ff1614155b15613298576000600491509150613337565b6000600187878787604051600081526020016040526040516132bd9493929190615d22565b6020604051602081039080840390855afa1580156132df573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332e57600060019250925050613337565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061338087828885613233565b935093505050935093915050565b60606000600167ffffffffffffffff8111156133ad576133ac613bce565b5b6040519080825280602002602001820160405280156133db5781602001602082028036833780820191505090505b50905082816000815181106133f3576133f2614e57565b5b60200260200101818152505080915050919050565b613416868686868686613431565b505050505050565b600080823b905060008111915050919050565b61343f868686868686613447565b505050505050565b613455868686868686613702565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146136fa576000613492612398565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156136f457600087828151811061354757613546614e57565b5b6020026020010151905060008111156136e057600089838151811061356f5761356e614e57565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156135df578187600001600083815260200190815260200160002060008282546135d391906151f1565b9250508190555061362b565b816135ea8d8361201c565b141561362a576136148c87600084815260200190815260200160002061370a90919063ffffffff16565b50613628818661373a90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415613691578187600001600083815260200190815260200160002060008282546136859190614809565b925050819055506136de565b600061369d8c8361201c565b14156136dd576136c78b87600084815260200190815260200160002061375490919063ffffffff16565b506136db818561378490919063ffffffff16565b505b5b505b5080806136ec9061505c565b915050613529565b50505050505b505050505050565b505050505050565b6000613732836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61379e565b905092915050565b600061374c836000018360001b61379e565b905092915050565b600061377c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6138b0565b905092915050565b6000613796836000018360001b6138b0565b905092915050565b600080836001016000848152602001908152602001600020549050600081146138a45760006001826137d09190614809565b9050600085600001600187600001805490506137ec9190614809565b815481106137fd576137fc614e57565b5b906000526020600020015490508086600001838154811061382157613820614e57565b5b906000526020600020018190555060018261383c91906151f1565b866001016000838152602001908152602001600020819055508560000180548061386957613868615d67565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506138aa565b60009150505b92915050565b60006138bc8383613920565b61391557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061391a565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461394f90614bdd565b90600052602060002090601f01602090048101928261397157600085556139b8565b82601f1061398a57805160ff19168380011785556139b8565b828001600101855582156139b8579182015b828111156139b757825182559160200191906001019061399c565b5b5090506139c591906139c9565b5090565b5b808211156139e25760008160009055506001016139ca565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a25826139fa565b9050919050565b613a3581613a1a565b8114613a4057600080fd5b50565b600081359050613a5281613a2c565b92915050565b6000819050919050565b613a6b81613a58565b8114613a7657600080fd5b50565b600081359050613a8881613a62565b92915050565b60008060408385031215613aa557613aa46139f0565b5b6000613ab385828601613a43565b9250506020613ac485828601613a79565b9150509250929050565b613ad781613a58565b82525050565b6000602082019050613af26000830184613ace565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b2d81613af8565b8114613b3857600080fd5b50565b600081359050613b4a81613b24565b92915050565b600060208284031215613b6657613b656139f0565b5b6000613b7484828501613b3b565b91505092915050565b60008115159050919050565b613b9281613b7d565b82525050565b6000602082019050613bad6000830184613b89565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c0682613bbd565b810181811067ffffffffffffffff82111715613c2557613c24613bce565b5b80604052505050565b6000613c386139e6565b9050613c448282613bfd565b919050565b600067ffffffffffffffff821115613c6457613c63613bce565b5b613c6d82613bbd565b9050602081019050919050565b82818337600083830152505050565b6000613c9c613c9784613c49565b613c2e565b905082815260208101848484011115613cb857613cb7613bb8565b5b613cc3848285613c7a565b509392505050565b600082601f830112613ce057613cdf613bb3565b5b8135613cf0848260208601613c89565b91505092915050565b600067ffffffffffffffff821115613d1457613d13613bce565b5b613d1d82613bbd565b9050602081019050919050565b6000613d3d613d3884613cf9565b613c2e565b905082815260208101848484011115613d5957613d58613bb8565b5b613d64848285613c7a565b509392505050565b600082601f830112613d8157613d80613bb3565b5b8135613d91848260208601613d2a565b91505092915050565b60008060008060008060008060006101208a8c031215613dbd57613dbc6139f0565b5b60008a013567ffffffffffffffff811115613ddb57613dda6139f5565b5b613de78c828d01613ccb565b9950506020613df88c828d01613a79565b9850506040613e098c828d01613a79565b9750506060613e1a8c828d01613a79565b9650506080613e2b8c828d01613a79565b95505060a0613e3c8c828d01613a79565b94505060c0613e4d8c828d01613a79565b93505060e0613e5e8c828d01613a79565b9250506101008a013567ffffffffffffffff811115613e8057613e7f6139f5565b5b613e8c8c828d01613d6c565b9150509295985092959850929598565b600080600080600060a08688031215613eb857613eb76139f0565b5b600086013567ffffffffffffffff811115613ed657613ed56139f5565b5b613ee288828901613ccb565b9550506020613ef388828901613a43565b9450506040613f0488828901613a43565b9350506060613f1588828901613a43565b9250506080613f2688828901613a43565b9150509295509295909350565b600060208284031215613f4957613f486139f0565b5b6000613f5784828501613a79565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f9a578082015181840152602081019050613f7f565b83811115613fa9576000848401525b50505050565b6000613fba82613f60565b613fc48185613f6b565b9350613fd4818560208601613f7c565b613fdd81613bbd565b840191505092915050565b600060208201905081810360008301526140028184613faf565b905092915050565b6000602082840312156140205761401f6139f0565b5b600061402e84828501613a43565b91505092915050565b600067ffffffffffffffff82111561405257614051613bce565b5b602082029050602081019050919050565b600080fd5b600061407b61407684614037565b613c2e565b9050808382526020820190506020840283018581111561409e5761409d614063565b5b835b818110156140c757806140b38882613a79565b8452602084019350506020810190506140a0565b5050509392505050565b600082601f8301126140e6576140e5613bb3565b5b81356140f6848260208601614068565b91505092915050565b600080600080600060a0868803121561411b5761411a6139f0565b5b600061412988828901613a43565b955050602061413a88828901613a43565b945050604086013567ffffffffffffffff81111561415b5761415a6139f5565b5b614167888289016140d1565b935050606086013567ffffffffffffffff811115614188576141876139f5565b5b614194888289016140d1565b925050608086013567ffffffffffffffff8111156141b5576141b46139f5565b5b6141c188828901613d6c565b9150509295509295909350565b6141d781613a1a565b82525050565b60006020820190506141f260008301846141ce565b92915050565b600067ffffffffffffffff82111561421357614212613bce565b5b602082029050602081019050919050565b6000614237614232846141f8565b613c2e565b9050808382526020820190506020840283018581111561425a57614259614063565b5b835b81811015614283578061426f8882613a43565b84526020840193505060208101905061425c565b5050509392505050565b600082601f8301126142a2576142a1613bb3565b5b81356142b2848260208601614224565b91505092915050565b600080604083850312156142d2576142d16139f0565b5b600083013567ffffffffffffffff8111156142f0576142ef6139f5565b5b6142fc8582860161428d565b925050602083013567ffffffffffffffff81111561431d5761431c6139f5565b5b614329858286016140d1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436881613a58565b82525050565b600061437a838361435f565b60208301905092915050565b6000602082019050919050565b600061439e82614333565b6143a8818561433e565b93506143b38361434f565b8060005b838110156143e45781516143cb888261436e565b97506143d683614386565b9250506001810190506143b7565b5085935050505092915050565b6000602082019050818103600083015261440b8184614393565b905092915050565b600061012082019050614429600083018c613ace565b614436602083018b613ace565b614443604083018a613ace565b6144506060830189613ace565b61445d6080830188613ace565b61446a60a0830187613ace565b61447760c0830186613ace565b61448460e08301856141ce565b614492610100830184613ace565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144d581613a1a565b82525050565b60006144e783836144cc565b60208301905092915050565b6000602082019050919050565b600061450b826144a0565b61451581856144ab565b9350614520836144bc565b8060005b8381101561455157815161453888826144db565b9750614543836144f3565b925050600181019050614524565b5085935050505092915050565b600060208201905081810360008301526145788184614500565b905092915050565b61458981613b7d565b811461459457600080fd5b50565b6000813590506145a681614580565b92915050565b600080604083850312156145c3576145c26139f0565b5b60006145d185828601613a43565b92505060206145e285828601614597565b9150509250929050565b60008060408385031215614603576146026139f0565b5b600061461185828601613a79565b925050602061462285828601613a43565b9150509250929050565b600080600080600060a08688031215614648576146476139f0565b5b600061465688828901613a79565b955050602061466788828901613a79565b945050604061467888828901613a79565b935050606061468988828901613a79565b925050608061469a88828901613a79565b9150509295509295909350565b600080604083850312156146be576146bd6139f0565b5b60006146cc85828601613a79565b925050602083013567ffffffffffffffff8111156146ed576146ec6139f5565b5b6146f985828601613d6c565b9150509250929050565b6000806040838503121561471a576147196139f0565b5b600061472885828601613a43565b925050602061473985828601613a43565b9150509250929050565b600080600080600060a0868803121561475f5761475e6139f0565b5b600061476d88828901613a43565b955050602061477e88828901613a43565b945050604061478f88828901613a79565b93505060606147a088828901613a79565b925050608086013567ffffffffffffffff8111156147c1576147c06139f5565b5b6147cd88828901613d6c565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481482613a58565b915061481f83613a58565b925082821015614832576148316147da565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b6000614873600283613f6b565b915061487e8261483d565b602082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148df600283613f6b565b91506148ea826148a9565b602082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b600061494b600383613f6b565b915061495682614915565b602082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b600081905092915050565b600061499782613f60565b6149a18185614981565b93506149b1818560208601613f7c565b80840191505092915050565b6000819050919050565b6149d86149d382613a58565b6149bd565b82525050565b60008160601b9050919050565b60006149f6826149de565b9050919050565b6000614a08826149eb565b9050919050565b614a20614a1b82613a1a565b6149fd565b82525050565b6000614a32828d61498c565b9150614a3e828c6149c7565b602082019150614a4e828b6149c7565b602082019150614a5e828a6149c7565b602082019150614a6e82896149c7565b602082019150614a7e82886149c7565b602082019150614a8e82876149c7565b602082019150614a9e82866149c7565b602082019150614aae8285614a0f565b601482019150614abe82846149c7565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b0c600283613f6b565b9150614b1782614ad6565b602082019050919050565b60006020820190508181036000830152614b3b81614aff565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b78600283613f6b565b9150614b8382614b42565b602082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf557607f821691505b60208210811415614c0957614c08614bae565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c45601d83613f6b565b9150614c5082614c0f565b602082019050919050565b60006020820190508181036000830152614c7481614c38565b9050919050565b60008190508160005260206000209050919050565b60008154614c9d81614bdd565b614ca78186614981565b94506001821660008114614cc25760018114614cd357614d06565b60ff19831686528186019350614d06565b614cdc85614c7b565b60005b83811015614cfe57815481890152600182019150602081019050614cdf565b838801955050505b50505092915050565b6000614d1b8285614c90565b9150614d27828461498c565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d8f602983613f6b565b9150614d9a82614d33565b604082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614e21602983613f6b565b9150614e2c82614dc5565b604082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ee2603183613f6b565b9150614eed82614e86565b604082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000614f4e600383613f6b565b9150614f5982614f18565b602082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fba600283613f6b565b9150614fc582614f84565b602082019050919050565b60006020820190508181036000830152614fe981614fad565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000615026600383613f6b565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561509a576150996147da565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615101602983613f6b565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b600061514282613a58565b915061514d83613a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615186576151856147da565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151cb82613a58565b91506151d683613a58565b9250826151e6576151e5615191565b5b828206905092915050565b60006151fc82613a58565b915061520783613a58565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523c5761523b6147da565b5b828201905092915050565b600061525282613a58565b915061525d83613a58565b92508261526d5761526c615191565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006152ae600283613f6b565b91506152b982615278565b602082019050919050565b600060208201905081810360008301526152dd816152a1565b9050919050565b60006152f082866149c7565b6020820191506153008285614a0f565b60148201915061531082846149c7565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061537d602b83613f6b565b915061538882615321565b604082019050919050565b600060208201905081810360008301526153ac81615370565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006153e9601c83614981565b91506153f4826153b3565b601c82019050919050565b6000819050919050565b6000819050919050565b61542461541f826153ff565b615409565b82525050565b6000615435826153dc565b91506154418284615413565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006154b5601883613f6b565b91506154c08261547f565b602082019050919050565b600060208201905081810360008301526154e4816154a8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615521601f83613f6b565b915061552c826154eb565b602082019050919050565b6000602082019050818103600083015261555081615514565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155b3602283613f6b565b91506155be82615557565b604082019050919050565b600060208201905081810360008301526155e2816155a6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615645602283613f6b565b9150615650826155e9565b604082019050919050565b6000602082019050818103600083015261567481615638565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156d7602183613f6b565b91506156e28261567b565b604082019050919050565b60006020820190508181036000830152615706816156ca565b9050919050565b60006040820190506157226000830185613ace565b61572f6020830184613ace565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061575d82615736565b6157678185615741565b9350615777818560208601613f7c565b61578081613bbd565b840191505092915050565b600060a0820190506157a060008301886141ce565b6157ad60208301876141ce565b6157ba6040830186613ace565b6157c76060830185613ace565b81810360808301526157d98184615752565b90509695505050505050565b6000815190506157f481613b24565b92915050565b6000602082840312156158105761580f6139f0565b5b600061581e848285016157e5565b91505092915050565b60008160e01c9050919050565b600060033d11156158535760046000803e615850600051615827565b90505b90565b600060443d1015615866576158e9565b61586e6139e6565b60043d036004823e80513d602482011167ffffffffffffffff821117156158965750506158e9565b808201805167ffffffffffffffff8111156158b457505050506158e9565b80602083010160043d0385018111156158d15750505050506158e9565b6158e082602001850186613bfd565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615948603483613f6b565b9150615953826158ec565b604082019050919050565b600060208201905081810360008301526159778161593b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006159da602883613f6b565b91506159e58261597e565b604082019050919050565b60006020820190508181036000830152615a09816159cd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615a6c602583613f6b565b9150615a7782615a10565b604082019050919050565b60006020820190508181036000830152615a9b81615a5f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000615afe602883613f6b565b9150615b0982615aa2565b604082019050919050565b60006020820190508181036000830152615b2d81615af1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615b90602b83613f6b565b9150615b9b82615b34565b604082019050919050565b60006020820190508181036000830152615bbf81615b83565b9050919050565b60006040820190508181036000830152615be08185614393565b90508181036020830152615bf48184614393565b90509392505050565b600060a082019050615c1260008301886141ce565b615c1f60208301876141ce565b8181036040830152615c318186614393565b90508181036060830152615c458185614393565b90508181036080830152615c598184615752565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cc1602283613f6b565b9150615ccc82615c65565b604082019050919050565b60006020820190508181036000830152615cf081615cb4565b9050919050565b615d00816153ff565b82525050565b600060ff82169050919050565b615d1c81615d06565b82525050565b6000608082019050615d376000830187615cf7565b615d446020830186615d13565b615d516040830185615cf7565b615d5e6060830184615cf7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122070a523ab2c79fc0dac7c47f68ed21e72e433da6b7ff716ac513e8e6e0f6aaeaf64736f6c634300080a0033", "devdoc": { "kind": "dev", "methods": { + "accountsByToken(uint256)": { + "params": { + "id": "token id to query" + }, + "returns": { + "_0": "list of holder addresses" + } + }, "balanceOf(address,uint256)": { "params": { "account": "address to query", @@ -674,6 +858,30 @@ "returns": { "_0": "bool whether interface is supported" } + }, + "tokensByAccount(address)": { + "params": { + "account": "address to query" + }, + "returns": { + "_0": "list of token ids" + } + }, + "totalHolders(uint256)": { + "params": { + "id": "token id to query" + }, + "returns": { + "_0": "quantity of holders" + } + }, + "totalSupply(uint256)": { + "params": { + "id": "token id to query" + }, + "returns": { + "_0": "token supply" + } } }, "version": 1 @@ -681,6 +889,9 @@ "userdoc": { "kind": "user", "methods": { + "accountsByToken(uint256)": { + "notice": "query holders of given token" + }, "balanceOf(address,uint256)": { "notice": "query the balance of given token held by given address" }, @@ -701,6 +912,15 @@ }, "supportsInterface(bytes4)": { "notice": "query whether contract has registered support for given interface" + }, + "tokensByAccount(address)": { + "notice": "query tokens held by given address" + }, + "totalHolders(uint256)": { + "notice": "query total number of holders for given token" + }, + "totalSupply(uint256)": { + "notice": "query total minted supply of given token" } }, "version": 1 diff --git a/packages/contracts/deployments/ethereum/DiamondCyberDestinationUtilityFactory.json b/packages/contracts/deployments/ethereum/DiamondCyberDestinationUtilityFactory.json index 5c7d0e3..b47835a 100644 --- a/packages/contracts/deployments/ethereum/DiamondCyberDestinationUtilityFactory.json +++ b/packages/contracts/deployments/ethereum/DiamondCyberDestinationUtilityFactory.json @@ -312,7 +312,7 @@ "type": "uint256" } ], - "name": "DestinationMinted", + "name": "DropCreated", "type": "event" }, { @@ -426,13 +426,32 @@ { "indexed": true, "internalType": "uint256", - "name": "id", + "name": "tokenId", "type": "uint256" } ], "name": "URI", "type": "event" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "accountsByToken", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -481,62 +500,206 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_timeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_timeEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_priceStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_priceEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_stepDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amountCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_shareCyber", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "createDrop", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" + }, + { + "internalType": "address", + "name": "_minter", + "type": "address" } ], - "name": "getDrop", + "name": "dropMintCounter", "outputs": [ { - "components": [ - { - "internalType": "uint256", - "name": "timeStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timeEnd", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "shareCyber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "price", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minted", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "creator", - "type": "address" - } - ], - "internalType": "struct LibUtilityStorage.Drop", + "internalType": "uint256", "name": "", - "type": "tuple" + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getDrop", + "outputs": [ + { + "internalType": "uint256", + "name": "timeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "priceStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "priceEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stepDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shareCyber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minted", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getMintPriceForToken", + "outputs": [ + { + "internalType": "uint256", + "name": "mintPrice", + "type": "uint256" } ], "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_timeSpent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_priceStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_priceEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_stepDuration", + "type": "uint256" + } + ], + "name": "getPriceFor", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, { "inputs": [ { @@ -628,34 +791,9 @@ }, { "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_timeStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_timeEnd", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_price", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amountCap", - "type": "uint256" - }, { "internalType": "uint256", - "name": "_shareCyber", + "name": "_tokenId", "type": "uint256" }, { @@ -665,29 +803,10 @@ } ], "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tokenId", - "type": "uint256" - } - ], - "name": "mintEdition", "outputs": [ { "internalType": "bool", - "name": "", + "name": "success", "type": "bool" } ], @@ -810,6 +929,44 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "tokensByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "totalHolders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "totalSupply", @@ -823,6 +980,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -843,46 +1019,54 @@ "type": "function" } ], - "transactionHash": "0xba41cee1f410b0725e9f324de1f3eef391acf1f387972e6b4f0851d976c27138", + "transactionHash": "0xd5a9aa554ef2e08a6dcb4a5d6927149da657f91b4c9af5ce977d8e16e2c929b2", "receipt": { "to": "0x226Bf5293692610692E2C996C9875C914d2A7f73", "from": "0x1D8298B03E96cA6294A22ff9F1139eB6D13D11eb", "contractAddress": null, - "transactionIndex": 169, - "gasUsed": "316630", + "transactionIndex": 15, + "gasUsed": "555152", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000808000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000001", - "blockHash": "0x39a361f98867385b58d781ed8bc4a9ccc4215304b9f7684cacf9fe1b39892fc9", - "transactionHash": "0xba41cee1f410b0725e9f324de1f3eef391acf1f387972e6b4f0851d976c27138", + "blockHash": "0xa2d57b4343c4e629e977e95525a19057448a4313377622c4fa4f0537f6d567cb", + "transactionHash": "0xd5a9aa554ef2e08a6dcb4a5d6927149da657f91b4c9af5ce977d8e16e2c929b2", "logs": [ { - "transactionIndex": 169, - "blockNumber": 13222816, - "transactionHash": "0xba41cee1f410b0725e9f324de1f3eef391acf1f387972e6b4f0851d976c27138", + "transactionIndex": 15, + "blockNumber": 13850206, + "transactionHash": "0xd5a9aa554ef2e08a6dcb4a5d6927149da657f91b4c9af5ce977d8e16e2c929b2", "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", "topics": [ "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f90fd2bf6e375f9b9528c67329e3ca103bca2c7200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000fdd58e000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000006787d449000000000000000000000000000000000000000000000000000000000b885ac300000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000572b6c0500000000000000000000000000000000000000000000000000000000481c6a7500000000000000000000000000000000000000000000000000000000dcf2cad40000000000000000000000000000000000000000000000000000000005322b74000000000000000000000000000000000000000000000000000000001b02394700000000000000000000000000000000000000000000000000000000bc01188e000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e40b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b2eb96441b2640718488cc88ff45a259219571d70000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 166, - "blockHash": "0x39a361f98867385b58d781ed8bc4a9ccc4215304b9f7684cacf9fe1b39892fc9" + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000002dcf2cad40000000000000000000000000000000000000000000000000000000005322b7400000000000000000000000000000000000000000000000000000000000000000000000000000000b36c5bed1b3a1a4ac35066b16c92a60b0a9db7b500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000e00fdd58e000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000006787d449000000000000000000000000000000000000000000000000000000000b885ac300000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000572b6c0500000000000000000000000000000000000000000000000000000000481c6a75000000000000000000000000000000000000000000000000000000001b02394700000000000000000000000000000000000000000000000000000000bc01188e000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000e89341c00000000000000000000000000000000000000000000000000000000000000000000000000000000b36c5bed1b3a1a4ac35066b16c92a60b0a9db7b50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000096dcfd84100000000000000000000000000000000000000000000000000000000081cdf1200000000000000000000000000000000000000000000000000000000b3a721d1000000000000000000000000000000000000000000000000000000005c5ed16d00000000000000000000000000000000000000000000000000000000d61b0c8200000000000000000000000000000000000000000000000000000000db7fd4080000000000000000000000000000000000000000000000000000000085bff2e70000000000000000000000000000000000000000000000000000000013ba55df00000000000000000000000000000000000000000000000000000000bd85b0390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e40b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b2eb96441b2640718488cc88ff45a259219571d70000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 12, + "blockHash": "0xa2d57b4343c4e629e977e95525a19057448a4313377622c4fa4f0537f6d567cb" } ], "events": [ { - "transactionIndex": 169, - "blockNumber": 13222816, - "transactionHash": "0xba41cee1f410b0725e9f324de1f3eef391acf1f387972e6b4f0851d976c27138", + "transactionIndex": 15, + "blockNumber": 13850206, + "transactionHash": "0xd5a9aa554ef2e08a6dcb4a5d6927149da657f91b4c9af5ce977d8e16e2c929b2", "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", "topics": [ "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f90fd2bf6e375f9b9528c67329e3ca103bca2c7200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000fdd58e000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000006787d449000000000000000000000000000000000000000000000000000000000b885ac300000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000572b6c0500000000000000000000000000000000000000000000000000000000481c6a7500000000000000000000000000000000000000000000000000000000dcf2cad40000000000000000000000000000000000000000000000000000000005322b74000000000000000000000000000000000000000000000000000000001b02394700000000000000000000000000000000000000000000000000000000bc01188e000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e40b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b2eb96441b2640718488cc88ff45a259219571d70000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 166, - "blockHash": "0x39a361f98867385b58d781ed8bc4a9ccc4215304b9f7684cacf9fe1b39892fc9", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000002dcf2cad40000000000000000000000000000000000000000000000000000000005322b7400000000000000000000000000000000000000000000000000000000000000000000000000000000b36c5bed1b3a1a4ac35066b16c92a60b0a9db7b500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000e00fdd58e000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000006787d449000000000000000000000000000000000000000000000000000000000b885ac300000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000572b6c0500000000000000000000000000000000000000000000000000000000481c6a75000000000000000000000000000000000000000000000000000000001b02394700000000000000000000000000000000000000000000000000000000bc01188e000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000e89341c00000000000000000000000000000000000000000000000000000000000000000000000000000000b36c5bed1b3a1a4ac35066b16c92a60b0a9db7b50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000096dcfd84100000000000000000000000000000000000000000000000000000000081cdf1200000000000000000000000000000000000000000000000000000000b3a721d1000000000000000000000000000000000000000000000000000000005c5ed16d00000000000000000000000000000000000000000000000000000000d61b0c8200000000000000000000000000000000000000000000000000000000db7fd4080000000000000000000000000000000000000000000000000000000085bff2e70000000000000000000000000000000000000000000000000000000013ba55df00000000000000000000000000000000000000000000000000000000bd85b0390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e40b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b2eb96441b2640718488cc88ff45a259219571d70000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 12, + "blockHash": "0xa2d57b4343c4e629e977e95525a19057448a4313377622c4fa4f0537f6d567cb", "args": [ [ [ - "0xf90fd2bF6E375f9B9528C67329e3cA103Bca2C72", + "0x0000000000000000000000000000000000000000", + 2, + [ + "0xdcf2cad4", + "0x05322b74" + ] + ], + [ + "0xb36C5BED1B3A1a4aC35066B16C92a60b0a9db7b5", 1, [ "0x00fdd58e", @@ -892,8 +1076,6 @@ "0xe985e9c5", "0x572b6c05", "0x481c6a75", - "0xdcf2cad4", - "0x05322b74", "0x1b023947", "0xbc01188e", "0x2eb2c2d6", @@ -902,6 +1084,21 @@ "0x18160ddd", "0x0e89341c" ] + ], + [ + "0xb36C5BED1B3A1a4aC35066B16C92a60b0a9db7b5", + 0, + [ + "0x6dcfd841", + "0x081cdf12", + "0xb3a721d1", + "0x5c5ed16d", + "0xd61b0c82", + "0xdb7fd408", + "0x85bff2e7", + "0x13ba55df", + "0xbd85b039" + ] ] ], "0x226Bf5293692610692E2C996C9875C914d2A7f73", @@ -911,8 +1108,8 @@ "eventSignature": "DiamondCut((address,uint8,bytes4[])[],address,bytes)" } ], - "blockNumber": 13222816, - "cumulativeGasUsed": "9439698", + "blockNumber": 13850206, + "cumulativeGasUsed": "1265417", "status": 1, "byzantium": true }, @@ -941,31 +1138,46 @@ ] ], { - "facetAddress": "0xf90fd2bF6E375f9B9528C67329e3cA103Bca2C72", + "facetAddress": "0xb36C5BED1B3A1a4aC35066B16C92a60b0a9db7b5", "functionSelectors": [ + "0x6dcfd841", "0x00fdd58e", "0x4e1273f4", + "0x081cdf12", + "0xb3a721d1", "0x6787d449", + "0x5c5ed16d", + "0xd61b0c82", "0x0b885ac3", "0xe985e9c5", "0x572b6c05", "0x481c6a75", - "0xdcf2cad4", - "0x05322b74", + "0xdb7fd408", "0x1b023947", "0xbc01188e", "0x2eb2c2d6", "0xf242432a", "0xa22cb465", "0x01ffc9a7", + "0x85bff2e7", + "0x13ba55df", "0x18160ddd", + "0xbd85b039", "0x0e89341c" ] } ], "diamondCut": [ { - "facetAddress": "0xf90fd2bF6E375f9B9528C67329e3cA103Bca2C72", + "facetAddress": "0x0000000000000000000000000000000000000000", + "functionSelectors": [ + "0xdcf2cad4", + "0x05322b74" + ], + "action": 2 + }, + { + "facetAddress": "0xb36C5BED1B3A1a4aC35066B16C92a60b0a9db7b5", "functionSelectors": [ "0x00fdd58e", "0x4e1273f4", @@ -974,8 +1186,6 @@ "0xe985e9c5", "0x572b6c05", "0x481c6a75", - "0xdcf2cad4", - "0x05322b74", "0x1b023947", "0xbc01188e", "0x2eb2c2d6", @@ -985,6 +1195,21 @@ "0x0e89341c" ], "action": 1 + }, + { + "facetAddress": "0xb36C5BED1B3A1a4aC35066B16C92a60b0a9db7b5", + "functionSelectors": [ + "0x6dcfd841", + "0x081cdf12", + "0xb3a721d1", + "0x5c5ed16d", + "0xd61b0c82", + "0xdb7fd408", + "0x85bff2e7", + "0x13ba55df", + "0xbd85b039" + ], + "action": 0 } ], "execute": { @@ -2074,6 +2299,2085 @@ "storage": [], "types": null } + }, + { + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "internalType": "struct Diamond.DiamondArgs", + "name": "_args", + "type": "tuple" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "facetFunctionSelectors_", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "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": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "DestinationMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Minted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getDrop", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shareCyber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minted", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "creator", + "type": "address" + } + ], + "internalType": "struct LibUtilityStorage.Drop", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "address", + "name": "_manager", + "type": "address" + }, + { + "internalType": "address", + "name": "_trustedForwarder", + "type": "address" + }, + { + "internalType": "address", + "name": "_opensea", + "type": "address" + }, + { + "internalType": "address", + "name": "_oncyber", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "isTrustedForwarder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "manager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_timeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_timeEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amountCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_shareCyber", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "mintEdition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "minterNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oncyber", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "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": "status", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xba41cee1f410b0725e9f324de1f3eef391acf1f387972e6b4f0851d976c27138", + "receipt": { + "to": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "from": "0x1D8298B03E96cA6294A22ff9F1139eB6D13D11eb", + "contractAddress": null, + "transactionIndex": 169, + "gasUsed": "316630", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000808000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x39a361f98867385b58d781ed8bc4a9ccc4215304b9f7684cacf9fe1b39892fc9", + "transactionHash": "0xba41cee1f410b0725e9f324de1f3eef391acf1f387972e6b4f0851d976c27138", + "logs": [ + { + "transactionIndex": 169, + "blockNumber": 13222816, + "transactionHash": "0xba41cee1f410b0725e9f324de1f3eef391acf1f387972e6b4f0851d976c27138", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f90fd2bf6e375f9b9528c67329e3ca103bca2c7200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000fdd58e000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000006787d449000000000000000000000000000000000000000000000000000000000b885ac300000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000572b6c0500000000000000000000000000000000000000000000000000000000481c6a7500000000000000000000000000000000000000000000000000000000dcf2cad40000000000000000000000000000000000000000000000000000000005322b74000000000000000000000000000000000000000000000000000000001b02394700000000000000000000000000000000000000000000000000000000bc01188e000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e40b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b2eb96441b2640718488cc88ff45a259219571d70000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 166, + "blockHash": "0x39a361f98867385b58d781ed8bc4a9ccc4215304b9f7684cacf9fe1b39892fc9" + } + ], + "events": [ + { + "transactionIndex": 169, + "blockNumber": 13222816, + "transactionHash": "0xba41cee1f410b0725e9f324de1f3eef391acf1f387972e6b4f0851d976c27138", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f90fd2bf6e375f9b9528c67329e3ca103bca2c7200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000fdd58e000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000006787d449000000000000000000000000000000000000000000000000000000000b885ac300000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000572b6c0500000000000000000000000000000000000000000000000000000000481c6a7500000000000000000000000000000000000000000000000000000000dcf2cad40000000000000000000000000000000000000000000000000000000005322b74000000000000000000000000000000000000000000000000000000001b02394700000000000000000000000000000000000000000000000000000000bc01188e000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e40b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b2eb96441b2640718488cc88ff45a259219571d70000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 166, + "blockHash": "0x39a361f98867385b58d781ed8bc4a9ccc4215304b9f7684cacf9fe1b39892fc9", + "args": [ + [ + [ + "0xf90fd2bF6E375f9B9528C67329e3cA103Bca2C72", + 1, + [ + "0x00fdd58e", + "0x4e1273f4", + "0x6787d449", + "0x0b885ac3", + "0xe985e9c5", + "0x572b6c05", + "0x481c6a75", + "0xdcf2cad4", + "0x05322b74", + "0x1b023947", + "0xbc01188e", + "0x2eb2c2d6", + "0xf242432a", + "0xa22cb465", + "0x18160ddd", + "0x0e89341c" + ] + ] + ], + "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "0x0b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b2eb96441b2640718488cc88ff45a259219571d70000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000" + ], + "event": "DiamondCut", + "eventSignature": "DiamondCut((address,uint8,bytes4[])[],address,bytes)" + } + ], + "blockNumber": 13222816, + "cumulativeGasUsed": "9439698", + "status": 1, + "byzantium": true + }, + "facets": [ + [ + "0x35D80A53F7be635f75152221d4D71CD4DCB07e5C", + [ + "0x1f931c1c" + ] + ], + [ + "0xC1bbdF9f8c0b6aE0B4d35E9A778080B691A72a3E", + [ + "0xadfca15e", + "0x7a0ed627", + "0xcdffacc6", + "0x52ef6b2c", + "0x01ffc9a7" + ] + ], + [ + "0xcfEe10af6C7A91863c2bbDbCCA3bCB5064A447BE", + [ + "0xf2fde38b", + "0x8da5cb5b" + ] + ], + { + "facetAddress": "0xf90fd2bF6E375f9B9528C67329e3cA103Bca2C72", + "functionSelectors": [ + "0x00fdd58e", + "0x4e1273f4", + "0x6787d449", + "0x0b885ac3", + "0xe985e9c5", + "0x572b6c05", + "0x481c6a75", + "0xdcf2cad4", + "0x05322b74", + "0x1b023947", + "0xbc01188e", + "0x2eb2c2d6", + "0xf242432a", + "0xa22cb465", + "0x01ffc9a7", + "0x18160ddd", + "0x0e89341c" + ] + } + ], + "diamondCut": [ + { + "facetAddress": "0xf90fd2bF6E375f9B9528C67329e3cA103Bca2C72", + "functionSelectors": [ + "0x00fdd58e", + "0x4e1273f4", + "0x6787d449", + "0x0b885ac3", + "0xe985e9c5", + "0x572b6c05", + "0x481c6a75", + "0xdcf2cad4", + "0x05322b74", + "0x1b023947", + "0xbc01188e", + "0x2eb2c2d6", + "0xf242432a", + "0xa22cb465", + "0x18160ddd", + "0x0e89341c" + ], + "action": 1 + } + ], + "execute": { + "methodName": "initialize", + "args": [ + "ipfs://", + "0xB2Eb96441b2640718488Cc88Ff45A259219571d7", + "0x9399BB24DBB5C4b782C70c2969F58716Ebbd6a3b", + "0x53d791f18155C211FF8b58671d0f7E9b50E596ad", + "0xD52b58d3a0B9d19FBABC9a9Cf98ffCDcC9a8161E" + ] + }, + "history": [ + { + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "internalType": "struct Diamond.DiamondArgs", + "name": "_args", + "type": "tuple" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "facetFunctionSelectors_", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "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": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "DestinationMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Minted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getDrop", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shareCyber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minted", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "creator", + "type": "address" + } + ], + "internalType": "struct LibUtilityStorage.Drop", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "address", + "name": "_manager", + "type": "address" + }, + { + "internalType": "address", + "name": "_trustedForwarder", + "type": "address" + }, + { + "internalType": "address", + "name": "_opensea", + "type": "address" + }, + { + "internalType": "address", + "name": "_oncyber", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "isTrustedForwarder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "manager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_timeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_timeEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amountCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_shareCyber", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "mintEdition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "minterNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oncyber", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "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": "status", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "receipt": { + "to": "0xB812f503607Ee2259E9607Cb5E5836B550ac6492", + "from": "0x1D8298B03E96cA6294A22ff9F1139eB6D13D11eb", + "contractAddress": null, + "transactionIndex": 214, + "gasUsed": "2591193", + "logsBloom": "0x00000010000000000000000000000010000000000000800000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000808000000000000000000020000020000000000000800000000000000000000000000000000400020000000000000000000004000001000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000001000004000000000800000000000000000000000000020000000000000800020000000000000000000000000000000000000000000000000000000000000008001", + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef", + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "logs": [ + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000022000000000000000000000000035d80a53f7be635f75152221d4d71cd4dcb07e5c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000c1bbdf9f8c0b6ae0b4d35e9a778080b691a72a3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005adfca15e000000000000000000000000000000000000000000000000000000007a0ed62700000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c0000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000000000000000000000000000cfee10af6c7a91863c2bbdbcca3bcb5064a447be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000002f2fde38b000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 314, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + }, + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000b812f503607ee2259e9607cb5e5836b550ac6492" + ], + "data": "0x", + "logIndex": 315, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + }, + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0xB812f503607Ee2259E9607Cb5E5836B550ac6492", + "topics": [ + "0x644ca5b0a8b0418e9faf3880659eeb84eaad45ad838b0173808e5ca72f5efc49" + ], + "data": "0x000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73", + "logIndex": 316, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + }, + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b72f15331e91ce912b5c39822b79505a909084aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000fdd58e000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000006787d449000000000000000000000000000000000000000000000000000000000b885ac300000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000572b6c0500000000000000000000000000000000000000000000000000000000481c6a7500000000000000000000000000000000000000000000000000000000dcf2cad40000000000000000000000000000000000000000000000000000000005322b74000000000000000000000000000000000000000000000000000000001b02394700000000000000000000000000000000000000000000000000000000bc01188e000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e40b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000dd6243aa1226994a0fa54e3cb076c641f25b746d0000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 317, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + }, + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000b812f503607ee2259e9607cb5e5836b550ac6492", + "0x0000000000000000000000001d8298b03e96ca6294a22ff9f1139eb6d13d11eb" + ], + "data": "0x", + "logIndex": 318, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + } + ], + "events": [ + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000022000000000000000000000000035d80a53f7be635f75152221d4d71cd4dcb07e5c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000c1bbdf9f8c0b6ae0b4d35e9a778080b691a72a3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005adfca15e000000000000000000000000000000000000000000000000000000007a0ed62700000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c0000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000000000000000000000000000cfee10af6c7a91863c2bbdbcca3bcb5064a447be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000002f2fde38b000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 314, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + }, + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000b812f503607ee2259e9607cb5e5836b550ac6492" + ], + "data": "0x", + "logIndex": 315, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + }, + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0xB812f503607Ee2259E9607Cb5E5836B550ac6492", + "topics": [ + "0x644ca5b0a8b0418e9faf3880659eeb84eaad45ad838b0173808e5ca72f5efc49" + ], + "data": "0x000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73", + "logIndex": 316, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef", + "args": [ + "0x226Bf5293692610692E2C996C9875C914d2A7f73" + ], + "event": "DiamondCreated", + "eventSignature": "DiamondCreated(address)" + }, + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000226bf5293692610692e2c996c9875c914d2a7f73000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b72f15331e91ce912b5c39822b79505a909084aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000fdd58e000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000006787d449000000000000000000000000000000000000000000000000000000000b885ac300000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000572b6c0500000000000000000000000000000000000000000000000000000000481c6a7500000000000000000000000000000000000000000000000000000000dcf2cad40000000000000000000000000000000000000000000000000000000005322b74000000000000000000000000000000000000000000000000000000001b02394700000000000000000000000000000000000000000000000000000000bc01188e000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e40b885ac300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000dd6243aa1226994a0fa54e3cb076c641f25b746d0000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000053d791f18155c211ff8b58671d0f7e9b50e596ad000000000000000000000000d52b58d3a0b9d19fbabc9a9cf98ffcdcc9a8161e0000000000000000000000000000000000000000000000000000000000000007697066733a2f2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 317, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + }, + { + "transactionIndex": 214, + "blockNumber": 13219001, + "transactionHash": "0x8d2e45503b39bf0b43c4790a98f42a4e924881d460f13a33c3cb116d82064185", + "address": "0x226Bf5293692610692E2C996C9875C914d2A7f73", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000b812f503607ee2259e9607cb5e5836b550ac6492", + "0x0000000000000000000000001d8298b03e96ca6294a22ff9f1139eb6d13d11eb" + ], + "data": "0x", + "logIndex": 318, + "blockHash": "0x9f112207813abba278d6136a625d61e87318a56098f162764d69f8af19965eef" + } + ], + "blockNumber": 13219001, + "cumulativeGasUsed": "22073442", + "status": 1, + "byzantium": true + }, + "args": [ + "0xB812f503607Ee2259E9607Cb5E5836B550ac6492" + ], + "solcInputHash": "1d060b65b8264d57d416f20cb1fe798a", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"internalType\":\"struct Diamond.DiamondArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.7/diamond/Diamond.sol\":\"Diamond\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.7/diamond/Diamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.7.6;\\npragma experimental ABIEncoderV2;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535\\n* \\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\nimport \\\"./interfaces/IDiamondLoupe.sol\\\";\\nimport \\\"./interfaces/IDiamondCut.sol\\\";\\nimport \\\"./interfaces/IERC173.sol\\\";\\nimport \\\"./interfaces/IERC165.sol\\\";\\n\\ncontract Diamond {\\n // more arguments are added to this struct\\n // this avoids stack too deep errors\\n struct DiamondArgs {\\n address owner;\\n }\\n\\n constructor(IDiamondCut.FacetCut[] memory _diamondCut, DiamondArgs memory _args) payable {\\n LibDiamond.diamondCut(_diamondCut, address(0), new bytes(0));\\n LibDiamond.setContractOwner(_args.owner);\\n\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n // adding ERC165 data\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n ds.supportedInterfaces[type(IDiamondCut).interfaceId] = true;\\n ds.supportedInterfaces[type(IDiamondLoupe).interfaceId] = true;\\n ds.supportedInterfaces[type(IERC173).interfaceId] = true;\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n assembly {\\n calldatacopy(0, 0, calldatasize())\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n returndatacopy(0, 0, returndatasize())\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x968d41f1fbb08e012a0617f3a8b865c06f60d783e043b675280741b791216202\",\"license\":\"MIT\"},\"solc_0.7/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.7.6;\\npragma experimental ABIEncoderV2;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xfb3c1af58cd19e1e49f065e33c7c68045ce451c3e16920614979624c44faf892\",\"license\":\"MIT\"},\"solc_0.7/diamond/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.7.6;\\npragma experimental ABIEncoderV2;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xf4bc76153335588e7cb5fe1c9701857fd2ae0340ad94976adbf1c49054f82dfe\",\"license\":\"MIT\"},\"solc_0.7/diamond/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.7.6;\\npragma experimental ABIEncoderV2;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe3ccc62939f8e880bdd4d5a34b05ccb9576810b8e999df6d16124e51019a0603\",\"license\":\"MIT\"},\"solc_0.7/diamond/interfaces/IERC173.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.7.6;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\",\"keccak256\":\"0xa4023156092d7cb99c69e21bc95b910e13c54e582d6814601579bc2fb594ecf8\",\"license\":\"MIT\"},\"solc_0.7/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.7.6;\\npragma experimental ABIEncoderV2;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint16 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // uint16 selectorCount = uint16(diamondStorage().selectors.length);\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length);\\n ds.facetAddresses.push(_facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector);\\n ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress;\\n ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition;\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length);\\n ds.facetAddresses.push(_facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(oldFacetAddress, selector);\\n // add function\\n ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector);\\n ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress;\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(oldFacetAddress, selector);\\n }\\n }\\n\\n function removeFunction(address _facetAddress, bytes4 _selector) internal {\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint16(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = uint16(facetAddressPosition);\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x4eac03abb9864ad822b50481746c975a8e3e3278e179032cfc1b4b9c8e2320bc\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405260405162002d4538038062002d45833981016040819052620000269162000db2565b604080516000808252602082019092526200004e918491620000f560201b620000db1760201c565b620000688160000151620002b560201b6200027d1760201c565b60006200007f6200031760201b620003021760201c565b6301ffc9a760e01b600090815260039091016020526040808220805460ff1990811660019081179092556307e4c70760e21b845282842080548216831790556348e2b09360e01b845282842080548216831790556307f5828d60e41b845291909220805490911690911790555062001442915050565b60005b8351811015620002665760008482815181106200011157fe5b6020026020010151602001519050600060028111156200012d57fe5b8160028111156200013a57fe5b14156200018957620001838583815181106200015257fe5b6020026020010151600001518684815181106200016b57fe5b6020026020010151604001516200033b60201b60201c565b6200025c565b60018160028111156200019857fe5b1415620001e15762000183858381518110620001b057fe5b602002602001015160000151868481518110620001c957fe5b6020026020010151604001516200054e60201b60201c565b6002816002811115620001f057fe5b14156200023957620001838583815181106200020857fe5b6020026020010151600001518684815181106200022157fe5b6020026020010151604001516200077860201b60201c565b60405162461bcd60e51b815260040162000253906200117c565b60405180910390fd5b50600101620000f8565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516200029c9392919062000f25565b60405180910390a1620002b082826200083f565b505050565b6000620002c162000317565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60008151116200035f5760405162461bcd60e51b81526004016200025390620010d4565b60006200036b62000317565b90506001600160a01b038316620003965760405162461bcd60e51b81526004016200025390620011c3565b6001600160a01b038316600090815260018201602052604090205461ffff81166200043c57620003e08460405180606001604052806024815260200162002d21602491396200097c565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b8351811015620005475760008482815181106200045857fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620004ab5760405162461bcd60e51b81526004016200025390620012ba565b506001600160a01b0386166000818152600186810160209081526040808420805480850182559085528285206008820401805463ffffffff60079093166004026101000a928302191660e089901c929092029190911790556001600160e01b0319909516835287905292902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff86160217905591820191016200043f565b5050505050565b6000815111620005725760405162461bcd60e51b81526004016200025390620010d4565b60006200057e62000317565b90506001600160a01b038316620005a95760405162461bcd60e51b81526004016200025390620011c3565b6001600160a01b038316600090815260018201602052604090205461ffff81166200064f57620005f38460405180606001604052806024815260200162002d21602491396200097c565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b8351811015620005475760008482815181106200066b57fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716811415620006c45760405162461bcd60e51b8152600401620002539062001317565b620006d08183620009a0565b506001600160e01b03198116600081815260208681526040808320805461ffff60a01b1916600160a01b61ffff8a16021781556001600160a01b038b168085526001808b018552928520805480850182559086528486206008820401805463ffffffff60079093166004026101000a928302191660e09990991c91909102979097179096559390925286905281546001600160a01b0319169092179055918201910162000652565b60008151116200079c5760405162461bcd60e51b81526004016200025390620010d4565b6000620007a862000317565b90506001600160a01b03831615620007d45760405162461bcd60e51b8152600401620002539062001374565b60005b825181101562000839576000838281518110620007f057fe5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b03166200082e8183620009a0565b5050600101620007d7565b50505050565b6001600160a01b0382166200087657805115620008705760405162461bcd60e51b8152600401620002539062001031565b62000978565b60008151116200089a5760405162461bcd60e51b815260040162000253906200120f565b6001600160a01b0382163014620008d057620008d08260405180606001604052806028815260200162002cf9602891396200097c565b600080836001600160a01b031683604051620008ed919062000f07565b600060405180830381855af49150503d80600081146200092a576040519150601f19603f3d011682016040523d82523d6000602084013e6200092f565b606091505b50915091508162000839578051156200095e578060405162461bcd60e51b815260040162000253919062001015565b60405162461bcd60e51b815260040162000253906200108e565b5050565b813b8181620008395760405162461bcd60e51b815260040162000253919062001015565b6000620009ac62000317565b90506001600160a01b038316620009d75760405162461bcd60e51b815260040162000253906200111f565b6001600160a01b03831630141562000a035760405162461bcd60e51b815260040162000253906200126c565b6001600160e01b03198216600090815260208281526040808320546001600160a01b03871684526001850190925290912054600160a01b90910461ffff16906000190180821462000b27576001600160a01b0385166000908152600184016020526040812080548390811062000a7557fe5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b92508291908590811062000ac157fe5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b0385166000908152600184016020526040902080548062000b4b57fe5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b031916905580620005475760028301546001600160a01b03861660009081526001858101602052604090912001546000199091019061ffff1680821462000c6357600085600201838154811062000bec57fe5b6000918252602090912001546002870180546001600160a01b03909216925082918490811062000c1857fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b8460020180548062000c7157fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b80516001600160a01b038116811462000cdb57600080fd5b919050565b600082601f83011262000cf1578081fd5b8151602062000d0a62000d0483620013f5565b620013d1565b828152818101908583018385028701840188101562000d27578586fd5b855b8581101562000d5d5781516001600160e01b03198116811462000d4a578788fd5b8452928401929084019060010162000d29565b5090979650505050505050565b60006020828403121562000d7c578081fd5b604051602081016001600160401b038111828210171562000d9957fe5b60405290508062000daa8362000cc3565b905292915050565b6000806040838503121562000dc5578182fd5b82516001600160401b038082111562000ddc578384fd5b818501915085601f83011262000df0578384fd5b8151602062000e0362000d0483620013f5565b82815281810190858301885b8581101562000eaa57815188016060818e03601f1901121562000e30578a8bfd5b604051606081018181108a8211171562000e4657fe5b60405262000e5682880162000cc3565b815260408201516003811062000e6a578c8dfd5b8188015260608201518981111562000e80578c8dfd5b62000e908f898386010162000ce0565b604083015250855250928401929084019060010162000e0f565b5050809750505062000ebf8882890162000d6a565b9450505050509250929050565b6001600160a01b03169052565b6000815180845262000ef381602086016020860162001413565b601f01601f19169290920160200192915050565b6000825162000f1b81846020870162001413565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101562000fe257898303607f19018652815180516001600160a01b0316845284810151898501906003811062000f7f57fe5b858701526040918201519185018a9052815190819052908501908a90898601905b8083101562000fcc5783516001600160e01b031916825292870192600192909201919087019062000fa0565b5097860197945050509083019060010162000f4b565b505062000ff28289018b62000ecc565b878103604089015262001006818a62000ed9565b9b9a5050505050505050505050565b6000602082526200102a602083018462000ed9565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b6040518181016001600160401b0381118282101715620013ed57fe5b604052919050565b60006001600160401b038211156200140957fe5b5060209081020190565b60005b838110156200143057818101518382015260200162001416565b83811115620008395750506000910152565b6118a780620014526000396000f3fe60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906115f3565b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100d6573d6000f35b3d6000fd5b60005b83518110156102325760008482815181106100f557fe5b60200260200101516020015190506000600281111561011057fe5b81600281111561011c57fe5b141561015f5761015a85838151811061013157fe5b60200260200101516000015186848151811061014957fe5b602002602001015160400151610326565b610229565b600181600281111561016d57fe5b14156101ab5761015a85838151811061018257fe5b60200260200101516000015186848151811061019a57fe5b60200260200101516040015161065e565b60028160028111156101b957fe5b14156101f75761015a8583815181106101ce57fe5b6020026020010151600001518684815181106101e657fe5b6020026020010151604001516109ab565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611539565b506001016100de565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161026693929190611282565b60405180910390a16102788282610acb565b505050565b6000610287610302565b60048101805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000815111610361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b600061036b610302565b905073ffffffffffffffffffffffffffffffffffffffff83166103ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611596565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff81166104ab5761040d8460405180606001604052806024815260200161184e60249139610c81565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b83518110156106575760008482815181106104c557fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610554576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906116e2565b5073ffffffffffffffffffffffffffffffffffffffff86166000818152600186810160209081526040808420805480850182559085528285206008820401805463ffffffff60079093166004026101000a928302191660e089901c929092029190911790557fffffffff00000000000000000000000000000000000000000000000000000000909516835287905292902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff86160217905591820191016104ae565b5050505050565b6000815111610699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b60006106a3610302565b905073ffffffffffffffffffffffffffffffffffffffff83166106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611596565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff81166107e3576107458460405180606001604052806024815260200161184e60249139610c81565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b83518110156106575760008482815181106107fd57fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061173f565b61089c8183610cbc565b507fffffffff00000000000000000000000000000000000000000000000000000000811660008181526020868152604080832080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8a160217815573ffffffffffffffffffffffffffffffffffffffff8b168085526001808b018552928520805480850182559086528486206008820401805463ffffffff60079093166004026101000a928302191660e09990991c91909102979097179096559390925286905281547fffffffffffffffffffffffff000000000000000000000000000000000000000016909217905591820191016107e6565b60008151116109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b60006109f0610302565b905073ffffffffffffffffffffffffffffffffffffffff831615610a40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061179c565b60005b8251811015610ac5576000838281518110610a5a57fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610abb8183610cbc565b5050600101610a43565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b2457805115610b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906113c5565b610c7d565b6000815111610b5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611628565b73ffffffffffffffffffffffffffffffffffffffff82163014610b9e57610b9e8260405180606001604052806028815260200161182660289139610c81565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610bc69190611266565b600060405180830381855af49150503d8060008114610c01576040519150601f19603f3d011682016040523d82523d6000602084013e610c06565b606091505b509150915081610ac557805115610c4b57806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae91906113ab565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611422565b5050565b813b8181610ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae91906113ab565b6000610cc6610302565b905073ffffffffffffffffffffffffffffffffffffffff8316610d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906114dc565b73ffffffffffffffffffffffffffffffffffffffff8316301415610d65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611685565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152602082815260408083205473ffffffffffffffffffffffffffffffffffffffff8716845260018501909252909120547401000000000000000000000000000000000000000090910461ffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01808214610f375773ffffffffffffffffffffffffffffffffffffffff851660009081526001840160205260408120805483908110610e3657fe5b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610e8e57fe5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff000000000000000000000000000000000000000000000000000000009290921682528490526040902080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff851660009081526001840160205260409020805480610f6757fe5b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000861682528490526040902080547fffffffffffffffffffff000000000000000000000000000000000000000000001690558061065757600283015473ffffffffffffffffffffffffffffffffffffffff861660009081526001858101602052604090912001547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019061ffff1680821461114357600085600201838154811061107e57fe5b60009182526020909120015460028701805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106110b657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526001878101909252604090200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83161790555b8460020180548061115057fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff89168252600187810190915260409091200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905550505050505050565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526112348160208601602086016117f9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516112788184602087016117f9565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101561137c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403018652815188840173ffffffffffffffffffffffffffffffffffffffff8251168552858201516003811061130457fe5b858701526040918201519185018a9052815190819052908501908a90898601905b808310156113675783517fffffffff00000000000000000000000000000000000000000000000000000000168252928701926001929092019190870190611325565b509786019794505050908301906001016112a8565b505061138a8289018b611202565b878103604089015261139c818a61121c565b9b9a5050505050505050505050565b6000602082526113be602083018461121c565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560408201527f7665727465640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201527f6163657420746f20637574000000000000000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560408201527f74416374696f6e00000000000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201527f6520616464726573732830290000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201527f7461626c652066756e6374696f6e000000000000000000000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b60005b838110156118145781810151838201526020016117fc565b83811115610ac5575050600091015256fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122054a3c3a118803545231f43700030cb5e290869be0182196a4a05e7d4a1b71d7e64736f6c634300070600334c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465", + "deployedBytecode": "0x60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906115f3565b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100d6573d6000f35b3d6000fd5b60005b83518110156102325760008482815181106100f557fe5b60200260200101516020015190506000600281111561011057fe5b81600281111561011c57fe5b141561015f5761015a85838151811061013157fe5b60200260200101516000015186848151811061014957fe5b602002602001015160400151610326565b610229565b600181600281111561016d57fe5b14156101ab5761015a85838151811061018257fe5b60200260200101516000015186848151811061019a57fe5b60200260200101516040015161065e565b60028160028111156101b957fe5b14156101f75761015a8583815181106101ce57fe5b6020026020010151600001518684815181106101e657fe5b6020026020010151604001516109ab565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611539565b506001016100de565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161026693929190611282565b60405180910390a16102788282610acb565b505050565b6000610287610302565b60048101805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000815111610361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b600061036b610302565b905073ffffffffffffffffffffffffffffffffffffffff83166103ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611596565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff81166104ab5761040d8460405180606001604052806024815260200161184e60249139610c81565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b83518110156106575760008482815181106104c557fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610554576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906116e2565b5073ffffffffffffffffffffffffffffffffffffffff86166000818152600186810160209081526040808420805480850182559085528285206008820401805463ffffffff60079093166004026101000a928302191660e089901c929092029190911790557fffffffff00000000000000000000000000000000000000000000000000000000909516835287905292902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff86160217905591820191016104ae565b5050505050565b6000815111610699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b60006106a3610302565b905073ffffffffffffffffffffffffffffffffffffffff83166106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611596565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff81166107e3576107458460405180606001604052806024815260200161184e60249139610c81565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b83518110156106575760008482815181106107fd57fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061173f565b61089c8183610cbc565b507fffffffff00000000000000000000000000000000000000000000000000000000811660008181526020868152604080832080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8a160217815573ffffffffffffffffffffffffffffffffffffffff8b168085526001808b018552928520805480850182559086528486206008820401805463ffffffff60079093166004026101000a928302191660e09990991c91909102979097179096559390925286905281547fffffffffffffffffffffffff000000000000000000000000000000000000000016909217905591820191016107e6565b60008151116109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b60006109f0610302565b905073ffffffffffffffffffffffffffffffffffffffff831615610a40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061179c565b60005b8251811015610ac5576000838281518110610a5a57fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610abb8183610cbc565b5050600101610a43565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b2457805115610b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906113c5565b610c7d565b6000815111610b5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611628565b73ffffffffffffffffffffffffffffffffffffffff82163014610b9e57610b9e8260405180606001604052806028815260200161182660289139610c81565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610bc69190611266565b600060405180830381855af49150503d8060008114610c01576040519150601f19603f3d011682016040523d82523d6000602084013e610c06565b606091505b509150915081610ac557805115610c4b57806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae91906113ab565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611422565b5050565b813b8181610ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae91906113ab565b6000610cc6610302565b905073ffffffffffffffffffffffffffffffffffffffff8316610d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906114dc565b73ffffffffffffffffffffffffffffffffffffffff8316301415610d65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611685565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152602082815260408083205473ffffffffffffffffffffffffffffffffffffffff8716845260018501909252909120547401000000000000000000000000000000000000000090910461ffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01808214610f375773ffffffffffffffffffffffffffffffffffffffff851660009081526001840160205260408120805483908110610e3657fe5b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610e8e57fe5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff000000000000000000000000000000000000000000000000000000009290921682528490526040902080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff851660009081526001840160205260409020805480610f6757fe5b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000861682528490526040902080547fffffffffffffffffffff000000000000000000000000000000000000000000001690558061065757600283015473ffffffffffffffffffffffffffffffffffffffff861660009081526001858101602052604090912001547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019061ffff1680821461114357600085600201838154811061107e57fe5b60009182526020909120015460028701805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106110b657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526001878101909252604090200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83161790555b8460020180548061115057fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff89168252600187810190915260409091200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905550505050505050565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526112348160208601602086016117f9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516112788184602087016117f9565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101561137c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403018652815188840173ffffffffffffffffffffffffffffffffffffffff8251168552858201516003811061130457fe5b858701526040918201519185018a9052815190819052908501908a90898601905b808310156113675783517fffffffff00000000000000000000000000000000000000000000000000000000168252928701926001929092019190870190611325565b509786019794505050908301906001016112a8565b505061138a8289018b611202565b878103604089015261139c818a61121c565b9b9a5050505050505050505050565b6000602082526113be602083018461121c565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560408201527f7665727465640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201527f6163657420746f20637574000000000000000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560408201527f74416374696f6e00000000000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201527f6520616464726573732830290000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201527f7461626c652066756e6374696f6e000000000000000000000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b60005b838110156118145781810151838201526020016117fc565b83811115610ac5575050600091015256fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122054a3c3a118803545231f43700030cb5e290869be0182196a4a05e7d4a1b71d7e64736f6c63430007060033", + "facets": [ + [ + "0x35D80A53F7be635f75152221d4D71CD4DCB07e5C", + [ + "0x1f931c1c" + ] + ], + [ + "0xC1bbdF9f8c0b6aE0B4d35E9A778080B691A72a3E", + [ + "0xadfca15e", + "0x7a0ed627", + "0xcdffacc6", + "0x52ef6b2c", + "0x01ffc9a7" + ] + ], + [ + "0xcfEe10af6C7A91863c2bbDbCCA3bCB5064A447BE", + [ + "0xf2fde38b", + "0x8da5cb5b" + ] + ], + { + "facetAddress": "0xb72f15331e91CE912B5C39822B79505A909084AA", + "functionSelectors": [ + "0x00fdd58e", + "0x4e1273f4", + "0x6787d449", + "0x0b885ac3", + "0xe985e9c5", + "0x572b6c05", + "0x481c6a75", + "0xdcf2cad4", + "0x05322b74", + "0x1b023947", + "0xbc01188e", + "0x2eb2c2d6", + "0xf242432a", + "0xa22cb465", + "0x01ffc9a7", + "0x18160ddd", + "0x0e89341c" + ] + } + ], + "diamondCut": [], + "execute": { + "methodName": "initialize", + "args": [ + "ipfs://", + "0xB2Eb96441b2640718488Cc88Ff45A259219571d7", + "0x9399BB24DBB5C4b782C70c2969F58716Ebbd6a3b", + "0x53d791f18155C211FF8b58671d0f7E9b50E596ad", + "0xD52b58d3a0B9d19FBABC9a9Cf98ffCDcC9a8161E" + ] + }, + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } + } + ] } ] } \ No newline at end of file diff --git a/packages/contracts/deployments/ethereum/solcInputs/73ba99ade12a3bc48cccd3ddc0c9f9bb.json b/packages/contracts/deployments/ethereum/solcInputs/73ba99ade12a3bc48cccd3ddc0c9f9bb.json new file mode 100644 index 0000000..6386a28 --- /dev/null +++ b/packages/contracts/deployments/ethereum/solcInputs/73ba99ade12a3bc48cccd3ddc0c9f9bb.json @@ -0,0 +1,151 @@ +{ + "language": "Solidity", + "sources": { + "contracts/BaseRelayRecipient/BaseRelayRecipient.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.10;\n\nimport '@openzeppelin/contracts/utils/Context.sol';\nimport './BaseRelayRecipientStorage.sol';\n\n/**\n * A base contract to be inherited by any contract that want to receive relayed transactions\n * A subclass must use \"_msgSender()\" instead of \"msg.sender\"\n */\n\nabstract contract BaseRelayRecipient is Context {\n /*\n * require a function to be called through GSN only\n */\n // modifier trustedForwarderOnly() {\n // require(msg.sender == address(s.trustedForwarder), \"Function can only be called through the trusted Forwarder\");\n // _;\n // }\n\n function isTrustedForwarder(address forwarder) public view returns (bool) {\n return forwarder == BaseRelayRecipientStorage.layout().trustedForwarder;\n }\n\n /**\n * return the sender of this call.\n * if the call came through our trusted forwarder, return the original sender.\n * otherwise, return `msg.sender`.\n * should be used in the contract anywhere instead of msg.sender\n */\n function _msgSender() internal view virtual override returns (address ret) {\n if (msg.data.length >= 24 && isTrustedForwarder(msg.sender)) {\n // At this point we know that the sender is a trusted forwarder,\n // so we trust that the last bytes of msg.data are the verified sender address.\n // extract sender address from the end of msg.data\n assembly {\n ret := shr(96, calldataload(sub(calldatasize(), 20)))\n }\n } else {\n return msg.sender;\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "contracts/BaseRelayRecipient/BaseRelayRecipientStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.10;\n\nlibrary BaseRelayRecipientStorage {\n bytes32 internal constant STORAGE_SLOT =\n keccak256('diamond.storage.BaseRelayRecipientStorage');\n\n struct Layout {\n /*\n * Forwarder singleton we accept calls from\n */\n address trustedForwarder;\n }\n\n function layout() internal pure returns (Layout storage lay) {\n bytes32 slot = STORAGE_SLOT;\n assembly {\n lay.slot := slot\n }\n }\n}\n" + }, + "contracts/CyberTokenBase.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\n//\nimport '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';\nimport '@openzeppelin/contracts/utils/Counters.sol';\nimport '@solidstate/contracts/token/ERC1155/IERC1155.sol';\nimport './BaseRelayRecipient/BaseRelayRecipient.sol';\nimport './BaseRelayRecipient/BaseRelayRecipientStorage.sol';\nimport './Diamond/LibDiamond.sol';\nimport './ERC1155URI/ERC1155URI.sol';\n\nimport './libraries/LibAppStorage.sol';\n\ncontract CyberTokenBase is BaseRelayRecipient, ERC1155URI {\n using ECDSA for bytes32;\n using Counters for Counters.Counter;\n\n event Minted(\n address indexed account,\n uint256 indexed tokenId,\n uint256 indexed amount\n );\n\n function initialize(\n string memory _uri,\n address _manager,\n address _trustedForwarder,\n address _opensea,\n address _oncyber\n ) public virtual {\n require(LibDiamond.diamondStorage().contractOwner == msg.sender, 'NO');\n\n BaseRelayRecipientStorage.layout().trustedForwarder = _trustedForwarder;\n LibDiamond.diamondStorage().supportedInterfaces[\n type(IERC1155).interfaceId\n ] = true;\n setURI(_uri);\n LibAppStorage.layout().manager = _manager;\n LibAppStorage.layout().opensea = _opensea;\n LibAppStorage.layout().oncyber = _oncyber;\n }\n\n function totalSupply() public view returns (uint256) {\n return LibAppStorage.layout().totalSupply.current();\n }\n\n function manager() public view returns (address) {\n return LibAppStorage.layout().manager;\n }\n\n function oncyber() public view returns (address) {\n return LibAppStorage.layout().oncyber;\n }\n\n function minterNonce(address _minter) public view returns (uint256) {\n return LibAppStorage.layout().minterNonce[_minter].current();\n }\n}\n" + }, + "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS,\n InvalidSignatureV\n }\n\n function _throwError(RecoverError error) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert(\"ECDSA: invalid signature\");\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert(\"ECDSA: invalid signature length\");\n } else if (error == RecoverError.InvalidSignatureS) {\n revert(\"ECDSA: invalid signature 's' value\");\n } else if (error == RecoverError.InvalidSignatureV) {\n revert(\"ECDSA: invalid signature 'v' value\");\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature` or error string. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n *\n * _Available since v4.3._\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n // Check the signature length\n // - case 65: r,s,v signature (standard)\n // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else if (signature.length == 64) {\n bytes32 r;\n bytes32 vs;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n assembly {\n r := mload(add(signature, 0x20))\n vs := mload(add(signature, 0x40))\n }\n return tryRecover(hash, r, vs);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength);\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, signature);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address, RecoverError) {\n bytes32 s;\n uint8 v;\n assembly {\n s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n v := add(shr(255, vs), 27)\n }\n return tryRecover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n *\n * _Available since v4.2._\n */\n function recover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n *\n * _Available since v4.3._\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS);\n }\n if (v != 27 && v != 28) {\n return (address(0), RecoverError.InvalidSignatureV);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature);\n }\n\n return (signer, RecoverError.NoError);\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n _throwError(error);\n return recovered;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from `s`. This\n * produces hash corresponding to the one signed with the\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n * JSON-RPC method as part of EIP-191.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n }\n\n /**\n * @dev Returns an Ethereum Signed Typed Data, created from a\n * `domainSeparator` and a `structHash`. This produces hash corresponding\n * to the one signed with the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n * JSON-RPC method as part of EIP-712.\n *\n * See {recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Counters.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.0 (utils/Counters.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @title Counters\n * @author Matt Condon (@shrugs)\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\n *\n * Include with `using Counters for Counters.Counter;`\n */\nlibrary Counters {\n struct Counter {\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\n // this feature: see https://github.com/ethereum/solidity/issues/4637\n uint256 _value; // default: 0\n }\n\n function current(Counter storage counter) internal view returns (uint256) {\n return counter._value;\n }\n\n function increment(Counter storage counter) internal {\n unchecked {\n counter._value += 1;\n }\n }\n\n function decrement(Counter storage counter) internal {\n uint256 value = counter._value;\n require(value > 0, \"Counter: decrement overflow\");\n unchecked {\n counter._value = value - 1;\n }\n }\n\n function reset(Counter storage counter) internal {\n counter._value = 0;\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/IERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { IERC1155Internal } from './IERC1155Internal.sol';\nimport { IERC165 } from '../../introspection/IERC165.sol';\n\n/**\n * @notice ERC1155 interface\n * @dev see https://github.com/ethereum/EIPs/issues/1155\n */\ninterface IERC1155 is IERC1155Internal, IERC165 {\n /**\n * @notice query the balance of given token held by given address\n * @param account address to query\n * @param id token to query\n * @return token balance\n */\n function balanceOf(address account, uint256 id)\n external\n view\n returns (uint256);\n\n /**\n * @notice query the balances of given tokens held by given addresses\n * @param accounts addresss to query\n * @param ids tokens to query\n * @return token balances\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)\n external\n view\n returns (uint256[] memory);\n\n /**\n * @notice query approval status of given operator with respect to given address\n * @param account address to query for approval granted\n * @param operator address to query for approval received\n * @return whether operator is approved to spend tokens held by account\n */\n function isApprovedForAll(address account, address operator)\n external\n view\n returns (bool);\n\n /**\n * @notice grant approval to or revoke approval from given operator to spend held tokens\n * @param operator address whose approval status to update\n * @param status whether operator should be considered approved\n */\n function setApprovalForAll(address operator, bool status) external;\n\n /**\n * @notice transfer tokens between given addresses, checking for ERC1155Receiver implementation if applicable\n * @param from sender of tokens\n * @param to receiver of tokens\n * @param id token ID\n * @param amount quantity of tokens to transfer\n * @param data data payload\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes calldata data\n ) external;\n\n /**\n * @notice transfer batch of tokens between given addresses, checking for ERC1155Receiver implementation if applicable\n * @param from sender of tokens\n * @param to receiver of tokens\n * @param ids list of token IDs\n * @param amounts list of quantities of tokens to transfer\n * @param data data payload\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] calldata ids,\n uint256[] calldata amounts,\n bytes calldata data\n ) external;\n}\n" + }, + "contracts/Diamond/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\npragma experimental ABIEncoderV2;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nlibrary LibDiamond {\n bytes32 public constant DIAMOND_STORAGE_POSITION =\n keccak256('diamond.standard.diamond.storage');\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint16 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n}\n" + }, + "contracts/ERC1155URI/ERC1155URI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.10;\n\nimport '@solidstate/contracts/token/ERC1155/ERC1155.sol';\nimport './ERC1155URIStorage.sol';\n\nabstract contract ERC1155URI is ERC1155 {\n function uri(uint256 _tokenId)\n public\n view\n virtual\n override\n returns (string memory)\n {\n string memory tokenURI = ERC1155URIStorage.layout().tokenURIs[_tokenId];\n require(bytes(tokenURI).length != 0, 'ERC1155URI: tokenId not exist');\n return string(abi.encodePacked(ERC1155URIStorage.layout().uri, tokenURI));\n }\n\n function setURI(string memory newUri) internal virtual {\n ERC1155URIStorage.layout().uri = newUri;\n }\n\n function setTokenURI(uint256 tokenId, string memory _tokenURI)\n internal\n virtual\n {\n ERC1155URIStorage.layout().tokenURIs[tokenId] = _tokenURI;\n }\n}\n" + }, + "contracts/libraries/LibAppStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.10;\n\nimport '@openzeppelin/contracts/utils/Counters.sol';\n\n//\n\nlibrary LibAppStorage {\n bytes32 public constant STORAGE_SLOT = keccak256('app.storage');\n\n struct Layout {\n address manager;\n address opensea;\n Counters.Counter totalSupply;\n mapping(address => Counters.Counter) minterNonce;\n address oncyber;\n }\n\n function layout() internal pure returns (Layout storage lay) {\n bytes32 slot = STORAGE_SLOT;\n assembly {\n lay.slot := slot\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Strings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _HEX_SYMBOLS = \"0123456789abcdef\";\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n while (value != 0) {\n digits -= 1;\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n value /= 10;\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n if (value == 0) {\n return \"0x00\";\n }\n uint256 temp = value;\n uint256 length = 0;\n while (temp != 0) {\n length++;\n temp >>= 8;\n }\n return toHexString(value, length);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _HEX_SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/IERC1155Internal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { IERC165 } from '../../introspection/IERC165.sol';\n\n/**\n * @notice Partial ERC1155 interface needed by internal functions\n */\ninterface IERC1155Internal {\n event TransferSingle(\n address indexed operator,\n address indexed from,\n address indexed to,\n uint256 id,\n uint256 value\n );\n\n event TransferBatch(\n address indexed operator,\n address indexed from,\n address indexed to,\n uint256[] ids,\n uint256[] values\n );\n\n event ApprovalForAll(\n address indexed account,\n address indexed operator,\n bool approved\n );\n}\n" + }, + "@solidstate/contracts/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @title ERC165 interface registration interface\n * @dev see https://eips.ethereum.org/EIPS/eip-165\n */\ninterface IERC165 {\n /**\n * @notice query whether contract has registered support for given interface\n * @param interfaceId interface id\n * @return bool whether interface is supported\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@solidstate/contracts/token/ERC1155/ERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { ERC165 } from '../../introspection/ERC165.sol';\nimport { ERC1155Base, ERC1155BaseInternal } from './base/ERC1155Base.sol';\nimport { ERC1155Enumerable } from './enumerable/ERC1155Enumerable.sol';\nimport { ERC1155Metadata } from './metadata/ERC1155Metadata.sol';\n\n/**\n * @title SolidState ERC1155 implementation\n */\nabstract contract ERC1155 is\n ERC1155Base,\n ERC1155Enumerable,\n ERC1155Metadata,\n ERC165\n{\n /**\n * @inheritdoc ERC1155BaseInternal\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) internal virtual override(ERC1155BaseInternal, ERC1155Enumerable) {\n super._beforeTokenTransfer(operator, from, to, ids, amounts, data);\n }\n}\n" + }, + "contracts/ERC1155URI/ERC1155URIStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.10;\n\nlibrary ERC1155URIStorage {\n bytes32 internal constant STORAGESLOT =\n keccak256('diamond.storage.ERC1155URI');\n\n struct Layout {\n mapping(uint256 => string) tokenURIs;\n string uri;\n }\n\n function layout() internal pure returns (Layout storage lay) {\n bytes32 slot = STORAGESLOT;\n assembly {\n lay.slot := slot\n }\n }\n}\n" + }, + "@solidstate/contracts/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { IERC165 } from './IERC165.sol';\nimport { ERC165Storage } from './ERC165Storage.sol';\n\n/**\n * @title ERC165 implementation\n */\nabstract contract ERC165 is IERC165 {\n using ERC165Storage for ERC165Storage.Layout;\n\n /**\n * @inheritdoc IERC165\n */\n function supportsInterface(bytes4 interfaceId)\n public\n view\n override\n returns (bool)\n {\n return ERC165Storage.layout().isSupportedInterface(interfaceId);\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/base/ERC1155Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { IERC1155 } from '../IERC1155.sol';\nimport { IERC1155Receiver } from '../IERC1155Receiver.sol';\nimport { ERC1155BaseInternal, ERC1155BaseStorage } from './ERC1155BaseInternal.sol';\n\n/**\n * @title Base ERC1155 contract\n * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license)\n */\nabstract contract ERC1155Base is IERC1155, ERC1155BaseInternal {\n /**\n * @inheritdoc IERC1155\n */\n function balanceOf(address account, uint256 id)\n public\n view\n virtual\n override\n returns (uint256)\n {\n return _balanceOf(account, id);\n }\n\n /**\n * @inheritdoc IERC1155\n */\n function balanceOfBatch(address[] memory accounts, uint256[] memory ids)\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(\n accounts.length == ids.length,\n 'ERC1155: accounts and ids length mismatch'\n );\n\n mapping(uint256 => mapping(address => uint256))\n storage balances = ERC1155BaseStorage.layout().balances;\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n unchecked {\n for (uint256 i; i < accounts.length; i++) {\n require(\n accounts[i] != address(0),\n 'ERC1155: batch balance query for the zero address'\n );\n batchBalances[i] = balances[ids[i]][accounts[i]];\n }\n }\n\n return batchBalances;\n }\n\n /**\n * @inheritdoc IERC1155\n */\n function isApprovedForAll(address account, address operator)\n public\n view\n virtual\n override\n returns (bool)\n {\n return ERC1155BaseStorage.layout().operatorApprovals[account][operator];\n }\n\n /**\n * @inheritdoc IERC1155\n */\n function setApprovalForAll(address operator, bool status)\n public\n virtual\n override\n {\n require(\n msg.sender != operator,\n 'ERC1155: setting approval status for self'\n );\n ERC1155BaseStorage.layout().operatorApprovals[msg.sender][\n operator\n ] = status;\n emit ApprovalForAll(msg.sender, operator, status);\n }\n\n /**\n * @inheritdoc IERC1155\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n ) public virtual override {\n require(\n from == msg.sender || isApprovedForAll(from, msg.sender),\n 'ERC1155: caller is not owner nor approved'\n );\n _safeTransfer(msg.sender, from, to, id, amount, data);\n }\n\n /**\n * @inheritdoc IERC1155\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) public virtual override {\n require(\n from == msg.sender || isApprovedForAll(from, msg.sender),\n 'ERC1155: caller is not owner nor approved'\n );\n _safeTransferBatch(msg.sender, from, to, ids, amounts, data);\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/enumerable/ERC1155Enumerable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { EnumerableSet } from '../../../utils/EnumerableSet.sol';\nimport { ERC1155Base, ERC1155BaseInternal } from '../base/ERC1155Base.sol';\nimport { IERC1155Enumerable } from './IERC1155Enumerable.sol';\nimport { ERC1155EnumerableInternal, ERC1155EnumerableStorage } from './ERC1155EnumerableInternal.sol';\n\n/**\n * @title ERC1155 implementation including enumerable and aggregate functions\n */\nabstract contract ERC1155Enumerable is\n IERC1155Enumerable,\n ERC1155Base,\n ERC1155EnumerableInternal\n{\n using EnumerableSet for EnumerableSet.AddressSet;\n using EnumerableSet for EnumerableSet.UintSet;\n\n /**\n * @inheritdoc IERC1155Enumerable\n */\n function totalSupply(uint256 id)\n public\n view\n virtual\n override\n returns (uint256)\n {\n return ERC1155EnumerableStorage.layout().totalSupply[id];\n }\n\n /**\n * @inheritdoc IERC1155Enumerable\n */\n function totalHolders(uint256 id)\n public\n view\n virtual\n override\n returns (uint256)\n {\n return ERC1155EnumerableStorage.layout().accountsByToken[id].length();\n }\n\n /**\n * @inheritdoc IERC1155Enumerable\n */\n function accountsByToken(uint256 id)\n public\n view\n virtual\n override\n returns (address[] memory)\n {\n EnumerableSet.AddressSet storage accounts = ERC1155EnumerableStorage\n .layout()\n .accountsByToken[id];\n\n address[] memory addresses = new address[](accounts.length());\n\n for (uint256 i; i < accounts.length(); i++) {\n addresses[i] = accounts.at(i);\n }\n\n return addresses;\n }\n\n /**\n * @inheritdoc IERC1155Enumerable\n */\n function tokensByAccount(address account)\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n EnumerableSet.UintSet storage tokens = ERC1155EnumerableStorage\n .layout()\n .tokensByAccount[account];\n\n uint256[] memory ids = new uint256[](tokens.length());\n\n for (uint256 i; i < tokens.length(); i++) {\n ids[i] = tokens.at(i);\n }\n\n return ids;\n }\n\n /**\n * @notice ERC1155 hook: update aggregate values\n * @inheritdoc ERC1155EnumerableInternal\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n override(ERC1155BaseInternal, ERC1155EnumerableInternal)\n {\n super._beforeTokenTransfer(operator, from, to, ids, amounts, data);\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/metadata/ERC1155Metadata.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { UintUtils } from '../../../utils/UintUtils.sol';\nimport { IERC1155Metadata } from './IERC1155Metadata.sol';\nimport { ERC1155MetadataInternal } from './ERC1155MetadataInternal.sol';\nimport { ERC1155MetadataStorage } from './ERC1155MetadataStorage.sol';\n\n/**\n * @notice ERC1155 metadata extensions\n */\nabstract contract ERC1155Metadata is IERC1155Metadata, ERC1155MetadataInternal {\n using UintUtils for uint256;\n\n /**\n * @notice inheritdoc IERC1155Metadata\n */\n function uri(uint256 tokenId)\n public\n view\n virtual\n override\n returns (string memory)\n {\n ERC1155MetadataStorage.Layout storage l = ERC1155MetadataStorage\n .layout();\n\n string memory tokenIdURI = l.tokenURIs[tokenId];\n string memory baseURI = l.baseURI;\n\n if (bytes(baseURI).length == 0) {\n return tokenIdURI;\n } else if (bytes(tokenIdURI).length > 0) {\n return string(abi.encodePacked(baseURI, tokenIdURI));\n } else {\n return string(abi.encodePacked(baseURI, tokenId.toString()));\n }\n }\n}\n" + }, + "@solidstate/contracts/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nlibrary ERC165Storage {\n struct Layout {\n mapping(bytes4 => bool) supportedInterfaces;\n }\n\n bytes32 internal constant STORAGE_SLOT =\n keccak256('solidstate.contracts.storage.ERC165');\n\n function layout() internal pure returns (Layout storage l) {\n bytes32 slot = STORAGE_SLOT;\n assembly {\n l.slot := slot\n }\n }\n\n function isSupportedInterface(Layout storage l, bytes4 interfaceId)\n internal\n view\n returns (bool)\n {\n return l.supportedInterfaces[interfaceId];\n }\n\n function setSupportedInterface(\n Layout storage l,\n bytes4 interfaceId,\n bool status\n ) internal {\n require(interfaceId != 0xffffffff, 'ERC165: invalid interface id');\n l.supportedInterfaces[interfaceId] = status;\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/IERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { IERC165 } from '../../introspection/IERC165.sol';\n\n/**\n * @title ERC1155 transfer receiver interface\n */\ninterface IERC1155Receiver is IERC165 {\n /**\n * @notice validate receipt of ERC1155 transfer\n * @param operator executor of transfer\n * @param from sender of tokens\n * @param id token ID received\n * @param value quantity of tokens received\n * @param data data payload\n * @return function's own selector if transfer is accepted\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n ) external returns (bytes4);\n\n /**\n * @notice validate receipt of ERC1155 batch transfer\n * @param operator executor of transfer\n * @param from sender of tokens\n * @param ids token IDs received\n * @param values quantities of tokens received\n * @param data data payload\n * @return function's own selector if transfer is accepted\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n ) external returns (bytes4);\n}\n" + }, + "@solidstate/contracts/token/ERC1155/base/ERC1155BaseInternal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { AddressUtils } from '../../../utils/AddressUtils.sol';\nimport { IERC1155Internal } from '../IERC1155Internal.sol';\nimport { IERC1155Receiver } from '../IERC1155Receiver.sol';\nimport { ERC1155BaseStorage } from './ERC1155BaseStorage.sol';\n\n/**\n * @title Base ERC1155 internal functions\n * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license)\n */\nabstract contract ERC1155BaseInternal is IERC1155Internal {\n using AddressUtils for address;\n\n /**\n * @notice query the balance of given token held by given address\n * @param account address to query\n * @param id token to query\n * @return token balance\n */\n function _balanceOf(address account, uint256 id)\n internal\n view\n virtual\n returns (uint256)\n {\n require(\n account != address(0),\n 'ERC1155: balance query for the zero address'\n );\n return ERC1155BaseStorage.layout().balances[id][account];\n }\n\n /**\n * @notice mint given quantity of tokens for given address\n * @dev ERC1155Receiver implementation is not checked\n * @param account beneficiary of minting\n * @param id token ID\n * @param amount quantity of tokens to mint\n * @param data data payload\n */\n function _mint(\n address account,\n uint256 id,\n uint256 amount,\n bytes memory data\n ) internal virtual {\n require(account != address(0), 'ERC1155: mint to the zero address');\n\n _beforeTokenTransfer(\n msg.sender,\n address(0),\n account,\n _asSingletonArray(id),\n _asSingletonArray(amount),\n data\n );\n\n mapping(address => uint256) storage balances = ERC1155BaseStorage\n .layout()\n .balances[id];\n balances[account] += amount;\n\n emit TransferSingle(msg.sender, address(0), account, id, amount);\n }\n\n /**\n * @notice mint given quantity of tokens for given address\n * @param account beneficiary of minting\n * @param id token ID\n * @param amount quantity of tokens to mint\n * @param data data payload\n */\n function _safeMint(\n address account,\n uint256 id,\n uint256 amount,\n bytes memory data\n ) internal virtual {\n _mint(account, id, amount, data);\n\n _doSafeTransferAcceptanceCheck(\n msg.sender,\n address(0),\n account,\n id,\n amount,\n data\n );\n }\n\n /**\n * @notice mint batch of tokens for given address\n * @dev ERC1155Receiver implementation is not checked\n * @param account beneficiary of minting\n * @param ids list of token IDs\n * @param amounts list of quantities of tokens to mint\n * @param data data payload\n */\n function _mintBatch(\n address account,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) internal virtual {\n require(account != address(0), 'ERC1155: mint to the zero address');\n require(\n ids.length == amounts.length,\n 'ERC1155: ids and amounts length mismatch'\n );\n\n _beforeTokenTransfer(\n msg.sender,\n address(0),\n account,\n ids,\n amounts,\n data\n );\n\n mapping(uint256 => mapping(address => uint256))\n storage balances = ERC1155BaseStorage.layout().balances;\n\n for (uint256 i; i < ids.length; i++) {\n balances[ids[i]][account] += amounts[i];\n }\n\n emit TransferBatch(msg.sender, address(0), account, ids, amounts);\n }\n\n /**\n * @notice mint batch of tokens for given address\n * @param account beneficiary of minting\n * @param ids list of token IDs\n * @param amounts list of quantities of tokens to mint\n * @param data data payload\n */\n function _safeMintBatch(\n address account,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) internal virtual {\n _mintBatch(account, ids, amounts, data);\n\n _doSafeBatchTransferAcceptanceCheck(\n msg.sender,\n address(0),\n account,\n ids,\n amounts,\n data\n );\n }\n\n /**\n * @notice burn given quantity of tokens held by given address\n * @param account holder of tokens to burn\n * @param id token ID\n * @param amount quantity of tokens to burn\n */\n function _burn(\n address account,\n uint256 id,\n uint256 amount\n ) internal virtual {\n require(account != address(0), 'ERC1155: burn from the zero address');\n\n _beforeTokenTransfer(\n msg.sender,\n account,\n address(0),\n _asSingletonArray(id),\n _asSingletonArray(amount),\n ''\n );\n\n mapping(address => uint256) storage balances = ERC1155BaseStorage\n .layout()\n .balances[id];\n\n unchecked {\n require(\n balances[account] >= amount,\n 'ERC1155: burn amount exceeds balances'\n );\n balances[account] -= amount;\n }\n\n emit TransferSingle(msg.sender, account, address(0), id, amount);\n }\n\n /**\n * @notice burn given batch of tokens held by given address\n * @param account holder of tokens to burn\n * @param ids token IDs\n * @param amounts quantities of tokens to burn\n */\n function _burnBatch(\n address account,\n uint256[] memory ids,\n uint256[] memory amounts\n ) internal virtual {\n require(account != address(0), 'ERC1155: burn from the zero address');\n require(\n ids.length == amounts.length,\n 'ERC1155: ids and amounts length mismatch'\n );\n\n _beforeTokenTransfer(msg.sender, account, address(0), ids, amounts, '');\n\n mapping(uint256 => mapping(address => uint256))\n storage balances = ERC1155BaseStorage.layout().balances;\n\n unchecked {\n for (uint256 i; i < ids.length; i++) {\n uint256 id = ids[i];\n require(\n balances[id][account] >= amounts[i],\n 'ERC1155: burn amount exceeds balance'\n );\n balances[id][account] -= amounts[i];\n }\n }\n\n emit TransferBatch(msg.sender, account, address(0), ids, amounts);\n }\n\n /**\n * @notice transfer tokens between given addresses\n * @dev ERC1155Receiver implementation is not checked\n * @param operator executor of transfer\n * @param sender sender of tokens\n * @param recipient receiver of tokens\n * @param id token ID\n * @param amount quantity of tokens to transfer\n * @param data data payload\n */\n function _transfer(\n address operator,\n address sender,\n address recipient,\n uint256 id,\n uint256 amount,\n bytes memory data\n ) internal virtual {\n require(\n recipient != address(0),\n 'ERC1155: transfer to the zero address'\n );\n\n _beforeTokenTransfer(\n operator,\n sender,\n recipient,\n _asSingletonArray(id),\n _asSingletonArray(amount),\n data\n );\n\n mapping(uint256 => mapping(address => uint256))\n storage balances = ERC1155BaseStorage.layout().balances;\n\n unchecked {\n uint256 senderBalance = balances[id][sender];\n require(\n senderBalance >= amount,\n 'ERC1155: insufficient balances for transfer'\n );\n balances[id][sender] = senderBalance - amount;\n }\n\n balances[id][recipient] += amount;\n\n emit TransferSingle(operator, sender, recipient, id, amount);\n }\n\n /**\n * @notice transfer tokens between given addresses\n * @param operator executor of transfer\n * @param sender sender of tokens\n * @param recipient receiver of tokens\n * @param id token ID\n * @param amount quantity of tokens to transfer\n * @param data data payload\n */\n function _safeTransfer(\n address operator,\n address sender,\n address recipient,\n uint256 id,\n uint256 amount,\n bytes memory data\n ) internal virtual {\n _transfer(operator, sender, recipient, id, amount, data);\n\n _doSafeTransferAcceptanceCheck(\n operator,\n sender,\n recipient,\n id,\n amount,\n data\n );\n }\n\n /**\n * @notice transfer batch of tokens between given addresses\n * @dev ERC1155Receiver implementation is not checked\n * @param operator executor of transfer\n * @param sender sender of tokens\n * @param recipient receiver of tokens\n * @param ids token IDs\n * @param amounts quantities of tokens to transfer\n * @param data data payload\n */\n function _transferBatch(\n address operator,\n address sender,\n address recipient,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) internal virtual {\n require(\n recipient != address(0),\n 'ERC1155: transfer to the zero address'\n );\n require(\n ids.length == amounts.length,\n 'ERC1155: ids and amounts length mismatch'\n );\n\n _beforeTokenTransfer(operator, sender, recipient, ids, amounts, data);\n\n mapping(uint256 => mapping(address => uint256))\n storage balances = ERC1155BaseStorage.layout().balances;\n\n for (uint256 i; i < ids.length; i++) {\n uint256 token = ids[i];\n uint256 amount = amounts[i];\n\n unchecked {\n uint256 senderBalance = balances[token][sender];\n require(\n senderBalance >= amount,\n 'ERC1155: insufficient balances for transfer'\n );\n balances[token][sender] = senderBalance - amount;\n }\n\n balances[token][recipient] += amount;\n }\n\n emit TransferBatch(operator, sender, recipient, ids, amounts);\n }\n\n /**\n * @notice transfer batch of tokens between given addresses\n * @param operator executor of transfer\n * @param sender sender of tokens\n * @param recipient receiver of tokens\n * @param ids token IDs\n * @param amounts quantities of tokens to transfer\n * @param data data payload\n */\n function _safeTransferBatch(\n address operator,\n address sender,\n address recipient,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) internal virtual {\n _transferBatch(operator, sender, recipient, ids, amounts, data);\n\n _doSafeBatchTransferAcceptanceCheck(\n operator,\n sender,\n recipient,\n ids,\n amounts,\n data\n );\n }\n\n /**\n * @notice wrap given element in array of length 1\n * @param element element to wrap\n * @return singleton array\n */\n function _asSingletonArray(uint256 element)\n private\n pure\n returns (uint256[] memory)\n {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n return array;\n }\n\n /**\n * @notice revert if applicable transfer recipient is not valid ERC1155Receiver\n * @param operator executor of transfer\n * @param from sender of tokens\n * @param to receiver of tokens\n * @param id token ID\n * @param amount quantity of tokens to transfer\n * @param data data payload\n */\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n ) private {\n if (to.isContract()) {\n try\n IERC1155Receiver(to).onERC1155Received(\n operator,\n from,\n id,\n amount,\n data\n )\n returns (bytes4 response) {\n require(\n response == IERC1155Receiver.onERC1155Received.selector,\n 'ERC1155: ERC1155Receiver rejected tokens'\n );\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert('ERC1155: transfer to non ERC1155Receiver implementer');\n }\n }\n }\n\n /**\n * @notice revert if applicable transfer recipient is not valid ERC1155Receiver\n * @param operator executor of transfer\n * @param from sender of tokens\n * @param to receiver of tokens\n * @param ids token IDs\n * @param amounts quantities of tokens to transfer\n * @param data data payload\n */\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) private {\n if (to.isContract()) {\n try\n IERC1155Receiver(to).onERC1155BatchReceived(\n operator,\n from,\n ids,\n amounts,\n data\n )\n returns (bytes4 response) {\n require(\n response ==\n IERC1155Receiver.onERC1155BatchReceived.selector,\n 'ERC1155: ERC1155Receiver rejected tokens'\n );\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert('ERC1155: transfer to non ERC1155Receiver implementer');\n }\n }\n }\n\n /**\n * @notice ERC1155 hook, called before all transfers including mint and burn\n * @dev function should be overridden and new implementation must call super\n * @dev called for both single and batch transfers\n * @param operator executor of transfer\n * @param from sender of tokens\n * @param to receiver of tokens\n * @param ids token IDs\n * @param amounts quantities of tokens to transfer\n * @param data data payload\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) internal virtual {}\n}\n" + }, + "@solidstate/contracts/utils/AddressUtils.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nlibrary AddressUtils {\n function toString(address account) internal pure returns (string memory) {\n bytes32 value = bytes32(uint256(uint160(account)));\n bytes memory alphabet = '0123456789abcdef';\n bytes memory chars = new bytes(42);\n\n chars[0] = '0';\n chars[1] = 'x';\n\n for (uint256 i = 0; i < 20; i++) {\n chars[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];\n chars[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];\n }\n\n return string(chars);\n }\n\n function isContract(address account) internal view returns (bool) {\n uint256 size;\n assembly {\n size := extcodesize(account)\n }\n return size > 0;\n }\n\n function sendValue(address payable account, uint256 amount) internal {\n (bool success, ) = account.call{ value: amount }('');\n require(success, 'AddressUtils: failed to send value');\n }\n\n function functionCall(address target, bytes memory data)\n internal\n returns (bytes memory)\n {\n return\n functionCall(target, data, 'AddressUtils: failed low-level call');\n }\n\n function functionCall(\n address target,\n bytes memory data,\n string memory error\n ) internal returns (bytes memory) {\n return _functionCallWithValue(target, data, 0, error);\n }\n\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(\n target,\n data,\n value,\n 'AddressUtils: failed low-level call with value'\n );\n }\n\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory error\n ) internal returns (bytes memory) {\n require(\n address(this).balance >= value,\n 'AddressUtils: insufficient balance for call'\n );\n return _functionCallWithValue(target, data, value, error);\n }\n\n function _functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory error\n ) private returns (bytes memory) {\n require(\n isContract(target),\n 'AddressUtils: function call to non-contract'\n );\n\n (bool success, bytes memory returnData) = target.call{ value: value }(\n data\n );\n\n if (success) {\n return returnData;\n } else if (returnData.length > 0) {\n assembly {\n let returnData_size := mload(returnData)\n revert(add(32, returnData), returnData_size)\n }\n } else {\n revert(error);\n }\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/base/ERC1155BaseStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nlibrary ERC1155BaseStorage {\n struct Layout {\n mapping(uint256 => mapping(address => uint256)) balances;\n mapping(address => mapping(address => bool)) operatorApprovals;\n }\n\n bytes32 internal constant STORAGE_SLOT =\n keccak256('solidstate.contracts.storage.ERC1155Base');\n\n function layout() internal pure returns (Layout storage l) {\n bytes32 slot = STORAGE_SLOT;\n assembly {\n l.slot := slot\n }\n }\n}\n" + }, + "@solidstate/contracts/utils/EnumerableSet.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @title Set implementation with enumeration functions\n * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts (MIT license)\n */\nlibrary EnumerableSet {\n struct Set {\n bytes32[] _values;\n // 1-indexed to allow 0 to signify nonexistence\n mapping(bytes32 => uint256) _indexes;\n }\n\n struct Bytes32Set {\n Set _inner;\n }\n\n struct AddressSet {\n Set _inner;\n }\n\n struct UintSet {\n Set _inner;\n }\n\n function at(Bytes32Set storage set, uint256 index)\n internal\n view\n returns (bytes32)\n {\n return _at(set._inner, index);\n }\n\n function at(AddressSet storage set, uint256 index)\n internal\n view\n returns (address)\n {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n function at(UintSet storage set, uint256 index)\n internal\n view\n returns (uint256)\n {\n return uint256(_at(set._inner, index));\n }\n\n function contains(Bytes32Set storage set, bytes32 value)\n internal\n view\n returns (bool)\n {\n return _contains(set._inner, value);\n }\n\n function contains(AddressSet storage set, address value)\n internal\n view\n returns (bool)\n {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n function contains(UintSet storage set, uint256 value)\n internal\n view\n returns (bool)\n {\n return _contains(set._inner, bytes32(value));\n }\n\n function indexOf(Bytes32Set storage set, bytes32 value)\n internal\n view\n returns (uint256)\n {\n return _indexOf(set._inner, value);\n }\n\n function indexOf(AddressSet storage set, address value)\n internal\n view\n returns (uint256)\n {\n return _indexOf(set._inner, bytes32(uint256(uint160(value))));\n }\n\n function indexOf(UintSet storage set, uint256 value)\n internal\n view\n returns (uint256)\n {\n return _indexOf(set._inner, bytes32(value));\n }\n\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n function add(Bytes32Set storage set, bytes32 value)\n internal\n returns (bool)\n {\n return _add(set._inner, value);\n }\n\n function add(AddressSet storage set, address value)\n internal\n returns (bool)\n {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n function remove(Bytes32Set storage set, bytes32 value)\n internal\n returns (bool)\n {\n return _remove(set._inner, value);\n }\n\n function remove(AddressSet storage set, address value)\n internal\n returns (bool)\n {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n function remove(UintSet storage set, uint256 value)\n internal\n returns (bool)\n {\n return _remove(set._inner, bytes32(value));\n }\n\n function _at(Set storage set, uint256 index)\n private\n view\n returns (bytes32)\n {\n require(\n set._values.length > index,\n 'EnumerableSet: index out of bounds'\n );\n return set._values[index];\n }\n\n function _contains(Set storage set, bytes32 value)\n private\n view\n returns (bool)\n {\n return set._indexes[value] != 0;\n }\n\n function _indexOf(Set storage set, bytes32 value)\n private\n view\n returns (uint256)\n {\n unchecked {\n return set._indexes[value] - 1;\n }\n }\n\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) {\n uint256 index = valueIndex - 1;\n bytes32 last = set._values[set._values.length - 1];\n\n // move last value to now-vacant index\n\n set._values[index] = last;\n set._indexes[last] = index + 1;\n\n // clear last index\n\n set._values.pop();\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/enumerable/IERC1155Enumerable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @title ERC1155 enumerable and aggregate function interface\n */\ninterface IERC1155Enumerable {\n /**\n * @notice query total minted supply of given token\n * @param id token id to query\n * @return token supply\n */\n function totalSupply(uint256 id) external view returns (uint256);\n\n /**\n * @notice query total number of holders for given token\n * @param id token id to query\n * @return quantity of holders\n */\n function totalHolders(uint256 id) external view returns (uint256);\n\n /**\n * @notice query holders of given token\n * @param id token id to query\n * @return list of holder addresses\n */\n function accountsByToken(uint256 id)\n external\n view\n returns (address[] memory);\n\n /**\n * @notice query tokens held by given address\n * @param account address to query\n * @return list of token ids\n */\n function tokensByAccount(address account)\n external\n view\n returns (uint256[] memory);\n}\n" + }, + "@solidstate/contracts/token/ERC1155/enumerable/ERC1155EnumerableInternal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { EnumerableSet } from '../../../utils/EnumerableSet.sol';\nimport { ERC1155BaseInternal, ERC1155BaseStorage } from '../base/ERC1155BaseInternal.sol';\nimport { ERC1155EnumerableStorage } from './ERC1155EnumerableStorage.sol';\n\n/**\n * @title ERC1155Enumerable internal functions\n */\nabstract contract ERC1155EnumerableInternal is ERC1155BaseInternal {\n using EnumerableSet for EnumerableSet.AddressSet;\n using EnumerableSet for EnumerableSet.UintSet;\n\n /**\n * @notice ERC1155 hook: update aggregate values\n * @inheritdoc ERC1155BaseInternal\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n ) internal virtual override {\n super._beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n if (from != to) {\n ERC1155EnumerableStorage.Layout storage l = ERC1155EnumerableStorage\n .layout();\n mapping(uint256 => EnumerableSet.AddressSet)\n storage tokenAccounts = l.accountsByToken;\n EnumerableSet.UintSet storage fromTokens = l.tokensByAccount[from];\n EnumerableSet.UintSet storage toTokens = l.tokensByAccount[to];\n\n for (uint256 i; i < ids.length; i++) {\n uint256 amount = amounts[i];\n\n if (amount > 0) {\n uint256 id = ids[i];\n\n if (from == address(0)) {\n l.totalSupply[id] += amount;\n } else if (_balanceOf(from, id) == amount) {\n tokenAccounts[id].remove(from);\n fromTokens.remove(id);\n }\n\n if (to == address(0)) {\n l.totalSupply[id] -= amount;\n } else if (_balanceOf(to, id) == 0) {\n tokenAccounts[id].add(to);\n toTokens.add(id);\n }\n }\n }\n }\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/enumerable/ERC1155EnumerableStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { EnumerableSet } from '../../../utils/EnumerableSet.sol';\n\nlibrary ERC1155EnumerableStorage {\n struct Layout {\n mapping(uint256 => uint256) totalSupply;\n mapping(uint256 => EnumerableSet.AddressSet) accountsByToken;\n mapping(address => EnumerableSet.UintSet) tokensByAccount;\n }\n\n bytes32 internal constant STORAGE_SLOT =\n keccak256('solidstate.contracts.storage.ERC1155Enumerable');\n\n function layout() internal pure returns (Layout storage l) {\n bytes32 slot = STORAGE_SLOT;\n assembly {\n l.slot := slot\n }\n }\n}\n" + }, + "@solidstate/contracts/utils/UintUtils.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nlibrary UintUtils {\n function toString(uint256 value) internal pure returns (string memory) {\n if (value == 0) {\n return '0';\n }\n\n uint256 temp = value;\n uint256 digits;\n\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n\n bytes memory buffer = new bytes(digits);\n\n while (value != 0) {\n digits -= 1;\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n value /= 10;\n }\n\n return string(buffer);\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/metadata/IERC1155Metadata.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @title ERC1155Metadata interface\n */\ninterface IERC1155Metadata {\n /**\n * @notice get generated URI for given token\n * @return token URI\n */\n function uri(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "@solidstate/contracts/token/ERC1155/metadata/ERC1155MetadataInternal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { IERC1155MetadataInternal } from './IERC1155MetadataInternal.sol';\nimport { ERC1155MetadataStorage } from './ERC1155MetadataStorage.sol';\n\n/**\n * @notice ERC1155Metadata internal functions\n */\nabstract contract ERC1155MetadataInternal is IERC1155MetadataInternal {\n /**\n * @notice set base metadata URI\n * @dev base URI is a non-standard feature adapted from the ERC721 specification\n * @param baseURI base URI\n */\n function _setBaseURI(string memory baseURI) internal {\n ERC1155MetadataStorage.layout().baseURI = baseURI;\n }\n\n /**\n * @notice set per-token metadata URI\n * @param tokenId token whose metadata URI to set\n * @param tokenURI per-token URI\n */\n function _setTokenURI(uint256 tokenId, string memory tokenURI) internal {\n ERC1155MetadataStorage.layout().tokenURIs[tokenId] = tokenURI;\n emit URI(tokenURI, tokenId);\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/metadata/ERC1155MetadataStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @notice ERC1155 metadata extensions\n */\nlibrary ERC1155MetadataStorage {\n bytes32 internal constant STORAGE_SLOT =\n keccak256('solidstate.contracts.storage.ERC1155Metadata');\n\n struct Layout {\n string baseURI;\n mapping(uint256 => string) tokenURIs;\n }\n\n function layout() internal pure returns (Layout storage l) {\n bytes32 slot = STORAGE_SLOT;\n assembly {\n l.slot := slot\n }\n }\n}\n" + }, + "@solidstate/contracts/token/ERC1155/metadata/IERC1155MetadataInternal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @title Partial ERC1155Metadata interface needed by internal functions\n */\ninterface IERC1155MetadataInternal {\n event URI(string value, uint256 indexed tokenId);\n}\n" + }, + "contracts/libraries/LibDropStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.10;\n\n//\nimport '@openzeppelin/contracts/utils/Counters.sol';\n\nlibrary LibDropStorage {\n bytes32 public constant STORAGE_SLOT = keccak256('drop.app.storage');\n struct Drop {\n uint256 timeStart;\n uint256 timeEnd;\n uint256 priceStart;\n uint256 priceEnd;\n uint256 stepDuration;\n uint256 amountCap;\n uint256 shareCyber;\n address payable creator;\n Counters.Counter minted;\n mapping(address => Counters.Counter) mintCounter;\n }\n\n struct Layout {\n mapping(uint256 => Drop) drops;\n }\n\n function layout() internal pure returns (Layout storage lay) {\n bytes32 slot = STORAGE_SLOT;\n assembly {\n lay.slot := slot\n }\n }\n}\n" + }, + "contracts/CyberDropBase.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\n//\nimport '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';\nimport '@openzeppelin/contracts/utils/Counters.sol';\n\nimport './libraries/LibAppStorage.sol';\nimport './libraries/LibDropStorage.sol';\nimport './CyberTokenBase.sol';\n\ncontract CyberDropBase is CyberTokenBase {\n using ECDSA for bytes32;\n using Counters for Counters.Counter;\n\n event DropCreated(address indexed account, uint256 indexed tokenId);\n\n function dropMintCounter(uint256 _tokenId, address _minter)\n public\n view\n returns (uint256)\n {\n LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId];\n require(drop.priceStart != 0, 'DNE');\n return drop.mintCounter[_minter].current();\n }\n\n function getDrop(uint256 _tokenId)\n public\n view\n returns (\n uint256 timeStart,\n uint256 timeEnd,\n uint256 priceStart,\n uint256 priceEnd,\n uint256 stepDuration,\n uint256 amountCap,\n uint256 shareCyber,\n address creator,\n uint256 minted\n )\n {\n LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId];\n require(drop.priceStart != 0, 'DNE');\n\n return (\n drop.timeStart,\n drop.timeEnd,\n drop.priceStart,\n drop.priceEnd,\n drop.stepDuration,\n drop.amountCap,\n drop.shareCyber,\n drop.creator,\n drop.minted.current()\n );\n }\n\n function createDrop(\n string memory _uri,\n uint256 _timeStart,\n uint256 _timeEnd,\n uint256 _priceStart,\n uint256 _priceEnd,\n uint256 _stepDuration,\n uint256 _amountCap,\n uint256 _shareCyber,\n bytes memory _signature\n ) public returns (uint256 tokenId) {\n require(_timeEnd - _timeStart >= _stepDuration && _stepDuration > 0, 'IT');\n require(_priceStart >= _priceEnd && _priceStart > 0, 'IP');\n require(_shareCyber <= 100, 'ISO');\n\n address sender = _msgSender();\n uint256 nonce = minterNonce(sender);\n bytes memory _message = abi.encodePacked(\n _uri,\n _timeStart,\n _timeEnd,\n _priceStart,\n _priceEnd,\n _stepDuration,\n _amountCap,\n _shareCyber,\n sender,\n nonce\n );\n address recoveredAddress = keccak256(_message)\n .toEthSignedMessageHash()\n .recover(_signature);\n require(recoveredAddress == LibAppStorage.layout().manager, 'NM');\n tokenId = LibAppStorage.layout().totalSupply.current();\n\n // Effects\n setTokenURI(tokenId, _uri);\n LibAppStorage.layout().totalSupply.increment();\n LibAppStorage.layout().minterNonce[sender].increment();\n\n LibDropStorage.layout().drops[tokenId].timeStart = _timeStart;\n LibDropStorage.layout().drops[tokenId].timeEnd = _timeEnd;\n LibDropStorage.layout().drops[tokenId].priceStart = _priceStart;\n LibDropStorage.layout().drops[tokenId].priceEnd = _priceEnd;\n LibDropStorage.layout().drops[tokenId].stepDuration = _stepDuration;\n LibDropStorage.layout().drops[tokenId].amountCap = _amountCap;\n LibDropStorage.layout().drops[tokenId].shareCyber = _shareCyber;\n LibDropStorage.layout().drops[tokenId].creator = payable(sender);\n\n // Mint for creator\n LibDropStorage.layout().drops[tokenId].minted.increment();\n LibDropStorage.layout().drops[tokenId].mintCounter[sender].increment();\n _safeMint(sender, tokenId, 1, '');\n\n emit DropCreated(sender, tokenId);\n emit Minted(sender, tokenId, 1);\n }\n\n function mint(uint256 _tokenId, bytes memory _signature)\n public\n payable\n returns (bool success)\n {\n address sender = _msgSender();\n LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId];\n\n if (drop.amountCap != 0) {\n require(drop.minted.current() < drop.amountCap, 'CR');\n }\n\n require(\n block.timestamp > drop.timeStart && block.timestamp <= drop.timeEnd,\n 'OOT'\n );\n uint256 timeSpent = block.timestamp - drop.timeStart;\n uint256 duration = drop.timeEnd - drop.timeStart;\n uint256 price = getPriceFor(\n timeSpent,\n duration,\n drop.priceStart,\n drop.priceEnd,\n drop.stepDuration\n );\n require(msg.value >= price, 'IA');\n uint256 amountOnCyber = (msg.value * drop.shareCyber) / 100;\n uint256 amountCreator = msg.value - amountOnCyber;\n\n uint256 senderDropNonce = drop.mintCounter[sender].current();\n bytes memory _message = abi.encodePacked(_tokenId, sender, senderDropNonce);\n address recoveredAddress = keccak256(_message)\n .toEthSignedMessageHash()\n .recover(_signature);\n require(recoveredAddress == LibAppStorage.layout().manager, 'NM');\n\n // Effects\n drop.minted.increment();\n drop.mintCounter[sender].increment();\n _safeMint(sender, _tokenId, 1, '');\n drop.creator.transfer(amountCreator);\n payable(LibAppStorage.layout().oncyber).transfer(amountOnCyber);\n\n emit Minted(sender, _tokenId, 1);\n\n return true;\n }\n\n function getMintPriceForToken(uint256 _tokenId)\n public\n view\n returns (uint256 mintPrice)\n {\n LibDropStorage.Drop storage drop = LibDropStorage.layout().drops[_tokenId];\n require(drop.priceStart != 0, 'DNE');\n\n if (drop.amountCap != 0) {\n require(drop.minted.current() < drop.amountCap, 'CR');\n }\n\n require(\n block.timestamp > drop.timeStart && block.timestamp <= drop.timeEnd,\n 'OOT'\n );\n uint256 timeSpent = block.timestamp - drop.timeStart;\n uint256 duration = drop.timeEnd - drop.timeStart;\n\n return\n getPriceFor(\n timeSpent,\n duration,\n drop.priceStart,\n drop.priceEnd,\n drop.stepDuration\n );\n }\n\n function getPriceFor(\n uint256 _timeSpent,\n uint256 _duration,\n uint256 _priceStart,\n uint256 _priceEnd,\n uint256 _stepDuration\n ) public pure returns (uint256 price) {\n // https://www.desmos.com/calculator/oajpdvew5q\n // f\\left(x\\right)=\\frac{s\\ \\cdot d\\ +\\ \\operatorname{mod}\\left(x,\\ g\\right)\\ \\cdot\\ \\left(s\\ -\\ l\\right)\\ -\\ x\\ \\cdot\\ \\left(s\\ -\\ l\\right)\\ \\ }{d}\n // (s * d + (x % g) * (s - l) - x * (s - l) / d\n return\n (_duration *\n _priceStart +\n (_timeSpent % _stepDuration) *\n (_priceStart - _priceEnd) -\n _timeSpent *\n (_priceStart - _priceEnd)) / _duration;\n }\n}\n" + }, + "contracts/Diamantaires/Object/CyberObjectFactoryFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\n//\nimport '../../CyberDropBase.sol';\n\ncontract CyberObjectFactoryFacet is CyberDropBase {}\n" + }, + "contracts/Diamantaires/DestinationUtility/CyberDestinationUtilityFactoryFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\n//\nimport '../../CyberDropBase.sol';\n\ncontract CyberDestinationUtilityFactoryFacet is CyberDropBase {}\n" + }, + "contracts/Diamantaires/Destination/CyberDestinationFactoryFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\n//\nimport '../../CyberDropBase.sol';\n\ncontract CyberDestinationFactoryFacet is CyberDropBase {}\n" + } + }, + "settings": { + "optimizer": { + "enabled": false, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + }, + "libraries": { + "": { + "__CACHE_BREAKER__": "0x00000000d41867734bbee4c6863d9255b2b06ac1" + } + } + } +} \ No newline at end of file diff --git a/packages/contracts/hardhat.config.ts b/packages/contracts/hardhat.config.ts index 9a61553..fec6685 100644 --- a/packages/contracts/hardhat.config.ts +++ b/packages/contracts/hardhat.config.ts @@ -83,7 +83,7 @@ const config: HardhatUserConfig = { url: process.env.ALCHEMY_URL || 'https://mainnet.infura.io/v3/b89e58ca51184cb783845c58340629c4', - gasPrice: parseUnits('59', 'gwei').toNumber(), + gasPrice: parseUnits('60', 'gwei').toNumber(), accounts: [process.env.MAINNET_FACTORY_PRIVATE_KEY || defaultPrivateKey], }, }, diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 784c0e0..fcbaba6 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -29,7 +29,7 @@ "deploy:rinkeby": "hardhat --network rinkeby deploy", "deploy:ethereum": "hardhat --network ethereum deploy", "verify:rinkeby": "hardhat etherscan-verify --network rinkeby --solc-input", - "verify:ethereum": "hardhat etherscan-verify --network ethereum", + "verify:ethereum": "hardhat etherscan-verify --network ethereum --solc-input", "scripts:createDrop:rinkeby": "hardhat run scripts/createDrop.ts --network rinkeby", "scripts:mint:rinkeby": "hardhat run scripts/mint.ts --network rinkeby", "scripts:createDrop:localhost": "hardhat run scripts/createDrop.ts --network localhost", diff --git a/packages/contracts/typechain-types/BaseRelayRecipient.ts b/packages/contracts/typechain-types/BaseRelayRecipient.ts index 401815e..46973d5 100644 --- a/packages/contracts/typechain-types/BaseRelayRecipient.ts +++ b/packages/contracts/typechain-types/BaseRelayRecipient.ts @@ -16,23 +16,14 @@ import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; export interface BaseRelayRecipientInterface extends utils.Interface { functions: { - "c_0x1c93e179(bytes32)": FunctionFragment; "isTrustedForwarder(address)": FunctionFragment; }; - encodeFunctionData( - functionFragment: "c_0x1c93e179", - values: [BytesLike] - ): string; encodeFunctionData( functionFragment: "isTrustedForwarder", values: [string] ): string; - decodeFunctionResult( - functionFragment: "c_0x1c93e179", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "isTrustedForwarder", data: BytesLike @@ -68,33 +59,18 @@ export interface BaseRelayRecipient extends BaseContract { removeListener: OnEvent; functions: { - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - isTrustedForwarder( forwarder: string, overrides?: CallOverrides ): Promise<[boolean]>; }; - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - isTrustedForwarder( forwarder: string, overrides?: CallOverrides ): Promise; callStatic: { - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - isTrustedForwarder( forwarder: string, overrides?: CallOverrides @@ -104,11 +80,6 @@ export interface BaseRelayRecipient extends BaseContract { filters: {}; estimateGas: { - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - isTrustedForwarder( forwarder: string, overrides?: CallOverrides @@ -116,11 +87,6 @@ export interface BaseRelayRecipient extends BaseContract { }; populateTransaction: { - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - isTrustedForwarder( forwarder: string, overrides?: CallOverrides diff --git a/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts b/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts index 4a73e21..c899bf1 100644 --- a/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts +++ b/packages/contracts/typechain-types/CyberDestinationFactoryFacet.ts @@ -23,11 +23,6 @@ export interface CyberDestinationFactoryFacetInterface extends utils.Interface { "accountsByToken(uint256)": FunctionFragment; "balanceOf(address,uint256)": FunctionFragment; "balanceOfBatch(address[],uint256[])": FunctionFragment; - "c_0x07d08ee9(bytes32)": FunctionFragment; - "c_0x1c93e179(bytes32)": FunctionFragment; - "c_0x63bd0478(bytes32)": FunctionFragment; - "c_0xc3324fa2(bytes32)": FunctionFragment; - "c_0xfbe62a3d(bytes32)": FunctionFragment; "createDrop(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)": FunctionFragment; "dropMintCounter(uint256,address)": FunctionFragment; "getDrop(uint256)": FunctionFragment; @@ -62,26 +57,6 @@ export interface CyberDestinationFactoryFacetInterface extends utils.Interface { functionFragment: "balanceOfBatch", values: [string[], BigNumberish[]] ): string; - encodeFunctionData( - functionFragment: "c_0x07d08ee9", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x1c93e179", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x63bd0478", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0xc3324fa2", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0xfbe62a3d", - values: [BytesLike] - ): string; encodeFunctionData( functionFragment: "createDrop", values: [ @@ -176,26 +151,6 @@ export interface CyberDestinationFactoryFacetInterface extends utils.Interface { functionFragment: "balanceOfBatch", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0x07d08ee9", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x1c93e179", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x63bd0478", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0xc3324fa2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0xfbe62a3d", - data: BytesLike - ): Result; decodeFunctionResult(functionFragment: "createDrop", data: BytesLike): Result; decodeFunctionResult( functionFragment: "dropMintCounter", @@ -371,31 +326,6 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise<[BigNumber[]]>; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0xc3324fa2( - c__0xc3324fa2: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -557,31 +487,6 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xc3324fa2( - c__0xc3324fa2: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -737,31 +642,6 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xc3324fa2( - c__0xc3324fa2: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -990,31 +870,6 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xc3324fa2( - c__0xc3324fa2: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -1152,31 +1007,6 @@ export interface CyberDestinationFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xc3324fa2( - c__0xc3324fa2: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, diff --git a/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts b/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts index ef651b3..87454eb 100644 --- a/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts +++ b/packages/contracts/typechain-types/CyberDestinationUtilityFactoryFacet.ts @@ -24,11 +24,6 @@ export interface CyberDestinationUtilityFactoryFacetInterface "accountsByToken(uint256)": FunctionFragment; "balanceOf(address,uint256)": FunctionFragment; "balanceOfBatch(address[],uint256[])": FunctionFragment; - "c_0x07d08ee9(bytes32)": FunctionFragment; - "c_0x0855cdfc(bytes32)": FunctionFragment; - "c_0x1c93e179(bytes32)": FunctionFragment; - "c_0x63bd0478(bytes32)": FunctionFragment; - "c_0xfbe62a3d(bytes32)": FunctionFragment; "createDrop(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)": FunctionFragment; "dropMintCounter(uint256,address)": FunctionFragment; "getDrop(uint256)": FunctionFragment; @@ -63,26 +58,6 @@ export interface CyberDestinationUtilityFactoryFacetInterface functionFragment: "balanceOfBatch", values: [string[], BigNumberish[]] ): string; - encodeFunctionData( - functionFragment: "c_0x07d08ee9", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x0855cdfc", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x1c93e179", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x63bd0478", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0xfbe62a3d", - values: [BytesLike] - ): string; encodeFunctionData( functionFragment: "createDrop", values: [ @@ -177,26 +152,6 @@ export interface CyberDestinationUtilityFactoryFacetInterface functionFragment: "balanceOfBatch", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0x07d08ee9", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x0855cdfc", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x1c93e179", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x63bd0478", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0xfbe62a3d", - data: BytesLike - ): Result; decodeFunctionResult(functionFragment: "createDrop", data: BytesLike): Result; decodeFunctionResult( functionFragment: "dropMintCounter", @@ -372,31 +327,6 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise<[BigNumber[]]>; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x0855cdfc( - c__0x0855cdfc: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -558,31 +488,6 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x0855cdfc( - c__0x0855cdfc: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -738,31 +643,6 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x0855cdfc( - c__0x0855cdfc: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -991,31 +871,6 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x0855cdfc( - c__0x0855cdfc: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -1153,31 +1008,6 @@ export interface CyberDestinationUtilityFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x0855cdfc( - c__0x0855cdfc: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, diff --git a/packages/contracts/typechain-types/CyberDropBase.ts b/packages/contracts/typechain-types/CyberDropBase.ts index 294d27c..409de64 100644 --- a/packages/contracts/typechain-types/CyberDropBase.ts +++ b/packages/contracts/typechain-types/CyberDropBase.ts @@ -23,10 +23,6 @@ export interface CyberDropBaseInterface extends utils.Interface { "accountsByToken(uint256)": FunctionFragment; "balanceOf(address,uint256)": FunctionFragment; "balanceOfBatch(address[],uint256[])": FunctionFragment; - "c_0x07d08ee9(bytes32)": FunctionFragment; - "c_0x1c93e179(bytes32)": FunctionFragment; - "c_0x63bd0478(bytes32)": FunctionFragment; - "c_0xfbe62a3d(bytes32)": FunctionFragment; "createDrop(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)": FunctionFragment; "dropMintCounter(uint256,address)": FunctionFragment; "getDrop(uint256)": FunctionFragment; @@ -61,22 +57,6 @@ export interface CyberDropBaseInterface extends utils.Interface { functionFragment: "balanceOfBatch", values: [string[], BigNumberish[]] ): string; - encodeFunctionData( - functionFragment: "c_0x07d08ee9", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x1c93e179", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x63bd0478", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0xfbe62a3d", - values: [BytesLike] - ): string; encodeFunctionData( functionFragment: "createDrop", values: [ @@ -171,22 +151,6 @@ export interface CyberDropBaseInterface extends utils.Interface { functionFragment: "balanceOfBatch", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0x07d08ee9", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x1c93e179", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x63bd0478", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0xfbe62a3d", - data: BytesLike - ): Result; decodeFunctionResult(functionFragment: "createDrop", data: BytesLike): Result; decodeFunctionResult( functionFragment: "dropMintCounter", @@ -362,26 +326,6 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise<[BigNumber[]]>; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -543,26 +487,6 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -718,26 +642,6 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -966,26 +870,6 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -1123,26 +1007,6 @@ export interface CyberDropBase extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, diff --git a/packages/contracts/typechain-types/CyberObjectFactoryFacet.ts b/packages/contracts/typechain-types/CyberObjectFactoryFacet.ts index 8b9a5af..ecadd1b 100644 --- a/packages/contracts/typechain-types/CyberObjectFactoryFacet.ts +++ b/packages/contracts/typechain-types/CyberObjectFactoryFacet.ts @@ -23,11 +23,6 @@ export interface CyberObjectFactoryFacetInterface extends utils.Interface { "accountsByToken(uint256)": FunctionFragment; "balanceOf(address,uint256)": FunctionFragment; "balanceOfBatch(address[],uint256[])": FunctionFragment; - "c_0x07d08ee9(bytes32)": FunctionFragment; - "c_0x1c93e179(bytes32)": FunctionFragment; - "c_0x4a511cf6(bytes32)": FunctionFragment; - "c_0x63bd0478(bytes32)": FunctionFragment; - "c_0xfbe62a3d(bytes32)": FunctionFragment; "createDrop(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)": FunctionFragment; "dropMintCounter(uint256,address)": FunctionFragment; "getDrop(uint256)": FunctionFragment; @@ -62,26 +57,6 @@ export interface CyberObjectFactoryFacetInterface extends utils.Interface { functionFragment: "balanceOfBatch", values: [string[], BigNumberish[]] ): string; - encodeFunctionData( - functionFragment: "c_0x07d08ee9", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x1c93e179", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x4a511cf6", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x63bd0478", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0xfbe62a3d", - values: [BytesLike] - ): string; encodeFunctionData( functionFragment: "createDrop", values: [ @@ -176,26 +151,6 @@ export interface CyberObjectFactoryFacetInterface extends utils.Interface { functionFragment: "balanceOfBatch", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0x07d08ee9", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x1c93e179", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x4a511cf6", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x63bd0478", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0xfbe62a3d", - data: BytesLike - ): Result; decodeFunctionResult(functionFragment: "createDrop", data: BytesLike): Result; decodeFunctionResult( functionFragment: "dropMintCounter", @@ -371,31 +326,6 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise<[BigNumber[]]>; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x4a511cf6( - c__0x4a511cf6: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -557,31 +487,6 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x4a511cf6( - c__0x4a511cf6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -737,31 +642,6 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x4a511cf6( - c__0x4a511cf6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -990,31 +870,6 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x4a511cf6( - c__0x4a511cf6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, @@ -1152,31 +1007,6 @@ export interface CyberObjectFactoryFacet extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x07d08ee9( - c__0x07d08ee9: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x4a511cf6( - c__0x4a511cf6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - createDrop( _uri: string, _timeStart: BigNumberish, diff --git a/packages/contracts/typechain-types/CyberTokenBase.ts b/packages/contracts/typechain-types/CyberTokenBase.ts index 7f99d58..b07d5d6 100644 --- a/packages/contracts/typechain-types/CyberTokenBase.ts +++ b/packages/contracts/typechain-types/CyberTokenBase.ts @@ -22,9 +22,6 @@ export interface CyberTokenBaseInterface extends utils.Interface { "accountsByToken(uint256)": FunctionFragment; "balanceOf(address,uint256)": FunctionFragment; "balanceOfBatch(address[],uint256[])": FunctionFragment; - "c_0x1c93e179(bytes32)": FunctionFragment; - "c_0x63bd0478(bytes32)": FunctionFragment; - "c_0xfbe62a3d(bytes32)": FunctionFragment; "initialize(string,address,address,address,address)": FunctionFragment; "isApprovedForAll(address,address)": FunctionFragment; "isTrustedForwarder(address)": FunctionFragment; @@ -53,18 +50,6 @@ export interface CyberTokenBaseInterface extends utils.Interface { functionFragment: "balanceOfBatch", values: [string[], BigNumberish[]] ): string; - encodeFunctionData( - functionFragment: "c_0x1c93e179", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0x63bd0478", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_0xfbe62a3d", - values: [BytesLike] - ): string; encodeFunctionData( functionFragment: "initialize", values: [string, string, string, string, string] @@ -119,18 +104,6 @@ export interface CyberTokenBaseInterface extends utils.Interface { functionFragment: "balanceOfBatch", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0x1c93e179", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0x63bd0478", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_0xfbe62a3d", - data: BytesLike - ): Result; decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; decodeFunctionResult( functionFragment: "isApprovedForAll", @@ -282,21 +255,6 @@ export interface CyberTokenBase extends BaseContract { overrides?: CallOverrides ): Promise<[BigNumber[]]>; - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - initialize( _uri: string, _manager: string, @@ -392,21 +350,6 @@ export interface CyberTokenBase extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - initialize( _uri: string, _manager: string, @@ -496,21 +439,6 @@ export interface CyberTokenBase extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - initialize( _uri: string, _manager: string, @@ -664,21 +592,6 @@ export interface CyberTokenBase extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - initialize( _uri: string, _manager: string, @@ -772,21 +685,6 @@ export interface CyberTokenBase extends BaseContract { overrides?: CallOverrides ): Promise; - c_0x1c93e179( - c__0x1c93e179: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0x63bd0478( - c__0x63bd0478: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - initialize( _uri: string, _manager: string, diff --git a/packages/contracts/typechain-types/ERC1155URI.ts b/packages/contracts/typechain-types/ERC1155URI.ts index fe9d86b..62eb1ad 100644 --- a/packages/contracts/typechain-types/ERC1155URI.ts +++ b/packages/contracts/typechain-types/ERC1155URI.ts @@ -22,7 +22,6 @@ export interface ERC1155URIInterface extends utils.Interface { "accountsByToken(uint256)": FunctionFragment; "balanceOf(address,uint256)": FunctionFragment; "balanceOfBatch(address[],uint256[])": FunctionFragment; - "c_0xfbe62a3d(bytes32)": FunctionFragment; "isApprovedForAll(address,address)": FunctionFragment; "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; @@ -46,10 +45,6 @@ export interface ERC1155URIInterface extends utils.Interface { functionFragment: "balanceOfBatch", values: [string[], BigNumberish[]] ): string; - encodeFunctionData( - functionFragment: "c_0xfbe62a3d", - values: [BytesLike] - ): string; encodeFunctionData( functionFragment: "isApprovedForAll", values: [string, string] @@ -93,10 +88,6 @@ export interface ERC1155URIInterface extends utils.Interface { functionFragment: "balanceOfBatch", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0xfbe62a3d", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "isApprovedForAll", data: BytesLike @@ -228,11 +219,6 @@ export interface ERC1155URI extends BaseContract { overrides?: CallOverrides ): Promise<[BigNumber[]]>; - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - isApprovedForAll( account: string, operator: string, @@ -303,11 +289,6 @@ export interface ERC1155URI extends BaseContract { overrides?: CallOverrides ): Promise; - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - isApprovedForAll( account: string, operator: string, @@ -372,11 +353,6 @@ export interface ERC1155URI extends BaseContract { overrides?: CallOverrides ): Promise; - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - isApprovedForAll( account: string, operator: string, @@ -497,11 +473,6 @@ export interface ERC1155URI extends BaseContract { overrides?: CallOverrides ): Promise; - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - isApprovedForAll( account: string, operator: string, @@ -573,11 +544,6 @@ export interface ERC1155URI extends BaseContract { overrides?: CallOverrides ): Promise; - c_0xfbe62a3d( - c__0xfbe62a3d: BytesLike, - overrides?: CallOverrides - ): Promise; - isApprovedForAll( account: string, operator: string, diff --git a/packages/contracts/typechain-types/LibAppStorage.ts b/packages/contracts/typechain-types/LibAppStorage.ts index 3c27975..b6254e0 100644 --- a/packages/contracts/typechain-types/LibAppStorage.ts +++ b/packages/contracts/typechain-types/LibAppStorage.ts @@ -17,26 +17,17 @@ import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; export interface LibAppStorageInterface extends utils.Interface { functions: { "STORAGE_SLOT()": FunctionFragment; - "c_0x2eebe50c(bytes32)": FunctionFragment; }; encodeFunctionData( functionFragment: "STORAGE_SLOT", values?: undefined ): string; - encodeFunctionData( - functionFragment: "c_0x2eebe50c", - values: [BytesLike] - ): string; decodeFunctionResult( functionFragment: "STORAGE_SLOT", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0x2eebe50c", - data: BytesLike - ): Result; events: {}; } @@ -69,46 +60,21 @@ export interface LibAppStorage extends BaseContract { functions: { STORAGE_SLOT(overrides?: CallOverrides): Promise<[string]>; - - c_0x2eebe50c( - c__0x2eebe50c: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; }; STORAGE_SLOT(overrides?: CallOverrides): Promise; - c_0x2eebe50c( - c__0x2eebe50c: BytesLike, - overrides?: CallOverrides - ): Promise; - callStatic: { STORAGE_SLOT(overrides?: CallOverrides): Promise; - - c_0x2eebe50c( - c__0x2eebe50c: BytesLike, - overrides?: CallOverrides - ): Promise; }; filters: {}; estimateGas: { STORAGE_SLOT(overrides?: CallOverrides): Promise; - - c_0x2eebe50c( - c__0x2eebe50c: BytesLike, - overrides?: CallOverrides - ): Promise; }; populateTransaction: { STORAGE_SLOT(overrides?: CallOverrides): Promise; - - c_0x2eebe50c( - c__0x2eebe50c: BytesLike, - overrides?: CallOverrides - ): Promise; }; } diff --git a/packages/contracts/typechain-types/LibDiamond.ts b/packages/contracts/typechain-types/LibDiamond.ts index dd34054..ec51604 100644 --- a/packages/contracts/typechain-types/LibDiamond.ts +++ b/packages/contracts/typechain-types/LibDiamond.ts @@ -17,26 +17,17 @@ import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; export interface LibDiamondInterface extends utils.Interface { functions: { "DIAMOND_STORAGE_POSITION()": FunctionFragment; - "c_0xa32ac8c0(bytes32)": FunctionFragment; }; encodeFunctionData( functionFragment: "DIAMOND_STORAGE_POSITION", values?: undefined ): string; - encodeFunctionData( - functionFragment: "c_0xa32ac8c0", - values: [BytesLike] - ): string; decodeFunctionResult( functionFragment: "DIAMOND_STORAGE_POSITION", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0xa32ac8c0", - data: BytesLike - ): Result; events: {}; } @@ -69,48 +60,23 @@ export interface LibDiamond extends BaseContract { functions: { DIAMOND_STORAGE_POSITION(overrides?: CallOverrides): Promise<[string]>; - - c_0xa32ac8c0( - c__0xa32ac8c0: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; }; DIAMOND_STORAGE_POSITION(overrides?: CallOverrides): Promise; - c_0xa32ac8c0( - c__0xa32ac8c0: BytesLike, - overrides?: CallOverrides - ): Promise; - callStatic: { DIAMOND_STORAGE_POSITION(overrides?: CallOverrides): Promise; - - c_0xa32ac8c0( - c__0xa32ac8c0: BytesLike, - overrides?: CallOverrides - ): Promise; }; filters: {}; estimateGas: { DIAMOND_STORAGE_POSITION(overrides?: CallOverrides): Promise; - - c_0xa32ac8c0( - c__0xa32ac8c0: BytesLike, - overrides?: CallOverrides - ): Promise; }; populateTransaction: { DIAMOND_STORAGE_POSITION( overrides?: CallOverrides ): Promise; - - c_0xa32ac8c0( - c__0xa32ac8c0: BytesLike, - overrides?: CallOverrides - ): Promise; }; } diff --git a/packages/contracts/typechain-types/LibDropStorage.ts b/packages/contracts/typechain-types/LibDropStorage.ts index 119ccd3..c3652bf 100644 --- a/packages/contracts/typechain-types/LibDropStorage.ts +++ b/packages/contracts/typechain-types/LibDropStorage.ts @@ -17,26 +17,17 @@ import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; export interface LibDropStorageInterface extends utils.Interface { functions: { "STORAGE_SLOT()": FunctionFragment; - "c_0xce10a45c(bytes32)": FunctionFragment; }; encodeFunctionData( functionFragment: "STORAGE_SLOT", values?: undefined ): string; - encodeFunctionData( - functionFragment: "c_0xce10a45c", - values: [BytesLike] - ): string; decodeFunctionResult( functionFragment: "STORAGE_SLOT", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "c_0xce10a45c", - data: BytesLike - ): Result; events: {}; } @@ -69,46 +60,21 @@ export interface LibDropStorage extends BaseContract { functions: { STORAGE_SLOT(overrides?: CallOverrides): Promise<[string]>; - - c_0xce10a45c( - c__0xce10a45c: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; }; STORAGE_SLOT(overrides?: CallOverrides): Promise; - c_0xce10a45c( - c__0xce10a45c: BytesLike, - overrides?: CallOverrides - ): Promise; - callStatic: { STORAGE_SLOT(overrides?: CallOverrides): Promise; - - c_0xce10a45c( - c__0xce10a45c: BytesLike, - overrides?: CallOverrides - ): Promise; }; filters: {}; estimateGas: { STORAGE_SLOT(overrides?: CallOverrides): Promise; - - c_0xce10a45c( - c__0xce10a45c: BytesLike, - overrides?: CallOverrides - ): Promise; }; populateTransaction: { STORAGE_SLOT(overrides?: CallOverrides): Promise; - - c_0xce10a45c( - c__0xce10a45c: BytesLike, - overrides?: CallOverrides - ): Promise; }; } diff --git a/packages/contracts/typechain-types/factories/BaseRelayRecipient__factory.ts b/packages/contracts/typechain-types/factories/BaseRelayRecipient__factory.ts index 524ce7a..87f9e62 100644 --- a/packages/contracts/typechain-types/factories/BaseRelayRecipient__factory.ts +++ b/packages/contracts/typechain-types/factories/BaseRelayRecipient__factory.ts @@ -10,19 +10,6 @@ import type { } from "../BaseRelayRecipient"; const _abi = [ - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x1c93e179", - type: "bytes32", - }, - ], - name: "c_0x1c93e179", - outputs: [], - stateMutability: "pure", - type: "function", - }, { inputs: [ { diff --git a/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts b/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts index c8f30ae..371b034 100644 --- a/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDestinationFactoryFacet__factory.ts @@ -238,71 +238,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x07d08ee9", - type: "bytes32", - }, - ], - name: "c_0x07d08ee9", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x1c93e179", - type: "bytes32", - }, - ], - name: "c_0x1c93e179", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x63bd0478", - type: "bytes32", - }, - ], - name: "c_0x63bd0478", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xc3324fa2", - type: "bytes32", - }, - ], - name: "c_0xc3324fa2", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xfbe62a3d", - type: "bytes32", - }, - ], - name: "c_0xfbe62a3d", - outputs: [], - stateMutability: "pure", - type: "function", - }, { inputs: [ { @@ -843,7 +778,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b506187fc80620000226000396000f3fe6080604052600436106101c15760003560e01c80636787d449116100f7578063b3a721d111610095578063d61b0c8211610064578063d61b0c82146106ed578063db7fd4081461072a578063e985e9c51461075a578063f242432a14610797576101c1565b8063b3a721d11461061f578063bc01188e1461065c578063bd85b03914610687578063c55bc566146106c4576101c1565b80637f628e8b116100d15780637f628e8b1461056757806385bff2e714610590578063929048c7146105cd578063a22cb465146105f6576101c1565b80636787d449146104bc5780636dcfd841146105015780637e721e2c1461053e576101c1565b80631b023947116101645780634e1273f41161013e5780634e1273f4146103dc5780634e6ce38814610419578063572b6c05146104425780635c5ed16d1461047f576101c1565b80631b0239471461034b5780632eb2c2d614610388578063481c6a75146103b1576101c1565b80630b885ac3116101a05780630b885ac31461027d5780630e89341c146102a657806313ba55df146102e357806318160ddd14610320576101c1565b8062fdd58e146101c657806301ffc9a714610203578063081cdf1214610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190616465565b6107c0565b6040516101fa91906164b4565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190616527565b6107d4565b604051610237919061656f565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190616771565b6107f7565b60405161027491906164b4565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190616873565b611736565b005b3480156102b257600080fd5b506102cd60048036038101906102c8919061690a565b611c86565b6040516102da91906169bf565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061690a565b611f36565b60405161031791906164b4565b60405180910390f35b34801561032c57600080fd5b50610335611f63565b60405161034291906164b4565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d91906169e1565b612001565b60405161037f91906164b4565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190616ad6565b6120de565b005b3480156103bd57600080fd5b506103c6612172565b6040516103d39190616bb4565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190616c92565b612229565b6040516104109190616dc8565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190616e20565b61241e565b005b34801561044e57600080fd5b50610469600480360381019061046491906169e1565b612421565b604051610476919061656f565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a1919061690a565b612508565b6040516104b391906164b4565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de919061690a565b612ac6565b6040516104f899989796959493929190616e4d565b60405180910390f35b34801561050d57600080fd5b506105286004803603810190610523919061690a565b612d3c565b6040516105359190616f98565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190616e20565b612e44565b005b34801561057357600080fd5b5061058e60048036038101906105899190616e20565b612e47565b005b34801561059c57600080fd5b506105b760048036038101906105b291906169e1565b612e4a565b6040516105c49190616dc8565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef9190616e20565b612f50565b005b34801561060257600080fd5b5061061d60048036038101906106189190616fe6565b612f53565b005b34801561062b57600080fd5b5061064660048036038101906106419190617026565b6130c8565b60405161065391906164b4565b60405180910390f35b34801561066857600080fd5b50610671613310565b60405161067e9190616bb4565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a9919061690a565b6133c7565b6040516106bb91906164b4565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190616e20565b6133ed565b005b3480156106f957600080fd5b50610714600480360381019061070f9190617066565b6133f0565b60405161072191906164b4565b60405180910390f35b610744600480360381019061073f91906170e1565b6134e5565b604051610751919061656f565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c919061713d565b6142d6565b60405161078e919061656f565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b9919061717d565b614373565b005b60006107cc8383614407565b905092915050565b60006107f0826107e26144da565b61450790919063ffffffff16565b9050919050565b60006108257ffef254261034bac9064db40beedeb00a21789bae83ec45bc6080e4fca2426c1360001b612e44565b6108517fc584978ecbf7f4704e8a6c75afa9a10d8777106982e4742d7b9a9fb050b9f1e760001b612e44565b61087d7f5aabdb124f9ca4049011380682b73c5aba0415d0b6116d74a5936c58a35ca00660001b612e44565b6108a97f6afc4d6b3a3c84d9b364f1db2f5dafef77606049c45c41c48cfaef751060c95160001b612e44565b8489896108b69190617243565b101580156108c45750600085115b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa906172c3565b60405180910390fd5b61092f7fe9ffbf293c2ece8ee79305d9a6169654a7114de20fbaa68f861f6f75b752ad7160001b612e44565b61095b7f56012c399773dff0cd88a94061dc268f3db0016fdcee340595b97ce0c748582860001b612e44565b6109877fb23687ca5a0e8239f984dec4267314bbcf67d282170811e4aab4d2d902f7692660001b612e44565b6109b37fbd655ca00a2f0e7d876088a0acef5228b23247051e49c2d510988e102818e44860001b612e44565b8587101580156109c35750600087115b610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f99061732f565b60405180910390fd5b610a2e7f01f57b23155943a664cfaa9367f07726ecf66e9e7f1bce8ac4ef2b28fe7b5e1160001b612e44565b610a5a7f5a5ff868374cc23468ae13dd5d7a7c3bbb93c7379a059ffa15dd5d0d187d764f60001b612e44565b610a867fccd2f9b242b06b24c899dc8d1cfe38b93ffcf694a11954eb531198d13effe41860001b612e44565b610ab27fa429c21522614f6d2326281d0134cd1f5e5c607809039e8fa92050e196e7a7ab60001b612e44565b6064831115610af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed9061739b565b60405180910390fd5b610b227fe5b07b507679869e644ae4d89250e627c69ebe49d9dc6d591022d65602f2a72c60001b612e44565b610b4e7feb49b4bc135917d3d0a068ec641339e146c450adbb549f7a7a97227199537ad960001b612e44565b610b7a7f69c49773801c26e65492db6becf8a9af3301c61ba87428f0072f8c515d17fb1f60001b612e44565b6000610b84614572565b9050610bb27fd96c2209b43ebd27adb9b8d454c03023aed7f89b3e6c6fba5ec9473b2e96512c60001b612e44565b610bde7fb6059bc2a3a24175da29dee344f09801f8025f845ff8dcb72b68914f56e749fb60001b612e44565b6000610be982612001565b9050610c177fb6b8ba1664bcdd06a237086e3df21c9094a1684859c1a0be2fb3b31376e0492060001b612e44565b610c437f65c33ac1f818405eb21ccbffc8f7372a5f92d09c1d09f71f624881a0bc60ef8260001b612e44565b60008c8c8c8c8c8c8c8c8a8a604051602001610c689a99989796959493929190617460565b6040516020818303038152906040529050610ca57fb0f0fc74d4f27760a6129ff6e3984baf4f1a6a8f50f12ff84a64bd3cb4b854a660001b612e44565b610cd17f12d5ef002891a997a20e958d467723b1007bfa70e4d5b94b2a8fae41d25de08560001b612e44565b6000610cf586610ce7848051906020012061470e565b61473e90919063ffffffff16565b9050610d237fce32dc2657a5bc8920c3fd6179fa0b81d0b72a12ce857566490fa877873fd62e60001b612e44565b610d4f7f85b5165326d13dfcce6570613bf7f2a17076052a0a40dde7d3d1a9ed9b1c971f60001b612e44565b610d7b7f3b8e97f61c78e340140d184a0fe7a34ebe88f0fd1fdc43c2749a3082c65ee2ea60001b612e44565b610d83614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b9061755c565b60405180910390fd5b610e407ffc5e894c94eeebb6e9b99f75e31ec7d87694ac11a2d5dc87a0c54ac42e56297360001b612e44565b610e6c7fe080625441c7fc6a865482c576631cb31e16f4471d36662ff675e41a6a8115c860001b612e44565b610e987fa0c41b33ac1e6023ce33960326f78eb948b36917a5dc0ab90336f9da02822e2b60001b612e44565b610eab610ea3614765565b600201614843565b9450610ed97fa5a39150cde7b6bec617db96fdb3907b046d412db6428300fda2be60ec920e7260001b612e44565b610f057f8c1f28878abcd7f5215e2889c22f16fd0a7c473485c5b3380d4ebc3ef884f8f060001b612e44565b610f0f858f614851565b610f3b7ff8ab2e932d29a1bccd65e972ec2dd09beb721a480ce72be84e8cbd8de77f57d660001b612e44565b610f677f28b209e8fc0e5a2b56efa3da9d8397ef7b289ecad64ccae57f3f3d42b709776c60001b612e44565b610f7a610f72614765565b60020161490a565b610fa67ff8490bd99ce937b95ccd28092392faaef7eeeab3201b9fb16a6c24ba8c69896260001b612e44565b610fd27f8008bd1e507769bf54e202251be9733f09582f1c743bbf8673af2f9b29140df260001b612e44565b611022610fdd614765565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b61104e7f2dc781920cb5e33aae4a8393b7a3a53337652ba8a35e2b56011f5744efabf05760001b612e44565b61107a7fbcde70b63c4d9dcfd9ccaab415d2b97128f066f3c437c3316f45fb908db685af60001b612e44565b8c611083614920565b6000016000878152602001908152602001600020600001819055506110ca7f427678b57a36ffce221a8c890b7ff9f36f0bc86bb2a3036d6cb9630cbf428ef660001b612e44565b6110f67fb9f070b89da27f36f99202b12db2829dee6fad361ff7070dfc84615e283b142260001b612e44565b8b6110ff614920565b6000016000878152602001908152602001600020600101819055506111467f7b5a3100b111440497f36007a416128bd4feb074ab6fab0127ef1a5150ee994960001b612e44565b6111727fea7c557d03a267ff27e741d3447c1731806b6d0d3d91d30a0b1fba3301efac8360001b612e44565b8a61117b614920565b6000016000878152602001908152602001600020600201819055506111c27f805ce5561d42393aeafd5a5a3e66a1d9961e80070ac06d4a59c517533a9fa79f60001b612e44565b6111ee7f967deef564515d9a9439c1186e9c6bdaad59640d59757ab377cbb8c790b5461f60001b612e44565b896111f7614920565b60000160008781526020019081526020016000206003018190555061123e7f447a73adc4607b190dc90a59146f6a6d6cbb6beb8113f29a4324be1949636fc860001b612e44565b61126a7fd690c115448555e2c7d90dbb18369e4436b23809c2b9557058fe64a3653bf3ec60001b612e44565b88611273614920565b6000016000878152602001908152602001600020600401819055506112ba7f4d52a2155da3ba950323800a3c8155911f968d70dea9c34fd778912ee5e35d5460001b612e44565b6112e67fb3d331c3453ca7536961a249a22157c030746ff898bfdc12156b0ce4bff9400260001b612e44565b876112ef614920565b6000016000878152602001908152602001600020600501819055506113367f37df8740ac51046d6d45b70d1520d405142374089999b994876fbd32ff0496eb60001b612e44565b6113627f0c13f6719fef45381e50816916a5eab15a6c5adbf0f919e1dfa99dc58782710e60001b612e44565b8661136b614920565b6000016000878152602001908152602001600020600601819055506113b27f85c9b0dfbea7e9efacdb920f67d01ffded6d823c166063d314aea49e03b480a960001b612e44565b6113de7f0db3728cff6bf4d259a380e523c94be99525a8b4e1b9386596a02e5f8828780160001b612e44565b836113e7614920565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506114687f69875017d86bc248ae1b52571b1c657618960bd48c796d6de92ebf75a0189b8860001b612e44565b6114947f782fbf49717d6af7f3d1c6315f9c20ab3d02dd60e5fc0a9476b07b2c32e1b42d60001b612e44565b6114bb61149f614920565b600001600087815260200190815260200160002060080161490a565b6114e77fe14bc2d6b10facf2a5265c82476a2e0fd8c016815075f4302f59540d56e1e30660001b612e44565b6115137f13524a23719e903d0cace00f5d7a54f518f18c51d69f9efaf06d8b5ef8bbb16860001b612e44565b61157761151e614920565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b6115a37f372ca61bbfaf1e294402597498b99366b4e5fb2f2e128ee253213d67229b6cc360001b612e44565b6115cf7f55209cb5e3c63fe0a67b528b111d15216de2196c517c0b8d805e556909fb6e8560001b612e44565b6115eb84866001604051806020016040528060008152506149fe565b6116177ffe551f4c9ce42abc2d789e22e8bad622fabe318e230d04433c0e73c8ca0532e660001b612e44565b6116437f1c02cd8b6b383cdbe8bc49b3d0abc3c361b50f5d77e2aaee99b65819cad9e2ae60001b612e44565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36116b37fe538ed482a6203bb8f8989a475a198a2683d1b382121135ccd5507773b1c9fad60001b612e44565b6116df7fea10a1d343ed3bf0d46c880a8e3a7f7f95189023771924450457b9ab51a5ff5460001b612e44565b6001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b6117627f76959acc5804dd7d58983a7553c8dba5d4aaa668103e7d29c4903cb21496dcd660001b612e47565b61178e7f01c3110384d2631b65d18d50de1c2c4882530eff4188f212e7a1b564a93885c260001b612e47565b6117ba7ffb264934f994ece14b386fc0be186c58f27ab7f1d9ed0c2dbf61f0a41d8a295960001b612e47565b6117e67f9cb49303e2d57393fee370e71e080720e1e38459d90cea9772f03f0266c0e62260001b612e47565b3373ffffffffffffffffffffffffffffffffffffffff16611805614a1f565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906175c8565b60405180910390fd5b6118ab7f55910367c443c4713b200bdd68889a2360c09fbd998b1c8cf51a36cbc450df4660001b612e47565b6118d77f574e953eada5dcc747c84e5bae85f4417425c6a4144c50b087e5174dac600a7d60001b612e47565b6119037f59008a8f1d50584095ce216266c7af2cef3efa9b63497de53503ca94cbb9b24a60001b612e47565b8261190c614afd565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119797fa43cd7f41895ca0e17994fcb94d0fa5858e27f48ed0cd8ff02384394fd8a33c160001b612e47565b6119a57f4c55aa82e1408c3340ff78033cda644766212f0e1200ccb38a693deddd5bf52b60001b612e47565b60016119af614a1f565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550611a647ffde6ef2df36beaa4210510184a6841e267657f7750bc29c444fba3d35a9810fd60001b612e47565b611a907ff406f6747bf4f701495660cd6812670c94badcfce31f42f58c1a6ad20e1f572060001b612e47565b611a9985614bdb565b611ac57f80e6b81cce390388429b4ad92d0c729633ff92a3b39c78ee557fd91eb505209960001b612e47565b611af17fc60cf584725fea684c7294500e23761ffb83d0e20d21258a85759499dabae46060001b612e47565b83611afa614765565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b677f7e0e6eb23f676c5a5a42ee84ce743919a30e108fc44bb1c5d3c6fd6cf837ae0d60001b612e47565b611b937fec467f686f916ec9604b7468465856c1c83ef57259fe9a6fc260464c09a9838a60001b612e47565b81611b9c614765565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c097f9e58434cd253e39e7c0dcf96fd15b5771bbf82fa978270dba3fa5846389094f760001b612e47565b611c357fb833af1db132e6c48f679f2773d6972f1fd6f56f1d6a65223235341ebf42c0fa60001b612e47565b80611c3e614765565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6060611cb47f312c43f47f4eed00c2a0b91e8c512ff2a8a6ab31cfcf320fe38743297a84416560001b6133ed565b611ce07f9c3c1ecfda0c420cdb4793ff47d81b2024b9c0524c831d5acca5ee9a417999c860001b6133ed565b611d0c7f23f1c05e588c25ff8dc9f56733243455c53fd3f85640a1df8a15214915819a4760001b6133ed565b6000611d16614c82565b60000160008481526020019081526020016000208054611d3590617617565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6190617617565b8015611dae5780601f10611d8357610100808354040283529160200191611dae565b820191906000526020600020905b815481529060010190602001808311611d9157829003601f168201915b50505050509050611de17f4dee7afd3e91d4c6c6a94c90162a094b064920d9387a82da1c6d064e1fe3cc5060001b6133ed565b611e0d7f6112c02f84912af5ab2789cbd18d5abdc3e73d6ced049ff97b0e60a19eb9de3560001b6133ed565b611e397fa6cdec03e4644662815e7cbaf832198029c29d5fb0e11816137478e1a840ec4060001b6133ed565b600081511415611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590617695565b60405180910390fd5b611eaa7f9ab49bd638b9455b7f2e64130ddf4f233b0a3b80acefe8f789372c3efa97af2160001b6133ed565b611ed67f0a4123bd8c1b08089efacc9338be8a7f6bf7ab4c4bee8a86043851bce1caff0060001b6133ed565b611f027f6ca6f9766d48accbefcfdddb403c058cfc26b1911cd85d1a45c019eb23605e6b60001b6133ed565b611f0a614c82565b60010181604051602001611f1f929190617749565b604051602081830303815290604052915050919050565b6000611f5c611f43614d60565b6001016000848152602001908152602001600020614d8d565b9050919050565b6000611f917f2fc13f8ae1ee464f2b1e0b2f0fa17ab0a3c67d2e59a3321e0238afc1125a862860001b612e47565b611fbd7f610b1218449889738b2ada69c63c730827be1550a5a589e7adfd1f5b0904906860001b612e47565b611fe97fb1b4425ba2edc5e6861c5e74be5501cbd40bd6afc6403772bc96536307ec385f60001b612e47565b611ffc611ff4614765565b600201614843565b905090565b600061202f7ffa4f644143e5873afd934d08b4d252115745c55c98ad2539d9fddf23d8caa43260001b612e47565b61205b7f1a7281130aca2e54851f40a6a951452f1a5044852232c04dbb986e289f08cfd760001b612e47565b6120877f4850a17edabc25661db4dc58012d9c932f58b3ab3facff40733e9619760ef0c960001b612e47565b6120d7612092614765565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061211e575061211d85336142d6565b5b61215d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612154906177df565b60405180910390fd5b61216b338686868686614da2565b5050505050565b60006121a07f97137defe44b8ef40f073d89a187cce75036a52cfb6d5ec319d36343c60108bb60001b612e47565b6121cc7f208598a720e6421a1798a94c5214991ef546a92770f360775929f77a3190518160001b612e47565b6121f87f2a09b9827ab94682f5e7b891ae3b8c5ce41cae475dabb6b94b9161280a7b6b2560001b612e47565b612200614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060815183511461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690617871565b60405180910390fd5b6000612279614dc6565b60000190506000845167ffffffffffffffff81111561229b5761229a6165a5565b5b6040519080825280602002602001820160405280156122c95781602001602082028036833780820191505090505b50905060005b855181101561241257600073ffffffffffffffffffffffffffffffffffffffff1686828151811061230357612302617891565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990617932565b60405180910390fd5b82600086838151811061237857612377617891565b5b6020026020010151815260200190815260200160002060008783815181106123a3576123a2617891565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106123f9576123f8617891565b5b60200260200101818152505080806001019150506122cf565b50809250505092915050565b50565b600061244f7f7ca6e663761a0f614c9082f178ff07503394851964914930828ae2ff86481d8e60001b612f50565b61247b7f8aad3e92e7373d91f82323d355a587bfc96329cc3e91a9528217e4c84bcc063960001b612f50565b6124a77f3b4e5d1c2b996ac6c6720bcd7c27922338083696d2a3f25c32b5fece8475bcae60001b612f50565b6124af614afd565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006125367fdbd748bedd58cd351cc9aaa0fc0b7cb7d9b05fad440bc5e722107137a5bd099660001b612e44565b6125627f87d07511fcc54e38c625feabb25a539894a6f03945e2ad64e92d2032434b88e260001b612e44565b61258e7f2d6e45b7cac3840f2a5d0e1d5f978f8988b9b3a295b437644fbf44f919a8c75360001b612e44565b6000612598614920565b600001600084815260200190815260200160002090506125da7f3f0d3dc647efedb6521e3948ce812346577280ab972ccb8c350cc9452ac3cc8c60001b612e44565b6126067ff6c7e0f3a8a0eea983b8ea6e7f11ffc811f3dc54651ae93f57a8ca3136d0ed4360001b612e44565b6126327f93b6dfc1ec251c8c5c67a3d52729a394b28f2e7c570933ea48b4237c8ba4d52360001b612e44565b60008160020154141561267a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126719061799e565b60405180910390fd5b6126a67fc3b0fe2f21b94e38a2e64011b6777d5167e5372ff0b2badc67fe1b7132a7cf3960001b612e44565b6126d27fc52c3484f879068a55bba65d503c332e02f233ad41b97699ea9dc5d368acc78e60001b612e44565b6126fe7f1dac8be127de616dfdf8b893580f0f37bb7eeb3e6369132e3b215bce3c2ad6e960001b612e44565b600081600501541461283c576127367fd2e4691fae2fb1ec8e7002e0db37a84917021cf9de16f21a33a9cbd930cce53360001b612e44565b6127627f6465ffd7ff9099b160bf7f6f0ff7adb0fd4cba6cff50a75a3ab05c432e37584a60001b612e44565b61278e7f324051335733b0ff0bbe597a62f8a83556984ba3d366eb9c0e6edc29bb3d5a8c60001b612e44565b6127ba7fbd85d713b3ecd1c6b7f8724c8b03ad04cb14ab14311238088d189a2998c1ff3660001b612e44565b80600501546127cb82600801614843565b1061280b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280290617a0a565b60405180910390fd5b6128377fda60529bfb9986c98acd273f635686d8f7b73b6f583614cbdc820a7a58964a8c60001b612e44565b612869565b6128687f7d2ef82a534bdad4018b46485ab5ca1b8d6199d565fc485c9fc955cf8315650160001b612e44565b5b6128957fb0294875c6cc08a345ea42b9646225a786377b4c6f373ca6e5c1e83170691ffa60001b612e44565b6128c17f8ef13eb5f927e493009b674a2d591d4edf2deed7446b1bc73fec86b82774ef6860001b612e44565b6128ed7f3277415fe543398c4684af668eadafa6dac0e216ec938554ca660d4f6590361d60001b612e44565b806000015442118015612904575080600101544211155b612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a90617a76565b60405180910390fd5b61296f7f47d1371d81b2dfae19008e1446f17c094119b8e80f43e7faf7c0d36c0a79bc3960001b612e44565b61299b7f5a54c035f36d106764ab8a16f94ecc6541f4a99e1a3f6672a7d947269b95a1ec60001b612e44565b6129c77f37dc2fc9d219cfff2f7d3e9cacfb859d74313cff97c8573e82bfddcce36bc52560001b612e44565b60008160000154426129d99190617243565b9050612a077fe9f5dbd7c9c9b9dc1f8efbc13fb0c02a1028c73d5fdb06f3af09ecf913a691bb60001b612e44565b612a337fe80755f6fb225c316f592f29da79db79f968935adfc2c4b0a1c396037c8379ae60001b612e44565b600082600001548360010154612a499190617243565b9050612a777f77e4ee5346abf5b5d88d42a9ab8a6e4667b53e015b1edefa3c10e8599591241b60001b612e44565b612aa37fbc613c02241742596ff7822714453fa8a7fd655883df187aa440fb4faa8a38aa60001b612e44565b612abc82828560020154866003015487600401546133f0565b9350505050919050565b6000806000806000806000806000612b007fe8a5af4e439f02224da033277a50ab5279802b43087c27f372488d6423946ff760001b612e44565b612b2c7f5487a9c3f4a6be99907c28a523b37d3836a9af8930d871758cb1e2b9e63bc66160001b612e44565b612b587f48ddcf1b678145f3268d96f945fd461e5a4326ef88837141519aef52c51ffee960001b612e44565b6000612b62614920565b60000160008c81526020019081526020016000209050612ba47f8dbe65c6881692a6776899f280065952dc2df69d72fe07395c338dcc973a490960001b612e44565b612bd07f47b941210197f2efd58d1304cae8f37ab1c986ec3fb529211f9686c6fcacc3a760001b612e44565b612bfc7fb0469c1f5adfed701fba68d5d126e5e8ec03403ef713dfda43e52734cdccae9860001b612e44565b600081600201541415612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b9061799e565b60405180910390fd5b612c707fa68513e6f67f026cca3cd16f744f770d6aa54e70bdd9db5ed90e954b349a7f6f60001b612e44565b612c9c7fb8ecceab63ff293d4c2ccbdb4eba26bb05c05de4269141e23d78488d9f660fcb60001b612e44565b612cc87ff5d4b15f45d20693747daf6cb337d95c90d9883bcf518c7c5aace37f5c19256660001b612e44565b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d1c89600801614843565b995099509950995099509950995099509950509193959799909294969850565b60606000612d48614d60565b600101600084815260200190815260200160002090506000612d6982614d8d565b67ffffffffffffffff811115612d8257612d816165a5565b5b604051908082528060200260200182016040528015612db05781602001602082028036833780820191505090505b50905060005b612dbf83614d8d565b811015612e3957612dd98184614df390919063ffffffff16565b828281518110612dec57612deb617891565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080612e3190617a96565b915050612db6565b508092505050919050565b50565b50565b60606000612e56614d60565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000612ea382614e0d565b67ffffffffffffffff811115612ebc57612ebb6165a5565b5b604051908082528060200260200182016040528015612eea5781602001602082028036833780820191505090505b50905060005b612ef983614e0d565b811015612f4557612f138184614e2290919063ffffffff16565b828281518110612f2657612f25617891565b5b6020026020010181815250508080612f3d90617a96565b915050612ef0565b508092505050919050565b50565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb990617b51565b60405180910390fd5b80612fcb614dc6565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516130bc919061656f565b60405180910390a35050565b60006130f67ffa26a7da27c0ac06ac7805887f2377614da761287f2f7c3a4dc6abc18eb5473b60001b612e44565b6131227f94d85335309ff28be4aa749f1808264193e61aaa98a6c3ad981cab613330b94960001b612e44565b61314e7f867529e2ffd01a03b7646d7b25c07931641c80ff9c1d33df57e95c401a39f0b560001b612e44565b6000613158614920565b6000016000858152602001908152602001600020905061319a7ffcaa8f30a2501929c504af414955562b187a03a3fbef2540414642f43b2bf0b460001b612e44565b6131c67fb5fdf3ca75f9f25deb6461c7e36dda453f09d0c5ec33c02845676511a0a620e260001b612e44565b6131f27f64092fc04b74608d5fbdfd925076b6f0d9dce2f52f72687bee3fd2265dbd26a060001b612e44565b60008160020154141561323a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132319061799e565b60405180910390fd5b6132667ff44c2fce1b667441bdce1aa5e317ce4e059c4be792145f244950392c19c90f5c60001b612e44565b6132927f4e961061e1b66e4d007d7ea686f1efd64b12e1f0daa709c60157b5c7e270e8e760001b612e44565b6132be7f56b4bbe6761ee9daa28e614611acd1aeefec4b71432acebe303e72cf7199ccc660001b612e44565b6133078160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b91505092915050565b600061333e7fc7bf4d9de951de2382a329515d163c8b3de60b5ec9513e3beb9c0779f70fa8cf60001b612e47565b61336a7f607acc0e7f5b80faa103c94ffdc8845d15f77dcb52635e930cdc0c13e5465fed60001b612e47565b6133967f0165c996af12bc8835cedb815a581af458d067b5bb9e5b20b6185ee555a82a1f60001b612e47565b61339e614765565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006133d1614d60565b6000016000838152602001908152602001600020549050919050565b50565b600061341e7f467e8534352d8ba04feb9309024ec928d7fcca8fefcae69a9d81b84da5074e3b60001b612e44565b61344a7f42552ebb707a13c6433ffcff968f267f1b1c67dbd87aae42c0ac206fd7b4cb3a60001b612e44565b6134767fff36ec40513fb6615e5a6da1f53a00a33167b7ffa9c0c08f8c8b32377d978d5360001b612e44565b8483856134839190617243565b8761348e9190617b71565b848661349a9190617243565b84896134a69190617bfa565b6134b09190617b71565b86886134bc9190617b71565b6134c69190617c2b565b6134d09190617243565b6134da9190617c81565b905095945050505050565b60006135137f1a0bc5712cf21f15ffe356effc6be38ee5e256049652db55e362e0cb02fbcd3360001b612e44565b61353f7f9556cf658fc9edfafcd4cce3a2bba017014a52c41f5c122233cb5f27045f8e5760001b612e44565b61356b7fd09a93ae0b33bae90200104ccea2eeea9260431e57c2b6d9b2512c81489f220960001b612e44565b6000613575614572565b90506135a37f0a96915e921ce1bb9dff109ae233ac4462ceb9ef2568ceae98430347f727d54860001b612e44565b6135cf7f4993b2d38321c91c5694ed34ac6b4fc75a66f0186add52a9c8c4e7a80f5632d360001b612e44565b60006135d9614920565b6000016000868152602001908152602001600020905061361b7f2db17f44d2f4f466e8c646f303e33a3e7c507cab6b4ab7ee21b161e4bf50aa8760001b612e44565b6136477fa2fdc2d6b76ce882a2b1c7c9e4dc0db249a4107db825384998b8c812edc5778d60001b612e44565b60008160050154146137855761367f7f9297c12ecb998c58f523d14c3630cddd6e9a47dddbc3e5670dd90483aa6a6e6260001b612e44565b6136ab7fd67931535a3386d2df57da321007065fc1b0ff5843e08803d5ada4777ec05cfe60001b612e44565b6136d77feb63e0b74550ee850541a4b43bcb50d1718d25f3c1fc6e07a70be2df53b3217960001b612e44565b6137037f8860f6cf9b547ada5d33edb8c755b7622918c397e73be151799ae47e357c022760001b612e44565b806005015461371482600801614843565b10613754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374b90617a0a565b60405180910390fd5b6137807fdfefd62cfcd074d6cec2a70941a72b4db89062098859306fb3b626f97dac509060001b612e44565b6137b2565b6137b17f6eb419f4ef571ee69565f93c0614977e2c78d1082f3b11e6faae7bfab4d7d4af60001b612e44565b5b6137de7fe6bd9eab0fcdc8dd0393fb7687b25c92bbf481cb9f8171f7a38b25336a9f5aa260001b612e44565b61380a7f0c6ef021f5f8c4c1d04414a030b0d3b29d069f80c50fe04b8fd9c4c958ed2e0660001b612e44565b6138367fca48105f8ccb5c8f371268598674f88c9427da131aee83b6bcb5203b108989d160001b612e44565b80600001544211801561384d575080600101544211155b61388c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388390617a76565b60405180910390fd5b6138b87f84b3a30e3aaaad891b6476fac1c1ce092f7377c3af53bd4968bf7584f8ed5d9460001b612e44565b6138e47fafac73132aea02f543d24463034fe220de761a3855acbcdb8b0ed5ad866cd4bc60001b612e44565b6139107f95d7dccdc85275beeb84cca0514066e29ae2c008d87247aa57d5525ffe6415af60001b612e44565b60008160000154426139229190617243565b90506139507f2bd2a43d6c3fbb552ae634a9cf117bdd370c1c0452d406ff78d337a42aafc8d160001b612e44565b61397c7f8388d7d8641f292eda9f643d2a3824b14a200164b771b206f502a79db76ff32b60001b612e44565b6000826000015483600101546139929190617243565b90506139bf7ecb9e931eeac8a3060d2111d1528ac97fb328698d73f00d32df883fa71cc22e60001b612e44565b6139eb7fcb0a4ab5a3a709d23815a0cc8946278ab53567900be8f410189e9df1c188265060001b612e44565b6000613a0683838660020154876003015488600401546133f0565b9050613a347f2671c493662477f9138cf0caf3de07279e3d88bb22dd8e760b95179c36347e7c60001b612e44565b613a607ff5e0e2c4a1f649b6261ceae6d7af54c90aea94ed25a21079a64af5ae30b5f86560001b612e44565b613a8c7f45038e8372fde8d00740a9af5a28c467ff690756fa2228608288d7117526468d60001b612e44565b80341015613acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac690617cfe565b60405180910390fd5b613afb7fb99e15263fee06f285aa82d0590f86b64a774ded68dd56fa792be386ba2dff3960001b612e44565b613b277fcea5f77e8e6fe64ec9d03e19e08dafbe6f36208be6a8bc76dc8992941dace0c160001b612e44565b613b537fadc34614713e8a678778d6e7443e528a69db973d57e13075306b0d62bdd562ac60001b612e44565b60006064856006015434613b679190617b71565b613b719190617c81565b9050613b9f7fc1867565605dc569e134fee7c94576cd28efef42e5f2496102a2c9066fbf279160001b612e44565b613bcb7f1a4bb91bd12f72508e757059a9641a27720f734c35864dd6567c1dc2b7048fa560001b612e44565b60008134613bd99190617243565b9050613c077f1ae67994343a150b53f1a8665ba5d89c05efd46b78d681185e4e8ec6db12b13a60001b612e44565b613c337f1770c47a621900aff2a3654e052089173ced90f384b3388fa8cf6eb17368bb3e60001b612e44565b6000613c7e8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b9050613cac7fa9f0fa1149526d518740884046d951680b4a8c8b56343df1c9fe157319c6bf1a60001b612e44565b613cd87f15db6d0424921ba08d952170d401e6dbbde2ffad68d82fd8e96bce2f25c054b860001b612e44565b60008b8983604051602001613cef93929190617d1e565b6040516020818303038152906040529050613d2c7fbde68610edece319f0c734dacb5c71c244ca8355565eda2f1cc462b6ea7d9f1360001b612e44565b613d587fcf4ebaf86cc5878f3c197d966d95eb8abe3205584511d4025bc09d4831bd952a60001b612e44565b6000613d7c8c613d6e848051906020012061470e565b61473e90919063ffffffff16565b9050613da97e0c1e0208a83ad0c8bdf511888c733d08452faf2edb2e8651cfaf82ee0571fc60001b612e44565b613dd57fe717e93d298956c9588ab8f07146f5af81795f7be948f46f5f8b01e17a760d2a60001b612e44565b613e017fefbb91477106384cde2a0c3bb291afc38600957adaa2242d8dfe31ceb84778fe60001b612e44565b613e09614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e919061755c565b60405180910390fd5b613ec67f51661d87ff3dadec09005108334ba343b2f51dce9a09ce8e2fee4558d5247c7f60001b612e44565b613ef27faa0c3b1ee34f2a4375be328025f1890701397b70b1250e4f62255fcac543ab2960001b612e44565b613f1e7f6a91c3c8c7494c04964741fd0901d0f2d14e1992b6aa8d8c39e334fd538edb4360001b612e44565b613f2a8960080161490a565b613f567f1106ae168cb91cbd1ea6e5cf2f9c61842c0059249b5ee05474bbc2b99f8e466560001b612e44565b613f827f8d774324aabda0627bcc1239bcce6ee170958556fbb7d24c831fdb134fa3522260001b612e44565b613fcb8960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b613ff77fa957eac5cebc2c1f29ec1521b9f962659947f3050a20a2bfa217811afd3854fc60001b612e44565b6140237f876c0988c120574709032973f531c303d92925c8cb10c272e6aa611f81a8e62060001b612e44565b61403f8a8e6001604051806020016040528060008152506149fe565b61406b7f6ba38d6297457146f8d16b1fbd1a98b39780979ac7f89eb6da84fafbbc0c219e60001b612e44565b6140977f48c5e3ccc7e77125625395ca7e6d39b6ea2901eb68abde350939b1112f0e0fc160001b612e44565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015614101573d6000803e3d6000fd5b5061412e7f9ac51f0cbe86cbef4849ddb20c451ddd33b0653019f6c0973458611f5721834260001b612e44565b61415a7fcb4980c535a9850042d645dbbaad9aeff49d65b78d3ee55b58d12b1a687783eb60001b612e44565b614162614765565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156141cb573d6000803e3d6000fd5b506141f87f32485977772f9ad6ebae13dfbc40f6f0009c657716c1ff71265d0047384e25d260001b612e44565b6142247fb5d3bef5338356a23dfcde40c5e4441fd29980e4d2b00f5834752d2666f70c6d60001b612e44565b60018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46142967f189d29ba560835342b354d49bbf2a33dd887f8330998ce4a22f0af009e5c71d860001b612e44565b6142c27f58344b96709b709bc6fef55f144a0d1a49dc6058486a0154310d529f27c2a62660001b612e44565b60019a505050505050505050505092915050565b60006142e0614dc6565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806143b357506143b285336142d6565b5b6143f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e9906177df565b60405180910390fd5b614400338686868686614e3c565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446f90617dcd565b60405180910390fd5b614480614dc6565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006145a07f88f29638fa65ae63a841285179c25a2e39ced6d390f74256094dd2a735b4027660001b612f50565b6145cc7fd1328846b45aade881fe5353aea2a4c719af9da68bc5171168583cc13155431460001b612f50565b6145f87f7ed86c48a0f81ef7874eb0d2d3f21b0e65416b91c4c9f816a0589566b5ba09e360001b612f50565b6018600036905010158015614612575061461133612421565b5b1561467e576146437f070f7f2b2922ac8abb388507c63d261a8e7c8fc39014856f8ba03bdf0984e0a260001b612f50565b61466f7f572eebcddfe593539ba8aa5956472f6ac47b18bd757da058e419e5f60d92340960001b612f50565b601436033560601c905061470a565b6146aa7f049f00aa6d96a4574a36ae1b2039ae5b66d97456b939a9c927c84997c029175560001b612f50565b6146d67f0251339121068447d4c576c5e96b821e81d1da157c7c6da93224ac2005db84c860001b612f50565b6147027ffae7111910251cf097d73c9503b05824f9222f1178f4c4f6fd670c2b76459f1560001b612f50565b33905061470b565b5b90565b6000816040516020016147219190617e5a565b604051602081830303815290604052805190602001209050919050565b600080600061474d8585614e60565b9150915061475a81614ee3565b819250505092915050565b60006147937f22989ab266127db139a475327f255a7cbdd8f4dcc1504e600dce7366519f266c60001b6150b8565b6147bf7fad5e44193be1059dfdffe9ac6c6f3af73928f60ac167740b45d14ca0f77703cc60001b6150b8565b6147eb7fe345fd94e4db779611a270161ffac772f81575bb475f1d42c7b8aac50c26c99760001b6150b8565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e905061483c7fedd75a57aad4d39568d96afe62dad6399b99e6d5ce59343e0e1d06daf02aa7d360001b6150b8565b8091505090565b600081600001549050919050565b61487d7f83beed3ed19f3f5bfb7572c3835676b72c274d00ed094c05f59e63c8ab88a84060001b6133ed565b6148a97f6369348c2178daa645f0bf939f1a6678aa7569c2b9cd0fde0692d9e6a32b54b660001b6133ed565b6148d57f5872f937c02b64516677c99c18a6bb89e7471cab449621203787d44f6efe2e7060001b6133ed565b806148de614c82565b6000016000848152602001908152602001600020908051906020019061490592919061631a565b505050565b6001816000016000828254019250508190555050565b600061494e7fcbd6a87feadf8bc6d18a7e4d3dce6dea12857618c537b87a82537ff45dbb94b360001b6150bb565b61497a7f776cfd16ce6d3511350000a04752b2abc52815f973792fc79403090e385a2abd60001b6150bb565b6149a67f1acc6ee66986e06ec5b2aab054e955ca5a1313b484283bf79dbef6e5d3e14be160001b6150bb565b60007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990506149f77f4d39dc49b0d6cf786271a7bfc8fd46388ec159f0027f61fc98852b25ce303dfa60001b6150bb565b8091505090565b614a0a848484846150be565b614a1933600086868686615248565b50505050565b6000614a4d7f499a2370464f33cfc8e2ef033f579272af11ed73cc8753c9cbc6f13fb4872e9c60001b615420565b614a797fd098f0bcaca6285a9ced2563c95781bc2f3fcdbf7c01993459cfa5c977f104a760001b615420565b614aa57f8b6492a6876bb38cd0913d978cd1674f72509ad53daa743eb10fa4a5b109542160001b615420565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050614af67f8734688ce7e316775a7605f64173dd1a8314018c64251ca9b5f78aaedc1b1d0360001b615420565b8091505090565b6000614b2b7fbf28b4c694d70043cdbba1139d13e89322d9971fc2604eec0c38e355815d0bd060001b615423565b614b577ff948c5bcd8a8be4422c92e8f63497dfe9d651affb2eecccb4e1e1a34b9a5a5b460001b615423565b614b837ffb0af2a23ffb1b99ced27c52f498bc6ab948fe939d307309c7986f94c11539e960001b615423565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9939050614bd47f471ad1677eb85872327f149b61d16c373352df62511e8db57eca7d728fb69bfa60001b615423565b8091505090565b614c077f0c8e7e650704c8ee3af1f7a15c517c38dc4fc70856d2ff36fcd44c3408e32d7c60001b6133ed565b614c337fa601ee21d724d0cd41bcad5c9a81c9860d87f8f5d63ee068e05dacf7c6a3b0f060001b6133ed565b614c5f7f791c3597ef5db947d31801b2019c0ae1fbc8ed0ae2c503dc0474a15c92d5849e60001b6133ed565b80614c68614c82565b6001019080519060200190614c7e92919061631a565b5050565b6000614cb07f6098ffde723ed64276c2c486b25bcd3baa9fef2c472f4b52ce362b86534e958460001b615426565b614cdc7f10eb3f6b27aaacda65aa8f87c2662bf52b41f9b1818b9f64dc9266fe61391c0360001b615426565b614d087f776de49b4a1bf86ef00deb75e863c7bb93d54dd6f3d8e2d4f0aa283f5cb993d360001b615426565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c839050614d597fdd41ca273c50064cb67b10ee4905fef1b95ec8ac8c9637a58c89453b6234ce3e60001b615426565b8091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000614d9b82600001615429565b9050919050565b614db086868686868661543a565b614dbe868686868686615746565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b6000614e02836000018361591e565b60001c905092915050565b6000614e1b82600001615429565b9050919050565b6000614e31836000018361591e565b60001c905092915050565b614e4a868686868686615992565b614e58868686868686615248565b505050505050565b600080604183511415614ea25760008060006020860151925060408601519150606086015160001a9050614e9687828585615c0a565b94509450505050614edc565b604083511415614ed3576000806020850151915060408501519050614ec8868383615d17565b935093505050614edc565b60006002915091505b9250929050565b60006004811115614ef757614ef6617e80565b5b816004811115614f0a57614f09617e80565b5b1415614f15576150b5565b60016004811115614f2957614f28617e80565b5b816004811115614f3c57614f3b617e80565b5b1415614f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f7490617efb565b60405180910390fd5b60026004811115614f9157614f90617e80565b5b816004811115614fa457614fa3617e80565b5b1415614fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614fdc90617f67565b60405180910390fd5b60036004811115614ff957614ff8617e80565b5b81600481111561500c5761500b617e80565b5b141561504d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161504490617ff9565b60405180910390fd5b6004808111156150605761505f617e80565b5b81600481111561507357615072617e80565b5b14156150b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150ab9061808b565b60405180910390fd5b5b50565b50565b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561512e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151259061811d565b60405180910390fd5b61514d3360008661513e87615d65565b61514787615d65565b86615ddf565b6000615157614dc6565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546151bb9190617c2b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161523992919061813d565b60405180910390a45050505050565b6152678473ffffffffffffffffffffffffffffffffffffffff16615df5565b15615418578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016152ad9594939291906181bb565b6020604051808303816000875af19250505080156152e957506040513d601f19601f820116820180604052508101906152e6919061822a565b60015b61538f576152f5618264565b806308c379a01415615352575061530a618286565b806153155750615354565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161534991906169bf565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016153869061838e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614615416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161540d90618420565b60405180910390fd5b505b505050505050565b50565b50565b50565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156154aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154a1906184b2565b60405180910390fd5b81518351146154ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154e590618544565b60405180910390fd5b6154fc868686868686615ddf565b6000615506614dc6565b600001905060005b84518110156156be57600085828151811061552c5761552b617891565b5b60200260200101519050600085838151811061554b5761554a617891565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156155ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016155e3906185d6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546156a29190617c2b565b92505081905550505080806156b690617a96565b91505061550e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516157359291906185f6565b60405180910390a450505050505050565b6157658473ffffffffffffffffffffffffffffffffffffffff16615df5565b15615916578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016157ab95949392919061862d565b6020604051808303816000875af19250505080156157e757506040513d601f19601f820116820180604052508101906157e4919061822a565b60015b61588d576157f3618264565b806308c379a014156158505750615808618286565b806158135750615852565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161584791906169bf565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158849061838e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614615914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161590b90618420565b60405180910390fd5b505b505050505050565b600081836000018054905011615969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161596090618707565b60405180910390fd5b82600001828154811061597f5761597e617891565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016159f9906184b2565b60405180910390fd5b615a20868686615a1187615d65565b615a1a87615d65565b86615ddf565b6000615a2a614dc6565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015615ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615abd906185d6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254615b7c9190617c2b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051615bf992919061813d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115615c45576000600391509150615d0e565b601b8560ff1614158015615c5d5750601c8560ff1614155b15615c6f576000600491509150615d0e565b600060018787878760405160008152602001604052604051615c949493929190618752565b6020604051602081039080840390855afa158015615cb6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615d0557600060019250925050615d0e565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050615d5787828885615c0a565b935093505050935093915050565b60606000600167ffffffffffffffff811115615d8457615d836165a5565b5b604051908082528060200260200182016040528015615db25781602001602082028036833780820191505090505b5090508281600081518110615dca57615dc9617891565b5b60200260200101818152505080915050919050565b615ded868686868686615e08565b505050505050565b600080823b905060008111915050919050565b615e16868686868686615e1e565b505050505050565b615e2c8686868686866160d9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146160d1576000615e69614d60565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156160cb576000878281518110615f1e57615f1d617891565b5b6020026020010151905060008111156160b7576000898381518110615f4657615f45617891565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415615fb657818760000160008381526020019081526020016000206000828254615faa9190617c2b565b92505081905550616002565b81615fc18d83614407565b141561600157615feb8c8760008481526020019081526020016000206160e190919063ffffffff16565b50615fff818661611190919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156160685781876000016000838152602001908152602001600020600082825461605c9190617243565b925050819055506160b5565b60006160748c83614407565b14156160b45761609e8b87600084815260200190815260200160002061612b90919063ffffffff16565b506160b2818561615b90919063ffffffff16565b505b5b505b5080806160c390617a96565b915050615f00565b50505050505b505050505050565b505050505050565b6000616109836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616175565b905092915050565b6000616123836000018360001b616175565b905092915050565b6000616153836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616287565b905092915050565b600061616d836000018360001b616287565b905092915050565b6000808360010160008481526020019081526020016000205490506000811461627b5760006001826161a79190617243565b9050600085600001600187600001805490506161c39190617243565b815481106161d4576161d3617891565b5b90600052602060002001549050808660000183815481106161f8576161f7617891565b5b90600052602060002001819055506001826162139190617c2b565b86600101600083815260200190815260200160002081905550856000018054806162405761623f618797565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050616281565b60009150505b92915050565b600061629383836162f7565b6162ec5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506162f1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461632690617617565b90600052602060002090601f016020900481019282616348576000855561638f565b82601f1061636157805160ff191683800117855561638f565b8280016001018555821561638f579182015b8281111561638e578251825591602001919060010190616373565b5b50905061639c91906163a0565b5090565b5b808211156163b95760008160009055506001016163a1565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006163fc826163d1565b9050919050565b61640c816163f1565b811461641757600080fd5b50565b60008135905061642981616403565b92915050565b6000819050919050565b6164428161642f565b811461644d57600080fd5b50565b60008135905061645f81616439565b92915050565b6000806040838503121561647c5761647b6163c7565b5b600061648a8582860161641a565b925050602061649b85828601616450565b9150509250929050565b6164ae8161642f565b82525050565b60006020820190506164c960008301846164a5565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b616504816164cf565b811461650f57600080fd5b50565b600081359050616521816164fb565b92915050565b60006020828403121561653d5761653c6163c7565b5b600061654b84828501616512565b91505092915050565b60008115159050919050565b61656981616554565b82525050565b60006020820190506165846000830184616560565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6165dd82616594565b810181811067ffffffffffffffff821117156165fc576165fb6165a5565b5b80604052505050565b600061660f6163bd565b905061661b82826165d4565b919050565b600067ffffffffffffffff82111561663b5761663a6165a5565b5b61664482616594565b9050602081019050919050565b82818337600083830152505050565b600061667361666e84616620565b616605565b90508281526020810184848401111561668f5761668e61658f565b5b61669a848285616651565b509392505050565b600082601f8301126166b7576166b661658a565b5b81356166c7848260208601616660565b91505092915050565b600067ffffffffffffffff8211156166eb576166ea6165a5565b5b6166f482616594565b9050602081019050919050565b600061671461670f846166d0565b616605565b9050828152602081018484840111156167305761672f61658f565b5b61673b848285616651565b509392505050565b600082601f8301126167585761675761658a565b5b8135616768848260208601616701565b91505092915050565b60008060008060008060008060006101208a8c031215616794576167936163c7565b5b60008a013567ffffffffffffffff8111156167b2576167b16163cc565b5b6167be8c828d016166a2565b99505060206167cf8c828d01616450565b98505060406167e08c828d01616450565b97505060606167f18c828d01616450565b96505060806168028c828d01616450565b95505060a06168138c828d01616450565b94505060c06168248c828d01616450565b93505060e06168358c828d01616450565b9250506101008a013567ffffffffffffffff811115616857576168566163cc565b5b6168638c828d01616743565b9150509295985092959850929598565b600080600080600060a0868803121561688f5761688e6163c7565b5b600086013567ffffffffffffffff8111156168ad576168ac6163cc565b5b6168b9888289016166a2565b95505060206168ca8882890161641a565b94505060406168db8882890161641a565b93505060606168ec8882890161641a565b92505060806168fd8882890161641a565b9150509295509295909350565b6000602082840312156169205761691f6163c7565b5b600061692e84828501616450565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015616971578082015181840152602081019050616956565b83811115616980576000848401525b50505050565b600061699182616937565b61699b8185616942565b93506169ab818560208601616953565b6169b481616594565b840191505092915050565b600060208201905081810360008301526169d98184616986565b905092915050565b6000602082840312156169f7576169f66163c7565b5b6000616a058482850161641a565b91505092915050565b600067ffffffffffffffff821115616a2957616a286165a5565b5b602082029050602081019050919050565b600080fd5b6000616a52616a4d84616a0e565b616605565b90508083825260208201905060208402830185811115616a7557616a74616a3a565b5b835b81811015616a9e5780616a8a8882616450565b845260208401935050602081019050616a77565b5050509392505050565b600082601f830112616abd57616abc61658a565b5b8135616acd848260208601616a3f565b91505092915050565b600080600080600060a08688031215616af257616af16163c7565b5b6000616b008882890161641a565b9550506020616b118882890161641a565b945050604086013567ffffffffffffffff811115616b3257616b316163cc565b5b616b3e88828901616aa8565b935050606086013567ffffffffffffffff811115616b5f57616b5e6163cc565b5b616b6b88828901616aa8565b925050608086013567ffffffffffffffff811115616b8c57616b8b6163cc565b5b616b9888828901616743565b9150509295509295909350565b616bae816163f1565b82525050565b6000602082019050616bc96000830184616ba5565b92915050565b600067ffffffffffffffff821115616bea57616be96165a5565b5b602082029050602081019050919050565b6000616c0e616c0984616bcf565b616605565b90508083825260208201905060208402830185811115616c3157616c30616a3a565b5b835b81811015616c5a5780616c46888261641a565b845260208401935050602081019050616c33565b5050509392505050565b600082601f830112616c7957616c7861658a565b5b8135616c89848260208601616bfb565b91505092915050565b60008060408385031215616ca957616ca86163c7565b5b600083013567ffffffffffffffff811115616cc757616cc66163cc565b5b616cd385828601616c64565b925050602083013567ffffffffffffffff811115616cf457616cf36163cc565b5b616d0085828601616aa8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b616d3f8161642f565b82525050565b6000616d518383616d36565b60208301905092915050565b6000602082019050919050565b6000616d7582616d0a565b616d7f8185616d15565b9350616d8a83616d26565b8060005b83811015616dbb578151616da28882616d45565b9750616dad83616d5d565b925050600181019050616d8e565b5085935050505092915050565b60006020820190508181036000830152616de28184616d6a565b905092915050565b6000819050919050565b616dfd81616dea565b8114616e0857600080fd5b50565b600081359050616e1a81616df4565b92915050565b600060208284031215616e3657616e356163c7565b5b6000616e4484828501616e0b565b91505092915050565b600061012082019050616e63600083018c6164a5565b616e70602083018b6164a5565b616e7d604083018a6164a5565b616e8a60608301896164a5565b616e9760808301886164a5565b616ea460a08301876164a5565b616eb160c08301866164a5565b616ebe60e0830185616ba5565b616ecc6101008301846164a5565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b616f0f816163f1565b82525050565b6000616f218383616f06565b60208301905092915050565b6000602082019050919050565b6000616f4582616eda565b616f4f8185616ee5565b9350616f5a83616ef6565b8060005b83811015616f8b578151616f728882616f15565b9750616f7d83616f2d565b925050600181019050616f5e565b5085935050505092915050565b60006020820190508181036000830152616fb28184616f3a565b905092915050565b616fc381616554565b8114616fce57600080fd5b50565b600081359050616fe081616fba565b92915050565b60008060408385031215616ffd57616ffc6163c7565b5b600061700b8582860161641a565b925050602061701c85828601616fd1565b9150509250929050565b6000806040838503121561703d5761703c6163c7565b5b600061704b85828601616450565b925050602061705c8582860161641a565b9150509250929050565b600080600080600060a08688031215617082576170816163c7565b5b600061709088828901616450565b95505060206170a188828901616450565b94505060406170b288828901616450565b93505060606170c388828901616450565b92505060806170d488828901616450565b9150509295509295909350565b600080604083850312156170f8576170f76163c7565b5b600061710685828601616450565b925050602083013567ffffffffffffffff811115617127576171266163cc565b5b61713385828601616743565b9150509250929050565b60008060408385031215617154576171536163c7565b5b60006171628582860161641a565b92505060206171738582860161641a565b9150509250929050565b600080600080600060a08688031215617199576171986163c7565b5b60006171a78882890161641a565b95505060206171b88882890161641a565b94505060406171c988828901616450565b93505060606171da88828901616450565b925050608086013567ffffffffffffffff8111156171fb576171fa6163cc565b5b61720788828901616743565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061724e8261642f565b91506172598361642f565b92508282101561726c5761726b617214565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b60006172ad600283616942565b91506172b882617277565b602082019050919050565b600060208201905081810360008301526172dc816172a0565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b6000617319600283616942565b9150617324826172e3565b602082019050919050565b600060208201905081810360008301526173488161730c565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000617385600383616942565b91506173908261734f565b602082019050919050565b600060208201905081810360008301526173b481617378565b9050919050565b600081905092915050565b60006173d182616937565b6173db81856173bb565b93506173eb818560208601616953565b80840191505092915050565b6000819050919050565b61741261740d8261642f565b6173f7565b82525050565b60008160601b9050919050565b600061743082617418565b9050919050565b600061744282617425565b9050919050565b61745a617455826163f1565b617437565b82525050565b600061746c828d6173c6565b9150617478828c617401565b602082019150617488828b617401565b602082019150617498828a617401565b6020820191506174a88289617401565b6020820191506174b88288617401565b6020820191506174c88287617401565b6020820191506174d88286617401565b6020820191506174e88285617449565b6014820191506174f88284617401565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000617546600283616942565b915061755182617510565b602082019050919050565b6000602082019050818103600083015261757581617539565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b60006175b2600283616942565b91506175bd8261757c565b602082019050919050565b600060208201905081810360008301526175e1816175a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061762f57607f821691505b60208210811415617643576176426175e8565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b600061767f601d83616942565b915061768a82617649565b602082019050919050565b600060208201905081810360008301526176ae81617672565b9050919050565b60008190508160005260206000209050919050565b600081546176d781617617565b6176e181866173bb565b945060018216600081146176fc576001811461770d57617740565b60ff19831686528186019350617740565b617716856176b5565b60005b8381101561773857815481890152600182019150602081019050617719565b838801955050505b50505092915050565b600061775582856176ca565b915061776182846173c6565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006177c9602983616942565b91506177d48261776d565b604082019050919050565b600060208201905081810360008301526177f8816177bc565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061785b602983616942565b9150617866826177ff565b604082019050919050565b6000602082019050818103600083015261788a8161784e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061791c603183616942565b9150617927826178c0565b604082019050919050565b6000602082019050818103600083015261794b8161790f565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000617988600383616942565b915061799382617952565b602082019050919050565b600060208201905081810360008301526179b78161797b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b60006179f4600283616942565b91506179ff826179be565b602082019050919050565b60006020820190508181036000830152617a23816179e7565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000617a60600383616942565b9150617a6b82617a2a565b602082019050919050565b60006020820190508181036000830152617a8f81617a53565b9050919050565b6000617aa18261642f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415617ad457617ad3617214565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000617b3b602983616942565b9150617b4682617adf565b604082019050919050565b60006020820190508181036000830152617b6a81617b2e565b9050919050565b6000617b7c8261642f565b9150617b878361642f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615617bc057617bbf617214565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000617c058261642f565b9150617c108361642f565b925082617c2057617c1f617bcb565b5b828206905092915050565b6000617c368261642f565b9150617c418361642f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115617c7657617c75617214565b5b828201905092915050565b6000617c8c8261642f565b9150617c978361642f565b925082617ca757617ca6617bcb565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b6000617ce8600283616942565b9150617cf382617cb2565b602082019050919050565b60006020820190508181036000830152617d1781617cdb565b9050919050565b6000617d2a8286617401565b602082019150617d3a8285617449565b601482019150617d4a8284617401565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000617db7602b83616942565b9150617dc282617d5b565b604082019050919050565b60006020820190508181036000830152617de681617daa565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000617e23601c836173bb565b9150617e2e82617ded565b601c82019050919050565b6000819050919050565b617e54617e4f82616dea565b617e39565b82525050565b6000617e6582617e16565b9150617e718284617e43565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000617ee5601883616942565b9150617ef082617eaf565b602082019050919050565b60006020820190508181036000830152617f1481617ed8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000617f51601f83616942565b9150617f5c82617f1b565b602082019050919050565b60006020820190508181036000830152617f8081617f44565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617fe3602283616942565b9150617fee82617f87565b604082019050919050565b6000602082019050818103600083015261801281617fd6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000618075602283616942565b915061808082618019565b604082019050919050565b600060208201905081810360008301526180a481618068565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000618107602183616942565b9150618112826180ab565b604082019050919050565b60006020820190508181036000830152618136816180fa565b9050919050565b600060408201905061815260008301856164a5565b61815f60208301846164a5565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061818d82618166565b6181978185618171565b93506181a7818560208601616953565b6181b081616594565b840191505092915050565b600060a0820190506181d06000830188616ba5565b6181dd6020830187616ba5565b6181ea60408301866164a5565b6181f760608301856164a5565b81810360808301526182098184618182565b90509695505050505050565b600081519050618224816164fb565b92915050565b6000602082840312156182405761823f6163c7565b5b600061824e84828501618215565b91505092915050565b60008160e01c9050919050565b600060033d11156182835760046000803e618280600051618257565b90505b90565b600060443d101561829657618319565b61829e6163bd565b60043d036004823e80513d602482011167ffffffffffffffff821117156182c6575050618319565b808201805167ffffffffffffffff8111156182e45750505050618319565b80602083010160043d038501811115618301575050505050618319565b618310826020018501866165d4565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000618378603483616942565b91506183838261831c565b604082019050919050565b600060208201905081810360008301526183a78161836b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061840a602883616942565b9150618415826183ae565b604082019050919050565b60006020820190508181036000830152618439816183fd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061849c602583616942565b91506184a782618440565b604082019050919050565b600060208201905081810360008301526184cb8161848f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061852e602883616942565b9150618539826184d2565b604082019050919050565b6000602082019050818103600083015261855d81618521565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b60006185c0602b83616942565b91506185cb82618564565b604082019050919050565b600060208201905081810360008301526185ef816185b3565b9050919050565b600060408201905081810360008301526186108185616d6a565b905081810360208301526186248184616d6a565b90509392505050565b600060a0820190506186426000830188616ba5565b61864f6020830187616ba5565b81810360408301526186618186616d6a565b905081810360608301526186758185616d6a565b905081810360808301526186898184618182565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006186f1602283616942565b91506186fc82618695565b604082019050919050565b60006020820190508181036000830152618720816186e4565b9050919050565b61873081616dea565b82525050565b600060ff82169050919050565b61874c81618736565b82525050565b60006080820190506187676000830187618727565b6187746020830186618743565b6187816040830185618727565b61878e6060830184618727565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122041422718aa9d7546b18fa2c748812041ac1b89b86f4099ffb644295be25e039264736f6c634300080a0033"; + "0x608060405234801561001057600080fd5b50615dcc80620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063bc01188e1161006f578063bc01188e14610541578063bd85b0391461056c578063d61b0c82146105a9578063db7fd408146105e6578063e985e9c514610616578063f242432a146106535761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461046157806385bff2e71461049e578063a22cb465146104db578063b3a721d1146105045761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190613a8e565b61067c565b6040516101839190613add565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190613b50565b610690565b6040516101c09190613b98565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613d9a565b6106b3565b6040516101fd9190613add565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613e9c565b610bce565b005b34801561023b57600080fd5b5061025660048036038101906102519190613f33565b610e32565b6040516102639190613fe8565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613f33565b610f56565b6040516102a09190613add565b60405180910390f35b3480156102b557600080fd5b506102be610f83565b6040516102cb9190613add565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061400a565b610f9d565b6040516103089190613add565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906140ff565b610ff6565b005b34801561034657600080fd5b5061034f61108a565b60405161035c91906141dd565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906142bb565b6110bd565b60405161039991906143f1565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c4919061400a565b6112b2565b6040516103d69190613b98565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613f33565b611315565b6040516104139190613add565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613f33565b611481565b60405161045899989796959493929190614413565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613f33565b61156a565b604051610495919061455e565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061400a565b611672565b6040516104d291906143f1565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd91906145ac565b611778565b005b34801561051057600080fd5b5061052b600480360381019061052691906145ec565b6118ed565b6040516105389190613add565b60405180910390f35b34801561054d57600080fd5b506105566119a8565b60405161056391906141dd565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613f33565b6119db565b6040516105a09190613add565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061462c565b611a01565b6040516105dd9190613add565b60405180910390f35b61060060048036038101906105fb91906146a7565b611a72565b60405161060d9190613b98565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614703565b611eeb565b60405161064a9190613b98565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190614743565b611f88565b005b6000610688838361201c565b905092915050565b60006106ac8261069e6120ef565b61211c90919063ffffffff16565b9050919050565b60008489896106c29190614809565b101580156106d05750600085115b61070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690614889565b60405180910390fd5b85871015801561071f5750600087115b61075e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610755906148f5565b60405180910390fd5b60648311156107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990614961565b60405180910390fd5b60006107ac612187565b905060006107b982610f9d565b905060008c8c8c8c8c8c8c8c8a8a6040516020016107e09a99989796959493929190614a26565b604051602081830303815290604052905060006108158661080784805190602001206121c3565b6121f390919063ffffffff16565b905061081f61221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790614b22565b60405180910390fd5b6108c36108bb61221a565b600201612247565b94506108cf858f612255565b6108e26108da61221a565b60020161228a565b6109326108ed61221a565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b8c61093b6122a0565b6000016000878152602001908152602001600020600001819055508b61095f6122a0565b6000016000878152602001908152602001600020600101819055508a6109836122a0565b600001600087815260200190815260200160002060020181905550896109a76122a0565b600001600087815260200190815260200160002060030181905550886109cb6122a0565b600001600087815260200190815260200160002060040181905550876109ef6122a0565b60000160008781526020019081526020016000206005018190555086610a136122a0565b60000160008781526020019081526020016000206006018190555083610a376122a0565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ab3610a976122a0565b600001600087815260200190815260200160002060080161228a565b610b17610abe6122a0565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b610b3384866001604051806020016040528060008152506122cd565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bed6122ee565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614b8e565b60405180910390fd5b82610c7061231b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610cbb6122ee565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610d4d85612348565b83610d5661221a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610da061221a565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610dea61221a565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610e3e61236b565b60000160008481526020019081526020016000208054610e5d90614bdd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8990614bdd565b8015610ed65780601f10610eab57610100808354040283529160200191610ed6565b820191906000526020600020905b815481529060010190602001808311610eb957829003601f168201915b50505050509050600081511415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990614c5b565b60405180910390fd5b610f2a61236b565b60010181604051602001610f3f929190614d0f565b604051602081830303815290604052915050919050565b6000610f7c610f63612398565b60010160008481526020019081526020016000206123c5565b9050919050565b6000610f98610f9061221a565b600201612247565b905090565b6000610fef610faa61221a565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061103657506110358533611eeb565b5b611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90614da5565b60405180910390fd5b6110833386868686866123da565b5050505050565b600061109461221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614e37565b60405180910390fd5b600061110d6123fe565b60000190506000845167ffffffffffffffff81111561112f5761112e613bce565b5b60405190808252806020026020018201604052801561115d5781602001602082028036833780820191505090505b50905060005b85518110156112a657600073ffffffffffffffffffffffffffffffffffffffff1686828151811061119757611196614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614ef8565b60405180910390fd5b82600086838151811061120c5761120b614e57565b5b60200260200101518152602001908152602001600020600087838151811061123757611236614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061128d5761128c614e57565b5b6020026020010181815250508080600101915050611163565b50809250505092915050565b60006112bc61231b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000806113206122a0565b6000016000848152602001908152602001600020905060008160020154141561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590614f64565b60405180910390fd5b60008160050154146113dc57806005015461139b82600801612247565b106113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614fd0565b60405180910390fd5b5b8060000154421180156113f3575080600101544211155b611432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114299061503c565b60405180910390fd5b60008160000154426114449190614809565b905060008260000154836001015461145c9190614809565b90506114778282856002015486600301548760040154611a01565b9350505050919050565b6000806000806000806000806000806114986122a0565b60000160008c815260200190815260200160002090506000816002015414156114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed90614f64565b60405180910390fd5b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661154a89600801612247565b995099509950995099509950995099509950509193959799909294969850565b60606000611576612398565b600101600084815260200190815260200160002090506000611597826123c5565b67ffffffffffffffff8111156115b0576115af613bce565b5b6040519080825280602002602001820160405280156115de5781602001602082028036833780820191505090505b50905060005b6115ed836123c5565b81101561166757611607818461242b90919063ffffffff16565b82828151811061161a57611619614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061165f9061505c565b9150506115e4565b508092505050919050565b6060600061167e612398565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006116cb82612445565b67ffffffffffffffff8111156116e4576116e3613bce565b5b6040519080825280602002602001820160405280156117125781602001602082028036833780820191505090505b50905060005b61172183612445565b81101561176d5761173b818461245a90919063ffffffff16565b82828151811061174e5761174d614e57565b5b60200260200101818152505080806117659061505c565b915050611718565b508092505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90615117565b60405180910390fd5b806117f06123fe565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e19190613b98565b60405180910390a35050565b6000806118f86122a0565b60000160008581526020019081526020016000209050600081600201541415611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90614f64565b60405180910390fd5b61199f8160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b91505092915050565b60006119b261221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006119e5612398565b6000016000838152602001908152602001600020549050919050565b6000848385611a109190614809565b87611a1b9190615137565b8486611a279190614809565b8489611a3391906151c0565b611a3d9190615137565b8688611a499190615137565b611a5391906151f1565b611a5d9190614809565b611a679190615247565b905095945050505050565b600080611a7d612187565b90506000611a896122a0565b600001600086815260200190815260200160002090506000816005015414611afd578060050154611abc82600801612247565b10611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614fd0565b60405180910390fd5b5b806000015442118015611b14575080600101544211155b611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a9061503c565b60405180910390fd5b6000816000015442611b659190614809565b9050600082600001548360010154611b7d9190614809565b90506000611b9a8383866002015487600301548860040154611a01565b905080341015611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906152c4565b60405180910390fd5b60006064856006015434611bf39190615137565b611bfd9190615247565b905060008134611c0d9190614809565b90506000611c5a8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b905060008b8983604051602001611c73939291906152e4565b60405160208183030381529060405290506000611ca88c611c9a84805190602001206121c3565b6121f390919063ffffffff16565b9050611cb261221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90614b22565b60405180910390fd5b611d4f8960080161228a565b611d988960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b611db48a8e6001604051806020016040528060008152506122cd565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611e1e573d6000803e3d6000fd5b50611e2761221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015611e90573d6000803e3d6000fd5b5060018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a460019a505050505050505050505092915050565b6000611ef56123fe565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611fc85750611fc78533611eeb565b5b612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe90614da5565b60405180910390fd5b612015338686868686612474565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615393565b60405180910390fd5b6120956123fe565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b600060186000369050101580156121a357506121a2336112b2565b5b156121b757601436033560601c90506121bf565b3390506121c0565b5b90565b6000816040516020016121d6919061542a565b604051602081830303815290604052805190602001209050919050565b60008060006122028585612498565b9150915061220f8161251b565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061225e61236b565b60000160008481526020019081526020016000209080519060200190612285929190613943565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6122d9848484846126f0565b6122e83360008686868661287a565b50505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061235161236b565b6001019080519060200190612367929190613943565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b60006123d382600001612a52565b9050919050565b6123e8868686868686612a63565b6123f6868686868686612d6f565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b600061243a8360000183612f47565b60001c905092915050565b600061245382600001612a52565b9050919050565b60006124698360000183612f47565b60001c905092915050565b612482868686868686612fbb565b61249086868686868661287a565b505050505050565b6000806041835114156124da5760008060006020860151925060408601519150606086015160001a90506124ce87828585613233565b94509450505050612514565b60408351141561250b576000806020850151915060408501519050612500868383613340565b935093505050612514565b60006002915091505b9250929050565b6000600481111561252f5761252e615450565b5b81600481111561254257612541615450565b5b141561254d576126ed565b6001600481111561256157612560615450565b5b81600481111561257457612573615450565b5b14156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906154cb565b60405180910390fd5b600260048111156125c9576125c8615450565b5b8160048111156125dc576125db615450565b5b141561261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490615537565b60405180910390fd5b6003600481111561263157612630615450565b5b81600481111561264457612643615450565b5b1415612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c906155c9565b60405180910390fd5b60048081111561269857612697615450565b5b8160048111156126ab576126aa615450565b5b14156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e39061565b565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612757906156ed565b60405180910390fd5b61277f336000866127708761338e565b6127798761338e565b86613408565b60006127896123fe565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ed91906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161286b92919061570d565b60405180910390a45050505050565b6128998473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612a4a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128df95949392919061578b565b6020604051808303816000875af192505050801561291b57506040513d601f19601f8201168201806040525081019061291891906157fa565b60015b6129c157612927615834565b806308c379a01415612984575061293c615856565b806129475750612986565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b9190613fe8565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061595e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f906159f0565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90615a82565b60405180910390fd5b8151835114612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90615b14565b60405180910390fd5b612b25868686868686613408565b6000612b2f6123fe565b600001905060005b8451811015612ce7576000858281518110612b5557612b54614e57565b5b602002602001015190506000858381518110612b7457612b73614e57565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90615ba6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccb91906151f1565b9250508190555050508080612cdf9061505c565b915050612b37565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612d5e929190615bc6565b60405180910390a450505050505050565b612d8e8473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612f3f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612dd4959493929190615bfd565b6020604051808303816000875af1925050508015612e1057506040513d601f19601f82011682018060405250810190612e0d91906157fa565b60015b612eb657612e1c615834565b806308c379a01415612e795750612e31615856565b80612e3c5750612e7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e709190613fe8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead9061595e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f34906159f0565b60405180910390fd5b505b505050505050565b600081836000018054905011612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8990615cd7565b60405180910390fd5b826000018281548110612fa857612fa7614e57565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290615a82565b60405180910390fd5b61304986868661303a8761338e565b6130438761338e565b86613408565b60006130536123fe565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e690615ba6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a591906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161322292919061570d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561326e576000600391509150613337565b601b8560ff16141580156132865750601c8560ff1614155b15613298576000600491509150613337565b6000600187878787604051600081526020016040526040516132bd9493929190615d22565b6020604051602081039080840390855afa1580156132df573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332e57600060019250925050613337565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061338087828885613233565b935093505050935093915050565b60606000600167ffffffffffffffff8111156133ad576133ac613bce565b5b6040519080825280602002602001820160405280156133db5781602001602082028036833780820191505090505b50905082816000815181106133f3576133f2614e57565b5b60200260200101818152505080915050919050565b613416868686868686613431565b505050505050565b600080823b905060008111915050919050565b61343f868686868686613447565b505050505050565b613455868686868686613702565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146136fa576000613492612398565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156136f457600087828151811061354757613546614e57565b5b6020026020010151905060008111156136e057600089838151811061356f5761356e614e57565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156135df578187600001600083815260200190815260200160002060008282546135d391906151f1565b9250508190555061362b565b816135ea8d8361201c565b141561362a576136148c87600084815260200190815260200160002061370a90919063ffffffff16565b50613628818661373a90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415613691578187600001600083815260200190815260200160002060008282546136859190614809565b925050819055506136de565b600061369d8c8361201c565b14156136dd576136c78b87600084815260200190815260200160002061375490919063ffffffff16565b506136db818561378490919063ffffffff16565b505b5b505b5080806136ec9061505c565b915050613529565b50505050505b505050505050565b505050505050565b6000613732836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61379e565b905092915050565b600061374c836000018360001b61379e565b905092915050565b600061377c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6138b0565b905092915050565b6000613796836000018360001b6138b0565b905092915050565b600080836001016000848152602001908152602001600020549050600081146138a45760006001826137d09190614809565b9050600085600001600187600001805490506137ec9190614809565b815481106137fd576137fc614e57565b5b906000526020600020015490508086600001838154811061382157613820614e57565b5b906000526020600020018190555060018261383c91906151f1565b866001016000838152602001908152602001600020819055508560000180548061386957613868615d67565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506138aa565b60009150505b92915050565b60006138bc8383613920565b61391557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061391a565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461394f90614bdd565b90600052602060002090601f01602090048101928261397157600085556139b8565b82601f1061398a57805160ff19168380011785556139b8565b828001600101855582156139b8579182015b828111156139b757825182559160200191906001019061399c565b5b5090506139c591906139c9565b5090565b5b808211156139e25760008160009055506001016139ca565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a25826139fa565b9050919050565b613a3581613a1a565b8114613a4057600080fd5b50565b600081359050613a5281613a2c565b92915050565b6000819050919050565b613a6b81613a58565b8114613a7657600080fd5b50565b600081359050613a8881613a62565b92915050565b60008060408385031215613aa557613aa46139f0565b5b6000613ab385828601613a43565b9250506020613ac485828601613a79565b9150509250929050565b613ad781613a58565b82525050565b6000602082019050613af26000830184613ace565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b2d81613af8565b8114613b3857600080fd5b50565b600081359050613b4a81613b24565b92915050565b600060208284031215613b6657613b656139f0565b5b6000613b7484828501613b3b565b91505092915050565b60008115159050919050565b613b9281613b7d565b82525050565b6000602082019050613bad6000830184613b89565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c0682613bbd565b810181811067ffffffffffffffff82111715613c2557613c24613bce565b5b80604052505050565b6000613c386139e6565b9050613c448282613bfd565b919050565b600067ffffffffffffffff821115613c6457613c63613bce565b5b613c6d82613bbd565b9050602081019050919050565b82818337600083830152505050565b6000613c9c613c9784613c49565b613c2e565b905082815260208101848484011115613cb857613cb7613bb8565b5b613cc3848285613c7a565b509392505050565b600082601f830112613ce057613cdf613bb3565b5b8135613cf0848260208601613c89565b91505092915050565b600067ffffffffffffffff821115613d1457613d13613bce565b5b613d1d82613bbd565b9050602081019050919050565b6000613d3d613d3884613cf9565b613c2e565b905082815260208101848484011115613d5957613d58613bb8565b5b613d64848285613c7a565b509392505050565b600082601f830112613d8157613d80613bb3565b5b8135613d91848260208601613d2a565b91505092915050565b60008060008060008060008060006101208a8c031215613dbd57613dbc6139f0565b5b60008a013567ffffffffffffffff811115613ddb57613dda6139f5565b5b613de78c828d01613ccb565b9950506020613df88c828d01613a79565b9850506040613e098c828d01613a79565b9750506060613e1a8c828d01613a79565b9650506080613e2b8c828d01613a79565b95505060a0613e3c8c828d01613a79565b94505060c0613e4d8c828d01613a79565b93505060e0613e5e8c828d01613a79565b9250506101008a013567ffffffffffffffff811115613e8057613e7f6139f5565b5b613e8c8c828d01613d6c565b9150509295985092959850929598565b600080600080600060a08688031215613eb857613eb76139f0565b5b600086013567ffffffffffffffff811115613ed657613ed56139f5565b5b613ee288828901613ccb565b9550506020613ef388828901613a43565b9450506040613f0488828901613a43565b9350506060613f1588828901613a43565b9250506080613f2688828901613a43565b9150509295509295909350565b600060208284031215613f4957613f486139f0565b5b6000613f5784828501613a79565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f9a578082015181840152602081019050613f7f565b83811115613fa9576000848401525b50505050565b6000613fba82613f60565b613fc48185613f6b565b9350613fd4818560208601613f7c565b613fdd81613bbd565b840191505092915050565b600060208201905081810360008301526140028184613faf565b905092915050565b6000602082840312156140205761401f6139f0565b5b600061402e84828501613a43565b91505092915050565b600067ffffffffffffffff82111561405257614051613bce565b5b602082029050602081019050919050565b600080fd5b600061407b61407684614037565b613c2e565b9050808382526020820190506020840283018581111561409e5761409d614063565b5b835b818110156140c757806140b38882613a79565b8452602084019350506020810190506140a0565b5050509392505050565b600082601f8301126140e6576140e5613bb3565b5b81356140f6848260208601614068565b91505092915050565b600080600080600060a0868803121561411b5761411a6139f0565b5b600061412988828901613a43565b955050602061413a88828901613a43565b945050604086013567ffffffffffffffff81111561415b5761415a6139f5565b5b614167888289016140d1565b935050606086013567ffffffffffffffff811115614188576141876139f5565b5b614194888289016140d1565b925050608086013567ffffffffffffffff8111156141b5576141b46139f5565b5b6141c188828901613d6c565b9150509295509295909350565b6141d781613a1a565b82525050565b60006020820190506141f260008301846141ce565b92915050565b600067ffffffffffffffff82111561421357614212613bce565b5b602082029050602081019050919050565b6000614237614232846141f8565b613c2e565b9050808382526020820190506020840283018581111561425a57614259614063565b5b835b81811015614283578061426f8882613a43565b84526020840193505060208101905061425c565b5050509392505050565b600082601f8301126142a2576142a1613bb3565b5b81356142b2848260208601614224565b91505092915050565b600080604083850312156142d2576142d16139f0565b5b600083013567ffffffffffffffff8111156142f0576142ef6139f5565b5b6142fc8582860161428d565b925050602083013567ffffffffffffffff81111561431d5761431c6139f5565b5b614329858286016140d1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436881613a58565b82525050565b600061437a838361435f565b60208301905092915050565b6000602082019050919050565b600061439e82614333565b6143a8818561433e565b93506143b38361434f565b8060005b838110156143e45781516143cb888261436e565b97506143d683614386565b9250506001810190506143b7565b5085935050505092915050565b6000602082019050818103600083015261440b8184614393565b905092915050565b600061012082019050614429600083018c613ace565b614436602083018b613ace565b614443604083018a613ace565b6144506060830189613ace565b61445d6080830188613ace565b61446a60a0830187613ace565b61447760c0830186613ace565b61448460e08301856141ce565b614492610100830184613ace565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144d581613a1a565b82525050565b60006144e783836144cc565b60208301905092915050565b6000602082019050919050565b600061450b826144a0565b61451581856144ab565b9350614520836144bc565b8060005b8381101561455157815161453888826144db565b9750614543836144f3565b925050600181019050614524565b5085935050505092915050565b600060208201905081810360008301526145788184614500565b905092915050565b61458981613b7d565b811461459457600080fd5b50565b6000813590506145a681614580565b92915050565b600080604083850312156145c3576145c26139f0565b5b60006145d185828601613a43565b92505060206145e285828601614597565b9150509250929050565b60008060408385031215614603576146026139f0565b5b600061461185828601613a79565b925050602061462285828601613a43565b9150509250929050565b600080600080600060a08688031215614648576146476139f0565b5b600061465688828901613a79565b955050602061466788828901613a79565b945050604061467888828901613a79565b935050606061468988828901613a79565b925050608061469a88828901613a79565b9150509295509295909350565b600080604083850312156146be576146bd6139f0565b5b60006146cc85828601613a79565b925050602083013567ffffffffffffffff8111156146ed576146ec6139f5565b5b6146f985828601613d6c565b9150509250929050565b6000806040838503121561471a576147196139f0565b5b600061472885828601613a43565b925050602061473985828601613a43565b9150509250929050565b600080600080600060a0868803121561475f5761475e6139f0565b5b600061476d88828901613a43565b955050602061477e88828901613a43565b945050604061478f88828901613a79565b93505060606147a088828901613a79565b925050608086013567ffffffffffffffff8111156147c1576147c06139f5565b5b6147cd88828901613d6c565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481482613a58565b915061481f83613a58565b925082821015614832576148316147da565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b6000614873600283613f6b565b915061487e8261483d565b602082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148df600283613f6b565b91506148ea826148a9565b602082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b600061494b600383613f6b565b915061495682614915565b602082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b600081905092915050565b600061499782613f60565b6149a18185614981565b93506149b1818560208601613f7c565b80840191505092915050565b6000819050919050565b6149d86149d382613a58565b6149bd565b82525050565b60008160601b9050919050565b60006149f6826149de565b9050919050565b6000614a08826149eb565b9050919050565b614a20614a1b82613a1a565b6149fd565b82525050565b6000614a32828d61498c565b9150614a3e828c6149c7565b602082019150614a4e828b6149c7565b602082019150614a5e828a6149c7565b602082019150614a6e82896149c7565b602082019150614a7e82886149c7565b602082019150614a8e82876149c7565b602082019150614a9e82866149c7565b602082019150614aae8285614a0f565b601482019150614abe82846149c7565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b0c600283613f6b565b9150614b1782614ad6565b602082019050919050565b60006020820190508181036000830152614b3b81614aff565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b78600283613f6b565b9150614b8382614b42565b602082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf557607f821691505b60208210811415614c0957614c08614bae565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c45601d83613f6b565b9150614c5082614c0f565b602082019050919050565b60006020820190508181036000830152614c7481614c38565b9050919050565b60008190508160005260206000209050919050565b60008154614c9d81614bdd565b614ca78186614981565b94506001821660008114614cc25760018114614cd357614d06565b60ff19831686528186019350614d06565b614cdc85614c7b565b60005b83811015614cfe57815481890152600182019150602081019050614cdf565b838801955050505b50505092915050565b6000614d1b8285614c90565b9150614d27828461498c565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d8f602983613f6b565b9150614d9a82614d33565b604082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614e21602983613f6b565b9150614e2c82614dc5565b604082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ee2603183613f6b565b9150614eed82614e86565b604082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000614f4e600383613f6b565b9150614f5982614f18565b602082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fba600283613f6b565b9150614fc582614f84565b602082019050919050565b60006020820190508181036000830152614fe981614fad565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000615026600383613f6b565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561509a576150996147da565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615101602983613f6b565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b600061514282613a58565b915061514d83613a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615186576151856147da565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151cb82613a58565b91506151d683613a58565b9250826151e6576151e5615191565b5b828206905092915050565b60006151fc82613a58565b915061520783613a58565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523c5761523b6147da565b5b828201905092915050565b600061525282613a58565b915061525d83613a58565b92508261526d5761526c615191565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006152ae600283613f6b565b91506152b982615278565b602082019050919050565b600060208201905081810360008301526152dd816152a1565b9050919050565b60006152f082866149c7565b6020820191506153008285614a0f565b60148201915061531082846149c7565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061537d602b83613f6b565b915061538882615321565b604082019050919050565b600060208201905081810360008301526153ac81615370565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006153e9601c83614981565b91506153f4826153b3565b601c82019050919050565b6000819050919050565b6000819050919050565b61542461541f826153ff565b615409565b82525050565b6000615435826153dc565b91506154418284615413565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006154b5601883613f6b565b91506154c08261547f565b602082019050919050565b600060208201905081810360008301526154e4816154a8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615521601f83613f6b565b915061552c826154eb565b602082019050919050565b6000602082019050818103600083015261555081615514565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155b3602283613f6b565b91506155be82615557565b604082019050919050565b600060208201905081810360008301526155e2816155a6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615645602283613f6b565b9150615650826155e9565b604082019050919050565b6000602082019050818103600083015261567481615638565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156d7602183613f6b565b91506156e28261567b565b604082019050919050565b60006020820190508181036000830152615706816156ca565b9050919050565b60006040820190506157226000830185613ace565b61572f6020830184613ace565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061575d82615736565b6157678185615741565b9350615777818560208601613f7c565b61578081613bbd565b840191505092915050565b600060a0820190506157a060008301886141ce565b6157ad60208301876141ce565b6157ba6040830186613ace565b6157c76060830185613ace565b81810360808301526157d98184615752565b90509695505050505050565b6000815190506157f481613b24565b92915050565b6000602082840312156158105761580f6139f0565b5b600061581e848285016157e5565b91505092915050565b60008160e01c9050919050565b600060033d11156158535760046000803e615850600051615827565b90505b90565b600060443d1015615866576158e9565b61586e6139e6565b60043d036004823e80513d602482011167ffffffffffffffff821117156158965750506158e9565b808201805167ffffffffffffffff8111156158b457505050506158e9565b80602083010160043d0385018111156158d15750505050506158e9565b6158e082602001850186613bfd565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615948603483613f6b565b9150615953826158ec565b604082019050919050565b600060208201905081810360008301526159778161593b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006159da602883613f6b565b91506159e58261597e565b604082019050919050565b60006020820190508181036000830152615a09816159cd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615a6c602583613f6b565b9150615a7782615a10565b604082019050919050565b60006020820190508181036000830152615a9b81615a5f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000615afe602883613f6b565b9150615b0982615aa2565b604082019050919050565b60006020820190508181036000830152615b2d81615af1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615b90602b83613f6b565b9150615b9b82615b34565b604082019050919050565b60006020820190508181036000830152615bbf81615b83565b9050919050565b60006040820190508181036000830152615be08185614393565b90508181036020830152615bf48184614393565b90509392505050565b600060a082019050615c1260008301886141ce565b615c1f60208301876141ce565b8181036040830152615c318186614393565b90508181036060830152615c458185614393565b90508181036080830152615c598184615752565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cc1602283613f6b565b9150615ccc82615c65565b604082019050919050565b60006020820190508181036000830152615cf081615cb4565b9050919050565b615d00816153ff565b82525050565b600060ff82169050919050565b615d1c81615d06565b82525050565b6000608082019050615d376000830187615cf7565b615d446020830186615d13565b615d516040830185615cf7565b615d5e6060830184615cf7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220c566a59caa46271dce1c915b1af849f0fcf77357e3f55626b49ccdb808a6970264736f6c634300080a0033"; type CyberDestinationFactoryFacetConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts b/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts index 614c2a0..3b2a8bc 100644 --- a/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDestinationUtilityFactoryFacet__factory.ts @@ -238,71 +238,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x07d08ee9", - type: "bytes32", - }, - ], - name: "c_0x07d08ee9", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x0855cdfc", - type: "bytes32", - }, - ], - name: "c_0x0855cdfc", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x1c93e179", - type: "bytes32", - }, - ], - name: "c_0x1c93e179", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x63bd0478", - type: "bytes32", - }, - ], - name: "c_0x63bd0478", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xfbe62a3d", - type: "bytes32", - }, - ], - name: "c_0xfbe62a3d", - outputs: [], - stateMutability: "pure", - type: "function", - }, { inputs: [ { @@ -843,7 +778,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b506187fc80620000226000396000f3fe6080604052600436106101c15760003560e01c80636787d449116100f7578063b3a721d111610095578063d61b0c8211610064578063d61b0c82146106ed578063db7fd4081461072a578063e985e9c51461075a578063f242432a14610797576101c1565b8063b3a721d11461061f578063bc01188e1461065c578063bd85b03914610687578063c55bc566146106c4576101c1565b80637f628e8b116100d15780637f628e8b1461056757806385bff2e714610590578063929048c7146105cd578063a22cb465146105f6576101c1565b80636787d449146104bc5780636dcfd841146105015780637e721e2c1461053e576101c1565b80631b02394711610164578063481c6a751161013e578063481c6a75146103da5780634e1273f414610405578063572b6c05146104425780635c5ed16d1461047f576101c1565b80631b0239471461034b5780632eb2c2d61461038857806346abd772146103b1576101c1565b80630b885ac3116101a05780630b885ac31461027d5780630e89341c146102a657806313ba55df146102e357806318160ddd14610320576101c1565b8062fdd58e146101c657806301ffc9a714610203578063081cdf1214610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190616465565b6107c0565b6040516101fa91906164b4565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190616527565b6107d4565b604051610237919061656f565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190616771565b6107f7565b60405161027491906164b4565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190616873565b611736565b005b3480156102b257600080fd5b506102cd60048036038101906102c8919061690a565b611c86565b6040516102da91906169bf565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061690a565b611f36565b60405161031791906164b4565b60405180910390f35b34801561032c57600080fd5b50610335611f63565b60405161034291906164b4565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d91906169e1565b612001565b60405161037f91906164b4565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190616ad6565b6120de565b005b3480156103bd57600080fd5b506103d860048036038101906103d39190616bdb565b612172565b005b3480156103e657600080fd5b506103ef612175565b6040516103fc9190616c17565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190616cf5565b61222c565b6040516104399190616e2b565b60405180910390f35b34801561044e57600080fd5b50610469600480360381019061046491906169e1565b612421565b604051610476919061656f565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a1919061690a565b612508565b6040516104b391906164b4565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de919061690a565b612ac6565b6040516104f899989796959493929190616e4d565b60405180910390f35b34801561050d57600080fd5b506105286004803603810190610523919061690a565b612d3c565b6040516105359190616f98565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190616bdb565b612e44565b005b34801561057357600080fd5b5061058e60048036038101906105899190616bdb565b612e47565b005b34801561059c57600080fd5b506105b760048036038101906105b291906169e1565b612e4a565b6040516105c49190616e2b565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef9190616bdb565b612f50565b005b34801561060257600080fd5b5061061d60048036038101906106189190616fe6565b612f53565b005b34801561062b57600080fd5b5061064660048036038101906106419190617026565b6130c8565b60405161065391906164b4565b60405180910390f35b34801561066857600080fd5b50610671613310565b60405161067e9190616c17565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a9919061690a565b6133c7565b6040516106bb91906164b4565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190616bdb565b6133ed565b005b3480156106f957600080fd5b50610714600480360381019061070f9190617066565b6133f0565b60405161072191906164b4565b60405180910390f35b610744600480360381019061073f91906170e1565b6134e5565b604051610751919061656f565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c919061713d565b6142d6565b60405161078e919061656f565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b9919061717d565b614373565b005b60006107cc8383614407565b905092915050565b60006107f0826107e26144da565b61450790919063ffffffff16565b9050919050565b60006108257ffef254261034bac9064db40beedeb00a21789bae83ec45bc6080e4fca2426c1360001b612e44565b6108517fc584978ecbf7f4704e8a6c75afa9a10d8777106982e4742d7b9a9fb050b9f1e760001b612e44565b61087d7f5aabdb124f9ca4049011380682b73c5aba0415d0b6116d74a5936c58a35ca00660001b612e44565b6108a97f6afc4d6b3a3c84d9b364f1db2f5dafef77606049c45c41c48cfaef751060c95160001b612e44565b8489896108b69190617243565b101580156108c45750600085115b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa906172c3565b60405180910390fd5b61092f7fe9ffbf293c2ece8ee79305d9a6169654a7114de20fbaa68f861f6f75b752ad7160001b612e44565b61095b7f56012c399773dff0cd88a94061dc268f3db0016fdcee340595b97ce0c748582860001b612e44565b6109877fb23687ca5a0e8239f984dec4267314bbcf67d282170811e4aab4d2d902f7692660001b612e44565b6109b37fbd655ca00a2f0e7d876088a0acef5228b23247051e49c2d510988e102818e44860001b612e44565b8587101580156109c35750600087115b610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f99061732f565b60405180910390fd5b610a2e7f01f57b23155943a664cfaa9367f07726ecf66e9e7f1bce8ac4ef2b28fe7b5e1160001b612e44565b610a5a7f5a5ff868374cc23468ae13dd5d7a7c3bbb93c7379a059ffa15dd5d0d187d764f60001b612e44565b610a867fccd2f9b242b06b24c899dc8d1cfe38b93ffcf694a11954eb531198d13effe41860001b612e44565b610ab27fa429c21522614f6d2326281d0134cd1f5e5c607809039e8fa92050e196e7a7ab60001b612e44565b6064831115610af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed9061739b565b60405180910390fd5b610b227fe5b07b507679869e644ae4d89250e627c69ebe49d9dc6d591022d65602f2a72c60001b612e44565b610b4e7feb49b4bc135917d3d0a068ec641339e146c450adbb549f7a7a97227199537ad960001b612e44565b610b7a7f69c49773801c26e65492db6becf8a9af3301c61ba87428f0072f8c515d17fb1f60001b612e44565b6000610b84614572565b9050610bb27fd96c2209b43ebd27adb9b8d454c03023aed7f89b3e6c6fba5ec9473b2e96512c60001b612e44565b610bde7fb6059bc2a3a24175da29dee344f09801f8025f845ff8dcb72b68914f56e749fb60001b612e44565b6000610be982612001565b9050610c177fb6b8ba1664bcdd06a237086e3df21c9094a1684859c1a0be2fb3b31376e0492060001b612e44565b610c437f65c33ac1f818405eb21ccbffc8f7372a5f92d09c1d09f71f624881a0bc60ef8260001b612e44565b60008c8c8c8c8c8c8c8c8a8a604051602001610c689a99989796959493929190617460565b6040516020818303038152906040529050610ca57fb0f0fc74d4f27760a6129ff6e3984baf4f1a6a8f50f12ff84a64bd3cb4b854a660001b612e44565b610cd17f12d5ef002891a997a20e958d467723b1007bfa70e4d5b94b2a8fae41d25de08560001b612e44565b6000610cf586610ce7848051906020012061470e565b61473e90919063ffffffff16565b9050610d237fce32dc2657a5bc8920c3fd6179fa0b81d0b72a12ce857566490fa877873fd62e60001b612e44565b610d4f7f85b5165326d13dfcce6570613bf7f2a17076052a0a40dde7d3d1a9ed9b1c971f60001b612e44565b610d7b7f3b8e97f61c78e340140d184a0fe7a34ebe88f0fd1fdc43c2749a3082c65ee2ea60001b612e44565b610d83614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b9061755c565b60405180910390fd5b610e407ffc5e894c94eeebb6e9b99f75e31ec7d87694ac11a2d5dc87a0c54ac42e56297360001b612e44565b610e6c7fe080625441c7fc6a865482c576631cb31e16f4471d36662ff675e41a6a8115c860001b612e44565b610e987fa0c41b33ac1e6023ce33960326f78eb948b36917a5dc0ab90336f9da02822e2b60001b612e44565b610eab610ea3614765565b600201614843565b9450610ed97fa5a39150cde7b6bec617db96fdb3907b046d412db6428300fda2be60ec920e7260001b612e44565b610f057f8c1f28878abcd7f5215e2889c22f16fd0a7c473485c5b3380d4ebc3ef884f8f060001b612e44565b610f0f858f614851565b610f3b7ff8ab2e932d29a1bccd65e972ec2dd09beb721a480ce72be84e8cbd8de77f57d660001b612e44565b610f677f28b209e8fc0e5a2b56efa3da9d8397ef7b289ecad64ccae57f3f3d42b709776c60001b612e44565b610f7a610f72614765565b60020161490a565b610fa67ff8490bd99ce937b95ccd28092392faaef7eeeab3201b9fb16a6c24ba8c69896260001b612e44565b610fd27f8008bd1e507769bf54e202251be9733f09582f1c743bbf8673af2f9b29140df260001b612e44565b611022610fdd614765565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b61104e7f2dc781920cb5e33aae4a8393b7a3a53337652ba8a35e2b56011f5744efabf05760001b612e44565b61107a7fbcde70b63c4d9dcfd9ccaab415d2b97128f066f3c437c3316f45fb908db685af60001b612e44565b8c611083614920565b6000016000878152602001908152602001600020600001819055506110ca7f427678b57a36ffce221a8c890b7ff9f36f0bc86bb2a3036d6cb9630cbf428ef660001b612e44565b6110f67fb9f070b89da27f36f99202b12db2829dee6fad361ff7070dfc84615e283b142260001b612e44565b8b6110ff614920565b6000016000878152602001908152602001600020600101819055506111467f7b5a3100b111440497f36007a416128bd4feb074ab6fab0127ef1a5150ee994960001b612e44565b6111727fea7c557d03a267ff27e741d3447c1731806b6d0d3d91d30a0b1fba3301efac8360001b612e44565b8a61117b614920565b6000016000878152602001908152602001600020600201819055506111c27f805ce5561d42393aeafd5a5a3e66a1d9961e80070ac06d4a59c517533a9fa79f60001b612e44565b6111ee7f967deef564515d9a9439c1186e9c6bdaad59640d59757ab377cbb8c790b5461f60001b612e44565b896111f7614920565b60000160008781526020019081526020016000206003018190555061123e7f447a73adc4607b190dc90a59146f6a6d6cbb6beb8113f29a4324be1949636fc860001b612e44565b61126a7fd690c115448555e2c7d90dbb18369e4436b23809c2b9557058fe64a3653bf3ec60001b612e44565b88611273614920565b6000016000878152602001908152602001600020600401819055506112ba7f4d52a2155da3ba950323800a3c8155911f968d70dea9c34fd778912ee5e35d5460001b612e44565b6112e67fb3d331c3453ca7536961a249a22157c030746ff898bfdc12156b0ce4bff9400260001b612e44565b876112ef614920565b6000016000878152602001908152602001600020600501819055506113367f37df8740ac51046d6d45b70d1520d405142374089999b994876fbd32ff0496eb60001b612e44565b6113627f0c13f6719fef45381e50816916a5eab15a6c5adbf0f919e1dfa99dc58782710e60001b612e44565b8661136b614920565b6000016000878152602001908152602001600020600601819055506113b27f85c9b0dfbea7e9efacdb920f67d01ffded6d823c166063d314aea49e03b480a960001b612e44565b6113de7f0db3728cff6bf4d259a380e523c94be99525a8b4e1b9386596a02e5f8828780160001b612e44565b836113e7614920565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506114687f69875017d86bc248ae1b52571b1c657618960bd48c796d6de92ebf75a0189b8860001b612e44565b6114947f782fbf49717d6af7f3d1c6315f9c20ab3d02dd60e5fc0a9476b07b2c32e1b42d60001b612e44565b6114bb61149f614920565b600001600087815260200190815260200160002060080161490a565b6114e77fe14bc2d6b10facf2a5265c82476a2e0fd8c016815075f4302f59540d56e1e30660001b612e44565b6115137f13524a23719e903d0cace00f5d7a54f518f18c51d69f9efaf06d8b5ef8bbb16860001b612e44565b61157761151e614920565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b6115a37f372ca61bbfaf1e294402597498b99366b4e5fb2f2e128ee253213d67229b6cc360001b612e44565b6115cf7f55209cb5e3c63fe0a67b528b111d15216de2196c517c0b8d805e556909fb6e8560001b612e44565b6115eb84866001604051806020016040528060008152506149fe565b6116177ffe551f4c9ce42abc2d789e22e8bad622fabe318e230d04433c0e73c8ca0532e660001b612e44565b6116437f1c02cd8b6b383cdbe8bc49b3d0abc3c361b50f5d77e2aaee99b65819cad9e2ae60001b612e44565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36116b37fe538ed482a6203bb8f8989a475a198a2683d1b382121135ccd5507773b1c9fad60001b612e44565b6116df7fea10a1d343ed3bf0d46c880a8e3a7f7f95189023771924450457b9ab51a5ff5460001b612e44565b6001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b6117627f76959acc5804dd7d58983a7553c8dba5d4aaa668103e7d29c4903cb21496dcd660001b612e47565b61178e7f01c3110384d2631b65d18d50de1c2c4882530eff4188f212e7a1b564a93885c260001b612e47565b6117ba7ffb264934f994ece14b386fc0be186c58f27ab7f1d9ed0c2dbf61f0a41d8a295960001b612e47565b6117e67f9cb49303e2d57393fee370e71e080720e1e38459d90cea9772f03f0266c0e62260001b612e47565b3373ffffffffffffffffffffffffffffffffffffffff16611805614a1f565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906175c8565b60405180910390fd5b6118ab7f55910367c443c4713b200bdd68889a2360c09fbd998b1c8cf51a36cbc450df4660001b612e47565b6118d77f574e953eada5dcc747c84e5bae85f4417425c6a4144c50b087e5174dac600a7d60001b612e47565b6119037f59008a8f1d50584095ce216266c7af2cef3efa9b63497de53503ca94cbb9b24a60001b612e47565b8261190c614afd565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119797fa43cd7f41895ca0e17994fcb94d0fa5858e27f48ed0cd8ff02384394fd8a33c160001b612e47565b6119a57f4c55aa82e1408c3340ff78033cda644766212f0e1200ccb38a693deddd5bf52b60001b612e47565b60016119af614a1f565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550611a647ffde6ef2df36beaa4210510184a6841e267657f7750bc29c444fba3d35a9810fd60001b612e47565b611a907ff406f6747bf4f701495660cd6812670c94badcfce31f42f58c1a6ad20e1f572060001b612e47565b611a9985614bdb565b611ac57f80e6b81cce390388429b4ad92d0c729633ff92a3b39c78ee557fd91eb505209960001b612e47565b611af17fc60cf584725fea684c7294500e23761ffb83d0e20d21258a85759499dabae46060001b612e47565b83611afa614765565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b677f7e0e6eb23f676c5a5a42ee84ce743919a30e108fc44bb1c5d3c6fd6cf837ae0d60001b612e47565b611b937fec467f686f916ec9604b7468465856c1c83ef57259fe9a6fc260464c09a9838a60001b612e47565b81611b9c614765565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c097f9e58434cd253e39e7c0dcf96fd15b5771bbf82fa978270dba3fa5846389094f760001b612e47565b611c357fb833af1db132e6c48f679f2773d6972f1fd6f56f1d6a65223235341ebf42c0fa60001b612e47565b80611c3e614765565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6060611cb47f312c43f47f4eed00c2a0b91e8c512ff2a8a6ab31cfcf320fe38743297a84416560001b6133ed565b611ce07f9c3c1ecfda0c420cdb4793ff47d81b2024b9c0524c831d5acca5ee9a417999c860001b6133ed565b611d0c7f23f1c05e588c25ff8dc9f56733243455c53fd3f85640a1df8a15214915819a4760001b6133ed565b6000611d16614c82565b60000160008481526020019081526020016000208054611d3590617617565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6190617617565b8015611dae5780601f10611d8357610100808354040283529160200191611dae565b820191906000526020600020905b815481529060010190602001808311611d9157829003601f168201915b50505050509050611de17f4dee7afd3e91d4c6c6a94c90162a094b064920d9387a82da1c6d064e1fe3cc5060001b6133ed565b611e0d7f6112c02f84912af5ab2789cbd18d5abdc3e73d6ced049ff97b0e60a19eb9de3560001b6133ed565b611e397fa6cdec03e4644662815e7cbaf832198029c29d5fb0e11816137478e1a840ec4060001b6133ed565b600081511415611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590617695565b60405180910390fd5b611eaa7f9ab49bd638b9455b7f2e64130ddf4f233b0a3b80acefe8f789372c3efa97af2160001b6133ed565b611ed67f0a4123bd8c1b08089efacc9338be8a7f6bf7ab4c4bee8a86043851bce1caff0060001b6133ed565b611f027f6ca6f9766d48accbefcfdddb403c058cfc26b1911cd85d1a45c019eb23605e6b60001b6133ed565b611f0a614c82565b60010181604051602001611f1f929190617749565b604051602081830303815290604052915050919050565b6000611f5c611f43614d60565b6001016000848152602001908152602001600020614d8d565b9050919050565b6000611f917f2fc13f8ae1ee464f2b1e0b2f0fa17ab0a3c67d2e59a3321e0238afc1125a862860001b612e47565b611fbd7f610b1218449889738b2ada69c63c730827be1550a5a589e7adfd1f5b0904906860001b612e47565b611fe97fb1b4425ba2edc5e6861c5e74be5501cbd40bd6afc6403772bc96536307ec385f60001b612e47565b611ffc611ff4614765565b600201614843565b905090565b600061202f7ffa4f644143e5873afd934d08b4d252115745c55c98ad2539d9fddf23d8caa43260001b612e47565b61205b7f1a7281130aca2e54851f40a6a951452f1a5044852232c04dbb986e289f08cfd760001b612e47565b6120877f4850a17edabc25661db4dc58012d9c932f58b3ab3facff40733e9619760ef0c960001b612e47565b6120d7612092614765565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061211e575061211d85336142d6565b5b61215d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612154906177df565b60405180910390fd5b61216b338686868686614da2565b5050505050565b50565b60006121a37f97137defe44b8ef40f073d89a187cce75036a52cfb6d5ec319d36343c60108bb60001b612e47565b6121cf7f208598a720e6421a1798a94c5214991ef546a92770f360775929f77a3190518160001b612e47565b6121fb7f2a09b9827ab94682f5e7b891ae3b8c5ce41cae475dabb6b94b9161280a7b6b2560001b612e47565b612203614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990617871565b60405180910390fd5b600061227c614dc6565b60000190506000845167ffffffffffffffff81111561229e5761229d6165a5565b5b6040519080825280602002602001820160405280156122cc5781602001602082028036833780820191505090505b50905060005b855181101561241557600073ffffffffffffffffffffffffffffffffffffffff1686828151811061230657612305617891565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90617932565b60405180910390fd5b82600086838151811061237b5761237a617891565b5b6020026020010151815260200190815260200160002060008783815181106123a6576123a5617891565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106123fc576123fb617891565b5b60200260200101818152505080806001019150506122d2565b50809250505092915050565b600061244f7f7ca6e663761a0f614c9082f178ff07503394851964914930828ae2ff86481d8e60001b612f50565b61247b7f8aad3e92e7373d91f82323d355a587bfc96329cc3e91a9528217e4c84bcc063960001b612f50565b6124a77f3b4e5d1c2b996ac6c6720bcd7c27922338083696d2a3f25c32b5fece8475bcae60001b612f50565b6124af614afd565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006125367fdbd748bedd58cd351cc9aaa0fc0b7cb7d9b05fad440bc5e722107137a5bd099660001b612e44565b6125627f87d07511fcc54e38c625feabb25a539894a6f03945e2ad64e92d2032434b88e260001b612e44565b61258e7f2d6e45b7cac3840f2a5d0e1d5f978f8988b9b3a295b437644fbf44f919a8c75360001b612e44565b6000612598614920565b600001600084815260200190815260200160002090506125da7f3f0d3dc647efedb6521e3948ce812346577280ab972ccb8c350cc9452ac3cc8c60001b612e44565b6126067ff6c7e0f3a8a0eea983b8ea6e7f11ffc811f3dc54651ae93f57a8ca3136d0ed4360001b612e44565b6126327f93b6dfc1ec251c8c5c67a3d52729a394b28f2e7c570933ea48b4237c8ba4d52360001b612e44565b60008160020154141561267a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126719061799e565b60405180910390fd5b6126a67fc3b0fe2f21b94e38a2e64011b6777d5167e5372ff0b2badc67fe1b7132a7cf3960001b612e44565b6126d27fc52c3484f879068a55bba65d503c332e02f233ad41b97699ea9dc5d368acc78e60001b612e44565b6126fe7f1dac8be127de616dfdf8b893580f0f37bb7eeb3e6369132e3b215bce3c2ad6e960001b612e44565b600081600501541461283c576127367fd2e4691fae2fb1ec8e7002e0db37a84917021cf9de16f21a33a9cbd930cce53360001b612e44565b6127627f6465ffd7ff9099b160bf7f6f0ff7adb0fd4cba6cff50a75a3ab05c432e37584a60001b612e44565b61278e7f324051335733b0ff0bbe597a62f8a83556984ba3d366eb9c0e6edc29bb3d5a8c60001b612e44565b6127ba7fbd85d713b3ecd1c6b7f8724c8b03ad04cb14ab14311238088d189a2998c1ff3660001b612e44565b80600501546127cb82600801614843565b1061280b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280290617a0a565b60405180910390fd5b6128377fda60529bfb9986c98acd273f635686d8f7b73b6f583614cbdc820a7a58964a8c60001b612e44565b612869565b6128687f7d2ef82a534bdad4018b46485ab5ca1b8d6199d565fc485c9fc955cf8315650160001b612e44565b5b6128957fb0294875c6cc08a345ea42b9646225a786377b4c6f373ca6e5c1e83170691ffa60001b612e44565b6128c17f8ef13eb5f927e493009b674a2d591d4edf2deed7446b1bc73fec86b82774ef6860001b612e44565b6128ed7f3277415fe543398c4684af668eadafa6dac0e216ec938554ca660d4f6590361d60001b612e44565b806000015442118015612904575080600101544211155b612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a90617a76565b60405180910390fd5b61296f7f47d1371d81b2dfae19008e1446f17c094119b8e80f43e7faf7c0d36c0a79bc3960001b612e44565b61299b7f5a54c035f36d106764ab8a16f94ecc6541f4a99e1a3f6672a7d947269b95a1ec60001b612e44565b6129c77f37dc2fc9d219cfff2f7d3e9cacfb859d74313cff97c8573e82bfddcce36bc52560001b612e44565b60008160000154426129d99190617243565b9050612a077fe9f5dbd7c9c9b9dc1f8efbc13fb0c02a1028c73d5fdb06f3af09ecf913a691bb60001b612e44565b612a337fe80755f6fb225c316f592f29da79db79f968935adfc2c4b0a1c396037c8379ae60001b612e44565b600082600001548360010154612a499190617243565b9050612a777f77e4ee5346abf5b5d88d42a9ab8a6e4667b53e015b1edefa3c10e8599591241b60001b612e44565b612aa37fbc613c02241742596ff7822714453fa8a7fd655883df187aa440fb4faa8a38aa60001b612e44565b612abc82828560020154866003015487600401546133f0565b9350505050919050565b6000806000806000806000806000612b007fe8a5af4e439f02224da033277a50ab5279802b43087c27f372488d6423946ff760001b612e44565b612b2c7f5487a9c3f4a6be99907c28a523b37d3836a9af8930d871758cb1e2b9e63bc66160001b612e44565b612b587f48ddcf1b678145f3268d96f945fd461e5a4326ef88837141519aef52c51ffee960001b612e44565b6000612b62614920565b60000160008c81526020019081526020016000209050612ba47f8dbe65c6881692a6776899f280065952dc2df69d72fe07395c338dcc973a490960001b612e44565b612bd07f47b941210197f2efd58d1304cae8f37ab1c986ec3fb529211f9686c6fcacc3a760001b612e44565b612bfc7fb0469c1f5adfed701fba68d5d126e5e8ec03403ef713dfda43e52734cdccae9860001b612e44565b600081600201541415612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b9061799e565b60405180910390fd5b612c707fa68513e6f67f026cca3cd16f744f770d6aa54e70bdd9db5ed90e954b349a7f6f60001b612e44565b612c9c7fb8ecceab63ff293d4c2ccbdb4eba26bb05c05de4269141e23d78488d9f660fcb60001b612e44565b612cc87ff5d4b15f45d20693747daf6cb337d95c90d9883bcf518c7c5aace37f5c19256660001b612e44565b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d1c89600801614843565b995099509950995099509950995099509950509193959799909294969850565b60606000612d48614d60565b600101600084815260200190815260200160002090506000612d6982614d8d565b67ffffffffffffffff811115612d8257612d816165a5565b5b604051908082528060200260200182016040528015612db05781602001602082028036833780820191505090505b50905060005b612dbf83614d8d565b811015612e3957612dd98184614df390919063ffffffff16565b828281518110612dec57612deb617891565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080612e3190617a96565b915050612db6565b508092505050919050565b50565b50565b60606000612e56614d60565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000612ea382614e0d565b67ffffffffffffffff811115612ebc57612ebb6165a5565b5b604051908082528060200260200182016040528015612eea5781602001602082028036833780820191505090505b50905060005b612ef983614e0d565b811015612f4557612f138184614e2290919063ffffffff16565b828281518110612f2657612f25617891565b5b6020026020010181815250508080612f3d90617a96565b915050612ef0565b508092505050919050565b50565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb990617b51565b60405180910390fd5b80612fcb614dc6565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516130bc919061656f565b60405180910390a35050565b60006130f67ffa26a7da27c0ac06ac7805887f2377614da761287f2f7c3a4dc6abc18eb5473b60001b612e44565b6131227f94d85335309ff28be4aa749f1808264193e61aaa98a6c3ad981cab613330b94960001b612e44565b61314e7f867529e2ffd01a03b7646d7b25c07931641c80ff9c1d33df57e95c401a39f0b560001b612e44565b6000613158614920565b6000016000858152602001908152602001600020905061319a7ffcaa8f30a2501929c504af414955562b187a03a3fbef2540414642f43b2bf0b460001b612e44565b6131c67fb5fdf3ca75f9f25deb6461c7e36dda453f09d0c5ec33c02845676511a0a620e260001b612e44565b6131f27f64092fc04b74608d5fbdfd925076b6f0d9dce2f52f72687bee3fd2265dbd26a060001b612e44565b60008160020154141561323a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132319061799e565b60405180910390fd5b6132667ff44c2fce1b667441bdce1aa5e317ce4e059c4be792145f244950392c19c90f5c60001b612e44565b6132927f4e961061e1b66e4d007d7ea686f1efd64b12e1f0daa709c60157b5c7e270e8e760001b612e44565b6132be7f56b4bbe6761ee9daa28e614611acd1aeefec4b71432acebe303e72cf7199ccc660001b612e44565b6133078160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b91505092915050565b600061333e7fc7bf4d9de951de2382a329515d163c8b3de60b5ec9513e3beb9c0779f70fa8cf60001b612e47565b61336a7f607acc0e7f5b80faa103c94ffdc8845d15f77dcb52635e930cdc0c13e5465fed60001b612e47565b6133967f0165c996af12bc8835cedb815a581af458d067b5bb9e5b20b6185ee555a82a1f60001b612e47565b61339e614765565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006133d1614d60565b6000016000838152602001908152602001600020549050919050565b50565b600061341e7f467e8534352d8ba04feb9309024ec928d7fcca8fefcae69a9d81b84da5074e3b60001b612e44565b61344a7f42552ebb707a13c6433ffcff968f267f1b1c67dbd87aae42c0ac206fd7b4cb3a60001b612e44565b6134767fff36ec40513fb6615e5a6da1f53a00a33167b7ffa9c0c08f8c8b32377d978d5360001b612e44565b8483856134839190617243565b8761348e9190617b71565b848661349a9190617243565b84896134a69190617bfa565b6134b09190617b71565b86886134bc9190617b71565b6134c69190617c2b565b6134d09190617243565b6134da9190617c81565b905095945050505050565b60006135137f1a0bc5712cf21f15ffe356effc6be38ee5e256049652db55e362e0cb02fbcd3360001b612e44565b61353f7f9556cf658fc9edfafcd4cce3a2bba017014a52c41f5c122233cb5f27045f8e5760001b612e44565b61356b7fd09a93ae0b33bae90200104ccea2eeea9260431e57c2b6d9b2512c81489f220960001b612e44565b6000613575614572565b90506135a37f0a96915e921ce1bb9dff109ae233ac4462ceb9ef2568ceae98430347f727d54860001b612e44565b6135cf7f4993b2d38321c91c5694ed34ac6b4fc75a66f0186add52a9c8c4e7a80f5632d360001b612e44565b60006135d9614920565b6000016000868152602001908152602001600020905061361b7f2db17f44d2f4f466e8c646f303e33a3e7c507cab6b4ab7ee21b161e4bf50aa8760001b612e44565b6136477fa2fdc2d6b76ce882a2b1c7c9e4dc0db249a4107db825384998b8c812edc5778d60001b612e44565b60008160050154146137855761367f7f9297c12ecb998c58f523d14c3630cddd6e9a47dddbc3e5670dd90483aa6a6e6260001b612e44565b6136ab7fd67931535a3386d2df57da321007065fc1b0ff5843e08803d5ada4777ec05cfe60001b612e44565b6136d77feb63e0b74550ee850541a4b43bcb50d1718d25f3c1fc6e07a70be2df53b3217960001b612e44565b6137037f8860f6cf9b547ada5d33edb8c755b7622918c397e73be151799ae47e357c022760001b612e44565b806005015461371482600801614843565b10613754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374b90617a0a565b60405180910390fd5b6137807fdfefd62cfcd074d6cec2a70941a72b4db89062098859306fb3b626f97dac509060001b612e44565b6137b2565b6137b17f6eb419f4ef571ee69565f93c0614977e2c78d1082f3b11e6faae7bfab4d7d4af60001b612e44565b5b6137de7fe6bd9eab0fcdc8dd0393fb7687b25c92bbf481cb9f8171f7a38b25336a9f5aa260001b612e44565b61380a7f0c6ef021f5f8c4c1d04414a030b0d3b29d069f80c50fe04b8fd9c4c958ed2e0660001b612e44565b6138367fca48105f8ccb5c8f371268598674f88c9427da131aee83b6bcb5203b108989d160001b612e44565b80600001544211801561384d575080600101544211155b61388c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388390617a76565b60405180910390fd5b6138b87f84b3a30e3aaaad891b6476fac1c1ce092f7377c3af53bd4968bf7584f8ed5d9460001b612e44565b6138e47fafac73132aea02f543d24463034fe220de761a3855acbcdb8b0ed5ad866cd4bc60001b612e44565b6139107f95d7dccdc85275beeb84cca0514066e29ae2c008d87247aa57d5525ffe6415af60001b612e44565b60008160000154426139229190617243565b90506139507f2bd2a43d6c3fbb552ae634a9cf117bdd370c1c0452d406ff78d337a42aafc8d160001b612e44565b61397c7f8388d7d8641f292eda9f643d2a3824b14a200164b771b206f502a79db76ff32b60001b612e44565b6000826000015483600101546139929190617243565b90506139bf7ecb9e931eeac8a3060d2111d1528ac97fb328698d73f00d32df883fa71cc22e60001b612e44565b6139eb7fcb0a4ab5a3a709d23815a0cc8946278ab53567900be8f410189e9df1c188265060001b612e44565b6000613a0683838660020154876003015488600401546133f0565b9050613a347f2671c493662477f9138cf0caf3de07279e3d88bb22dd8e760b95179c36347e7c60001b612e44565b613a607ff5e0e2c4a1f649b6261ceae6d7af54c90aea94ed25a21079a64af5ae30b5f86560001b612e44565b613a8c7f45038e8372fde8d00740a9af5a28c467ff690756fa2228608288d7117526468d60001b612e44565b80341015613acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac690617cfe565b60405180910390fd5b613afb7fb99e15263fee06f285aa82d0590f86b64a774ded68dd56fa792be386ba2dff3960001b612e44565b613b277fcea5f77e8e6fe64ec9d03e19e08dafbe6f36208be6a8bc76dc8992941dace0c160001b612e44565b613b537fadc34614713e8a678778d6e7443e528a69db973d57e13075306b0d62bdd562ac60001b612e44565b60006064856006015434613b679190617b71565b613b719190617c81565b9050613b9f7fc1867565605dc569e134fee7c94576cd28efef42e5f2496102a2c9066fbf279160001b612e44565b613bcb7f1a4bb91bd12f72508e757059a9641a27720f734c35864dd6567c1dc2b7048fa560001b612e44565b60008134613bd99190617243565b9050613c077f1ae67994343a150b53f1a8665ba5d89c05efd46b78d681185e4e8ec6db12b13a60001b612e44565b613c337f1770c47a621900aff2a3654e052089173ced90f384b3388fa8cf6eb17368bb3e60001b612e44565b6000613c7e8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b9050613cac7fa9f0fa1149526d518740884046d951680b4a8c8b56343df1c9fe157319c6bf1a60001b612e44565b613cd87f15db6d0424921ba08d952170d401e6dbbde2ffad68d82fd8e96bce2f25c054b860001b612e44565b60008b8983604051602001613cef93929190617d1e565b6040516020818303038152906040529050613d2c7fbde68610edece319f0c734dacb5c71c244ca8355565eda2f1cc462b6ea7d9f1360001b612e44565b613d587fcf4ebaf86cc5878f3c197d966d95eb8abe3205584511d4025bc09d4831bd952a60001b612e44565b6000613d7c8c613d6e848051906020012061470e565b61473e90919063ffffffff16565b9050613da97e0c1e0208a83ad0c8bdf511888c733d08452faf2edb2e8651cfaf82ee0571fc60001b612e44565b613dd57fe717e93d298956c9588ab8f07146f5af81795f7be948f46f5f8b01e17a760d2a60001b612e44565b613e017fefbb91477106384cde2a0c3bb291afc38600957adaa2242d8dfe31ceb84778fe60001b612e44565b613e09614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e919061755c565b60405180910390fd5b613ec67f51661d87ff3dadec09005108334ba343b2f51dce9a09ce8e2fee4558d5247c7f60001b612e44565b613ef27faa0c3b1ee34f2a4375be328025f1890701397b70b1250e4f62255fcac543ab2960001b612e44565b613f1e7f6a91c3c8c7494c04964741fd0901d0f2d14e1992b6aa8d8c39e334fd538edb4360001b612e44565b613f2a8960080161490a565b613f567f1106ae168cb91cbd1ea6e5cf2f9c61842c0059249b5ee05474bbc2b99f8e466560001b612e44565b613f827f8d774324aabda0627bcc1239bcce6ee170958556fbb7d24c831fdb134fa3522260001b612e44565b613fcb8960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b613ff77fa957eac5cebc2c1f29ec1521b9f962659947f3050a20a2bfa217811afd3854fc60001b612e44565b6140237f876c0988c120574709032973f531c303d92925c8cb10c272e6aa611f81a8e62060001b612e44565b61403f8a8e6001604051806020016040528060008152506149fe565b61406b7f6ba38d6297457146f8d16b1fbd1a98b39780979ac7f89eb6da84fafbbc0c219e60001b612e44565b6140977f48c5e3ccc7e77125625395ca7e6d39b6ea2901eb68abde350939b1112f0e0fc160001b612e44565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015614101573d6000803e3d6000fd5b5061412e7f9ac51f0cbe86cbef4849ddb20c451ddd33b0653019f6c0973458611f5721834260001b612e44565b61415a7fcb4980c535a9850042d645dbbaad9aeff49d65b78d3ee55b58d12b1a687783eb60001b612e44565b614162614765565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156141cb573d6000803e3d6000fd5b506141f87f32485977772f9ad6ebae13dfbc40f6f0009c657716c1ff71265d0047384e25d260001b612e44565b6142247fb5d3bef5338356a23dfcde40c5e4441fd29980e4d2b00f5834752d2666f70c6d60001b612e44565b60018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46142967f189d29ba560835342b354d49bbf2a33dd887f8330998ce4a22f0af009e5c71d860001b612e44565b6142c27f58344b96709b709bc6fef55f144a0d1a49dc6058486a0154310d529f27c2a62660001b612e44565b60019a505050505050505050505092915050565b60006142e0614dc6565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806143b357506143b285336142d6565b5b6143f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e9906177df565b60405180910390fd5b614400338686868686614e3c565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446f90617dcd565b60405180910390fd5b614480614dc6565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006145a07f88f29638fa65ae63a841285179c25a2e39ced6d390f74256094dd2a735b4027660001b612f50565b6145cc7fd1328846b45aade881fe5353aea2a4c719af9da68bc5171168583cc13155431460001b612f50565b6145f87f7ed86c48a0f81ef7874eb0d2d3f21b0e65416b91c4c9f816a0589566b5ba09e360001b612f50565b6018600036905010158015614612575061461133612421565b5b1561467e576146437f070f7f2b2922ac8abb388507c63d261a8e7c8fc39014856f8ba03bdf0984e0a260001b612f50565b61466f7f572eebcddfe593539ba8aa5956472f6ac47b18bd757da058e419e5f60d92340960001b612f50565b601436033560601c905061470a565b6146aa7f049f00aa6d96a4574a36ae1b2039ae5b66d97456b939a9c927c84997c029175560001b612f50565b6146d67f0251339121068447d4c576c5e96b821e81d1da157c7c6da93224ac2005db84c860001b612f50565b6147027ffae7111910251cf097d73c9503b05824f9222f1178f4c4f6fd670c2b76459f1560001b612f50565b33905061470b565b5b90565b6000816040516020016147219190617e5a565b604051602081830303815290604052805190602001209050919050565b600080600061474d8585614e60565b9150915061475a81614ee3565b819250505092915050565b60006147937f22989ab266127db139a475327f255a7cbdd8f4dcc1504e600dce7366519f266c60001b6150b8565b6147bf7fad5e44193be1059dfdffe9ac6c6f3af73928f60ac167740b45d14ca0f77703cc60001b6150b8565b6147eb7fe345fd94e4db779611a270161ffac772f81575bb475f1d42c7b8aac50c26c99760001b6150b8565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e905061483c7fedd75a57aad4d39568d96afe62dad6399b99e6d5ce59343e0e1d06daf02aa7d360001b6150b8565b8091505090565b600081600001549050919050565b61487d7f83beed3ed19f3f5bfb7572c3835676b72c274d00ed094c05f59e63c8ab88a84060001b6133ed565b6148a97f6369348c2178daa645f0bf939f1a6678aa7569c2b9cd0fde0692d9e6a32b54b660001b6133ed565b6148d57f5872f937c02b64516677c99c18a6bb89e7471cab449621203787d44f6efe2e7060001b6133ed565b806148de614c82565b6000016000848152602001908152602001600020908051906020019061490592919061631a565b505050565b6001816000016000828254019250508190555050565b600061494e7fcbd6a87feadf8bc6d18a7e4d3dce6dea12857618c537b87a82537ff45dbb94b360001b6150bb565b61497a7f776cfd16ce6d3511350000a04752b2abc52815f973792fc79403090e385a2abd60001b6150bb565b6149a67f1acc6ee66986e06ec5b2aab054e955ca5a1313b484283bf79dbef6e5d3e14be160001b6150bb565b60007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990506149f77f4d39dc49b0d6cf786271a7bfc8fd46388ec159f0027f61fc98852b25ce303dfa60001b6150bb565b8091505090565b614a0a848484846150be565b614a1933600086868686615248565b50505050565b6000614a4d7f499a2370464f33cfc8e2ef033f579272af11ed73cc8753c9cbc6f13fb4872e9c60001b615420565b614a797fd098f0bcaca6285a9ced2563c95781bc2f3fcdbf7c01993459cfa5c977f104a760001b615420565b614aa57f8b6492a6876bb38cd0913d978cd1674f72509ad53daa743eb10fa4a5b109542160001b615420565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050614af67f8734688ce7e316775a7605f64173dd1a8314018c64251ca9b5f78aaedc1b1d0360001b615420565b8091505090565b6000614b2b7fbf28b4c694d70043cdbba1139d13e89322d9971fc2604eec0c38e355815d0bd060001b615423565b614b577ff948c5bcd8a8be4422c92e8f63497dfe9d651affb2eecccb4e1e1a34b9a5a5b460001b615423565b614b837ffb0af2a23ffb1b99ced27c52f498bc6ab948fe939d307309c7986f94c11539e960001b615423565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9939050614bd47f471ad1677eb85872327f149b61d16c373352df62511e8db57eca7d728fb69bfa60001b615423565b8091505090565b614c077f0c8e7e650704c8ee3af1f7a15c517c38dc4fc70856d2ff36fcd44c3408e32d7c60001b6133ed565b614c337fa601ee21d724d0cd41bcad5c9a81c9860d87f8f5d63ee068e05dacf7c6a3b0f060001b6133ed565b614c5f7f791c3597ef5db947d31801b2019c0ae1fbc8ed0ae2c503dc0474a15c92d5849e60001b6133ed565b80614c68614c82565b6001019080519060200190614c7e92919061631a565b5050565b6000614cb07f6098ffde723ed64276c2c486b25bcd3baa9fef2c472f4b52ce362b86534e958460001b615426565b614cdc7f10eb3f6b27aaacda65aa8f87c2662bf52b41f9b1818b9f64dc9266fe61391c0360001b615426565b614d087f776de49b4a1bf86ef00deb75e863c7bb93d54dd6f3d8e2d4f0aa283f5cb993d360001b615426565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c839050614d597fdd41ca273c50064cb67b10ee4905fef1b95ec8ac8c9637a58c89453b6234ce3e60001b615426565b8091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000614d9b82600001615429565b9050919050565b614db086868686868661543a565b614dbe868686868686615746565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b6000614e02836000018361591e565b60001c905092915050565b6000614e1b82600001615429565b9050919050565b6000614e31836000018361591e565b60001c905092915050565b614e4a868686868686615992565b614e58868686868686615248565b505050505050565b600080604183511415614ea25760008060006020860151925060408601519150606086015160001a9050614e9687828585615c0a565b94509450505050614edc565b604083511415614ed3576000806020850151915060408501519050614ec8868383615d17565b935093505050614edc565b60006002915091505b9250929050565b60006004811115614ef757614ef6617e80565b5b816004811115614f0a57614f09617e80565b5b1415614f15576150b5565b60016004811115614f2957614f28617e80565b5b816004811115614f3c57614f3b617e80565b5b1415614f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f7490617efb565b60405180910390fd5b60026004811115614f9157614f90617e80565b5b816004811115614fa457614fa3617e80565b5b1415614fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614fdc90617f67565b60405180910390fd5b60036004811115614ff957614ff8617e80565b5b81600481111561500c5761500b617e80565b5b141561504d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161504490617ff9565b60405180910390fd5b6004808111156150605761505f617e80565b5b81600481111561507357615072617e80565b5b14156150b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150ab9061808b565b60405180910390fd5b5b50565b50565b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561512e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151259061811d565b60405180910390fd5b61514d3360008661513e87615d65565b61514787615d65565b86615ddf565b6000615157614dc6565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546151bb9190617c2b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161523992919061813d565b60405180910390a45050505050565b6152678473ffffffffffffffffffffffffffffffffffffffff16615df5565b15615418578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016152ad9594939291906181bb565b6020604051808303816000875af19250505080156152e957506040513d601f19601f820116820180604052508101906152e6919061822a565b60015b61538f576152f5618264565b806308c379a01415615352575061530a618286565b806153155750615354565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161534991906169bf565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016153869061838e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614615416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161540d90618420565b60405180910390fd5b505b505050505050565b50565b50565b50565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156154aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154a1906184b2565b60405180910390fd5b81518351146154ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154e590618544565b60405180910390fd5b6154fc868686868686615ddf565b6000615506614dc6565b600001905060005b84518110156156be57600085828151811061552c5761552b617891565b5b60200260200101519050600085838151811061554b5761554a617891565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156155ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016155e3906185d6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546156a29190617c2b565b92505081905550505080806156b690617a96565b91505061550e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516157359291906185f6565b60405180910390a450505050505050565b6157658473ffffffffffffffffffffffffffffffffffffffff16615df5565b15615916578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016157ab95949392919061862d565b6020604051808303816000875af19250505080156157e757506040513d601f19601f820116820180604052508101906157e4919061822a565b60015b61588d576157f3618264565b806308c379a014156158505750615808618286565b806158135750615852565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161584791906169bf565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158849061838e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614615914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161590b90618420565b60405180910390fd5b505b505050505050565b600081836000018054905011615969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161596090618707565b60405180910390fd5b82600001828154811061597f5761597e617891565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016159f9906184b2565b60405180910390fd5b615a20868686615a1187615d65565b615a1a87615d65565b86615ddf565b6000615a2a614dc6565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015615ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615abd906185d6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254615b7c9190617c2b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051615bf992919061813d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115615c45576000600391509150615d0e565b601b8560ff1614158015615c5d5750601c8560ff1614155b15615c6f576000600491509150615d0e565b600060018787878760405160008152602001604052604051615c949493929190618752565b6020604051602081039080840390855afa158015615cb6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615d0557600060019250925050615d0e565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050615d5787828885615c0a565b935093505050935093915050565b60606000600167ffffffffffffffff811115615d8457615d836165a5565b5b604051908082528060200260200182016040528015615db25781602001602082028036833780820191505090505b5090508281600081518110615dca57615dc9617891565b5b60200260200101818152505080915050919050565b615ded868686868686615e08565b505050505050565b600080823b905060008111915050919050565b615e16868686868686615e1e565b505050505050565b615e2c8686868686866160d9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146160d1576000615e69614d60565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156160cb576000878281518110615f1e57615f1d617891565b5b6020026020010151905060008111156160b7576000898381518110615f4657615f45617891565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415615fb657818760000160008381526020019081526020016000206000828254615faa9190617c2b565b92505081905550616002565b81615fc18d83614407565b141561600157615feb8c8760008481526020019081526020016000206160e190919063ffffffff16565b50615fff818661611190919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156160685781876000016000838152602001908152602001600020600082825461605c9190617243565b925050819055506160b5565b60006160748c83614407565b14156160b45761609e8b87600084815260200190815260200160002061612b90919063ffffffff16565b506160b2818561615b90919063ffffffff16565b505b5b505b5080806160c390617a96565b915050615f00565b50505050505b505050505050565b505050505050565b6000616109836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616175565b905092915050565b6000616123836000018360001b616175565b905092915050565b6000616153836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616287565b905092915050565b600061616d836000018360001b616287565b905092915050565b6000808360010160008481526020019081526020016000205490506000811461627b5760006001826161a79190617243565b9050600085600001600187600001805490506161c39190617243565b815481106161d4576161d3617891565b5b90600052602060002001549050808660000183815481106161f8576161f7617891565b5b90600052602060002001819055506001826162139190617c2b565b86600101600083815260200190815260200160002081905550856000018054806162405761623f618797565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050616281565b60009150505b92915050565b600061629383836162f7565b6162ec5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506162f1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461632690617617565b90600052602060002090601f016020900481019282616348576000855561638f565b82601f1061636157805160ff191683800117855561638f565b8280016001018555821561638f579182015b8281111561638e578251825591602001919060010190616373565b5b50905061639c91906163a0565b5090565b5b808211156163b95760008160009055506001016163a1565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006163fc826163d1565b9050919050565b61640c816163f1565b811461641757600080fd5b50565b60008135905061642981616403565b92915050565b6000819050919050565b6164428161642f565b811461644d57600080fd5b50565b60008135905061645f81616439565b92915050565b6000806040838503121561647c5761647b6163c7565b5b600061648a8582860161641a565b925050602061649b85828601616450565b9150509250929050565b6164ae8161642f565b82525050565b60006020820190506164c960008301846164a5565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b616504816164cf565b811461650f57600080fd5b50565b600081359050616521816164fb565b92915050565b60006020828403121561653d5761653c6163c7565b5b600061654b84828501616512565b91505092915050565b60008115159050919050565b61656981616554565b82525050565b60006020820190506165846000830184616560565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6165dd82616594565b810181811067ffffffffffffffff821117156165fc576165fb6165a5565b5b80604052505050565b600061660f6163bd565b905061661b82826165d4565b919050565b600067ffffffffffffffff82111561663b5761663a6165a5565b5b61664482616594565b9050602081019050919050565b82818337600083830152505050565b600061667361666e84616620565b616605565b90508281526020810184848401111561668f5761668e61658f565b5b61669a848285616651565b509392505050565b600082601f8301126166b7576166b661658a565b5b81356166c7848260208601616660565b91505092915050565b600067ffffffffffffffff8211156166eb576166ea6165a5565b5b6166f482616594565b9050602081019050919050565b600061671461670f846166d0565b616605565b9050828152602081018484840111156167305761672f61658f565b5b61673b848285616651565b509392505050565b600082601f8301126167585761675761658a565b5b8135616768848260208601616701565b91505092915050565b60008060008060008060008060006101208a8c031215616794576167936163c7565b5b60008a013567ffffffffffffffff8111156167b2576167b16163cc565b5b6167be8c828d016166a2565b99505060206167cf8c828d01616450565b98505060406167e08c828d01616450565b97505060606167f18c828d01616450565b96505060806168028c828d01616450565b95505060a06168138c828d01616450565b94505060c06168248c828d01616450565b93505060e06168358c828d01616450565b9250506101008a013567ffffffffffffffff811115616857576168566163cc565b5b6168638c828d01616743565b9150509295985092959850929598565b600080600080600060a0868803121561688f5761688e6163c7565b5b600086013567ffffffffffffffff8111156168ad576168ac6163cc565b5b6168b9888289016166a2565b95505060206168ca8882890161641a565b94505060406168db8882890161641a565b93505060606168ec8882890161641a565b92505060806168fd8882890161641a565b9150509295509295909350565b6000602082840312156169205761691f6163c7565b5b600061692e84828501616450565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015616971578082015181840152602081019050616956565b83811115616980576000848401525b50505050565b600061699182616937565b61699b8185616942565b93506169ab818560208601616953565b6169b481616594565b840191505092915050565b600060208201905081810360008301526169d98184616986565b905092915050565b6000602082840312156169f7576169f66163c7565b5b6000616a058482850161641a565b91505092915050565b600067ffffffffffffffff821115616a2957616a286165a5565b5b602082029050602081019050919050565b600080fd5b6000616a52616a4d84616a0e565b616605565b90508083825260208201905060208402830185811115616a7557616a74616a3a565b5b835b81811015616a9e5780616a8a8882616450565b845260208401935050602081019050616a77565b5050509392505050565b600082601f830112616abd57616abc61658a565b5b8135616acd848260208601616a3f565b91505092915050565b600080600080600060a08688031215616af257616af16163c7565b5b6000616b008882890161641a565b9550506020616b118882890161641a565b945050604086013567ffffffffffffffff811115616b3257616b316163cc565b5b616b3e88828901616aa8565b935050606086013567ffffffffffffffff811115616b5f57616b5e6163cc565b5b616b6b88828901616aa8565b925050608086013567ffffffffffffffff811115616b8c57616b8b6163cc565b5b616b9888828901616743565b9150509295509295909350565b6000819050919050565b616bb881616ba5565b8114616bc357600080fd5b50565b600081359050616bd581616baf565b92915050565b600060208284031215616bf157616bf06163c7565b5b6000616bff84828501616bc6565b91505092915050565b616c11816163f1565b82525050565b6000602082019050616c2c6000830184616c08565b92915050565b600067ffffffffffffffff821115616c4d57616c4c6165a5565b5b602082029050602081019050919050565b6000616c71616c6c84616c32565b616605565b90508083825260208201905060208402830185811115616c9457616c93616a3a565b5b835b81811015616cbd5780616ca9888261641a565b845260208401935050602081019050616c96565b5050509392505050565b600082601f830112616cdc57616cdb61658a565b5b8135616cec848260208601616c5e565b91505092915050565b60008060408385031215616d0c57616d0b6163c7565b5b600083013567ffffffffffffffff811115616d2a57616d296163cc565b5b616d3685828601616cc7565b925050602083013567ffffffffffffffff811115616d5757616d566163cc565b5b616d6385828601616aa8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b616da28161642f565b82525050565b6000616db48383616d99565b60208301905092915050565b6000602082019050919050565b6000616dd882616d6d565b616de28185616d78565b9350616ded83616d89565b8060005b83811015616e1e578151616e058882616da8565b9750616e1083616dc0565b925050600181019050616df1565b5085935050505092915050565b60006020820190508181036000830152616e458184616dcd565b905092915050565b600061012082019050616e63600083018c6164a5565b616e70602083018b6164a5565b616e7d604083018a6164a5565b616e8a60608301896164a5565b616e9760808301886164a5565b616ea460a08301876164a5565b616eb160c08301866164a5565b616ebe60e0830185616c08565b616ecc6101008301846164a5565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b616f0f816163f1565b82525050565b6000616f218383616f06565b60208301905092915050565b6000602082019050919050565b6000616f4582616eda565b616f4f8185616ee5565b9350616f5a83616ef6565b8060005b83811015616f8b578151616f728882616f15565b9750616f7d83616f2d565b925050600181019050616f5e565b5085935050505092915050565b60006020820190508181036000830152616fb28184616f3a565b905092915050565b616fc381616554565b8114616fce57600080fd5b50565b600081359050616fe081616fba565b92915050565b60008060408385031215616ffd57616ffc6163c7565b5b600061700b8582860161641a565b925050602061701c85828601616fd1565b9150509250929050565b6000806040838503121561703d5761703c6163c7565b5b600061704b85828601616450565b925050602061705c8582860161641a565b9150509250929050565b600080600080600060a08688031215617082576170816163c7565b5b600061709088828901616450565b95505060206170a188828901616450565b94505060406170b288828901616450565b93505060606170c388828901616450565b92505060806170d488828901616450565b9150509295509295909350565b600080604083850312156170f8576170f76163c7565b5b600061710685828601616450565b925050602083013567ffffffffffffffff811115617127576171266163cc565b5b61713385828601616743565b9150509250929050565b60008060408385031215617154576171536163c7565b5b60006171628582860161641a565b92505060206171738582860161641a565b9150509250929050565b600080600080600060a08688031215617199576171986163c7565b5b60006171a78882890161641a565b95505060206171b88882890161641a565b94505060406171c988828901616450565b93505060606171da88828901616450565b925050608086013567ffffffffffffffff8111156171fb576171fa6163cc565b5b61720788828901616743565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061724e8261642f565b91506172598361642f565b92508282101561726c5761726b617214565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b60006172ad600283616942565b91506172b882617277565b602082019050919050565b600060208201905081810360008301526172dc816172a0565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b6000617319600283616942565b9150617324826172e3565b602082019050919050565b600060208201905081810360008301526173488161730c565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000617385600383616942565b91506173908261734f565b602082019050919050565b600060208201905081810360008301526173b481617378565b9050919050565b600081905092915050565b60006173d182616937565b6173db81856173bb565b93506173eb818560208601616953565b80840191505092915050565b6000819050919050565b61741261740d8261642f565b6173f7565b82525050565b60008160601b9050919050565b600061743082617418565b9050919050565b600061744282617425565b9050919050565b61745a617455826163f1565b617437565b82525050565b600061746c828d6173c6565b9150617478828c617401565b602082019150617488828b617401565b602082019150617498828a617401565b6020820191506174a88289617401565b6020820191506174b88288617401565b6020820191506174c88287617401565b6020820191506174d88286617401565b6020820191506174e88285617449565b6014820191506174f88284617401565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000617546600283616942565b915061755182617510565b602082019050919050565b6000602082019050818103600083015261757581617539565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b60006175b2600283616942565b91506175bd8261757c565b602082019050919050565b600060208201905081810360008301526175e1816175a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061762f57607f821691505b60208210811415617643576176426175e8565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b600061767f601d83616942565b915061768a82617649565b602082019050919050565b600060208201905081810360008301526176ae81617672565b9050919050565b60008190508160005260206000209050919050565b600081546176d781617617565b6176e181866173bb565b945060018216600081146176fc576001811461770d57617740565b60ff19831686528186019350617740565b617716856176b5565b60005b8381101561773857815481890152600182019150602081019050617719565b838801955050505b50505092915050565b600061775582856176ca565b915061776182846173c6565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006177c9602983616942565b91506177d48261776d565b604082019050919050565b600060208201905081810360008301526177f8816177bc565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061785b602983616942565b9150617866826177ff565b604082019050919050565b6000602082019050818103600083015261788a8161784e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061791c603183616942565b9150617927826178c0565b604082019050919050565b6000602082019050818103600083015261794b8161790f565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000617988600383616942565b915061799382617952565b602082019050919050565b600060208201905081810360008301526179b78161797b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b60006179f4600283616942565b91506179ff826179be565b602082019050919050565b60006020820190508181036000830152617a23816179e7565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000617a60600383616942565b9150617a6b82617a2a565b602082019050919050565b60006020820190508181036000830152617a8f81617a53565b9050919050565b6000617aa18261642f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415617ad457617ad3617214565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000617b3b602983616942565b9150617b4682617adf565b604082019050919050565b60006020820190508181036000830152617b6a81617b2e565b9050919050565b6000617b7c8261642f565b9150617b878361642f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615617bc057617bbf617214565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000617c058261642f565b9150617c108361642f565b925082617c2057617c1f617bcb565b5b828206905092915050565b6000617c368261642f565b9150617c418361642f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115617c7657617c75617214565b5b828201905092915050565b6000617c8c8261642f565b9150617c978361642f565b925082617ca757617ca6617bcb565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b6000617ce8600283616942565b9150617cf382617cb2565b602082019050919050565b60006020820190508181036000830152617d1781617cdb565b9050919050565b6000617d2a8286617401565b602082019150617d3a8285617449565b601482019150617d4a8284617401565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000617db7602b83616942565b9150617dc282617d5b565b604082019050919050565b60006020820190508181036000830152617de681617daa565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000617e23601c836173bb565b9150617e2e82617ded565b601c82019050919050565b6000819050919050565b617e54617e4f82616ba5565b617e39565b82525050565b6000617e6582617e16565b9150617e718284617e43565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000617ee5601883616942565b9150617ef082617eaf565b602082019050919050565b60006020820190508181036000830152617f1481617ed8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000617f51601f83616942565b9150617f5c82617f1b565b602082019050919050565b60006020820190508181036000830152617f8081617f44565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617fe3602283616942565b9150617fee82617f87565b604082019050919050565b6000602082019050818103600083015261801281617fd6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000618075602283616942565b915061808082618019565b604082019050919050565b600060208201905081810360008301526180a481618068565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000618107602183616942565b9150618112826180ab565b604082019050919050565b60006020820190508181036000830152618136816180fa565b9050919050565b600060408201905061815260008301856164a5565b61815f60208301846164a5565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061818d82618166565b6181978185618171565b93506181a7818560208601616953565b6181b081616594565b840191505092915050565b600060a0820190506181d06000830188616c08565b6181dd6020830187616c08565b6181ea60408301866164a5565b6181f760608301856164a5565b81810360808301526182098184618182565b90509695505050505050565b600081519050618224816164fb565b92915050565b6000602082840312156182405761823f6163c7565b5b600061824e84828501618215565b91505092915050565b60008160e01c9050919050565b600060033d11156182835760046000803e618280600051618257565b90505b90565b600060443d101561829657618319565b61829e6163bd565b60043d036004823e80513d602482011167ffffffffffffffff821117156182c6575050618319565b808201805167ffffffffffffffff8111156182e45750505050618319565b80602083010160043d038501811115618301575050505050618319565b618310826020018501866165d4565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000618378603483616942565b91506183838261831c565b604082019050919050565b600060208201905081810360008301526183a78161836b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061840a602883616942565b9150618415826183ae565b604082019050919050565b60006020820190508181036000830152618439816183fd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061849c602583616942565b91506184a782618440565b604082019050919050565b600060208201905081810360008301526184cb8161848f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061852e602883616942565b9150618539826184d2565b604082019050919050565b6000602082019050818103600083015261855d81618521565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b60006185c0602b83616942565b91506185cb82618564565b604082019050919050565b600060208201905081810360008301526185ef816185b3565b9050919050565b600060408201905081810360008301526186108185616dcd565b905081810360208301526186248184616dcd565b90509392505050565b600060a0820190506186426000830188616c08565b61864f6020830187616c08565b81810360408301526186618186616dcd565b905081810360608301526186758185616dcd565b905081810360808301526186898184618182565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006186f1602283616942565b91506186fc82618695565b604082019050919050565b60006020820190508181036000830152618720816186e4565b9050919050565b61873081616ba5565b82525050565b600060ff82169050919050565b61874c81618736565b82525050565b60006080820190506187676000830187618727565b6187746020830186618743565b6187816040830185618727565b61878e6060830184618727565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212203ecd8462de55fef4ff711664d2f4b6c6f2e2e5fd68cd89baa2cabd44129f446d64736f6c634300080a0033"; + "0x608060405234801561001057600080fd5b50615dcc80620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063bc01188e1161006f578063bc01188e14610541578063bd85b0391461056c578063d61b0c82146105a9578063db7fd408146105e6578063e985e9c514610616578063f242432a146106535761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461046157806385bff2e71461049e578063a22cb465146104db578063b3a721d1146105045761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190613a8e565b61067c565b6040516101839190613add565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190613b50565b610690565b6040516101c09190613b98565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613d9a565b6106b3565b6040516101fd9190613add565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613e9c565b610bce565b005b34801561023b57600080fd5b5061025660048036038101906102519190613f33565b610e32565b6040516102639190613fe8565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613f33565b610f56565b6040516102a09190613add565b60405180910390f35b3480156102b557600080fd5b506102be610f83565b6040516102cb9190613add565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061400a565b610f9d565b6040516103089190613add565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906140ff565b610ff6565b005b34801561034657600080fd5b5061034f61108a565b60405161035c91906141dd565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906142bb565b6110bd565b60405161039991906143f1565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c4919061400a565b6112b2565b6040516103d69190613b98565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613f33565b611315565b6040516104139190613add565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613f33565b611481565b60405161045899989796959493929190614413565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613f33565b61156a565b604051610495919061455e565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061400a565b611672565b6040516104d291906143f1565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd91906145ac565b611778565b005b34801561051057600080fd5b5061052b600480360381019061052691906145ec565b6118ed565b6040516105389190613add565b60405180910390f35b34801561054d57600080fd5b506105566119a8565b60405161056391906141dd565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613f33565b6119db565b6040516105a09190613add565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061462c565b611a01565b6040516105dd9190613add565b60405180910390f35b61060060048036038101906105fb91906146a7565b611a72565b60405161060d9190613b98565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614703565b611eeb565b60405161064a9190613b98565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190614743565b611f88565b005b6000610688838361201c565b905092915050565b60006106ac8261069e6120ef565b61211c90919063ffffffff16565b9050919050565b60008489896106c29190614809565b101580156106d05750600085115b61070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690614889565b60405180910390fd5b85871015801561071f5750600087115b61075e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610755906148f5565b60405180910390fd5b60648311156107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990614961565b60405180910390fd5b60006107ac612187565b905060006107b982610f9d565b905060008c8c8c8c8c8c8c8c8a8a6040516020016107e09a99989796959493929190614a26565b604051602081830303815290604052905060006108158661080784805190602001206121c3565b6121f390919063ffffffff16565b905061081f61221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790614b22565b60405180910390fd5b6108c36108bb61221a565b600201612247565b94506108cf858f612255565b6108e26108da61221a565b60020161228a565b6109326108ed61221a565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b8c61093b6122a0565b6000016000878152602001908152602001600020600001819055508b61095f6122a0565b6000016000878152602001908152602001600020600101819055508a6109836122a0565b600001600087815260200190815260200160002060020181905550896109a76122a0565b600001600087815260200190815260200160002060030181905550886109cb6122a0565b600001600087815260200190815260200160002060040181905550876109ef6122a0565b60000160008781526020019081526020016000206005018190555086610a136122a0565b60000160008781526020019081526020016000206006018190555083610a376122a0565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ab3610a976122a0565b600001600087815260200190815260200160002060080161228a565b610b17610abe6122a0565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b610b3384866001604051806020016040528060008152506122cd565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bed6122ee565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614b8e565b60405180910390fd5b82610c7061231b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610cbb6122ee565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610d4d85612348565b83610d5661221a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610da061221a565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610dea61221a565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610e3e61236b565b60000160008481526020019081526020016000208054610e5d90614bdd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8990614bdd565b8015610ed65780601f10610eab57610100808354040283529160200191610ed6565b820191906000526020600020905b815481529060010190602001808311610eb957829003601f168201915b50505050509050600081511415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990614c5b565b60405180910390fd5b610f2a61236b565b60010181604051602001610f3f929190614d0f565b604051602081830303815290604052915050919050565b6000610f7c610f63612398565b60010160008481526020019081526020016000206123c5565b9050919050565b6000610f98610f9061221a565b600201612247565b905090565b6000610fef610faa61221a565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061103657506110358533611eeb565b5b611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90614da5565b60405180910390fd5b6110833386868686866123da565b5050505050565b600061109461221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614e37565b60405180910390fd5b600061110d6123fe565b60000190506000845167ffffffffffffffff81111561112f5761112e613bce565b5b60405190808252806020026020018201604052801561115d5781602001602082028036833780820191505090505b50905060005b85518110156112a657600073ffffffffffffffffffffffffffffffffffffffff1686828151811061119757611196614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614ef8565b60405180910390fd5b82600086838151811061120c5761120b614e57565b5b60200260200101518152602001908152602001600020600087838151811061123757611236614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061128d5761128c614e57565b5b6020026020010181815250508080600101915050611163565b50809250505092915050565b60006112bc61231b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000806113206122a0565b6000016000848152602001908152602001600020905060008160020154141561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590614f64565b60405180910390fd5b60008160050154146113dc57806005015461139b82600801612247565b106113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614fd0565b60405180910390fd5b5b8060000154421180156113f3575080600101544211155b611432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114299061503c565b60405180910390fd5b60008160000154426114449190614809565b905060008260000154836001015461145c9190614809565b90506114778282856002015486600301548760040154611a01565b9350505050919050565b6000806000806000806000806000806114986122a0565b60000160008c815260200190815260200160002090506000816002015414156114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed90614f64565b60405180910390fd5b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661154a89600801612247565b995099509950995099509950995099509950509193959799909294969850565b60606000611576612398565b600101600084815260200190815260200160002090506000611597826123c5565b67ffffffffffffffff8111156115b0576115af613bce565b5b6040519080825280602002602001820160405280156115de5781602001602082028036833780820191505090505b50905060005b6115ed836123c5565b81101561166757611607818461242b90919063ffffffff16565b82828151811061161a57611619614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061165f9061505c565b9150506115e4565b508092505050919050565b6060600061167e612398565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006116cb82612445565b67ffffffffffffffff8111156116e4576116e3613bce565b5b6040519080825280602002602001820160405280156117125781602001602082028036833780820191505090505b50905060005b61172183612445565b81101561176d5761173b818461245a90919063ffffffff16565b82828151811061174e5761174d614e57565b5b60200260200101818152505080806117659061505c565b915050611718565b508092505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90615117565b60405180910390fd5b806117f06123fe565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e19190613b98565b60405180910390a35050565b6000806118f86122a0565b60000160008581526020019081526020016000209050600081600201541415611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90614f64565b60405180910390fd5b61199f8160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b91505092915050565b60006119b261221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006119e5612398565b6000016000838152602001908152602001600020549050919050565b6000848385611a109190614809565b87611a1b9190615137565b8486611a279190614809565b8489611a3391906151c0565b611a3d9190615137565b8688611a499190615137565b611a5391906151f1565b611a5d9190614809565b611a679190615247565b905095945050505050565b600080611a7d612187565b90506000611a896122a0565b600001600086815260200190815260200160002090506000816005015414611afd578060050154611abc82600801612247565b10611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614fd0565b60405180910390fd5b5b806000015442118015611b14575080600101544211155b611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a9061503c565b60405180910390fd5b6000816000015442611b659190614809565b9050600082600001548360010154611b7d9190614809565b90506000611b9a8383866002015487600301548860040154611a01565b905080341015611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906152c4565b60405180910390fd5b60006064856006015434611bf39190615137565b611bfd9190615247565b905060008134611c0d9190614809565b90506000611c5a8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b905060008b8983604051602001611c73939291906152e4565b60405160208183030381529060405290506000611ca88c611c9a84805190602001206121c3565b6121f390919063ffffffff16565b9050611cb261221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90614b22565b60405180910390fd5b611d4f8960080161228a565b611d988960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b611db48a8e6001604051806020016040528060008152506122cd565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611e1e573d6000803e3d6000fd5b50611e2761221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015611e90573d6000803e3d6000fd5b5060018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a460019a505050505050505050505092915050565b6000611ef56123fe565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611fc85750611fc78533611eeb565b5b612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe90614da5565b60405180910390fd5b612015338686868686612474565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615393565b60405180910390fd5b6120956123fe565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b600060186000369050101580156121a357506121a2336112b2565b5b156121b757601436033560601c90506121bf565b3390506121c0565b5b90565b6000816040516020016121d6919061542a565b604051602081830303815290604052805190602001209050919050565b60008060006122028585612498565b9150915061220f8161251b565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061225e61236b565b60000160008481526020019081526020016000209080519060200190612285929190613943565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6122d9848484846126f0565b6122e83360008686868661287a565b50505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061235161236b565b6001019080519060200190612367929190613943565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b60006123d382600001612a52565b9050919050565b6123e8868686868686612a63565b6123f6868686868686612d6f565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b600061243a8360000183612f47565b60001c905092915050565b600061245382600001612a52565b9050919050565b60006124698360000183612f47565b60001c905092915050565b612482868686868686612fbb565b61249086868686868661287a565b505050505050565b6000806041835114156124da5760008060006020860151925060408601519150606086015160001a90506124ce87828585613233565b94509450505050612514565b60408351141561250b576000806020850151915060408501519050612500868383613340565b935093505050612514565b60006002915091505b9250929050565b6000600481111561252f5761252e615450565b5b81600481111561254257612541615450565b5b141561254d576126ed565b6001600481111561256157612560615450565b5b81600481111561257457612573615450565b5b14156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906154cb565b60405180910390fd5b600260048111156125c9576125c8615450565b5b8160048111156125dc576125db615450565b5b141561261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490615537565b60405180910390fd5b6003600481111561263157612630615450565b5b81600481111561264457612643615450565b5b1415612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c906155c9565b60405180910390fd5b60048081111561269857612697615450565b5b8160048111156126ab576126aa615450565b5b14156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e39061565b565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612757906156ed565b60405180910390fd5b61277f336000866127708761338e565b6127798761338e565b86613408565b60006127896123fe565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ed91906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161286b92919061570d565b60405180910390a45050505050565b6128998473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612a4a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128df95949392919061578b565b6020604051808303816000875af192505050801561291b57506040513d601f19601f8201168201806040525081019061291891906157fa565b60015b6129c157612927615834565b806308c379a01415612984575061293c615856565b806129475750612986565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b9190613fe8565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061595e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f906159f0565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90615a82565b60405180910390fd5b8151835114612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90615b14565b60405180910390fd5b612b25868686868686613408565b6000612b2f6123fe565b600001905060005b8451811015612ce7576000858281518110612b5557612b54614e57565b5b602002602001015190506000858381518110612b7457612b73614e57565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90615ba6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccb91906151f1565b9250508190555050508080612cdf9061505c565b915050612b37565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612d5e929190615bc6565b60405180910390a450505050505050565b612d8e8473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612f3f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612dd4959493929190615bfd565b6020604051808303816000875af1925050508015612e1057506040513d601f19601f82011682018060405250810190612e0d91906157fa565b60015b612eb657612e1c615834565b806308c379a01415612e795750612e31615856565b80612e3c5750612e7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e709190613fe8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead9061595e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f34906159f0565b60405180910390fd5b505b505050505050565b600081836000018054905011612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8990615cd7565b60405180910390fd5b826000018281548110612fa857612fa7614e57565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290615a82565b60405180910390fd5b61304986868661303a8761338e565b6130438761338e565b86613408565b60006130536123fe565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e690615ba6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a591906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161322292919061570d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561326e576000600391509150613337565b601b8560ff16141580156132865750601c8560ff1614155b15613298576000600491509150613337565b6000600187878787604051600081526020016040526040516132bd9493929190615d22565b6020604051602081039080840390855afa1580156132df573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332e57600060019250925050613337565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061338087828885613233565b935093505050935093915050565b60606000600167ffffffffffffffff8111156133ad576133ac613bce565b5b6040519080825280602002602001820160405280156133db5781602001602082028036833780820191505090505b50905082816000815181106133f3576133f2614e57565b5b60200260200101818152505080915050919050565b613416868686868686613431565b505050505050565b600080823b905060008111915050919050565b61343f868686868686613447565b505050505050565b613455868686868686613702565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146136fa576000613492612398565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156136f457600087828151811061354757613546614e57565b5b6020026020010151905060008111156136e057600089838151811061356f5761356e614e57565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156135df578187600001600083815260200190815260200160002060008282546135d391906151f1565b9250508190555061362b565b816135ea8d8361201c565b141561362a576136148c87600084815260200190815260200160002061370a90919063ffffffff16565b50613628818661373a90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415613691578187600001600083815260200190815260200160002060008282546136859190614809565b925050819055506136de565b600061369d8c8361201c565b14156136dd576136c78b87600084815260200190815260200160002061375490919063ffffffff16565b506136db818561378490919063ffffffff16565b505b5b505b5080806136ec9061505c565b915050613529565b50505050505b505050505050565b505050505050565b6000613732836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61379e565b905092915050565b600061374c836000018360001b61379e565b905092915050565b600061377c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6138b0565b905092915050565b6000613796836000018360001b6138b0565b905092915050565b600080836001016000848152602001908152602001600020549050600081146138a45760006001826137d09190614809565b9050600085600001600187600001805490506137ec9190614809565b815481106137fd576137fc614e57565b5b906000526020600020015490508086600001838154811061382157613820614e57565b5b906000526020600020018190555060018261383c91906151f1565b866001016000838152602001908152602001600020819055508560000180548061386957613868615d67565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506138aa565b60009150505b92915050565b60006138bc8383613920565b61391557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061391a565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461394f90614bdd565b90600052602060002090601f01602090048101928261397157600085556139b8565b82601f1061398a57805160ff19168380011785556139b8565b828001600101855582156139b8579182015b828111156139b757825182559160200191906001019061399c565b5b5090506139c591906139c9565b5090565b5b808211156139e25760008160009055506001016139ca565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a25826139fa565b9050919050565b613a3581613a1a565b8114613a4057600080fd5b50565b600081359050613a5281613a2c565b92915050565b6000819050919050565b613a6b81613a58565b8114613a7657600080fd5b50565b600081359050613a8881613a62565b92915050565b60008060408385031215613aa557613aa46139f0565b5b6000613ab385828601613a43565b9250506020613ac485828601613a79565b9150509250929050565b613ad781613a58565b82525050565b6000602082019050613af26000830184613ace565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b2d81613af8565b8114613b3857600080fd5b50565b600081359050613b4a81613b24565b92915050565b600060208284031215613b6657613b656139f0565b5b6000613b7484828501613b3b565b91505092915050565b60008115159050919050565b613b9281613b7d565b82525050565b6000602082019050613bad6000830184613b89565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c0682613bbd565b810181811067ffffffffffffffff82111715613c2557613c24613bce565b5b80604052505050565b6000613c386139e6565b9050613c448282613bfd565b919050565b600067ffffffffffffffff821115613c6457613c63613bce565b5b613c6d82613bbd565b9050602081019050919050565b82818337600083830152505050565b6000613c9c613c9784613c49565b613c2e565b905082815260208101848484011115613cb857613cb7613bb8565b5b613cc3848285613c7a565b509392505050565b600082601f830112613ce057613cdf613bb3565b5b8135613cf0848260208601613c89565b91505092915050565b600067ffffffffffffffff821115613d1457613d13613bce565b5b613d1d82613bbd565b9050602081019050919050565b6000613d3d613d3884613cf9565b613c2e565b905082815260208101848484011115613d5957613d58613bb8565b5b613d64848285613c7a565b509392505050565b600082601f830112613d8157613d80613bb3565b5b8135613d91848260208601613d2a565b91505092915050565b60008060008060008060008060006101208a8c031215613dbd57613dbc6139f0565b5b60008a013567ffffffffffffffff811115613ddb57613dda6139f5565b5b613de78c828d01613ccb565b9950506020613df88c828d01613a79565b9850506040613e098c828d01613a79565b9750506060613e1a8c828d01613a79565b9650506080613e2b8c828d01613a79565b95505060a0613e3c8c828d01613a79565b94505060c0613e4d8c828d01613a79565b93505060e0613e5e8c828d01613a79565b9250506101008a013567ffffffffffffffff811115613e8057613e7f6139f5565b5b613e8c8c828d01613d6c565b9150509295985092959850929598565b600080600080600060a08688031215613eb857613eb76139f0565b5b600086013567ffffffffffffffff811115613ed657613ed56139f5565b5b613ee288828901613ccb565b9550506020613ef388828901613a43565b9450506040613f0488828901613a43565b9350506060613f1588828901613a43565b9250506080613f2688828901613a43565b9150509295509295909350565b600060208284031215613f4957613f486139f0565b5b6000613f5784828501613a79565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f9a578082015181840152602081019050613f7f565b83811115613fa9576000848401525b50505050565b6000613fba82613f60565b613fc48185613f6b565b9350613fd4818560208601613f7c565b613fdd81613bbd565b840191505092915050565b600060208201905081810360008301526140028184613faf565b905092915050565b6000602082840312156140205761401f6139f0565b5b600061402e84828501613a43565b91505092915050565b600067ffffffffffffffff82111561405257614051613bce565b5b602082029050602081019050919050565b600080fd5b600061407b61407684614037565b613c2e565b9050808382526020820190506020840283018581111561409e5761409d614063565b5b835b818110156140c757806140b38882613a79565b8452602084019350506020810190506140a0565b5050509392505050565b600082601f8301126140e6576140e5613bb3565b5b81356140f6848260208601614068565b91505092915050565b600080600080600060a0868803121561411b5761411a6139f0565b5b600061412988828901613a43565b955050602061413a88828901613a43565b945050604086013567ffffffffffffffff81111561415b5761415a6139f5565b5b614167888289016140d1565b935050606086013567ffffffffffffffff811115614188576141876139f5565b5b614194888289016140d1565b925050608086013567ffffffffffffffff8111156141b5576141b46139f5565b5b6141c188828901613d6c565b9150509295509295909350565b6141d781613a1a565b82525050565b60006020820190506141f260008301846141ce565b92915050565b600067ffffffffffffffff82111561421357614212613bce565b5b602082029050602081019050919050565b6000614237614232846141f8565b613c2e565b9050808382526020820190506020840283018581111561425a57614259614063565b5b835b81811015614283578061426f8882613a43565b84526020840193505060208101905061425c565b5050509392505050565b600082601f8301126142a2576142a1613bb3565b5b81356142b2848260208601614224565b91505092915050565b600080604083850312156142d2576142d16139f0565b5b600083013567ffffffffffffffff8111156142f0576142ef6139f5565b5b6142fc8582860161428d565b925050602083013567ffffffffffffffff81111561431d5761431c6139f5565b5b614329858286016140d1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436881613a58565b82525050565b600061437a838361435f565b60208301905092915050565b6000602082019050919050565b600061439e82614333565b6143a8818561433e565b93506143b38361434f565b8060005b838110156143e45781516143cb888261436e565b97506143d683614386565b9250506001810190506143b7565b5085935050505092915050565b6000602082019050818103600083015261440b8184614393565b905092915050565b600061012082019050614429600083018c613ace565b614436602083018b613ace565b614443604083018a613ace565b6144506060830189613ace565b61445d6080830188613ace565b61446a60a0830187613ace565b61447760c0830186613ace565b61448460e08301856141ce565b614492610100830184613ace565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144d581613a1a565b82525050565b60006144e783836144cc565b60208301905092915050565b6000602082019050919050565b600061450b826144a0565b61451581856144ab565b9350614520836144bc565b8060005b8381101561455157815161453888826144db565b9750614543836144f3565b925050600181019050614524565b5085935050505092915050565b600060208201905081810360008301526145788184614500565b905092915050565b61458981613b7d565b811461459457600080fd5b50565b6000813590506145a681614580565b92915050565b600080604083850312156145c3576145c26139f0565b5b60006145d185828601613a43565b92505060206145e285828601614597565b9150509250929050565b60008060408385031215614603576146026139f0565b5b600061461185828601613a79565b925050602061462285828601613a43565b9150509250929050565b600080600080600060a08688031215614648576146476139f0565b5b600061465688828901613a79565b955050602061466788828901613a79565b945050604061467888828901613a79565b935050606061468988828901613a79565b925050608061469a88828901613a79565b9150509295509295909350565b600080604083850312156146be576146bd6139f0565b5b60006146cc85828601613a79565b925050602083013567ffffffffffffffff8111156146ed576146ec6139f5565b5b6146f985828601613d6c565b9150509250929050565b6000806040838503121561471a576147196139f0565b5b600061472885828601613a43565b925050602061473985828601613a43565b9150509250929050565b600080600080600060a0868803121561475f5761475e6139f0565b5b600061476d88828901613a43565b955050602061477e88828901613a43565b945050604061478f88828901613a79565b93505060606147a088828901613a79565b925050608086013567ffffffffffffffff8111156147c1576147c06139f5565b5b6147cd88828901613d6c565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481482613a58565b915061481f83613a58565b925082821015614832576148316147da565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b6000614873600283613f6b565b915061487e8261483d565b602082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148df600283613f6b565b91506148ea826148a9565b602082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b600061494b600383613f6b565b915061495682614915565b602082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b600081905092915050565b600061499782613f60565b6149a18185614981565b93506149b1818560208601613f7c565b80840191505092915050565b6000819050919050565b6149d86149d382613a58565b6149bd565b82525050565b60008160601b9050919050565b60006149f6826149de565b9050919050565b6000614a08826149eb565b9050919050565b614a20614a1b82613a1a565b6149fd565b82525050565b6000614a32828d61498c565b9150614a3e828c6149c7565b602082019150614a4e828b6149c7565b602082019150614a5e828a6149c7565b602082019150614a6e82896149c7565b602082019150614a7e82886149c7565b602082019150614a8e82876149c7565b602082019150614a9e82866149c7565b602082019150614aae8285614a0f565b601482019150614abe82846149c7565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b0c600283613f6b565b9150614b1782614ad6565b602082019050919050565b60006020820190508181036000830152614b3b81614aff565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b78600283613f6b565b9150614b8382614b42565b602082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf557607f821691505b60208210811415614c0957614c08614bae565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c45601d83613f6b565b9150614c5082614c0f565b602082019050919050565b60006020820190508181036000830152614c7481614c38565b9050919050565b60008190508160005260206000209050919050565b60008154614c9d81614bdd565b614ca78186614981565b94506001821660008114614cc25760018114614cd357614d06565b60ff19831686528186019350614d06565b614cdc85614c7b565b60005b83811015614cfe57815481890152600182019150602081019050614cdf565b838801955050505b50505092915050565b6000614d1b8285614c90565b9150614d27828461498c565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d8f602983613f6b565b9150614d9a82614d33565b604082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614e21602983613f6b565b9150614e2c82614dc5565b604082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ee2603183613f6b565b9150614eed82614e86565b604082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000614f4e600383613f6b565b9150614f5982614f18565b602082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fba600283613f6b565b9150614fc582614f84565b602082019050919050565b60006020820190508181036000830152614fe981614fad565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000615026600383613f6b565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561509a576150996147da565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615101602983613f6b565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b600061514282613a58565b915061514d83613a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615186576151856147da565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151cb82613a58565b91506151d683613a58565b9250826151e6576151e5615191565b5b828206905092915050565b60006151fc82613a58565b915061520783613a58565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523c5761523b6147da565b5b828201905092915050565b600061525282613a58565b915061525d83613a58565b92508261526d5761526c615191565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006152ae600283613f6b565b91506152b982615278565b602082019050919050565b600060208201905081810360008301526152dd816152a1565b9050919050565b60006152f082866149c7565b6020820191506153008285614a0f565b60148201915061531082846149c7565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061537d602b83613f6b565b915061538882615321565b604082019050919050565b600060208201905081810360008301526153ac81615370565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006153e9601c83614981565b91506153f4826153b3565b601c82019050919050565b6000819050919050565b6000819050919050565b61542461541f826153ff565b615409565b82525050565b6000615435826153dc565b91506154418284615413565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006154b5601883613f6b565b91506154c08261547f565b602082019050919050565b600060208201905081810360008301526154e4816154a8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615521601f83613f6b565b915061552c826154eb565b602082019050919050565b6000602082019050818103600083015261555081615514565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155b3602283613f6b565b91506155be82615557565b604082019050919050565b600060208201905081810360008301526155e2816155a6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615645602283613f6b565b9150615650826155e9565b604082019050919050565b6000602082019050818103600083015261567481615638565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156d7602183613f6b565b91506156e28261567b565b604082019050919050565b60006020820190508181036000830152615706816156ca565b9050919050565b60006040820190506157226000830185613ace565b61572f6020830184613ace565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061575d82615736565b6157678185615741565b9350615777818560208601613f7c565b61578081613bbd565b840191505092915050565b600060a0820190506157a060008301886141ce565b6157ad60208301876141ce565b6157ba6040830186613ace565b6157c76060830185613ace565b81810360808301526157d98184615752565b90509695505050505050565b6000815190506157f481613b24565b92915050565b6000602082840312156158105761580f6139f0565b5b600061581e848285016157e5565b91505092915050565b60008160e01c9050919050565b600060033d11156158535760046000803e615850600051615827565b90505b90565b600060443d1015615866576158e9565b61586e6139e6565b60043d036004823e80513d602482011167ffffffffffffffff821117156158965750506158e9565b808201805167ffffffffffffffff8111156158b457505050506158e9565b80602083010160043d0385018111156158d15750505050506158e9565b6158e082602001850186613bfd565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615948603483613f6b565b9150615953826158ec565b604082019050919050565b600060208201905081810360008301526159778161593b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006159da602883613f6b565b91506159e58261597e565b604082019050919050565b60006020820190508181036000830152615a09816159cd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615a6c602583613f6b565b9150615a7782615a10565b604082019050919050565b60006020820190508181036000830152615a9b81615a5f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000615afe602883613f6b565b9150615b0982615aa2565b604082019050919050565b60006020820190508181036000830152615b2d81615af1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615b90602b83613f6b565b9150615b9b82615b34565b604082019050919050565b60006020820190508181036000830152615bbf81615b83565b9050919050565b60006040820190508181036000830152615be08185614393565b90508181036020830152615bf48184614393565b90509392505050565b600060a082019050615c1260008301886141ce565b615c1f60208301876141ce565b8181036040830152615c318186614393565b90508181036060830152615c458185614393565b90508181036080830152615c598184615752565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cc1602283613f6b565b9150615ccc82615c65565b604082019050919050565b60006020820190508181036000830152615cf081615cb4565b9050919050565b615d00816153ff565b82525050565b600060ff82169050919050565b615d1c81615d06565b82525050565b6000608082019050615d376000830187615cf7565b615d446020830186615d13565b615d516040830185615cf7565b615d5e6060830184615cf7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122070a523ab2c79fc0dac7c47f68ed21e72e433da6b7ff716ac513e8e6e0f6aaeaf64736f6c634300080a0033"; type CyberDestinationUtilityFactoryFacetConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts b/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts index a9253b9..9179edc 100644 --- a/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberDropBase__factory.ts @@ -235,58 +235,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x07d08ee9", - type: "bytes32", - }, - ], - name: "c_0x07d08ee9", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x1c93e179", - type: "bytes32", - }, - ], - name: "c_0x1c93e179", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x63bd0478", - type: "bytes32", - }, - ], - name: "c_0x63bd0478", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xfbe62a3d", - type: "bytes32", - }, - ], - name: "c_0xfbe62a3d", - outputs: [], - stateMutability: "pure", - type: "function", - }, { inputs: [ { @@ -827,7 +775,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b506187c580620000226000396000f3fe6080604052600436106101b65760003560e01c80636dcfd841116100ec578063bc01188e1161008a578063d61b0c8211610064578063d61b0c82146106b9578063db7fd408146106f6578063e985e9c514610726578063f242432a14610763576101b6565b8063bc01188e14610628578063bd85b03914610653578063c55bc56614610690576101b6565b806385bff2e7116100c657806385bff2e71461055c578063929048c714610599578063a22cb465146105c2578063b3a721d1146105eb576101b6565b80636dcfd841146104cd5780637e721e2c1461050a5780637f628e8b14610533576101b6565b80631b023947116101595780634e1273f4116101335780634e1273f4146103d1578063572b6c051461040e5780635c5ed16d1461044b5780636787d44914610488576101b6565b80631b023947146103405780632eb2c2d61461037d578063481c6a75146103a6576101b6565b80630b885ac3116101955780630b885ac3146102725780630e89341c1461029b57806313ba55df146102d857806318160ddd14610315576101b6565b8062fdd58e146101bb57806301ffc9a7146101f8578063081cdf1214610235575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd919061642e565b61078c565b6040516101ef919061647d565b60405180910390f35b34801561020457600080fd5b5061021f600480360381019061021a91906164f0565b6107a0565b60405161022c9190616538565b60405180910390f35b34801561024157600080fd5b5061025c6004803603810190610257919061673a565b6107c3565b604051610269919061647d565b60405180910390f35b34801561027e57600080fd5b506102996004803603810190610294919061683c565b611702565b005b3480156102a757600080fd5b506102c260048036038101906102bd91906168d3565b611c52565b6040516102cf9190616988565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa91906168d3565b611f02565b60405161030c919061647d565b60405180910390f35b34801561032157600080fd5b5061032a611f2f565b604051610337919061647d565b60405180910390f35b34801561034c57600080fd5b50610367600480360381019061036291906169aa565b611fcd565b604051610374919061647d565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190616a9f565b6120aa565b005b3480156103b257600080fd5b506103bb61213e565b6040516103c89190616b7d565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190616c5b565b6121f5565b6040516104059190616d91565b60405180910390f35b34801561041a57600080fd5b50610435600480360381019061043091906169aa565b6123ea565b6040516104429190616538565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d91906168d3565b6124d1565b60405161047f919061647d565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906168d3565b612a8f565b6040516104c499989796959493929190616db3565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906168d3565b612d05565b6040516105019190616efe565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190616f56565b612e0d565b005b34801561053f57600080fd5b5061055a60048036038101906105559190616f56565b612e10565b005b34801561056857600080fd5b50610583600480360381019061057e91906169aa565b612e13565b6040516105909190616d91565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190616f56565b612f19565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190616faf565b612f1c565b005b3480156105f757600080fd5b50610612600480360381019061060d9190616fef565b613091565b60405161061f919061647d565b60405180910390f35b34801561063457600080fd5b5061063d6132d9565b60405161064a9190616b7d565b60405180910390f35b34801561065f57600080fd5b5061067a600480360381019061067591906168d3565b613390565b604051610687919061647d565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190616f56565b6133b6565b005b3480156106c557600080fd5b506106e060048036038101906106db919061702f565b6133b9565b6040516106ed919061647d565b60405180910390f35b610710600480360381019061070b91906170aa565b6134ae565b60405161071d9190616538565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190617106565b61429f565b60405161075a9190616538565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190617146565b61433c565b005b600061079883836143d0565b905092915050565b60006107bc826107ae6144a3565b6144d090919063ffffffff16565b9050919050565b60006107f17ffef254261034bac9064db40beedeb00a21789bae83ec45bc6080e4fca2426c1360001b612e0d565b61081d7fc584978ecbf7f4704e8a6c75afa9a10d8777106982e4742d7b9a9fb050b9f1e760001b612e0d565b6108497f5aabdb124f9ca4049011380682b73c5aba0415d0b6116d74a5936c58a35ca00660001b612e0d565b6108757f6afc4d6b3a3c84d9b364f1db2f5dafef77606049c45c41c48cfaef751060c95160001b612e0d565b848989610882919061720c565b101580156108905750600085115b6108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c69061728c565b60405180910390fd5b6108fb7fe9ffbf293c2ece8ee79305d9a6169654a7114de20fbaa68f861f6f75b752ad7160001b612e0d565b6109277f56012c399773dff0cd88a94061dc268f3db0016fdcee340595b97ce0c748582860001b612e0d565b6109537fb23687ca5a0e8239f984dec4267314bbcf67d282170811e4aab4d2d902f7692660001b612e0d565b61097f7fbd655ca00a2f0e7d876088a0acef5228b23247051e49c2d510988e102818e44860001b612e0d565b85871015801561098f5750600087115b6109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c5906172f8565b60405180910390fd5b6109fa7f01f57b23155943a664cfaa9367f07726ecf66e9e7f1bce8ac4ef2b28fe7b5e1160001b612e0d565b610a267f5a5ff868374cc23468ae13dd5d7a7c3bbb93c7379a059ffa15dd5d0d187d764f60001b612e0d565b610a527fccd2f9b242b06b24c899dc8d1cfe38b93ffcf694a11954eb531198d13effe41860001b612e0d565b610a7e7fa429c21522614f6d2326281d0134cd1f5e5c607809039e8fa92050e196e7a7ab60001b612e0d565b6064831115610ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab990617364565b60405180910390fd5b610aee7fe5b07b507679869e644ae4d89250e627c69ebe49d9dc6d591022d65602f2a72c60001b612e0d565b610b1a7feb49b4bc135917d3d0a068ec641339e146c450adbb549f7a7a97227199537ad960001b612e0d565b610b467f69c49773801c26e65492db6becf8a9af3301c61ba87428f0072f8c515d17fb1f60001b612e0d565b6000610b5061453b565b9050610b7e7fd96c2209b43ebd27adb9b8d454c03023aed7f89b3e6c6fba5ec9473b2e96512c60001b612e0d565b610baa7fb6059bc2a3a24175da29dee344f09801f8025f845ff8dcb72b68914f56e749fb60001b612e0d565b6000610bb582611fcd565b9050610be37fb6b8ba1664bcdd06a237086e3df21c9094a1684859c1a0be2fb3b31376e0492060001b612e0d565b610c0f7f65c33ac1f818405eb21ccbffc8f7372a5f92d09c1d09f71f624881a0bc60ef8260001b612e0d565b60008c8c8c8c8c8c8c8c8a8a604051602001610c349a99989796959493929190617429565b6040516020818303038152906040529050610c717fb0f0fc74d4f27760a6129ff6e3984baf4f1a6a8f50f12ff84a64bd3cb4b854a660001b612e0d565b610c9d7f12d5ef002891a997a20e958d467723b1007bfa70e4d5b94b2a8fae41d25de08560001b612e0d565b6000610cc186610cb384805190602001206146d7565b61470790919063ffffffff16565b9050610cef7fce32dc2657a5bc8920c3fd6179fa0b81d0b72a12ce857566490fa877873fd62e60001b612e0d565b610d1b7f85b5165326d13dfcce6570613bf7f2a17076052a0a40dde7d3d1a9ed9b1c971f60001b612e0d565b610d477f3b8e97f61c78e340140d184a0fe7a34ebe88f0fd1fdc43c2749a3082c65ee2ea60001b612e0d565b610d4f61472e565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790617525565b60405180910390fd5b610e0c7ffc5e894c94eeebb6e9b99f75e31ec7d87694ac11a2d5dc87a0c54ac42e56297360001b612e0d565b610e387fe080625441c7fc6a865482c576631cb31e16f4471d36662ff675e41a6a8115c860001b612e0d565b610e647fa0c41b33ac1e6023ce33960326f78eb948b36917a5dc0ab90336f9da02822e2b60001b612e0d565b610e77610e6f61472e565b60020161480c565b9450610ea57fa5a39150cde7b6bec617db96fdb3907b046d412db6428300fda2be60ec920e7260001b612e0d565b610ed17f8c1f28878abcd7f5215e2889c22f16fd0a7c473485c5b3380d4ebc3ef884f8f060001b612e0d565b610edb858f61481a565b610f077ff8ab2e932d29a1bccd65e972ec2dd09beb721a480ce72be84e8cbd8de77f57d660001b612e0d565b610f337f28b209e8fc0e5a2b56efa3da9d8397ef7b289ecad64ccae57f3f3d42b709776c60001b612e0d565b610f46610f3e61472e565b6002016148d3565b610f727ff8490bd99ce937b95ccd28092392faaef7eeeab3201b9fb16a6c24ba8c69896260001b612e0d565b610f9e7f8008bd1e507769bf54e202251be9733f09582f1c743bbf8673af2f9b29140df260001b612e0d565b610fee610fa961472e565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206148d3565b61101a7f2dc781920cb5e33aae4a8393b7a3a53337652ba8a35e2b56011f5744efabf05760001b612e0d565b6110467fbcde70b63c4d9dcfd9ccaab415d2b97128f066f3c437c3316f45fb908db685af60001b612e0d565b8c61104f6148e9565b6000016000878152602001908152602001600020600001819055506110967f427678b57a36ffce221a8c890b7ff9f36f0bc86bb2a3036d6cb9630cbf428ef660001b612e0d565b6110c27fb9f070b89da27f36f99202b12db2829dee6fad361ff7070dfc84615e283b142260001b612e0d565b8b6110cb6148e9565b6000016000878152602001908152602001600020600101819055506111127f7b5a3100b111440497f36007a416128bd4feb074ab6fab0127ef1a5150ee994960001b612e0d565b61113e7fea7c557d03a267ff27e741d3447c1731806b6d0d3d91d30a0b1fba3301efac8360001b612e0d565b8a6111476148e9565b60000160008781526020019081526020016000206002018190555061118e7f805ce5561d42393aeafd5a5a3e66a1d9961e80070ac06d4a59c517533a9fa79f60001b612e0d565b6111ba7f967deef564515d9a9439c1186e9c6bdaad59640d59757ab377cbb8c790b5461f60001b612e0d565b896111c36148e9565b60000160008781526020019081526020016000206003018190555061120a7f447a73adc4607b190dc90a59146f6a6d6cbb6beb8113f29a4324be1949636fc860001b612e0d565b6112367fd690c115448555e2c7d90dbb18369e4436b23809c2b9557058fe64a3653bf3ec60001b612e0d565b8861123f6148e9565b6000016000878152602001908152602001600020600401819055506112867f4d52a2155da3ba950323800a3c8155911f968d70dea9c34fd778912ee5e35d5460001b612e0d565b6112b27fb3d331c3453ca7536961a249a22157c030746ff898bfdc12156b0ce4bff9400260001b612e0d565b876112bb6148e9565b6000016000878152602001908152602001600020600501819055506113027f37df8740ac51046d6d45b70d1520d405142374089999b994876fbd32ff0496eb60001b612e0d565b61132e7f0c13f6719fef45381e50816916a5eab15a6c5adbf0f919e1dfa99dc58782710e60001b612e0d565b866113376148e9565b60000160008781526020019081526020016000206006018190555061137e7f85c9b0dfbea7e9efacdb920f67d01ffded6d823c166063d314aea49e03b480a960001b612e0d565b6113aa7f0db3728cff6bf4d259a380e523c94be99525a8b4e1b9386596a02e5f8828780160001b612e0d565b836113b36148e9565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506114347f69875017d86bc248ae1b52571b1c657618960bd48c796d6de92ebf75a0189b8860001b612e0d565b6114607f782fbf49717d6af7f3d1c6315f9c20ab3d02dd60e5fc0a9476b07b2c32e1b42d60001b612e0d565b61148761146b6148e9565b60000160008781526020019081526020016000206008016148d3565b6114b37fe14bc2d6b10facf2a5265c82476a2e0fd8c016815075f4302f59540d56e1e30660001b612e0d565b6114df7f13524a23719e903d0cace00f5d7a54f518f18c51d69f9efaf06d8b5ef8bbb16860001b612e0d565b6115436114ea6148e9565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206148d3565b61156f7f372ca61bbfaf1e294402597498b99366b4e5fb2f2e128ee253213d67229b6cc360001b612e0d565b61159b7f55209cb5e3c63fe0a67b528b111d15216de2196c517c0b8d805e556909fb6e8560001b612e0d565b6115b784866001604051806020016040528060008152506149c7565b6115e37ffe551f4c9ce42abc2d789e22e8bad622fabe318e230d04433c0e73c8ca0532e660001b612e0d565b61160f7f1c02cd8b6b383cdbe8bc49b3d0abc3c361b50f5d77e2aaee99b65819cad9e2ae60001b612e0d565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a361167f7fe538ed482a6203bb8f8989a475a198a2683d1b382121135ccd5507773b1c9fad60001b612e0d565b6116ab7fea10a1d343ed3bf0d46c880a8e3a7f7f95189023771924450457b9ab51a5ff5460001b612e0d565b6001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b61172e7f76959acc5804dd7d58983a7553c8dba5d4aaa668103e7d29c4903cb21496dcd660001b612e10565b61175a7f01c3110384d2631b65d18d50de1c2c4882530eff4188f212e7a1b564a93885c260001b612e10565b6117867ffb264934f994ece14b386fc0be186c58f27ab7f1d9ed0c2dbf61f0a41d8a295960001b612e10565b6117b27f9cb49303e2d57393fee370e71e080720e1e38459d90cea9772f03f0266c0e62260001b612e10565b3373ffffffffffffffffffffffffffffffffffffffff166117d16149e8565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290617591565b60405180910390fd5b6118777f55910367c443c4713b200bdd68889a2360c09fbd998b1c8cf51a36cbc450df4660001b612e10565b6118a37f574e953eada5dcc747c84e5bae85f4417425c6a4144c50b087e5174dac600a7d60001b612e10565b6118cf7f59008a8f1d50584095ce216266c7af2cef3efa9b63497de53503ca94cbb9b24a60001b612e10565b826118d8614ac6565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119457fa43cd7f41895ca0e17994fcb94d0fa5858e27f48ed0cd8ff02384394fd8a33c160001b612e10565b6119717f4c55aa82e1408c3340ff78033cda644766212f0e1200ccb38a693deddd5bf52b60001b612e10565b600161197b6149e8565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550611a307ffde6ef2df36beaa4210510184a6841e267657f7750bc29c444fba3d35a9810fd60001b612e10565b611a5c7ff406f6747bf4f701495660cd6812670c94badcfce31f42f58c1a6ad20e1f572060001b612e10565b611a6585614ba4565b611a917f80e6b81cce390388429b4ad92d0c729633ff92a3b39c78ee557fd91eb505209960001b612e10565b611abd7fc60cf584725fea684c7294500e23761ffb83d0e20d21258a85759499dabae46060001b612e10565b83611ac661472e565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b337f7e0e6eb23f676c5a5a42ee84ce743919a30e108fc44bb1c5d3c6fd6cf837ae0d60001b612e10565b611b5f7fec467f686f916ec9604b7468465856c1c83ef57259fe9a6fc260464c09a9838a60001b612e10565b81611b6861472e565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611bd57f9e58434cd253e39e7c0dcf96fd15b5771bbf82fa978270dba3fa5846389094f760001b612e10565b611c017fb833af1db132e6c48f679f2773d6972f1fd6f56f1d6a65223235341ebf42c0fa60001b612e10565b80611c0a61472e565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6060611c807f312c43f47f4eed00c2a0b91e8c512ff2a8a6ab31cfcf320fe38743297a84416560001b6133b6565b611cac7f9c3c1ecfda0c420cdb4793ff47d81b2024b9c0524c831d5acca5ee9a417999c860001b6133b6565b611cd87f23f1c05e588c25ff8dc9f56733243455c53fd3f85640a1df8a15214915819a4760001b6133b6565b6000611ce2614c4b565b60000160008481526020019081526020016000208054611d01906175e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2d906175e0565b8015611d7a5780601f10611d4f57610100808354040283529160200191611d7a565b820191906000526020600020905b815481529060010190602001808311611d5d57829003601f168201915b50505050509050611dad7f4dee7afd3e91d4c6c6a94c90162a094b064920d9387a82da1c6d064e1fe3cc5060001b6133b6565b611dd97f6112c02f84912af5ab2789cbd18d5abdc3e73d6ced049ff97b0e60a19eb9de3560001b6133b6565b611e057fa6cdec03e4644662815e7cbaf832198029c29d5fb0e11816137478e1a840ec4060001b6133b6565b600081511415611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e419061765e565b60405180910390fd5b611e767f9ab49bd638b9455b7f2e64130ddf4f233b0a3b80acefe8f789372c3efa97af2160001b6133b6565b611ea27f0a4123bd8c1b08089efacc9338be8a7f6bf7ab4c4bee8a86043851bce1caff0060001b6133b6565b611ece7f6ca6f9766d48accbefcfdddb403c058cfc26b1911cd85d1a45c019eb23605e6b60001b6133b6565b611ed6614c4b565b60010181604051602001611eeb929190617712565b604051602081830303815290604052915050919050565b6000611f28611f0f614d29565b6001016000848152602001908152602001600020614d56565b9050919050565b6000611f5d7f2fc13f8ae1ee464f2b1e0b2f0fa17ab0a3c67d2e59a3321e0238afc1125a862860001b612e10565b611f897f610b1218449889738b2ada69c63c730827be1550a5a589e7adfd1f5b0904906860001b612e10565b611fb57fb1b4425ba2edc5e6861c5e74be5501cbd40bd6afc6403772bc96536307ec385f60001b612e10565b611fc8611fc061472e565b60020161480c565b905090565b6000611ffb7ffa4f644143e5873afd934d08b4d252115745c55c98ad2539d9fddf23d8caa43260001b612e10565b6120277f1a7281130aca2e54851f40a6a951452f1a5044852232c04dbb986e289f08cfd760001b612e10565b6120537f4850a17edabc25661db4dc58012d9c932f58b3ab3facff40733e9619760ef0c960001b612e10565b6120a361205e61472e565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061480c565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806120ea57506120e9853361429f565b5b612129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612120906177a8565b60405180910390fd5b612137338686868686614d6b565b5050505050565b600061216c7f97137defe44b8ef40f073d89a187cce75036a52cfb6d5ec319d36343c60108bb60001b612e10565b6121987f208598a720e6421a1798a94c5214991ef546a92770f360775929f77a3190518160001b612e10565b6121c47f2a09b9827ab94682f5e7b891ae3b8c5ce41cae475dabb6b94b9161280a7b6b2560001b612e10565b6121cc61472e565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060815183511461223b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122329061783a565b60405180910390fd5b6000612245614d8f565b60000190506000845167ffffffffffffffff8111156122675761226661656e565b5b6040519080825280602002602001820160405280156122955781602001602082028036833780820191505090505b50905060005b85518110156123de57600073ffffffffffffffffffffffffffffffffffffffff168682815181106122cf576122ce61785a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561232e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612325906178fb565b60405180910390fd5b8260008683815181106123445761234361785a565b5b60200260200101518152602001908152602001600020600087838151811061236f5761236e61785a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106123c5576123c461785a565b5b602002602001018181525050808060010191505061229b565b50809250505092915050565b60006124187f7ca6e663761a0f614c9082f178ff07503394851964914930828ae2ff86481d8e60001b612f19565b6124447f8aad3e92e7373d91f82323d355a587bfc96329cc3e91a9528217e4c84bcc063960001b612f19565b6124707f3b4e5d1c2b996ac6c6720bcd7c27922338083696d2a3f25c32b5fece8475bcae60001b612f19565b612478614ac6565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006124ff7fdbd748bedd58cd351cc9aaa0fc0b7cb7d9b05fad440bc5e722107137a5bd099660001b612e0d565b61252b7f87d07511fcc54e38c625feabb25a539894a6f03945e2ad64e92d2032434b88e260001b612e0d565b6125577f2d6e45b7cac3840f2a5d0e1d5f978f8988b9b3a295b437644fbf44f919a8c75360001b612e0d565b60006125616148e9565b600001600084815260200190815260200160002090506125a37f3f0d3dc647efedb6521e3948ce812346577280ab972ccb8c350cc9452ac3cc8c60001b612e0d565b6125cf7ff6c7e0f3a8a0eea983b8ea6e7f11ffc811f3dc54651ae93f57a8ca3136d0ed4360001b612e0d565b6125fb7f93b6dfc1ec251c8c5c67a3d52729a394b28f2e7c570933ea48b4237c8ba4d52360001b612e0d565b600081600201541415612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a90617967565b60405180910390fd5b61266f7fc3b0fe2f21b94e38a2e64011b6777d5167e5372ff0b2badc67fe1b7132a7cf3960001b612e0d565b61269b7fc52c3484f879068a55bba65d503c332e02f233ad41b97699ea9dc5d368acc78e60001b612e0d565b6126c77f1dac8be127de616dfdf8b893580f0f37bb7eeb3e6369132e3b215bce3c2ad6e960001b612e0d565b6000816005015414612805576126ff7fd2e4691fae2fb1ec8e7002e0db37a84917021cf9de16f21a33a9cbd930cce53360001b612e0d565b61272b7f6465ffd7ff9099b160bf7f6f0ff7adb0fd4cba6cff50a75a3ab05c432e37584a60001b612e0d565b6127577f324051335733b0ff0bbe597a62f8a83556984ba3d366eb9c0e6edc29bb3d5a8c60001b612e0d565b6127837fbd85d713b3ecd1c6b7f8724c8b03ad04cb14ab14311238088d189a2998c1ff3660001b612e0d565b80600501546127948260080161480c565b106127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb906179d3565b60405180910390fd5b6128007fda60529bfb9986c98acd273f635686d8f7b73b6f583614cbdc820a7a58964a8c60001b612e0d565b612832565b6128317f7d2ef82a534bdad4018b46485ab5ca1b8d6199d565fc485c9fc955cf8315650160001b612e0d565b5b61285e7fb0294875c6cc08a345ea42b9646225a786377b4c6f373ca6e5c1e83170691ffa60001b612e0d565b61288a7f8ef13eb5f927e493009b674a2d591d4edf2deed7446b1bc73fec86b82774ef6860001b612e0d565b6128b67f3277415fe543398c4684af668eadafa6dac0e216ec938554ca660d4f6590361d60001b612e0d565b8060000154421180156128cd575080600101544211155b61290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390617a3f565b60405180910390fd5b6129387f47d1371d81b2dfae19008e1446f17c094119b8e80f43e7faf7c0d36c0a79bc3960001b612e0d565b6129647f5a54c035f36d106764ab8a16f94ecc6541f4a99e1a3f6672a7d947269b95a1ec60001b612e0d565b6129907f37dc2fc9d219cfff2f7d3e9cacfb859d74313cff97c8573e82bfddcce36bc52560001b612e0d565b60008160000154426129a2919061720c565b90506129d07fe9f5dbd7c9c9b9dc1f8efbc13fb0c02a1028c73d5fdb06f3af09ecf913a691bb60001b612e0d565b6129fc7fe80755f6fb225c316f592f29da79db79f968935adfc2c4b0a1c396037c8379ae60001b612e0d565b600082600001548360010154612a12919061720c565b9050612a407f77e4ee5346abf5b5d88d42a9ab8a6e4667b53e015b1edefa3c10e8599591241b60001b612e0d565b612a6c7fbc613c02241742596ff7822714453fa8a7fd655883df187aa440fb4faa8a38aa60001b612e0d565b612a8582828560020154866003015487600401546133b9565b9350505050919050565b6000806000806000806000806000612ac97fe8a5af4e439f02224da033277a50ab5279802b43087c27f372488d6423946ff760001b612e0d565b612af57f5487a9c3f4a6be99907c28a523b37d3836a9af8930d871758cb1e2b9e63bc66160001b612e0d565b612b217f48ddcf1b678145f3268d96f945fd461e5a4326ef88837141519aef52c51ffee960001b612e0d565b6000612b2b6148e9565b60000160008c81526020019081526020016000209050612b6d7f8dbe65c6881692a6776899f280065952dc2df69d72fe07395c338dcc973a490960001b612e0d565b612b997f47b941210197f2efd58d1304cae8f37ab1c986ec3fb529211f9686c6fcacc3a760001b612e0d565b612bc57fb0469c1f5adfed701fba68d5d126e5e8ec03403ef713dfda43e52734cdccae9860001b612e0d565b600081600201541415612c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0490617967565b60405180910390fd5b612c397fa68513e6f67f026cca3cd16f744f770d6aa54e70bdd9db5ed90e954b349a7f6f60001b612e0d565b612c657fb8ecceab63ff293d4c2ccbdb4eba26bb05c05de4269141e23d78488d9f660fcb60001b612e0d565b612c917ff5d4b15f45d20693747daf6cb337d95c90d9883bcf518c7c5aace37f5c19256660001b612e0d565b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612ce58960080161480c565b995099509950995099509950995099509950509193959799909294969850565b60606000612d11614d29565b600101600084815260200190815260200160002090506000612d3282614d56565b67ffffffffffffffff811115612d4b57612d4a61656e565b5b604051908082528060200260200182016040528015612d795781602001602082028036833780820191505090505b50905060005b612d8883614d56565b811015612e0257612da28184614dbc90919063ffffffff16565b828281518110612db557612db461785a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080612dfa90617a5f565b915050612d7f565b508092505050919050565b50565b50565b60606000612e1f614d29565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000612e6c82614dd6565b67ffffffffffffffff811115612e8557612e8461656e565b5b604051908082528060200260200182016040528015612eb35781602001602082028036833780820191505090505b50905060005b612ec283614dd6565b811015612f0e57612edc8184614deb90919063ffffffff16565b828281518110612eef57612eee61785a565b5b6020026020010181815250508080612f0690617a5f565b915050612eb9565b508092505050919050565b50565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8290617b1a565b60405180910390fd5b80612f94614d8f565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516130859190616538565b60405180910390a35050565b60006130bf7ffa26a7da27c0ac06ac7805887f2377614da761287f2f7c3a4dc6abc18eb5473b60001b612e0d565b6130eb7f94d85335309ff28be4aa749f1808264193e61aaa98a6c3ad981cab613330b94960001b612e0d565b6131177f867529e2ffd01a03b7646d7b25c07931641c80ff9c1d33df57e95c401a39f0b560001b612e0d565b60006131216148e9565b600001600085815260200190815260200160002090506131637ffcaa8f30a2501929c504af414955562b187a03a3fbef2540414642f43b2bf0b460001b612e0d565b61318f7fb5fdf3ca75f9f25deb6461c7e36dda453f09d0c5ec33c02845676511a0a620e260001b612e0d565b6131bb7f64092fc04b74608d5fbdfd925076b6f0d9dce2f52f72687bee3fd2265dbd26a060001b612e0d565b600081600201541415613203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fa90617967565b60405180910390fd5b61322f7ff44c2fce1b667441bdce1aa5e317ce4e059c4be792145f244950392c19c90f5c60001b612e0d565b61325b7f4e961061e1b66e4d007d7ea686f1efd64b12e1f0daa709c60157b5c7e270e8e760001b612e0d565b6132877f56b4bbe6761ee9daa28e614611acd1aeefec4b71432acebe303e72cf7199ccc660001b612e0d565b6132d08160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061480c565b91505092915050565b60006133077fc7bf4d9de951de2382a329515d163c8b3de60b5ec9513e3beb9c0779f70fa8cf60001b612e10565b6133337f607acc0e7f5b80faa103c94ffdc8845d15f77dcb52635e930cdc0c13e5465fed60001b612e10565b61335f7f0165c996af12bc8835cedb815a581af458d067b5bb9e5b20b6185ee555a82a1f60001b612e10565b61336761472e565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061339a614d29565b6000016000838152602001908152602001600020549050919050565b50565b60006133e77f467e8534352d8ba04feb9309024ec928d7fcca8fefcae69a9d81b84da5074e3b60001b612e0d565b6134137f42552ebb707a13c6433ffcff968f267f1b1c67dbd87aae42c0ac206fd7b4cb3a60001b612e0d565b61343f7fff36ec40513fb6615e5a6da1f53a00a33167b7ffa9c0c08f8c8b32377d978d5360001b612e0d565b84838561344c919061720c565b876134579190617b3a565b8486613463919061720c565b848961346f9190617bc3565b6134799190617b3a565b86886134859190617b3a565b61348f9190617bf4565b613499919061720c565b6134a39190617c4a565b905095945050505050565b60006134dc7f1a0bc5712cf21f15ffe356effc6be38ee5e256049652db55e362e0cb02fbcd3360001b612e0d565b6135087f9556cf658fc9edfafcd4cce3a2bba017014a52c41f5c122233cb5f27045f8e5760001b612e0d565b6135347fd09a93ae0b33bae90200104ccea2eeea9260431e57c2b6d9b2512c81489f220960001b612e0d565b600061353e61453b565b905061356c7f0a96915e921ce1bb9dff109ae233ac4462ceb9ef2568ceae98430347f727d54860001b612e0d565b6135987f4993b2d38321c91c5694ed34ac6b4fc75a66f0186add52a9c8c4e7a80f5632d360001b612e0d565b60006135a26148e9565b600001600086815260200190815260200160002090506135e47f2db17f44d2f4f466e8c646f303e33a3e7c507cab6b4ab7ee21b161e4bf50aa8760001b612e0d565b6136107fa2fdc2d6b76ce882a2b1c7c9e4dc0db249a4107db825384998b8c812edc5778d60001b612e0d565b600081600501541461374e576136487f9297c12ecb998c58f523d14c3630cddd6e9a47dddbc3e5670dd90483aa6a6e6260001b612e0d565b6136747fd67931535a3386d2df57da321007065fc1b0ff5843e08803d5ada4777ec05cfe60001b612e0d565b6136a07feb63e0b74550ee850541a4b43bcb50d1718d25f3c1fc6e07a70be2df53b3217960001b612e0d565b6136cc7f8860f6cf9b547ada5d33edb8c755b7622918c397e73be151799ae47e357c022760001b612e0d565b80600501546136dd8260080161480c565b1061371d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613714906179d3565b60405180910390fd5b6137497fdfefd62cfcd074d6cec2a70941a72b4db89062098859306fb3b626f97dac509060001b612e0d565b61377b565b61377a7f6eb419f4ef571ee69565f93c0614977e2c78d1082f3b11e6faae7bfab4d7d4af60001b612e0d565b5b6137a77fe6bd9eab0fcdc8dd0393fb7687b25c92bbf481cb9f8171f7a38b25336a9f5aa260001b612e0d565b6137d37f0c6ef021f5f8c4c1d04414a030b0d3b29d069f80c50fe04b8fd9c4c958ed2e0660001b612e0d565b6137ff7fca48105f8ccb5c8f371268598674f88c9427da131aee83b6bcb5203b108989d160001b612e0d565b806000015442118015613816575080600101544211155b613855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384c90617a3f565b60405180910390fd5b6138817f84b3a30e3aaaad891b6476fac1c1ce092f7377c3af53bd4968bf7584f8ed5d9460001b612e0d565b6138ad7fafac73132aea02f543d24463034fe220de761a3855acbcdb8b0ed5ad866cd4bc60001b612e0d565b6138d97f95d7dccdc85275beeb84cca0514066e29ae2c008d87247aa57d5525ffe6415af60001b612e0d565b60008160000154426138eb919061720c565b90506139197f2bd2a43d6c3fbb552ae634a9cf117bdd370c1c0452d406ff78d337a42aafc8d160001b612e0d565b6139457f8388d7d8641f292eda9f643d2a3824b14a200164b771b206f502a79db76ff32b60001b612e0d565b60008260000154836001015461395b919061720c565b90506139887ecb9e931eeac8a3060d2111d1528ac97fb328698d73f00d32df883fa71cc22e60001b612e0d565b6139b47fcb0a4ab5a3a709d23815a0cc8946278ab53567900be8f410189e9df1c188265060001b612e0d565b60006139cf83838660020154876003015488600401546133b9565b90506139fd7f2671c493662477f9138cf0caf3de07279e3d88bb22dd8e760b95179c36347e7c60001b612e0d565b613a297ff5e0e2c4a1f649b6261ceae6d7af54c90aea94ed25a21079a64af5ae30b5f86560001b612e0d565b613a557f45038e8372fde8d00740a9af5a28c467ff690756fa2228608288d7117526468d60001b612e0d565b80341015613a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8f90617cc7565b60405180910390fd5b613ac47fb99e15263fee06f285aa82d0590f86b64a774ded68dd56fa792be386ba2dff3960001b612e0d565b613af07fcea5f77e8e6fe64ec9d03e19e08dafbe6f36208be6a8bc76dc8992941dace0c160001b612e0d565b613b1c7fadc34614713e8a678778d6e7443e528a69db973d57e13075306b0d62bdd562ac60001b612e0d565b60006064856006015434613b309190617b3a565b613b3a9190617c4a565b9050613b687fc1867565605dc569e134fee7c94576cd28efef42e5f2496102a2c9066fbf279160001b612e0d565b613b947f1a4bb91bd12f72508e757059a9641a27720f734c35864dd6567c1dc2b7048fa560001b612e0d565b60008134613ba2919061720c565b9050613bd07f1ae67994343a150b53f1a8665ba5d89c05efd46b78d681185e4e8ec6db12b13a60001b612e0d565b613bfc7f1770c47a621900aff2a3654e052089173ced90f384b3388fa8cf6eb17368bb3e60001b612e0d565b6000613c478760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061480c565b9050613c757fa9f0fa1149526d518740884046d951680b4a8c8b56343df1c9fe157319c6bf1a60001b612e0d565b613ca17f15db6d0424921ba08d952170d401e6dbbde2ffad68d82fd8e96bce2f25c054b860001b612e0d565b60008b8983604051602001613cb893929190617ce7565b6040516020818303038152906040529050613cf57fbde68610edece319f0c734dacb5c71c244ca8355565eda2f1cc462b6ea7d9f1360001b612e0d565b613d217fcf4ebaf86cc5878f3c197d966d95eb8abe3205584511d4025bc09d4831bd952a60001b612e0d565b6000613d458c613d3784805190602001206146d7565b61470790919063ffffffff16565b9050613d727e0c1e0208a83ad0c8bdf511888c733d08452faf2edb2e8651cfaf82ee0571fc60001b612e0d565b613d9e7fe717e93d298956c9588ab8f07146f5af81795f7be948f46f5f8b01e17a760d2a60001b612e0d565b613dca7fefbb91477106384cde2a0c3bb291afc38600957adaa2242d8dfe31ceb84778fe60001b612e0d565b613dd261472e565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5a90617525565b60405180910390fd5b613e8f7f51661d87ff3dadec09005108334ba343b2f51dce9a09ce8e2fee4558d5247c7f60001b612e0d565b613ebb7faa0c3b1ee34f2a4375be328025f1890701397b70b1250e4f62255fcac543ab2960001b612e0d565b613ee77f6a91c3c8c7494c04964741fd0901d0f2d14e1992b6aa8d8c39e334fd538edb4360001b612e0d565b613ef3896008016148d3565b613f1f7f1106ae168cb91cbd1ea6e5cf2f9c61842c0059249b5ee05474bbc2b99f8e466560001b612e0d565b613f4b7f8d774324aabda0627bcc1239bcce6ee170958556fbb7d24c831fdb134fa3522260001b612e0d565b613f948960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206148d3565b613fc07fa957eac5cebc2c1f29ec1521b9f962659947f3050a20a2bfa217811afd3854fc60001b612e0d565b613fec7f876c0988c120574709032973f531c303d92925c8cb10c272e6aa611f81a8e62060001b612e0d565b6140088a8e6001604051806020016040528060008152506149c7565b6140347f6ba38d6297457146f8d16b1fbd1a98b39780979ac7f89eb6da84fafbbc0c219e60001b612e0d565b6140607f48c5e3ccc7e77125625395ca7e6d39b6ea2901eb68abde350939b1112f0e0fc160001b612e0d565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156140ca573d6000803e3d6000fd5b506140f77f9ac51f0cbe86cbef4849ddb20c451ddd33b0653019f6c0973458611f5721834260001b612e0d565b6141237fcb4980c535a9850042d645dbbaad9aeff49d65b78d3ee55b58d12b1a687783eb60001b612e0d565b61412b61472e565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015614194573d6000803e3d6000fd5b506141c17f32485977772f9ad6ebae13dfbc40f6f0009c657716c1ff71265d0047384e25d260001b612e0d565b6141ed7fb5d3bef5338356a23dfcde40c5e4441fd29980e4d2b00f5834752d2666f70c6d60001b612e0d565b60018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a461425f7f189d29ba560835342b354d49bbf2a33dd887f8330998ce4a22f0af009e5c71d860001b612e0d565b61428b7f58344b96709b709bc6fef55f144a0d1a49dc6058486a0154310d529f27c2a62660001b612e0d565b60019a505050505050505050505092915050565b60006142a9614d8f565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061437c575061437b853361429f565b5b6143bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143b2906177a8565b60405180910390fd5b6143c9338686868686614e05565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161443890617d96565b60405180910390fd5b614449614d8f565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006145697f88f29638fa65ae63a841285179c25a2e39ced6d390f74256094dd2a735b4027660001b612f19565b6145957fd1328846b45aade881fe5353aea2a4c719af9da68bc5171168583cc13155431460001b612f19565b6145c17f7ed86c48a0f81ef7874eb0d2d3f21b0e65416b91c4c9f816a0589566b5ba09e360001b612f19565b60186000369050101580156145db57506145da336123ea565b5b156146475761460c7f070f7f2b2922ac8abb388507c63d261a8e7c8fc39014856f8ba03bdf0984e0a260001b612f19565b6146387f572eebcddfe593539ba8aa5956472f6ac47b18bd757da058e419e5f60d92340960001b612f19565b601436033560601c90506146d3565b6146737f049f00aa6d96a4574a36ae1b2039ae5b66d97456b939a9c927c84997c029175560001b612f19565b61469f7f0251339121068447d4c576c5e96b821e81d1da157c7c6da93224ac2005db84c860001b612f19565b6146cb7ffae7111910251cf097d73c9503b05824f9222f1178f4c4f6fd670c2b76459f1560001b612f19565b3390506146d4565b5b90565b6000816040516020016146ea9190617e23565b604051602081830303815290604052805190602001209050919050565b60008060006147168585614e29565b9150915061472381614eac565b819250505092915050565b600061475c7f22989ab266127db139a475327f255a7cbdd8f4dcc1504e600dce7366519f266c60001b615081565b6147887fad5e44193be1059dfdffe9ac6c6f3af73928f60ac167740b45d14ca0f77703cc60001b615081565b6147b47fe345fd94e4db779611a270161ffac772f81575bb475f1d42c7b8aac50c26c99760001b615081565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90506148057fedd75a57aad4d39568d96afe62dad6399b99e6d5ce59343e0e1d06daf02aa7d360001b615081565b8091505090565b600081600001549050919050565b6148467f83beed3ed19f3f5bfb7572c3835676b72c274d00ed094c05f59e63c8ab88a84060001b6133b6565b6148727f6369348c2178daa645f0bf939f1a6678aa7569c2b9cd0fde0692d9e6a32b54b660001b6133b6565b61489e7f5872f937c02b64516677c99c18a6bb89e7471cab449621203787d44f6efe2e7060001b6133b6565b806148a7614c4b565b600001600084815260200190815260200160002090805190602001906148ce9291906162e3565b505050565b6001816000016000828254019250508190555050565b60006149177fcbd6a87feadf8bc6d18a7e4d3dce6dea12857618c537b87a82537ff45dbb94b360001b615084565b6149437f776cfd16ce6d3511350000a04752b2abc52815f973792fc79403090e385a2abd60001b615084565b61496f7f1acc6ee66986e06ec5b2aab054e955ca5a1313b484283bf79dbef6e5d3e14be160001b615084565b60007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990506149c07f4d39dc49b0d6cf786271a7bfc8fd46388ec159f0027f61fc98852b25ce303dfa60001b615084565b8091505090565b6149d384848484615087565b6149e233600086868686615211565b50505050565b6000614a167f499a2370464f33cfc8e2ef033f579272af11ed73cc8753c9cbc6f13fb4872e9c60001b6153e9565b614a427fd098f0bcaca6285a9ced2563c95781bc2f3fcdbf7c01993459cfa5c977f104a760001b6153e9565b614a6e7f8b6492a6876bb38cd0913d978cd1674f72509ad53daa743eb10fa4a5b109542160001b6153e9565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050614abf7f8734688ce7e316775a7605f64173dd1a8314018c64251ca9b5f78aaedc1b1d0360001b6153e9565b8091505090565b6000614af47fbf28b4c694d70043cdbba1139d13e89322d9971fc2604eec0c38e355815d0bd060001b6153ec565b614b207ff948c5bcd8a8be4422c92e8f63497dfe9d651affb2eecccb4e1e1a34b9a5a5b460001b6153ec565b614b4c7ffb0af2a23ffb1b99ced27c52f498bc6ab948fe939d307309c7986f94c11539e960001b6153ec565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9939050614b9d7f471ad1677eb85872327f149b61d16c373352df62511e8db57eca7d728fb69bfa60001b6153ec565b8091505090565b614bd07f0c8e7e650704c8ee3af1f7a15c517c38dc4fc70856d2ff36fcd44c3408e32d7c60001b6133b6565b614bfc7fa601ee21d724d0cd41bcad5c9a81c9860d87f8f5d63ee068e05dacf7c6a3b0f060001b6133b6565b614c287f791c3597ef5db947d31801b2019c0ae1fbc8ed0ae2c503dc0474a15c92d5849e60001b6133b6565b80614c31614c4b565b6001019080519060200190614c479291906162e3565b5050565b6000614c797f6098ffde723ed64276c2c486b25bcd3baa9fef2c472f4b52ce362b86534e958460001b6153ef565b614ca57f10eb3f6b27aaacda65aa8f87c2662bf52b41f9b1818b9f64dc9266fe61391c0360001b6153ef565b614cd17f776de49b4a1bf86ef00deb75e863c7bb93d54dd6f3d8e2d4f0aa283f5cb993d360001b6153ef565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c839050614d227fdd41ca273c50064cb67b10ee4905fef1b95ec8ac8c9637a58c89453b6234ce3e60001b6153ef565b8091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000614d64826000016153f2565b9050919050565b614d79868686868686615403565b614d8786868686868661570f565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b6000614dcb83600001836158e7565b60001c905092915050565b6000614de4826000016153f2565b9050919050565b6000614dfa83600001836158e7565b60001c905092915050565b614e1386868686868661595b565b614e21868686868686615211565b505050505050565b600080604183511415614e6b5760008060006020860151925060408601519150606086015160001a9050614e5f87828585615bd3565b94509450505050614ea5565b604083511415614e9c576000806020850151915060408501519050614e91868383615ce0565b935093505050614ea5565b60006002915091505b9250929050565b60006004811115614ec057614ebf617e49565b5b816004811115614ed357614ed2617e49565b5b1415614ede5761507e565b60016004811115614ef257614ef1617e49565b5b816004811115614f0557614f04617e49565b5b1415614f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f3d90617ec4565b60405180910390fd5b60026004811115614f5a57614f59617e49565b5b816004811115614f6d57614f6c617e49565b5b1415614fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614fa590617f30565b60405180910390fd5b60036004811115614fc257614fc1617e49565b5b816004811115614fd557614fd4617e49565b5b1415615016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161500d90617fc2565b60405180910390fd5b60048081111561502957615028617e49565b5b81600481111561503c5761503b617e49565b5b141561507d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161507490618054565b60405180910390fd5b5b50565b50565b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156150f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150ee906180e6565b60405180910390fd5b6151163360008661510787615d2e565b61511087615d2e565b86615da8565b6000615120614d8f565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546151849190617bf4565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051615202929190618106565b60405180910390a45050505050565b6152308473ffffffffffffffffffffffffffffffffffffffff16615dbe565b156153e1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401615276959493929190618184565b6020604051808303816000875af19250505080156152b257506040513d601f19601f820116820180604052508101906152af91906181f3565b60015b615358576152be61822d565b806308c379a0141561531b57506152d361824f565b806152de575061531d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016153129190616988565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161534f90618357565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146153df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016153d6906183e9565b60405180910390fd5b505b505050505050565b50565b50565b50565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161546a9061847b565b60405180910390fd5b81518351146154b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154ae9061850d565b60405180910390fd5b6154c5868686868686615da8565b60006154cf614d8f565b600001905060005b84518110156156875760008582815181106154f5576154f461785a565b5b6020026020010151905060008583815181106155145761551361785a565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156155b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016155ac9061859f565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461566b9190617bf4565b925050819055505050808061567f90617a5f565b9150506154d7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516156fe9291906185bf565b60405180910390a450505050505050565b61572e8473ffffffffffffffffffffffffffffffffffffffff16615dbe565b156158df578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016157749594939291906185f6565b6020604051808303816000875af19250505080156157b057506040513d601f19601f820116820180604052508101906157ad91906181f3565b60015b615856576157bc61822d565b806308c379a0141561581957506157d161824f565b806157dc575061581b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158109190616988565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161584d90618357565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146158dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158d4906183e9565b60405180910390fd5b505b505050505050565b600081836000018054905011615932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615929906186d0565b60405180910390fd5b8260000182815481106159485761594761785a565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156159cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016159c29061847b565b60405180910390fd5b6159e98686866159da87615d2e565b6159e387615d2e565b86615da8565b60006159f3614d8f565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015615a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615a869061859f565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254615b459190617bf4565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051615bc2929190618106565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115615c0e576000600391509150615cd7565b601b8560ff1614158015615c265750601c8560ff1614155b15615c38576000600491509150615cd7565b600060018787878760405160008152602001604052604051615c5d949392919061871b565b6020604051602081039080840390855afa158015615c7f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615cce57600060019250925050615cd7565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050615d2087828885615bd3565b935093505050935093915050565b60606000600167ffffffffffffffff811115615d4d57615d4c61656e565b5b604051908082528060200260200182016040528015615d7b5781602001602082028036833780820191505090505b5090508281600081518110615d9357615d9261785a565b5b60200260200101818152505080915050919050565b615db6868686868686615dd1565b505050505050565b600080823b905060008111915050919050565b615ddf868686868686615de7565b505050505050565b615df58686868686866160a2565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461609a576000615e32614d29565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8751811015616094576000878281518110615ee757615ee661785a565b5b602002602001015190506000811115616080576000898381518110615f0f57615f0e61785a565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415615f7f57818760000160008381526020019081526020016000206000828254615f739190617bf4565b92505081905550615fcb565b81615f8a8d836143d0565b1415615fca57615fb48c8760008481526020019081526020016000206160aa90919063ffffffff16565b50615fc881866160da90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141561603157818760000160008381526020019081526020016000206000828254616025919061720c565b9250508190555061607e565b600061603d8c836143d0565b141561607d576160678b8760008481526020019081526020016000206160f490919063ffffffff16565b5061607b818561612490919063ffffffff16565b505b5b505b50808061608c90617a5f565b915050615ec9565b50505050505b505050505050565b505050505050565b60006160d2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61613e565b905092915050565b60006160ec836000018360001b61613e565b905092915050565b600061611c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616250565b905092915050565b6000616136836000018360001b616250565b905092915050565b60008083600101600084815260200190815260200160002054905060008114616244576000600182616170919061720c565b90506000856000016001876000018054905061618c919061720c565b8154811061619d5761619c61785a565b5b90600052602060002001549050808660000183815481106161c1576161c061785a565b5b90600052602060002001819055506001826161dc9190617bf4565b866001016000838152602001908152602001600020819055508560000180548061620957616208618760565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061624a565b60009150505b92915050565b600061625c83836162c0565b6162b55782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506162ba565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546162ef906175e0565b90600052602060002090601f0160209004810192826163115760008555616358565b82601f1061632a57805160ff1916838001178555616358565b82800160010185558215616358579182015b8281111561635757825182559160200191906001019061633c565b5b5090506163659190616369565b5090565b5b8082111561638257600081600090555060010161636a565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006163c58261639a565b9050919050565b6163d5816163ba565b81146163e057600080fd5b50565b6000813590506163f2816163cc565b92915050565b6000819050919050565b61640b816163f8565b811461641657600080fd5b50565b60008135905061642881616402565b92915050565b6000806040838503121561644557616444616390565b5b6000616453858286016163e3565b925050602061646485828601616419565b9150509250929050565b616477816163f8565b82525050565b6000602082019050616492600083018461646e565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6164cd81616498565b81146164d857600080fd5b50565b6000813590506164ea816164c4565b92915050565b60006020828403121561650657616505616390565b5b6000616514848285016164db565b91505092915050565b60008115159050919050565b6165328161651d565b82525050565b600060208201905061654d6000830184616529565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6165a68261655d565b810181811067ffffffffffffffff821117156165c5576165c461656e565b5b80604052505050565b60006165d8616386565b90506165e4828261659d565b919050565b600067ffffffffffffffff8211156166045761660361656e565b5b61660d8261655d565b9050602081019050919050565b82818337600083830152505050565b600061663c616637846165e9565b6165ce565b90508281526020810184848401111561665857616657616558565b5b61666384828561661a565b509392505050565b600082601f8301126166805761667f616553565b5b8135616690848260208601616629565b91505092915050565b600067ffffffffffffffff8211156166b4576166b361656e565b5b6166bd8261655d565b9050602081019050919050565b60006166dd6166d884616699565b6165ce565b9050828152602081018484840111156166f9576166f8616558565b5b61670484828561661a565b509392505050565b600082601f83011261672157616720616553565b5b81356167318482602086016166ca565b91505092915050565b60008060008060008060008060006101208a8c03121561675d5761675c616390565b5b60008a013567ffffffffffffffff81111561677b5761677a616395565b5b6167878c828d0161666b565b99505060206167988c828d01616419565b98505060406167a98c828d01616419565b97505060606167ba8c828d01616419565b96505060806167cb8c828d01616419565b95505060a06167dc8c828d01616419565b94505060c06167ed8c828d01616419565b93505060e06167fe8c828d01616419565b9250506101008a013567ffffffffffffffff8111156168205761681f616395565b5b61682c8c828d0161670c565b9150509295985092959850929598565b600080600080600060a0868803121561685857616857616390565b5b600086013567ffffffffffffffff81111561687657616875616395565b5b6168828882890161666b565b9550506020616893888289016163e3565b94505060406168a4888289016163e3565b93505060606168b5888289016163e3565b92505060806168c6888289016163e3565b9150509295509295909350565b6000602082840312156168e9576168e8616390565b5b60006168f784828501616419565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561693a57808201518184015260208101905061691f565b83811115616949576000848401525b50505050565b600061695a82616900565b616964818561690b565b935061697481856020860161691c565b61697d8161655d565b840191505092915050565b600060208201905081810360008301526169a2818461694f565b905092915050565b6000602082840312156169c0576169bf616390565b5b60006169ce848285016163e3565b91505092915050565b600067ffffffffffffffff8211156169f2576169f161656e565b5b602082029050602081019050919050565b600080fd5b6000616a1b616a16846169d7565b6165ce565b90508083825260208201905060208402830185811115616a3e57616a3d616a03565b5b835b81811015616a675780616a538882616419565b845260208401935050602081019050616a40565b5050509392505050565b600082601f830112616a8657616a85616553565b5b8135616a96848260208601616a08565b91505092915050565b600080600080600060a08688031215616abb57616aba616390565b5b6000616ac9888289016163e3565b9550506020616ada888289016163e3565b945050604086013567ffffffffffffffff811115616afb57616afa616395565b5b616b0788828901616a71565b935050606086013567ffffffffffffffff811115616b2857616b27616395565b5b616b3488828901616a71565b925050608086013567ffffffffffffffff811115616b5557616b54616395565b5b616b618882890161670c565b9150509295509295909350565b616b77816163ba565b82525050565b6000602082019050616b926000830184616b6e565b92915050565b600067ffffffffffffffff821115616bb357616bb261656e565b5b602082029050602081019050919050565b6000616bd7616bd284616b98565b6165ce565b90508083825260208201905060208402830185811115616bfa57616bf9616a03565b5b835b81811015616c235780616c0f88826163e3565b845260208401935050602081019050616bfc565b5050509392505050565b600082601f830112616c4257616c41616553565b5b8135616c52848260208601616bc4565b91505092915050565b60008060408385031215616c7257616c71616390565b5b600083013567ffffffffffffffff811115616c9057616c8f616395565b5b616c9c85828601616c2d565b925050602083013567ffffffffffffffff811115616cbd57616cbc616395565b5b616cc985828601616a71565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b616d08816163f8565b82525050565b6000616d1a8383616cff565b60208301905092915050565b6000602082019050919050565b6000616d3e82616cd3565b616d488185616cde565b9350616d5383616cef565b8060005b83811015616d84578151616d6b8882616d0e565b9750616d7683616d26565b925050600181019050616d57565b5085935050505092915050565b60006020820190508181036000830152616dab8184616d33565b905092915050565b600061012082019050616dc9600083018c61646e565b616dd6602083018b61646e565b616de3604083018a61646e565b616df0606083018961646e565b616dfd608083018861646e565b616e0a60a083018761646e565b616e1760c083018661646e565b616e2460e0830185616b6e565b616e3261010083018461646e565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b616e75816163ba565b82525050565b6000616e878383616e6c565b60208301905092915050565b6000602082019050919050565b6000616eab82616e40565b616eb58185616e4b565b9350616ec083616e5c565b8060005b83811015616ef1578151616ed88882616e7b565b9750616ee383616e93565b925050600181019050616ec4565b5085935050505092915050565b60006020820190508181036000830152616f188184616ea0565b905092915050565b6000819050919050565b616f3381616f20565b8114616f3e57600080fd5b50565b600081359050616f5081616f2a565b92915050565b600060208284031215616f6c57616f6b616390565b5b6000616f7a84828501616f41565b91505092915050565b616f8c8161651d565b8114616f9757600080fd5b50565b600081359050616fa981616f83565b92915050565b60008060408385031215616fc657616fc5616390565b5b6000616fd4858286016163e3565b9250506020616fe585828601616f9a565b9150509250929050565b6000806040838503121561700657617005616390565b5b600061701485828601616419565b9250506020617025858286016163e3565b9150509250929050565b600080600080600060a0868803121561704b5761704a616390565b5b600061705988828901616419565b955050602061706a88828901616419565b945050604061707b88828901616419565b935050606061708c88828901616419565b925050608061709d88828901616419565b9150509295509295909350565b600080604083850312156170c1576170c0616390565b5b60006170cf85828601616419565b925050602083013567ffffffffffffffff8111156170f0576170ef616395565b5b6170fc8582860161670c565b9150509250929050565b6000806040838503121561711d5761711c616390565b5b600061712b858286016163e3565b925050602061713c858286016163e3565b9150509250929050565b600080600080600060a0868803121561716257617161616390565b5b6000617170888289016163e3565b9550506020617181888289016163e3565b945050604061719288828901616419565b93505060606171a388828901616419565b925050608086013567ffffffffffffffff8111156171c4576171c3616395565b5b6171d08882890161670c565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000617217826163f8565b9150617222836163f8565b925082821015617235576172346171dd565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b600061727660028361690b565b915061728182617240565b602082019050919050565b600060208201905081810360008301526172a581617269565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006172e260028361690b565b91506172ed826172ac565b602082019050919050565b60006020820190508181036000830152617311816172d5565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b600061734e60038361690b565b915061735982617318565b602082019050919050565b6000602082019050818103600083015261737d81617341565b9050919050565b600081905092915050565b600061739a82616900565b6173a48185617384565b93506173b481856020860161691c565b80840191505092915050565b6000819050919050565b6173db6173d6826163f8565b6173c0565b82525050565b60008160601b9050919050565b60006173f9826173e1565b9050919050565b600061740b826173ee565b9050919050565b61742361741e826163ba565b617400565b82525050565b6000617435828d61738f565b9150617441828c6173ca565b602082019150617451828b6173ca565b602082019150617461828a6173ca565b60208201915061747182896173ca565b60208201915061748182886173ca565b60208201915061749182876173ca565b6020820191506174a182866173ca565b6020820191506174b18285617412565b6014820191506174c182846173ca565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b600061750f60028361690b565b915061751a826174d9565b602082019050919050565b6000602082019050818103600083015261753e81617502565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b600061757b60028361690b565b915061758682617545565b602082019050919050565b600060208201905081810360008301526175aa8161756e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806175f857607f821691505b6020821081141561760c5761760b6175b1565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000617648601d8361690b565b915061765382617612565b602082019050919050565b600060208201905081810360008301526176778161763b565b9050919050565b60008190508160005260206000209050919050565b600081546176a0816175e0565b6176aa8186617384565b945060018216600081146176c557600181146176d657617709565b60ff19831686528186019350617709565b6176df8561767e565b60005b83811015617701578154818901526001820191506020810190506176e2565b838801955050505b50505092915050565b600061771e8285617693565b915061772a828461738f565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061779260298361690b565b915061779d82617736565b604082019050919050565b600060208201905081810360008301526177c181617785565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061782460298361690b565b915061782f826177c8565b604082019050919050565b6000602082019050818103600083015261785381617817565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b60006178e560318361690b565b91506178f082617889565b604082019050919050565b60006020820190508181036000830152617914816178d8565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b600061795160038361690b565b915061795c8261791b565b602082019050919050565b6000602082019050818103600083015261798081617944565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b60006179bd60028361690b565b91506179c882617987565b602082019050919050565b600060208201905081810360008301526179ec816179b0565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000617a2960038361690b565b9150617a34826179f3565b602082019050919050565b60006020820190508181036000830152617a5881617a1c565b9050919050565b6000617a6a826163f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415617a9d57617a9c6171dd565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000617b0460298361690b565b9150617b0f82617aa8565b604082019050919050565b60006020820190508181036000830152617b3381617af7565b9050919050565b6000617b45826163f8565b9150617b50836163f8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615617b8957617b886171dd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000617bce826163f8565b9150617bd9836163f8565b925082617be957617be8617b94565b5b828206905092915050565b6000617bff826163f8565b9150617c0a836163f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115617c3f57617c3e6171dd565b5b828201905092915050565b6000617c55826163f8565b9150617c60836163f8565b925082617c7057617c6f617b94565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b6000617cb160028361690b565b9150617cbc82617c7b565b602082019050919050565b60006020820190508181036000830152617ce081617ca4565b9050919050565b6000617cf382866173ca565b602082019150617d038285617412565b601482019150617d1382846173ca565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000617d80602b8361690b565b9150617d8b82617d24565b604082019050919050565b60006020820190508181036000830152617daf81617d73565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000617dec601c83617384565b9150617df782617db6565b601c82019050919050565b6000819050919050565b617e1d617e1882616f20565b617e02565b82525050565b6000617e2e82617ddf565b9150617e3a8284617e0c565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000617eae60188361690b565b9150617eb982617e78565b602082019050919050565b60006020820190508181036000830152617edd81617ea1565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000617f1a601f8361690b565b9150617f2582617ee4565b602082019050919050565b60006020820190508181036000830152617f4981617f0d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617fac60228361690b565b9150617fb782617f50565b604082019050919050565b60006020820190508181036000830152617fdb81617f9f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061803e60228361690b565b915061804982617fe2565b604082019050919050565b6000602082019050818103600083015261806d81618031565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006180d060218361690b565b91506180db82618074565b604082019050919050565b600060208201905081810360008301526180ff816180c3565b9050919050565b600060408201905061811b600083018561646e565b618128602083018461646e565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006181568261812f565b618160818561813a565b935061817081856020860161691c565b6181798161655d565b840191505092915050565b600060a0820190506181996000830188616b6e565b6181a66020830187616b6e565b6181b3604083018661646e565b6181c0606083018561646e565b81810360808301526181d2818461814b565b90509695505050505050565b6000815190506181ed816164c4565b92915050565b60006020828403121561820957618208616390565b5b6000618217848285016181de565b91505092915050565b60008160e01c9050919050565b600060033d111561824c5760046000803e618249600051618220565b90505b90565b600060443d101561825f576182e2565b618267616386565b60043d036004823e80513d602482011167ffffffffffffffff8211171561828f5750506182e2565b808201805167ffffffffffffffff8111156182ad57505050506182e2565b80602083010160043d0385018111156182ca5750505050506182e2565b6182d98260200185018661659d565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061834160348361690b565b915061834c826182e5565b604082019050919050565b6000602082019050818103600083015261837081618334565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006183d360288361690b565b91506183de82618377565b604082019050919050565b60006020820190508181036000830152618402816183c6565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061846560258361690b565b915061847082618409565b604082019050919050565b6000602082019050818103600083015261849481618458565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006184f760288361690b565b91506185028261849b565b604082019050919050565b60006020820190508181036000830152618526816184ea565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000618589602b8361690b565b91506185948261852d565b604082019050919050565b600060208201905081810360008301526185b88161857c565b9050919050565b600060408201905081810360008301526185d98185616d33565b905081810360208301526185ed8184616d33565b90509392505050565b600060a08201905061860b6000830188616b6e565b6186186020830187616b6e565b818103604083015261862a8186616d33565b9050818103606083015261863e8185616d33565b90508181036080830152618652818461814b565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006186ba60228361690b565b91506186c58261865e565b604082019050919050565b600060208201905081810360008301526186e9816186ad565b9050919050565b6186f981616f20565b82525050565b600060ff82169050919050565b618715816186ff565b82525050565b600060808201905061873060008301876186f0565b61873d602083018661870c565b61874a60408301856186f0565b61875760608301846186f0565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f5145f72b86a2c01c39af5ffc9a8998c28b82923a5fd653e8a6a3a815dfb4b3f64736f6c634300080a0033"; + "0x608060405234801561001057600080fd5b50615dcc80620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063bc01188e1161006f578063bc01188e14610541578063bd85b0391461056c578063d61b0c82146105a9578063db7fd408146105e6578063e985e9c514610616578063f242432a146106535761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461046157806385bff2e71461049e578063a22cb465146104db578063b3a721d1146105045761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190613a8e565b61067c565b6040516101839190613add565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190613b50565b610690565b6040516101c09190613b98565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613d9a565b6106b3565b6040516101fd9190613add565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613e9c565b610bce565b005b34801561023b57600080fd5b5061025660048036038101906102519190613f33565b610e32565b6040516102639190613fe8565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613f33565b610f56565b6040516102a09190613add565b60405180910390f35b3480156102b557600080fd5b506102be610f83565b6040516102cb9190613add565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061400a565b610f9d565b6040516103089190613add565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906140ff565b610ff6565b005b34801561034657600080fd5b5061034f61108a565b60405161035c91906141dd565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906142bb565b6110bd565b60405161039991906143f1565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c4919061400a565b6112b2565b6040516103d69190613b98565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613f33565b611315565b6040516104139190613add565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613f33565b611481565b60405161045899989796959493929190614413565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613f33565b61156a565b604051610495919061455e565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061400a565b611672565b6040516104d291906143f1565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd91906145ac565b611778565b005b34801561051057600080fd5b5061052b600480360381019061052691906145ec565b6118ed565b6040516105389190613add565b60405180910390f35b34801561054d57600080fd5b506105566119a8565b60405161056391906141dd565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613f33565b6119db565b6040516105a09190613add565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061462c565b611a01565b6040516105dd9190613add565b60405180910390f35b61060060048036038101906105fb91906146a7565b611a72565b60405161060d9190613b98565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614703565b611eeb565b60405161064a9190613b98565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190614743565b611f88565b005b6000610688838361201c565b905092915050565b60006106ac8261069e6120ef565b61211c90919063ffffffff16565b9050919050565b60008489896106c29190614809565b101580156106d05750600085115b61070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690614889565b60405180910390fd5b85871015801561071f5750600087115b61075e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610755906148f5565b60405180910390fd5b60648311156107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990614961565b60405180910390fd5b60006107ac612187565b905060006107b982610f9d565b905060008c8c8c8c8c8c8c8c8a8a6040516020016107e09a99989796959493929190614a26565b604051602081830303815290604052905060006108158661080784805190602001206121c3565b6121f390919063ffffffff16565b905061081f61221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790614b22565b60405180910390fd5b6108c36108bb61221a565b600201612247565b94506108cf858f612255565b6108e26108da61221a565b60020161228a565b6109326108ed61221a565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b8c61093b6122a0565b6000016000878152602001908152602001600020600001819055508b61095f6122a0565b6000016000878152602001908152602001600020600101819055508a6109836122a0565b600001600087815260200190815260200160002060020181905550896109a76122a0565b600001600087815260200190815260200160002060030181905550886109cb6122a0565b600001600087815260200190815260200160002060040181905550876109ef6122a0565b60000160008781526020019081526020016000206005018190555086610a136122a0565b60000160008781526020019081526020016000206006018190555083610a376122a0565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ab3610a976122a0565b600001600087815260200190815260200160002060080161228a565b610b17610abe6122a0565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b610b3384866001604051806020016040528060008152506122cd565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bed6122ee565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614b8e565b60405180910390fd5b82610c7061231b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610cbb6122ee565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610d4d85612348565b83610d5661221a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610da061221a565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610dea61221a565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610e3e61236b565b60000160008481526020019081526020016000208054610e5d90614bdd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8990614bdd565b8015610ed65780601f10610eab57610100808354040283529160200191610ed6565b820191906000526020600020905b815481529060010190602001808311610eb957829003601f168201915b50505050509050600081511415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990614c5b565b60405180910390fd5b610f2a61236b565b60010181604051602001610f3f929190614d0f565b604051602081830303815290604052915050919050565b6000610f7c610f63612398565b60010160008481526020019081526020016000206123c5565b9050919050565b6000610f98610f9061221a565b600201612247565b905090565b6000610fef610faa61221a565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061103657506110358533611eeb565b5b611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90614da5565b60405180910390fd5b6110833386868686866123da565b5050505050565b600061109461221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614e37565b60405180910390fd5b600061110d6123fe565b60000190506000845167ffffffffffffffff81111561112f5761112e613bce565b5b60405190808252806020026020018201604052801561115d5781602001602082028036833780820191505090505b50905060005b85518110156112a657600073ffffffffffffffffffffffffffffffffffffffff1686828151811061119757611196614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614ef8565b60405180910390fd5b82600086838151811061120c5761120b614e57565b5b60200260200101518152602001908152602001600020600087838151811061123757611236614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061128d5761128c614e57565b5b6020026020010181815250508080600101915050611163565b50809250505092915050565b60006112bc61231b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000806113206122a0565b6000016000848152602001908152602001600020905060008160020154141561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590614f64565b60405180910390fd5b60008160050154146113dc57806005015461139b82600801612247565b106113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614fd0565b60405180910390fd5b5b8060000154421180156113f3575080600101544211155b611432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114299061503c565b60405180910390fd5b60008160000154426114449190614809565b905060008260000154836001015461145c9190614809565b90506114778282856002015486600301548760040154611a01565b9350505050919050565b6000806000806000806000806000806114986122a0565b60000160008c815260200190815260200160002090506000816002015414156114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed90614f64565b60405180910390fd5b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661154a89600801612247565b995099509950995099509950995099509950509193959799909294969850565b60606000611576612398565b600101600084815260200190815260200160002090506000611597826123c5565b67ffffffffffffffff8111156115b0576115af613bce565b5b6040519080825280602002602001820160405280156115de5781602001602082028036833780820191505090505b50905060005b6115ed836123c5565b81101561166757611607818461242b90919063ffffffff16565b82828151811061161a57611619614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061165f9061505c565b9150506115e4565b508092505050919050565b6060600061167e612398565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006116cb82612445565b67ffffffffffffffff8111156116e4576116e3613bce565b5b6040519080825280602002602001820160405280156117125781602001602082028036833780820191505090505b50905060005b61172183612445565b81101561176d5761173b818461245a90919063ffffffff16565b82828151811061174e5761174d614e57565b5b60200260200101818152505080806117659061505c565b915050611718565b508092505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90615117565b60405180910390fd5b806117f06123fe565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e19190613b98565b60405180910390a35050565b6000806118f86122a0565b60000160008581526020019081526020016000209050600081600201541415611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90614f64565b60405180910390fd5b61199f8160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b91505092915050565b60006119b261221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006119e5612398565b6000016000838152602001908152602001600020549050919050565b6000848385611a109190614809565b87611a1b9190615137565b8486611a279190614809565b8489611a3391906151c0565b611a3d9190615137565b8688611a499190615137565b611a5391906151f1565b611a5d9190614809565b611a679190615247565b905095945050505050565b600080611a7d612187565b90506000611a896122a0565b600001600086815260200190815260200160002090506000816005015414611afd578060050154611abc82600801612247565b10611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614fd0565b60405180910390fd5b5b806000015442118015611b14575080600101544211155b611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a9061503c565b60405180910390fd5b6000816000015442611b659190614809565b9050600082600001548360010154611b7d9190614809565b90506000611b9a8383866002015487600301548860040154611a01565b905080341015611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906152c4565b60405180910390fd5b60006064856006015434611bf39190615137565b611bfd9190615247565b905060008134611c0d9190614809565b90506000611c5a8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b905060008b8983604051602001611c73939291906152e4565b60405160208183030381529060405290506000611ca88c611c9a84805190602001206121c3565b6121f390919063ffffffff16565b9050611cb261221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90614b22565b60405180910390fd5b611d4f8960080161228a565b611d988960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b611db48a8e6001604051806020016040528060008152506122cd565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611e1e573d6000803e3d6000fd5b50611e2761221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015611e90573d6000803e3d6000fd5b5060018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a460019a505050505050505050505092915050565b6000611ef56123fe565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611fc85750611fc78533611eeb565b5b612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe90614da5565b60405180910390fd5b612015338686868686612474565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615393565b60405180910390fd5b6120956123fe565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b600060186000369050101580156121a357506121a2336112b2565b5b156121b757601436033560601c90506121bf565b3390506121c0565b5b90565b6000816040516020016121d6919061542a565b604051602081830303815290604052805190602001209050919050565b60008060006122028585612498565b9150915061220f8161251b565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061225e61236b565b60000160008481526020019081526020016000209080519060200190612285929190613943565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6122d9848484846126f0565b6122e83360008686868661287a565b50505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061235161236b565b6001019080519060200190612367929190613943565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b60006123d382600001612a52565b9050919050565b6123e8868686868686612a63565b6123f6868686868686612d6f565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b600061243a8360000183612f47565b60001c905092915050565b600061245382600001612a52565b9050919050565b60006124698360000183612f47565b60001c905092915050565b612482868686868686612fbb565b61249086868686868661287a565b505050505050565b6000806041835114156124da5760008060006020860151925060408601519150606086015160001a90506124ce87828585613233565b94509450505050612514565b60408351141561250b576000806020850151915060408501519050612500868383613340565b935093505050612514565b60006002915091505b9250929050565b6000600481111561252f5761252e615450565b5b81600481111561254257612541615450565b5b141561254d576126ed565b6001600481111561256157612560615450565b5b81600481111561257457612573615450565b5b14156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906154cb565b60405180910390fd5b600260048111156125c9576125c8615450565b5b8160048111156125dc576125db615450565b5b141561261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490615537565b60405180910390fd5b6003600481111561263157612630615450565b5b81600481111561264457612643615450565b5b1415612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c906155c9565b60405180910390fd5b60048081111561269857612697615450565b5b8160048111156126ab576126aa615450565b5b14156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e39061565b565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612757906156ed565b60405180910390fd5b61277f336000866127708761338e565b6127798761338e565b86613408565b60006127896123fe565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ed91906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161286b92919061570d565b60405180910390a45050505050565b6128998473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612a4a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128df95949392919061578b565b6020604051808303816000875af192505050801561291b57506040513d601f19601f8201168201806040525081019061291891906157fa565b60015b6129c157612927615834565b806308c379a01415612984575061293c615856565b806129475750612986565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b9190613fe8565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061595e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f906159f0565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90615a82565b60405180910390fd5b8151835114612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90615b14565b60405180910390fd5b612b25868686868686613408565b6000612b2f6123fe565b600001905060005b8451811015612ce7576000858281518110612b5557612b54614e57565b5b602002602001015190506000858381518110612b7457612b73614e57565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90615ba6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccb91906151f1565b9250508190555050508080612cdf9061505c565b915050612b37565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612d5e929190615bc6565b60405180910390a450505050505050565b612d8e8473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612f3f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612dd4959493929190615bfd565b6020604051808303816000875af1925050508015612e1057506040513d601f19601f82011682018060405250810190612e0d91906157fa565b60015b612eb657612e1c615834565b806308c379a01415612e795750612e31615856565b80612e3c5750612e7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e709190613fe8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead9061595e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f34906159f0565b60405180910390fd5b505b505050505050565b600081836000018054905011612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8990615cd7565b60405180910390fd5b826000018281548110612fa857612fa7614e57565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290615a82565b60405180910390fd5b61304986868661303a8761338e565b6130438761338e565b86613408565b60006130536123fe565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e690615ba6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a591906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161322292919061570d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561326e576000600391509150613337565b601b8560ff16141580156132865750601c8560ff1614155b15613298576000600491509150613337565b6000600187878787604051600081526020016040526040516132bd9493929190615d22565b6020604051602081039080840390855afa1580156132df573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332e57600060019250925050613337565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061338087828885613233565b935093505050935093915050565b60606000600167ffffffffffffffff8111156133ad576133ac613bce565b5b6040519080825280602002602001820160405280156133db5781602001602082028036833780820191505090505b50905082816000815181106133f3576133f2614e57565b5b60200260200101818152505080915050919050565b613416868686868686613431565b505050505050565b600080823b905060008111915050919050565b61343f868686868686613447565b505050505050565b613455868686868686613702565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146136fa576000613492612398565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156136f457600087828151811061354757613546614e57565b5b6020026020010151905060008111156136e057600089838151811061356f5761356e614e57565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156135df578187600001600083815260200190815260200160002060008282546135d391906151f1565b9250508190555061362b565b816135ea8d8361201c565b141561362a576136148c87600084815260200190815260200160002061370a90919063ffffffff16565b50613628818661373a90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415613691578187600001600083815260200190815260200160002060008282546136859190614809565b925050819055506136de565b600061369d8c8361201c565b14156136dd576136c78b87600084815260200190815260200160002061375490919063ffffffff16565b506136db818561378490919063ffffffff16565b505b5b505b5080806136ec9061505c565b915050613529565b50505050505b505050505050565b505050505050565b6000613732836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61379e565b905092915050565b600061374c836000018360001b61379e565b905092915050565b600061377c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6138b0565b905092915050565b6000613796836000018360001b6138b0565b905092915050565b600080836001016000848152602001908152602001600020549050600081146138a45760006001826137d09190614809565b9050600085600001600187600001805490506137ec9190614809565b815481106137fd576137fc614e57565b5b906000526020600020015490508086600001838154811061382157613820614e57565b5b906000526020600020018190555060018261383c91906151f1565b866001016000838152602001908152602001600020819055508560000180548061386957613868615d67565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506138aa565b60009150505b92915050565b60006138bc8383613920565b61391557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061391a565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461394f90614bdd565b90600052602060002090601f01602090048101928261397157600085556139b8565b82601f1061398a57805160ff19168380011785556139b8565b828001600101855582156139b8579182015b828111156139b757825182559160200191906001019061399c565b5b5090506139c591906139c9565b5090565b5b808211156139e25760008160009055506001016139ca565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a25826139fa565b9050919050565b613a3581613a1a565b8114613a4057600080fd5b50565b600081359050613a5281613a2c565b92915050565b6000819050919050565b613a6b81613a58565b8114613a7657600080fd5b50565b600081359050613a8881613a62565b92915050565b60008060408385031215613aa557613aa46139f0565b5b6000613ab385828601613a43565b9250506020613ac485828601613a79565b9150509250929050565b613ad781613a58565b82525050565b6000602082019050613af26000830184613ace565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b2d81613af8565b8114613b3857600080fd5b50565b600081359050613b4a81613b24565b92915050565b600060208284031215613b6657613b656139f0565b5b6000613b7484828501613b3b565b91505092915050565b60008115159050919050565b613b9281613b7d565b82525050565b6000602082019050613bad6000830184613b89565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c0682613bbd565b810181811067ffffffffffffffff82111715613c2557613c24613bce565b5b80604052505050565b6000613c386139e6565b9050613c448282613bfd565b919050565b600067ffffffffffffffff821115613c6457613c63613bce565b5b613c6d82613bbd565b9050602081019050919050565b82818337600083830152505050565b6000613c9c613c9784613c49565b613c2e565b905082815260208101848484011115613cb857613cb7613bb8565b5b613cc3848285613c7a565b509392505050565b600082601f830112613ce057613cdf613bb3565b5b8135613cf0848260208601613c89565b91505092915050565b600067ffffffffffffffff821115613d1457613d13613bce565b5b613d1d82613bbd565b9050602081019050919050565b6000613d3d613d3884613cf9565b613c2e565b905082815260208101848484011115613d5957613d58613bb8565b5b613d64848285613c7a565b509392505050565b600082601f830112613d8157613d80613bb3565b5b8135613d91848260208601613d2a565b91505092915050565b60008060008060008060008060006101208a8c031215613dbd57613dbc6139f0565b5b60008a013567ffffffffffffffff811115613ddb57613dda6139f5565b5b613de78c828d01613ccb565b9950506020613df88c828d01613a79565b9850506040613e098c828d01613a79565b9750506060613e1a8c828d01613a79565b9650506080613e2b8c828d01613a79565b95505060a0613e3c8c828d01613a79565b94505060c0613e4d8c828d01613a79565b93505060e0613e5e8c828d01613a79565b9250506101008a013567ffffffffffffffff811115613e8057613e7f6139f5565b5b613e8c8c828d01613d6c565b9150509295985092959850929598565b600080600080600060a08688031215613eb857613eb76139f0565b5b600086013567ffffffffffffffff811115613ed657613ed56139f5565b5b613ee288828901613ccb565b9550506020613ef388828901613a43565b9450506040613f0488828901613a43565b9350506060613f1588828901613a43565b9250506080613f2688828901613a43565b9150509295509295909350565b600060208284031215613f4957613f486139f0565b5b6000613f5784828501613a79565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f9a578082015181840152602081019050613f7f565b83811115613fa9576000848401525b50505050565b6000613fba82613f60565b613fc48185613f6b565b9350613fd4818560208601613f7c565b613fdd81613bbd565b840191505092915050565b600060208201905081810360008301526140028184613faf565b905092915050565b6000602082840312156140205761401f6139f0565b5b600061402e84828501613a43565b91505092915050565b600067ffffffffffffffff82111561405257614051613bce565b5b602082029050602081019050919050565b600080fd5b600061407b61407684614037565b613c2e565b9050808382526020820190506020840283018581111561409e5761409d614063565b5b835b818110156140c757806140b38882613a79565b8452602084019350506020810190506140a0565b5050509392505050565b600082601f8301126140e6576140e5613bb3565b5b81356140f6848260208601614068565b91505092915050565b600080600080600060a0868803121561411b5761411a6139f0565b5b600061412988828901613a43565b955050602061413a88828901613a43565b945050604086013567ffffffffffffffff81111561415b5761415a6139f5565b5b614167888289016140d1565b935050606086013567ffffffffffffffff811115614188576141876139f5565b5b614194888289016140d1565b925050608086013567ffffffffffffffff8111156141b5576141b46139f5565b5b6141c188828901613d6c565b9150509295509295909350565b6141d781613a1a565b82525050565b60006020820190506141f260008301846141ce565b92915050565b600067ffffffffffffffff82111561421357614212613bce565b5b602082029050602081019050919050565b6000614237614232846141f8565b613c2e565b9050808382526020820190506020840283018581111561425a57614259614063565b5b835b81811015614283578061426f8882613a43565b84526020840193505060208101905061425c565b5050509392505050565b600082601f8301126142a2576142a1613bb3565b5b81356142b2848260208601614224565b91505092915050565b600080604083850312156142d2576142d16139f0565b5b600083013567ffffffffffffffff8111156142f0576142ef6139f5565b5b6142fc8582860161428d565b925050602083013567ffffffffffffffff81111561431d5761431c6139f5565b5b614329858286016140d1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436881613a58565b82525050565b600061437a838361435f565b60208301905092915050565b6000602082019050919050565b600061439e82614333565b6143a8818561433e565b93506143b38361434f565b8060005b838110156143e45781516143cb888261436e565b97506143d683614386565b9250506001810190506143b7565b5085935050505092915050565b6000602082019050818103600083015261440b8184614393565b905092915050565b600061012082019050614429600083018c613ace565b614436602083018b613ace565b614443604083018a613ace565b6144506060830189613ace565b61445d6080830188613ace565b61446a60a0830187613ace565b61447760c0830186613ace565b61448460e08301856141ce565b614492610100830184613ace565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144d581613a1a565b82525050565b60006144e783836144cc565b60208301905092915050565b6000602082019050919050565b600061450b826144a0565b61451581856144ab565b9350614520836144bc565b8060005b8381101561455157815161453888826144db565b9750614543836144f3565b925050600181019050614524565b5085935050505092915050565b600060208201905081810360008301526145788184614500565b905092915050565b61458981613b7d565b811461459457600080fd5b50565b6000813590506145a681614580565b92915050565b600080604083850312156145c3576145c26139f0565b5b60006145d185828601613a43565b92505060206145e285828601614597565b9150509250929050565b60008060408385031215614603576146026139f0565b5b600061461185828601613a79565b925050602061462285828601613a43565b9150509250929050565b600080600080600060a08688031215614648576146476139f0565b5b600061465688828901613a79565b955050602061466788828901613a79565b945050604061467888828901613a79565b935050606061468988828901613a79565b925050608061469a88828901613a79565b9150509295509295909350565b600080604083850312156146be576146bd6139f0565b5b60006146cc85828601613a79565b925050602083013567ffffffffffffffff8111156146ed576146ec6139f5565b5b6146f985828601613d6c565b9150509250929050565b6000806040838503121561471a576147196139f0565b5b600061472885828601613a43565b925050602061473985828601613a43565b9150509250929050565b600080600080600060a0868803121561475f5761475e6139f0565b5b600061476d88828901613a43565b955050602061477e88828901613a43565b945050604061478f88828901613a79565b93505060606147a088828901613a79565b925050608086013567ffffffffffffffff8111156147c1576147c06139f5565b5b6147cd88828901613d6c565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481482613a58565b915061481f83613a58565b925082821015614832576148316147da565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b6000614873600283613f6b565b915061487e8261483d565b602082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148df600283613f6b565b91506148ea826148a9565b602082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b600061494b600383613f6b565b915061495682614915565b602082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b600081905092915050565b600061499782613f60565b6149a18185614981565b93506149b1818560208601613f7c565b80840191505092915050565b6000819050919050565b6149d86149d382613a58565b6149bd565b82525050565b60008160601b9050919050565b60006149f6826149de565b9050919050565b6000614a08826149eb565b9050919050565b614a20614a1b82613a1a565b6149fd565b82525050565b6000614a32828d61498c565b9150614a3e828c6149c7565b602082019150614a4e828b6149c7565b602082019150614a5e828a6149c7565b602082019150614a6e82896149c7565b602082019150614a7e82886149c7565b602082019150614a8e82876149c7565b602082019150614a9e82866149c7565b602082019150614aae8285614a0f565b601482019150614abe82846149c7565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b0c600283613f6b565b9150614b1782614ad6565b602082019050919050565b60006020820190508181036000830152614b3b81614aff565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b78600283613f6b565b9150614b8382614b42565b602082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf557607f821691505b60208210811415614c0957614c08614bae565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c45601d83613f6b565b9150614c5082614c0f565b602082019050919050565b60006020820190508181036000830152614c7481614c38565b9050919050565b60008190508160005260206000209050919050565b60008154614c9d81614bdd565b614ca78186614981565b94506001821660008114614cc25760018114614cd357614d06565b60ff19831686528186019350614d06565b614cdc85614c7b565b60005b83811015614cfe57815481890152600182019150602081019050614cdf565b838801955050505b50505092915050565b6000614d1b8285614c90565b9150614d27828461498c565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d8f602983613f6b565b9150614d9a82614d33565b604082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614e21602983613f6b565b9150614e2c82614dc5565b604082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ee2603183613f6b565b9150614eed82614e86565b604082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000614f4e600383613f6b565b9150614f5982614f18565b602082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fba600283613f6b565b9150614fc582614f84565b602082019050919050565b60006020820190508181036000830152614fe981614fad565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000615026600383613f6b565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561509a576150996147da565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615101602983613f6b565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b600061514282613a58565b915061514d83613a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615186576151856147da565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151cb82613a58565b91506151d683613a58565b9250826151e6576151e5615191565b5b828206905092915050565b60006151fc82613a58565b915061520783613a58565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523c5761523b6147da565b5b828201905092915050565b600061525282613a58565b915061525d83613a58565b92508261526d5761526c615191565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006152ae600283613f6b565b91506152b982615278565b602082019050919050565b600060208201905081810360008301526152dd816152a1565b9050919050565b60006152f082866149c7565b6020820191506153008285614a0f565b60148201915061531082846149c7565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061537d602b83613f6b565b915061538882615321565b604082019050919050565b600060208201905081810360008301526153ac81615370565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006153e9601c83614981565b91506153f4826153b3565b601c82019050919050565b6000819050919050565b6000819050919050565b61542461541f826153ff565b615409565b82525050565b6000615435826153dc565b91506154418284615413565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006154b5601883613f6b565b91506154c08261547f565b602082019050919050565b600060208201905081810360008301526154e4816154a8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615521601f83613f6b565b915061552c826154eb565b602082019050919050565b6000602082019050818103600083015261555081615514565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155b3602283613f6b565b91506155be82615557565b604082019050919050565b600060208201905081810360008301526155e2816155a6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615645602283613f6b565b9150615650826155e9565b604082019050919050565b6000602082019050818103600083015261567481615638565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156d7602183613f6b565b91506156e28261567b565b604082019050919050565b60006020820190508181036000830152615706816156ca565b9050919050565b60006040820190506157226000830185613ace565b61572f6020830184613ace565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061575d82615736565b6157678185615741565b9350615777818560208601613f7c565b61578081613bbd565b840191505092915050565b600060a0820190506157a060008301886141ce565b6157ad60208301876141ce565b6157ba6040830186613ace565b6157c76060830185613ace565b81810360808301526157d98184615752565b90509695505050505050565b6000815190506157f481613b24565b92915050565b6000602082840312156158105761580f6139f0565b5b600061581e848285016157e5565b91505092915050565b60008160e01c9050919050565b600060033d11156158535760046000803e615850600051615827565b90505b90565b600060443d1015615866576158e9565b61586e6139e6565b60043d036004823e80513d602482011167ffffffffffffffff821117156158965750506158e9565b808201805167ffffffffffffffff8111156158b457505050506158e9565b80602083010160043d0385018111156158d15750505050506158e9565b6158e082602001850186613bfd565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615948603483613f6b565b9150615953826158ec565b604082019050919050565b600060208201905081810360008301526159778161593b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006159da602883613f6b565b91506159e58261597e565b604082019050919050565b60006020820190508181036000830152615a09816159cd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615a6c602583613f6b565b9150615a7782615a10565b604082019050919050565b60006020820190508181036000830152615a9b81615a5f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000615afe602883613f6b565b9150615b0982615aa2565b604082019050919050565b60006020820190508181036000830152615b2d81615af1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615b90602b83613f6b565b9150615b9b82615b34565b604082019050919050565b60006020820190508181036000830152615bbf81615b83565b9050919050565b60006040820190508181036000830152615be08185614393565b90508181036020830152615bf48184614393565b90509392505050565b600060a082019050615c1260008301886141ce565b615c1f60208301876141ce565b8181036040830152615c318186614393565b90508181036060830152615c458185614393565b90508181036080830152615c598184615752565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cc1602283613f6b565b9150615ccc82615c65565b604082019050919050565b60006020820190508181036000830152615cf081615cb4565b9050919050565b615d00816153ff565b82525050565b600060ff82169050919050565b615d1c81615d06565b82525050565b6000608082019050615d376000830187615cf7565b615d446020830186615d13565b615d516040830185615cf7565b615d5e6060830184615cf7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f030c279aa832e97e3561b8e13e4add8b69d0f400ff8c9dbf03d3d4e390d7e0764736f6c634300080a0033"; type CyberDropBaseConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberObjectFactoryFacet__factory.ts b/packages/contracts/typechain-types/factories/CyberObjectFactoryFacet__factory.ts index 8a9c347..43f43e1 100644 --- a/packages/contracts/typechain-types/factories/CyberObjectFactoryFacet__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberObjectFactoryFacet__factory.ts @@ -238,71 +238,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x07d08ee9", - type: "bytes32", - }, - ], - name: "c_0x07d08ee9", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x1c93e179", - type: "bytes32", - }, - ], - name: "c_0x1c93e179", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x4a511cf6", - type: "bytes32", - }, - ], - name: "c_0x4a511cf6", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x63bd0478", - type: "bytes32", - }, - ], - name: "c_0x63bd0478", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xfbe62a3d", - type: "bytes32", - }, - ], - name: "c_0xfbe62a3d", - outputs: [], - stateMutability: "pure", - type: "function", - }, { inputs: [ { @@ -843,7 +778,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b506187fc80620000226000396000f3fe6080604052600436106101c15760003560e01c80636dcfd841116100f7578063bc01188e11610095578063db7fd40811610064578063db7fd40814610701578063dd3c09c614610731578063e985e9c51461075a578063f242432a14610797576101c1565b8063bc01188e14610633578063bd85b0391461065e578063c55bc5661461069b578063d61b0c82146106c4576101c1565b806385bff2e7116100d157806385bff2e714610567578063929048c7146105a4578063a22cb465146105cd578063b3a721d1146105f6576101c1565b80636dcfd841146104d85780637e721e2c146105155780637f628e8b1461053e576101c1565b80631b023947116101645780634e1273f41161013e5780634e1273f4146103dc578063572b6c05146104195780635c5ed16d146104565780636787d44914610493576101c1565b80631b0239471461034b5780632eb2c2d614610388578063481c6a75146103b1576101c1565b80630b885ac3116101a05780630b885ac31461027d5780630e89341c146102a657806313ba55df146102e357806318160ddd14610320576101c1565b8062fdd58e146101c657806301ffc9a714610203578063081cdf1214610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190616465565b6107c0565b6040516101fa91906164b4565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190616527565b6107d4565b604051610237919061656f565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190616771565b6107f7565b60405161027491906164b4565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190616873565b611736565b005b3480156102b257600080fd5b506102cd60048036038101906102c8919061690a565b611c86565b6040516102da91906169bf565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061690a565b611f36565b60405161031791906164b4565b60405180910390f35b34801561032c57600080fd5b50610335611f63565b60405161034291906164b4565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d91906169e1565b612001565b60405161037f91906164b4565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190616ad6565b6120de565b005b3480156103bd57600080fd5b506103c6612172565b6040516103d39190616bb4565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190616c92565b612229565b6040516104109190616dc8565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b91906169e1565b61241e565b60405161044d919061656f565b60405180910390f35b34801561046257600080fd5b5061047d6004803603810190610478919061690a565b612505565b60405161048a91906164b4565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b5919061690a565b612ac3565b6040516104cf99989796959493929190616dea565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa919061690a565b612d39565b60405161050c9190616f35565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190616f8d565b612e41565b005b34801561054a57600080fd5b5061056560048036038101906105609190616f8d565b612e44565b005b34801561057357600080fd5b5061058e600480360381019061058991906169e1565b612e47565b60405161059b9190616dc8565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190616f8d565b612f4d565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190616fe6565b612f50565b005b34801561060257600080fd5b5061061d60048036038101906106189190617026565b6130c5565b60405161062a91906164b4565b60405180910390f35b34801561063f57600080fd5b5061064861330d565b6040516106559190616bb4565b60405180910390f35b34801561066a57600080fd5b506106856004803603810190610680919061690a565b6133c4565b60405161069291906164b4565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190616f8d565b6133ea565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190617066565b6133ed565b6040516106f891906164b4565b60405180910390f35b61071b600480360381019061071691906170e1565b6134e2565b604051610728919061656f565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190616f8d565b6142d3565b005b34801561076657600080fd5b50610781600480360381019061077c919061713d565b6142d6565b60405161078e919061656f565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b9919061717d565b614373565b005b60006107cc8383614407565b905092915050565b60006107f0826107e26144da565b61450790919063ffffffff16565b9050919050565b60006108257ffef254261034bac9064db40beedeb00a21789bae83ec45bc6080e4fca2426c1360001b612e41565b6108517fc584978ecbf7f4704e8a6c75afa9a10d8777106982e4742d7b9a9fb050b9f1e760001b612e41565b61087d7f5aabdb124f9ca4049011380682b73c5aba0415d0b6116d74a5936c58a35ca00660001b612e41565b6108a97f6afc4d6b3a3c84d9b364f1db2f5dafef77606049c45c41c48cfaef751060c95160001b612e41565b8489896108b69190617243565b101580156108c45750600085115b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa906172c3565b60405180910390fd5b61092f7fe9ffbf293c2ece8ee79305d9a6169654a7114de20fbaa68f861f6f75b752ad7160001b612e41565b61095b7f56012c399773dff0cd88a94061dc268f3db0016fdcee340595b97ce0c748582860001b612e41565b6109877fb23687ca5a0e8239f984dec4267314bbcf67d282170811e4aab4d2d902f7692660001b612e41565b6109b37fbd655ca00a2f0e7d876088a0acef5228b23247051e49c2d510988e102818e44860001b612e41565b8587101580156109c35750600087115b610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f99061732f565b60405180910390fd5b610a2e7f01f57b23155943a664cfaa9367f07726ecf66e9e7f1bce8ac4ef2b28fe7b5e1160001b612e41565b610a5a7f5a5ff868374cc23468ae13dd5d7a7c3bbb93c7379a059ffa15dd5d0d187d764f60001b612e41565b610a867fccd2f9b242b06b24c899dc8d1cfe38b93ffcf694a11954eb531198d13effe41860001b612e41565b610ab27fa429c21522614f6d2326281d0134cd1f5e5c607809039e8fa92050e196e7a7ab60001b612e41565b6064831115610af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed9061739b565b60405180910390fd5b610b227fe5b07b507679869e644ae4d89250e627c69ebe49d9dc6d591022d65602f2a72c60001b612e41565b610b4e7feb49b4bc135917d3d0a068ec641339e146c450adbb549f7a7a97227199537ad960001b612e41565b610b7a7f69c49773801c26e65492db6becf8a9af3301c61ba87428f0072f8c515d17fb1f60001b612e41565b6000610b84614572565b9050610bb27fd96c2209b43ebd27adb9b8d454c03023aed7f89b3e6c6fba5ec9473b2e96512c60001b612e41565b610bde7fb6059bc2a3a24175da29dee344f09801f8025f845ff8dcb72b68914f56e749fb60001b612e41565b6000610be982612001565b9050610c177fb6b8ba1664bcdd06a237086e3df21c9094a1684859c1a0be2fb3b31376e0492060001b612e41565b610c437f65c33ac1f818405eb21ccbffc8f7372a5f92d09c1d09f71f624881a0bc60ef8260001b612e41565b60008c8c8c8c8c8c8c8c8a8a604051602001610c689a99989796959493929190617460565b6040516020818303038152906040529050610ca57fb0f0fc74d4f27760a6129ff6e3984baf4f1a6a8f50f12ff84a64bd3cb4b854a660001b612e41565b610cd17f12d5ef002891a997a20e958d467723b1007bfa70e4d5b94b2a8fae41d25de08560001b612e41565b6000610cf586610ce7848051906020012061470e565b61473e90919063ffffffff16565b9050610d237fce32dc2657a5bc8920c3fd6179fa0b81d0b72a12ce857566490fa877873fd62e60001b612e41565b610d4f7f85b5165326d13dfcce6570613bf7f2a17076052a0a40dde7d3d1a9ed9b1c971f60001b612e41565b610d7b7f3b8e97f61c78e340140d184a0fe7a34ebe88f0fd1fdc43c2749a3082c65ee2ea60001b612e41565b610d83614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b9061755c565b60405180910390fd5b610e407ffc5e894c94eeebb6e9b99f75e31ec7d87694ac11a2d5dc87a0c54ac42e56297360001b612e41565b610e6c7fe080625441c7fc6a865482c576631cb31e16f4471d36662ff675e41a6a8115c860001b612e41565b610e987fa0c41b33ac1e6023ce33960326f78eb948b36917a5dc0ab90336f9da02822e2b60001b612e41565b610eab610ea3614765565b600201614843565b9450610ed97fa5a39150cde7b6bec617db96fdb3907b046d412db6428300fda2be60ec920e7260001b612e41565b610f057f8c1f28878abcd7f5215e2889c22f16fd0a7c473485c5b3380d4ebc3ef884f8f060001b612e41565b610f0f858f614851565b610f3b7ff8ab2e932d29a1bccd65e972ec2dd09beb721a480ce72be84e8cbd8de77f57d660001b612e41565b610f677f28b209e8fc0e5a2b56efa3da9d8397ef7b289ecad64ccae57f3f3d42b709776c60001b612e41565b610f7a610f72614765565b60020161490a565b610fa67ff8490bd99ce937b95ccd28092392faaef7eeeab3201b9fb16a6c24ba8c69896260001b612e41565b610fd27f8008bd1e507769bf54e202251be9733f09582f1c743bbf8673af2f9b29140df260001b612e41565b611022610fdd614765565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b61104e7f2dc781920cb5e33aae4a8393b7a3a53337652ba8a35e2b56011f5744efabf05760001b612e41565b61107a7fbcde70b63c4d9dcfd9ccaab415d2b97128f066f3c437c3316f45fb908db685af60001b612e41565b8c611083614920565b6000016000878152602001908152602001600020600001819055506110ca7f427678b57a36ffce221a8c890b7ff9f36f0bc86bb2a3036d6cb9630cbf428ef660001b612e41565b6110f67fb9f070b89da27f36f99202b12db2829dee6fad361ff7070dfc84615e283b142260001b612e41565b8b6110ff614920565b6000016000878152602001908152602001600020600101819055506111467f7b5a3100b111440497f36007a416128bd4feb074ab6fab0127ef1a5150ee994960001b612e41565b6111727fea7c557d03a267ff27e741d3447c1731806b6d0d3d91d30a0b1fba3301efac8360001b612e41565b8a61117b614920565b6000016000878152602001908152602001600020600201819055506111c27f805ce5561d42393aeafd5a5a3e66a1d9961e80070ac06d4a59c517533a9fa79f60001b612e41565b6111ee7f967deef564515d9a9439c1186e9c6bdaad59640d59757ab377cbb8c790b5461f60001b612e41565b896111f7614920565b60000160008781526020019081526020016000206003018190555061123e7f447a73adc4607b190dc90a59146f6a6d6cbb6beb8113f29a4324be1949636fc860001b612e41565b61126a7fd690c115448555e2c7d90dbb18369e4436b23809c2b9557058fe64a3653bf3ec60001b612e41565b88611273614920565b6000016000878152602001908152602001600020600401819055506112ba7f4d52a2155da3ba950323800a3c8155911f968d70dea9c34fd778912ee5e35d5460001b612e41565b6112e67fb3d331c3453ca7536961a249a22157c030746ff898bfdc12156b0ce4bff9400260001b612e41565b876112ef614920565b6000016000878152602001908152602001600020600501819055506113367f37df8740ac51046d6d45b70d1520d405142374089999b994876fbd32ff0496eb60001b612e41565b6113627f0c13f6719fef45381e50816916a5eab15a6c5adbf0f919e1dfa99dc58782710e60001b612e41565b8661136b614920565b6000016000878152602001908152602001600020600601819055506113b27f85c9b0dfbea7e9efacdb920f67d01ffded6d823c166063d314aea49e03b480a960001b612e41565b6113de7f0db3728cff6bf4d259a380e523c94be99525a8b4e1b9386596a02e5f8828780160001b612e41565b836113e7614920565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506114687f69875017d86bc248ae1b52571b1c657618960bd48c796d6de92ebf75a0189b8860001b612e41565b6114947f782fbf49717d6af7f3d1c6315f9c20ab3d02dd60e5fc0a9476b07b2c32e1b42d60001b612e41565b6114bb61149f614920565b600001600087815260200190815260200160002060080161490a565b6114e77fe14bc2d6b10facf2a5265c82476a2e0fd8c016815075f4302f59540d56e1e30660001b612e41565b6115137f13524a23719e903d0cace00f5d7a54f518f18c51d69f9efaf06d8b5ef8bbb16860001b612e41565b61157761151e614920565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b6115a37f372ca61bbfaf1e294402597498b99366b4e5fb2f2e128ee253213d67229b6cc360001b612e41565b6115cf7f55209cb5e3c63fe0a67b528b111d15216de2196c517c0b8d805e556909fb6e8560001b612e41565b6115eb84866001604051806020016040528060008152506149fe565b6116177ffe551f4c9ce42abc2d789e22e8bad622fabe318e230d04433c0e73c8ca0532e660001b612e41565b6116437f1c02cd8b6b383cdbe8bc49b3d0abc3c361b50f5d77e2aaee99b65819cad9e2ae60001b612e41565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36116b37fe538ed482a6203bb8f8989a475a198a2683d1b382121135ccd5507773b1c9fad60001b612e41565b6116df7fea10a1d343ed3bf0d46c880a8e3a7f7f95189023771924450457b9ab51a5ff5460001b612e41565b6001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b6117627f76959acc5804dd7d58983a7553c8dba5d4aaa668103e7d29c4903cb21496dcd660001b612e44565b61178e7f01c3110384d2631b65d18d50de1c2c4882530eff4188f212e7a1b564a93885c260001b612e44565b6117ba7ffb264934f994ece14b386fc0be186c58f27ab7f1d9ed0c2dbf61f0a41d8a295960001b612e44565b6117e67f9cb49303e2d57393fee370e71e080720e1e38459d90cea9772f03f0266c0e62260001b612e44565b3373ffffffffffffffffffffffffffffffffffffffff16611805614a1f565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906175c8565b60405180910390fd5b6118ab7f55910367c443c4713b200bdd68889a2360c09fbd998b1c8cf51a36cbc450df4660001b612e44565b6118d77f574e953eada5dcc747c84e5bae85f4417425c6a4144c50b087e5174dac600a7d60001b612e44565b6119037f59008a8f1d50584095ce216266c7af2cef3efa9b63497de53503ca94cbb9b24a60001b612e44565b8261190c614afd565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119797fa43cd7f41895ca0e17994fcb94d0fa5858e27f48ed0cd8ff02384394fd8a33c160001b612e44565b6119a57f4c55aa82e1408c3340ff78033cda644766212f0e1200ccb38a693deddd5bf52b60001b612e44565b60016119af614a1f565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550611a647ffde6ef2df36beaa4210510184a6841e267657f7750bc29c444fba3d35a9810fd60001b612e44565b611a907ff406f6747bf4f701495660cd6812670c94badcfce31f42f58c1a6ad20e1f572060001b612e44565b611a9985614bdb565b611ac57f80e6b81cce390388429b4ad92d0c729633ff92a3b39c78ee557fd91eb505209960001b612e44565b611af17fc60cf584725fea684c7294500e23761ffb83d0e20d21258a85759499dabae46060001b612e44565b83611afa614765565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b677f7e0e6eb23f676c5a5a42ee84ce743919a30e108fc44bb1c5d3c6fd6cf837ae0d60001b612e44565b611b937fec467f686f916ec9604b7468465856c1c83ef57259fe9a6fc260464c09a9838a60001b612e44565b81611b9c614765565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611c097f9e58434cd253e39e7c0dcf96fd15b5771bbf82fa978270dba3fa5846389094f760001b612e44565b611c357fb833af1db132e6c48f679f2773d6972f1fd6f56f1d6a65223235341ebf42c0fa60001b612e44565b80611c3e614765565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6060611cb47f312c43f47f4eed00c2a0b91e8c512ff2a8a6ab31cfcf320fe38743297a84416560001b6133ea565b611ce07f9c3c1ecfda0c420cdb4793ff47d81b2024b9c0524c831d5acca5ee9a417999c860001b6133ea565b611d0c7f23f1c05e588c25ff8dc9f56733243455c53fd3f85640a1df8a15214915819a4760001b6133ea565b6000611d16614c82565b60000160008481526020019081526020016000208054611d3590617617565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6190617617565b8015611dae5780601f10611d8357610100808354040283529160200191611dae565b820191906000526020600020905b815481529060010190602001808311611d9157829003601f168201915b50505050509050611de17f4dee7afd3e91d4c6c6a94c90162a094b064920d9387a82da1c6d064e1fe3cc5060001b6133ea565b611e0d7f6112c02f84912af5ab2789cbd18d5abdc3e73d6ced049ff97b0e60a19eb9de3560001b6133ea565b611e397fa6cdec03e4644662815e7cbaf832198029c29d5fb0e11816137478e1a840ec4060001b6133ea565b600081511415611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590617695565b60405180910390fd5b611eaa7f9ab49bd638b9455b7f2e64130ddf4f233b0a3b80acefe8f789372c3efa97af2160001b6133ea565b611ed67f0a4123bd8c1b08089efacc9338be8a7f6bf7ab4c4bee8a86043851bce1caff0060001b6133ea565b611f027f6ca6f9766d48accbefcfdddb403c058cfc26b1911cd85d1a45c019eb23605e6b60001b6133ea565b611f0a614c82565b60010181604051602001611f1f929190617749565b604051602081830303815290604052915050919050565b6000611f5c611f43614d60565b6001016000848152602001908152602001600020614d8d565b9050919050565b6000611f917f2fc13f8ae1ee464f2b1e0b2f0fa17ab0a3c67d2e59a3321e0238afc1125a862860001b612e44565b611fbd7f610b1218449889738b2ada69c63c730827be1550a5a589e7adfd1f5b0904906860001b612e44565b611fe97fb1b4425ba2edc5e6861c5e74be5501cbd40bd6afc6403772bc96536307ec385f60001b612e44565b611ffc611ff4614765565b600201614843565b905090565b600061202f7ffa4f644143e5873afd934d08b4d252115745c55c98ad2539d9fddf23d8caa43260001b612e44565b61205b7f1a7281130aca2e54851f40a6a951452f1a5044852232c04dbb986e289f08cfd760001b612e44565b6120877f4850a17edabc25661db4dc58012d9c932f58b3ab3facff40733e9619760ef0c960001b612e44565b6120d7612092614765565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061211e575061211d85336142d6565b5b61215d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612154906177df565b60405180910390fd5b61216b338686868686614da2565b5050505050565b60006121a07f97137defe44b8ef40f073d89a187cce75036a52cfb6d5ec319d36343c60108bb60001b612e44565b6121cc7f208598a720e6421a1798a94c5214991ef546a92770f360775929f77a3190518160001b612e44565b6121f87f2a09b9827ab94682f5e7b891ae3b8c5ce41cae475dabb6b94b9161280a7b6b2560001b612e44565b612200614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060815183511461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690617871565b60405180910390fd5b6000612279614dc6565b60000190506000845167ffffffffffffffff81111561229b5761229a6165a5565b5b6040519080825280602002602001820160405280156122c95781602001602082028036833780820191505090505b50905060005b855181101561241257600073ffffffffffffffffffffffffffffffffffffffff1686828151811061230357612302617891565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990617932565b60405180910390fd5b82600086838151811061237857612377617891565b5b6020026020010151815260200190815260200160002060008783815181106123a3576123a2617891565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548282815181106123f9576123f8617891565b5b60200260200101818152505080806001019150506122cf565b50809250505092915050565b600061244c7f7ca6e663761a0f614c9082f178ff07503394851964914930828ae2ff86481d8e60001b612f4d565b6124787f8aad3e92e7373d91f82323d355a587bfc96329cc3e91a9528217e4c84bcc063960001b612f4d565b6124a47f3b4e5d1c2b996ac6c6720bcd7c27922338083696d2a3f25c32b5fece8475bcae60001b612f4d565b6124ac614afd565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006125337fdbd748bedd58cd351cc9aaa0fc0b7cb7d9b05fad440bc5e722107137a5bd099660001b612e41565b61255f7f87d07511fcc54e38c625feabb25a539894a6f03945e2ad64e92d2032434b88e260001b612e41565b61258b7f2d6e45b7cac3840f2a5d0e1d5f978f8988b9b3a295b437644fbf44f919a8c75360001b612e41565b6000612595614920565b600001600084815260200190815260200160002090506125d77f3f0d3dc647efedb6521e3948ce812346577280ab972ccb8c350cc9452ac3cc8c60001b612e41565b6126037ff6c7e0f3a8a0eea983b8ea6e7f11ffc811f3dc54651ae93f57a8ca3136d0ed4360001b612e41565b61262f7f93b6dfc1ec251c8c5c67a3d52729a394b28f2e7c570933ea48b4237c8ba4d52360001b612e41565b600081600201541415612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e9061799e565b60405180910390fd5b6126a37fc3b0fe2f21b94e38a2e64011b6777d5167e5372ff0b2badc67fe1b7132a7cf3960001b612e41565b6126cf7fc52c3484f879068a55bba65d503c332e02f233ad41b97699ea9dc5d368acc78e60001b612e41565b6126fb7f1dac8be127de616dfdf8b893580f0f37bb7eeb3e6369132e3b215bce3c2ad6e960001b612e41565b6000816005015414612839576127337fd2e4691fae2fb1ec8e7002e0db37a84917021cf9de16f21a33a9cbd930cce53360001b612e41565b61275f7f6465ffd7ff9099b160bf7f6f0ff7adb0fd4cba6cff50a75a3ab05c432e37584a60001b612e41565b61278b7f324051335733b0ff0bbe597a62f8a83556984ba3d366eb9c0e6edc29bb3d5a8c60001b612e41565b6127b77fbd85d713b3ecd1c6b7f8724c8b03ad04cb14ab14311238088d189a2998c1ff3660001b612e41565b80600501546127c882600801614843565b10612808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ff90617a0a565b60405180910390fd5b6128347fda60529bfb9986c98acd273f635686d8f7b73b6f583614cbdc820a7a58964a8c60001b612e41565b612866565b6128657f7d2ef82a534bdad4018b46485ab5ca1b8d6199d565fc485c9fc955cf8315650160001b612e41565b5b6128927fb0294875c6cc08a345ea42b9646225a786377b4c6f373ca6e5c1e83170691ffa60001b612e41565b6128be7f8ef13eb5f927e493009b674a2d591d4edf2deed7446b1bc73fec86b82774ef6860001b612e41565b6128ea7f3277415fe543398c4684af668eadafa6dac0e216ec938554ca660d4f6590361d60001b612e41565b806000015442118015612901575080600101544211155b612940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293790617a76565b60405180910390fd5b61296c7f47d1371d81b2dfae19008e1446f17c094119b8e80f43e7faf7c0d36c0a79bc3960001b612e41565b6129987f5a54c035f36d106764ab8a16f94ecc6541f4a99e1a3f6672a7d947269b95a1ec60001b612e41565b6129c47f37dc2fc9d219cfff2f7d3e9cacfb859d74313cff97c8573e82bfddcce36bc52560001b612e41565b60008160000154426129d69190617243565b9050612a047fe9f5dbd7c9c9b9dc1f8efbc13fb0c02a1028c73d5fdb06f3af09ecf913a691bb60001b612e41565b612a307fe80755f6fb225c316f592f29da79db79f968935adfc2c4b0a1c396037c8379ae60001b612e41565b600082600001548360010154612a469190617243565b9050612a747f77e4ee5346abf5b5d88d42a9ab8a6e4667b53e015b1edefa3c10e8599591241b60001b612e41565b612aa07fbc613c02241742596ff7822714453fa8a7fd655883df187aa440fb4faa8a38aa60001b612e41565b612ab982828560020154866003015487600401546133ed565b9350505050919050565b6000806000806000806000806000612afd7fe8a5af4e439f02224da033277a50ab5279802b43087c27f372488d6423946ff760001b612e41565b612b297f5487a9c3f4a6be99907c28a523b37d3836a9af8930d871758cb1e2b9e63bc66160001b612e41565b612b557f48ddcf1b678145f3268d96f945fd461e5a4326ef88837141519aef52c51ffee960001b612e41565b6000612b5f614920565b60000160008c81526020019081526020016000209050612ba17f8dbe65c6881692a6776899f280065952dc2df69d72fe07395c338dcc973a490960001b612e41565b612bcd7f47b941210197f2efd58d1304cae8f37ab1c986ec3fb529211f9686c6fcacc3a760001b612e41565b612bf97fb0469c1f5adfed701fba68d5d126e5e8ec03403ef713dfda43e52734cdccae9860001b612e41565b600081600201541415612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c389061799e565b60405180910390fd5b612c6d7fa68513e6f67f026cca3cd16f744f770d6aa54e70bdd9db5ed90e954b349a7f6f60001b612e41565b612c997fb8ecceab63ff293d4c2ccbdb4eba26bb05c05de4269141e23d78488d9f660fcb60001b612e41565b612cc57ff5d4b15f45d20693747daf6cb337d95c90d9883bcf518c7c5aace37f5c19256660001b612e41565b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d1989600801614843565b995099509950995099509950995099509950509193959799909294969850565b60606000612d45614d60565b600101600084815260200190815260200160002090506000612d6682614d8d565b67ffffffffffffffff811115612d7f57612d7e6165a5565b5b604051908082528060200260200182016040528015612dad5781602001602082028036833780820191505090505b50905060005b612dbc83614d8d565b811015612e3657612dd68184614df390919063ffffffff16565b828281518110612de957612de8617891565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080612e2e90617a96565b915050612db3565b508092505050919050565b50565b50565b60606000612e53614d60565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000612ea082614e0d565b67ffffffffffffffff811115612eb957612eb86165a5565b5b604051908082528060200260200182016040528015612ee75781602001602082028036833780820191505090505b50905060005b612ef683614e0d565b811015612f4257612f108184614e2290919063ffffffff16565b828281518110612f2357612f22617891565b5b6020026020010181815250508080612f3a90617a96565b915050612eed565b508092505050919050565b50565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb690617b51565b60405180910390fd5b80612fc8614dc6565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516130b9919061656f565b60405180910390a35050565b60006130f37ffa26a7da27c0ac06ac7805887f2377614da761287f2f7c3a4dc6abc18eb5473b60001b612e41565b61311f7f94d85335309ff28be4aa749f1808264193e61aaa98a6c3ad981cab613330b94960001b612e41565b61314b7f867529e2ffd01a03b7646d7b25c07931641c80ff9c1d33df57e95c401a39f0b560001b612e41565b6000613155614920565b600001600085815260200190815260200160002090506131977ffcaa8f30a2501929c504af414955562b187a03a3fbef2540414642f43b2bf0b460001b612e41565b6131c37fb5fdf3ca75f9f25deb6461c7e36dda453f09d0c5ec33c02845676511a0a620e260001b612e41565b6131ef7f64092fc04b74608d5fbdfd925076b6f0d9dce2f52f72687bee3fd2265dbd26a060001b612e41565b600081600201541415613237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322e9061799e565b60405180910390fd5b6132637ff44c2fce1b667441bdce1aa5e317ce4e059c4be792145f244950392c19c90f5c60001b612e41565b61328f7f4e961061e1b66e4d007d7ea686f1efd64b12e1f0daa709c60157b5c7e270e8e760001b612e41565b6132bb7f56b4bbe6761ee9daa28e614611acd1aeefec4b71432acebe303e72cf7199ccc660001b612e41565b6133048160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b91505092915050565b600061333b7fc7bf4d9de951de2382a329515d163c8b3de60b5ec9513e3beb9c0779f70fa8cf60001b612e44565b6133677f607acc0e7f5b80faa103c94ffdc8845d15f77dcb52635e930cdc0c13e5465fed60001b612e44565b6133937f0165c996af12bc8835cedb815a581af458d067b5bb9e5b20b6185ee555a82a1f60001b612e44565b61339b614765565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006133ce614d60565b6000016000838152602001908152602001600020549050919050565b50565b600061341b7f467e8534352d8ba04feb9309024ec928d7fcca8fefcae69a9d81b84da5074e3b60001b612e41565b6134477f42552ebb707a13c6433ffcff968f267f1b1c67dbd87aae42c0ac206fd7b4cb3a60001b612e41565b6134737fff36ec40513fb6615e5a6da1f53a00a33167b7ffa9c0c08f8c8b32377d978d5360001b612e41565b8483856134809190617243565b8761348b9190617b71565b84866134979190617243565b84896134a39190617bfa565b6134ad9190617b71565b86886134b99190617b71565b6134c39190617c2b565b6134cd9190617243565b6134d79190617c81565b905095945050505050565b60006135107f1a0bc5712cf21f15ffe356effc6be38ee5e256049652db55e362e0cb02fbcd3360001b612e41565b61353c7f9556cf658fc9edfafcd4cce3a2bba017014a52c41f5c122233cb5f27045f8e5760001b612e41565b6135687fd09a93ae0b33bae90200104ccea2eeea9260431e57c2b6d9b2512c81489f220960001b612e41565b6000613572614572565b90506135a07f0a96915e921ce1bb9dff109ae233ac4462ceb9ef2568ceae98430347f727d54860001b612e41565b6135cc7f4993b2d38321c91c5694ed34ac6b4fc75a66f0186add52a9c8c4e7a80f5632d360001b612e41565b60006135d6614920565b600001600086815260200190815260200160002090506136187f2db17f44d2f4f466e8c646f303e33a3e7c507cab6b4ab7ee21b161e4bf50aa8760001b612e41565b6136447fa2fdc2d6b76ce882a2b1c7c9e4dc0db249a4107db825384998b8c812edc5778d60001b612e41565b60008160050154146137825761367c7f9297c12ecb998c58f523d14c3630cddd6e9a47dddbc3e5670dd90483aa6a6e6260001b612e41565b6136a87fd67931535a3386d2df57da321007065fc1b0ff5843e08803d5ada4777ec05cfe60001b612e41565b6136d47feb63e0b74550ee850541a4b43bcb50d1718d25f3c1fc6e07a70be2df53b3217960001b612e41565b6137007f8860f6cf9b547ada5d33edb8c755b7622918c397e73be151799ae47e357c022760001b612e41565b806005015461371182600801614843565b10613751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374890617a0a565b60405180910390fd5b61377d7fdfefd62cfcd074d6cec2a70941a72b4db89062098859306fb3b626f97dac509060001b612e41565b6137af565b6137ae7f6eb419f4ef571ee69565f93c0614977e2c78d1082f3b11e6faae7bfab4d7d4af60001b612e41565b5b6137db7fe6bd9eab0fcdc8dd0393fb7687b25c92bbf481cb9f8171f7a38b25336a9f5aa260001b612e41565b6138077f0c6ef021f5f8c4c1d04414a030b0d3b29d069f80c50fe04b8fd9c4c958ed2e0660001b612e41565b6138337fca48105f8ccb5c8f371268598674f88c9427da131aee83b6bcb5203b108989d160001b612e41565b80600001544211801561384a575080600101544211155b613889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388090617a76565b60405180910390fd5b6138b57f84b3a30e3aaaad891b6476fac1c1ce092f7377c3af53bd4968bf7584f8ed5d9460001b612e41565b6138e17fafac73132aea02f543d24463034fe220de761a3855acbcdb8b0ed5ad866cd4bc60001b612e41565b61390d7f95d7dccdc85275beeb84cca0514066e29ae2c008d87247aa57d5525ffe6415af60001b612e41565b600081600001544261391f9190617243565b905061394d7f2bd2a43d6c3fbb552ae634a9cf117bdd370c1c0452d406ff78d337a42aafc8d160001b612e41565b6139797f8388d7d8641f292eda9f643d2a3824b14a200164b771b206f502a79db76ff32b60001b612e41565b60008260000154836001015461398f9190617243565b90506139bc7ecb9e931eeac8a3060d2111d1528ac97fb328698d73f00d32df883fa71cc22e60001b612e41565b6139e87fcb0a4ab5a3a709d23815a0cc8946278ab53567900be8f410189e9df1c188265060001b612e41565b6000613a0383838660020154876003015488600401546133ed565b9050613a317f2671c493662477f9138cf0caf3de07279e3d88bb22dd8e760b95179c36347e7c60001b612e41565b613a5d7ff5e0e2c4a1f649b6261ceae6d7af54c90aea94ed25a21079a64af5ae30b5f86560001b612e41565b613a897f45038e8372fde8d00740a9af5a28c467ff690756fa2228608288d7117526468d60001b612e41565b80341015613acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac390617cfe565b60405180910390fd5b613af87fb99e15263fee06f285aa82d0590f86b64a774ded68dd56fa792be386ba2dff3960001b612e41565b613b247fcea5f77e8e6fe64ec9d03e19e08dafbe6f36208be6a8bc76dc8992941dace0c160001b612e41565b613b507fadc34614713e8a678778d6e7443e528a69db973d57e13075306b0d62bdd562ac60001b612e41565b60006064856006015434613b649190617b71565b613b6e9190617c81565b9050613b9c7fc1867565605dc569e134fee7c94576cd28efef42e5f2496102a2c9066fbf279160001b612e41565b613bc87f1a4bb91bd12f72508e757059a9641a27720f734c35864dd6567c1dc2b7048fa560001b612e41565b60008134613bd69190617243565b9050613c047f1ae67994343a150b53f1a8665ba5d89c05efd46b78d681185e4e8ec6db12b13a60001b612e41565b613c307f1770c47a621900aff2a3654e052089173ced90f384b3388fa8cf6eb17368bb3e60001b612e41565b6000613c7b8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614843565b9050613ca97fa9f0fa1149526d518740884046d951680b4a8c8b56343df1c9fe157319c6bf1a60001b612e41565b613cd57f15db6d0424921ba08d952170d401e6dbbde2ffad68d82fd8e96bce2f25c054b860001b612e41565b60008b8983604051602001613cec93929190617d1e565b6040516020818303038152906040529050613d297fbde68610edece319f0c734dacb5c71c244ca8355565eda2f1cc462b6ea7d9f1360001b612e41565b613d557fcf4ebaf86cc5878f3c197d966d95eb8abe3205584511d4025bc09d4831bd952a60001b612e41565b6000613d798c613d6b848051906020012061470e565b61473e90919063ffffffff16565b9050613da67e0c1e0208a83ad0c8bdf511888c733d08452faf2edb2e8651cfaf82ee0571fc60001b612e41565b613dd27fe717e93d298956c9588ab8f07146f5af81795f7be948f46f5f8b01e17a760d2a60001b612e41565b613dfe7fefbb91477106384cde2a0c3bb291afc38600957adaa2242d8dfe31ceb84778fe60001b612e41565b613e06614765565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e8e9061755c565b60405180910390fd5b613ec37f51661d87ff3dadec09005108334ba343b2f51dce9a09ce8e2fee4558d5247c7f60001b612e41565b613eef7faa0c3b1ee34f2a4375be328025f1890701397b70b1250e4f62255fcac543ab2960001b612e41565b613f1b7f6a91c3c8c7494c04964741fd0901d0f2d14e1992b6aa8d8c39e334fd538edb4360001b612e41565b613f278960080161490a565b613f537f1106ae168cb91cbd1ea6e5cf2f9c61842c0059249b5ee05474bbc2b99f8e466560001b612e41565b613f7f7f8d774324aabda0627bcc1239bcce6ee170958556fbb7d24c831fdb134fa3522260001b612e41565b613fc88960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061490a565b613ff47fa957eac5cebc2c1f29ec1521b9f962659947f3050a20a2bfa217811afd3854fc60001b612e41565b6140207f876c0988c120574709032973f531c303d92925c8cb10c272e6aa611f81a8e62060001b612e41565b61403c8a8e6001604051806020016040528060008152506149fe565b6140687f6ba38d6297457146f8d16b1fbd1a98b39780979ac7f89eb6da84fafbbc0c219e60001b612e41565b6140947f48c5e3ccc7e77125625395ca7e6d39b6ea2901eb68abde350939b1112f0e0fc160001b612e41565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156140fe573d6000803e3d6000fd5b5061412b7f9ac51f0cbe86cbef4849ddb20c451ddd33b0653019f6c0973458611f5721834260001b612e41565b6141577fcb4980c535a9850042d645dbbaad9aeff49d65b78d3ee55b58d12b1a687783eb60001b612e41565b61415f614765565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156141c8573d6000803e3d6000fd5b506141f57f32485977772f9ad6ebae13dfbc40f6f0009c657716c1ff71265d0047384e25d260001b612e41565b6142217fb5d3bef5338356a23dfcde40c5e4441fd29980e4d2b00f5834752d2666f70c6d60001b612e41565b60018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a46142937f189d29ba560835342b354d49bbf2a33dd887f8330998ce4a22f0af009e5c71d860001b612e41565b6142bf7f58344b96709b709bc6fef55f144a0d1a49dc6058486a0154310d529f27c2a62660001b612e41565b60019a505050505050505050505092915050565b50565b60006142e0614dc6565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806143b357506143b285336142d6565b5b6143f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e9906177df565b60405180910390fd5b614400338686868686614e3c565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446f90617dcd565b60405180910390fd5b614480614dc6565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006145a07f88f29638fa65ae63a841285179c25a2e39ced6d390f74256094dd2a735b4027660001b612f4d565b6145cc7fd1328846b45aade881fe5353aea2a4c719af9da68bc5171168583cc13155431460001b612f4d565b6145f87f7ed86c48a0f81ef7874eb0d2d3f21b0e65416b91c4c9f816a0589566b5ba09e360001b612f4d565b601860003690501015801561461257506146113361241e565b5b1561467e576146437f070f7f2b2922ac8abb388507c63d261a8e7c8fc39014856f8ba03bdf0984e0a260001b612f4d565b61466f7f572eebcddfe593539ba8aa5956472f6ac47b18bd757da058e419e5f60d92340960001b612f4d565b601436033560601c905061470a565b6146aa7f049f00aa6d96a4574a36ae1b2039ae5b66d97456b939a9c927c84997c029175560001b612f4d565b6146d67f0251339121068447d4c576c5e96b821e81d1da157c7c6da93224ac2005db84c860001b612f4d565b6147027ffae7111910251cf097d73c9503b05824f9222f1178f4c4f6fd670c2b76459f1560001b612f4d565b33905061470b565b5b90565b6000816040516020016147219190617e5a565b604051602081830303815290604052805190602001209050919050565b600080600061474d8585614e60565b9150915061475a81614ee3565b819250505092915050565b60006147937f22989ab266127db139a475327f255a7cbdd8f4dcc1504e600dce7366519f266c60001b6150b8565b6147bf7fad5e44193be1059dfdffe9ac6c6f3af73928f60ac167740b45d14ca0f77703cc60001b6150b8565b6147eb7fe345fd94e4db779611a270161ffac772f81575bb475f1d42c7b8aac50c26c99760001b6150b8565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e905061483c7fedd75a57aad4d39568d96afe62dad6399b99e6d5ce59343e0e1d06daf02aa7d360001b6150b8565b8091505090565b600081600001549050919050565b61487d7f83beed3ed19f3f5bfb7572c3835676b72c274d00ed094c05f59e63c8ab88a84060001b6133ea565b6148a97f6369348c2178daa645f0bf939f1a6678aa7569c2b9cd0fde0692d9e6a32b54b660001b6133ea565b6148d57f5872f937c02b64516677c99c18a6bb89e7471cab449621203787d44f6efe2e7060001b6133ea565b806148de614c82565b6000016000848152602001908152602001600020908051906020019061490592919061631a565b505050565b6001816000016000828254019250508190555050565b600061494e7fcbd6a87feadf8bc6d18a7e4d3dce6dea12857618c537b87a82537ff45dbb94b360001b6150bb565b61497a7f776cfd16ce6d3511350000a04752b2abc52815f973792fc79403090e385a2abd60001b6150bb565b6149a67f1acc6ee66986e06ec5b2aab054e955ca5a1313b484283bf79dbef6e5d3e14be160001b6150bb565b60007f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990506149f77f4d39dc49b0d6cf786271a7bfc8fd46388ec159f0027f61fc98852b25ce303dfa60001b6150bb565b8091505090565b614a0a848484846150be565b614a1933600086868686615248565b50505050565b6000614a4d7f499a2370464f33cfc8e2ef033f579272af11ed73cc8753c9cbc6f13fb4872e9c60001b615420565b614a797fd098f0bcaca6285a9ced2563c95781bc2f3fcdbf7c01993459cfa5c977f104a760001b615420565b614aa57f8b6492a6876bb38cd0913d978cd1674f72509ad53daa743eb10fa4a5b109542160001b615420565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050614af67f8734688ce7e316775a7605f64173dd1a8314018c64251ca9b5f78aaedc1b1d0360001b615420565b8091505090565b6000614b2b7fbf28b4c694d70043cdbba1139d13e89322d9971fc2604eec0c38e355815d0bd060001b615423565b614b577ff948c5bcd8a8be4422c92e8f63497dfe9d651affb2eecccb4e1e1a34b9a5a5b460001b615423565b614b837ffb0af2a23ffb1b99ced27c52f498bc6ab948fe939d307309c7986f94c11539e960001b615423565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9939050614bd47f471ad1677eb85872327f149b61d16c373352df62511e8db57eca7d728fb69bfa60001b615423565b8091505090565b614c077f0c8e7e650704c8ee3af1f7a15c517c38dc4fc70856d2ff36fcd44c3408e32d7c60001b6133ea565b614c337fa601ee21d724d0cd41bcad5c9a81c9860d87f8f5d63ee068e05dacf7c6a3b0f060001b6133ea565b614c5f7f791c3597ef5db947d31801b2019c0ae1fbc8ed0ae2c503dc0474a15c92d5849e60001b6133ea565b80614c68614c82565b6001019080519060200190614c7e92919061631a565b5050565b6000614cb07f6098ffde723ed64276c2c486b25bcd3baa9fef2c472f4b52ce362b86534e958460001b615426565b614cdc7f10eb3f6b27aaacda65aa8f87c2662bf52b41f9b1818b9f64dc9266fe61391c0360001b615426565b614d087f776de49b4a1bf86ef00deb75e863c7bb93d54dd6f3d8e2d4f0aa283f5cb993d360001b615426565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c839050614d597fdd41ca273c50064cb67b10ee4905fef1b95ec8ac8c9637a58c89453b6234ce3e60001b615426565b8091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000614d9b82600001615429565b9050919050565b614db086868686868661543a565b614dbe868686868686615746565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b6000614e02836000018361591e565b60001c905092915050565b6000614e1b82600001615429565b9050919050565b6000614e31836000018361591e565b60001c905092915050565b614e4a868686868686615992565b614e58868686868686615248565b505050505050565b600080604183511415614ea25760008060006020860151925060408601519150606086015160001a9050614e9687828585615c0a565b94509450505050614edc565b604083511415614ed3576000806020850151915060408501519050614ec8868383615d17565b935093505050614edc565b60006002915091505b9250929050565b60006004811115614ef757614ef6617e80565b5b816004811115614f0a57614f09617e80565b5b1415614f15576150b5565b60016004811115614f2957614f28617e80565b5b816004811115614f3c57614f3b617e80565b5b1415614f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f7490617efb565b60405180910390fd5b60026004811115614f9157614f90617e80565b5b816004811115614fa457614fa3617e80565b5b1415614fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614fdc90617f67565b60405180910390fd5b60036004811115614ff957614ff8617e80565b5b81600481111561500c5761500b617e80565b5b141561504d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161504490617ff9565b60405180910390fd5b6004808111156150605761505f617e80565b5b81600481111561507357615072617e80565b5b14156150b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150ab9061808b565b60405180910390fd5b5b50565b50565b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561512e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016151259061811d565b60405180910390fd5b61514d3360008661513e87615d65565b61514787615d65565b86615ddf565b6000615157614dc6565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546151bb9190617c2b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161523992919061813d565b60405180910390a45050505050565b6152678473ffffffffffffffffffffffffffffffffffffffff16615df5565b15615418578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016152ad9594939291906181bb565b6020604051808303816000875af19250505080156152e957506040513d601f19601f820116820180604052508101906152e6919061822a565b60015b61538f576152f5618264565b806308c379a01415615352575061530a618286565b806153155750615354565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161534991906169bf565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016153869061838e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614615416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161540d90618420565b60405180910390fd5b505b505050505050565b50565b50565b50565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156154aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154a1906184b2565b60405180910390fd5b81518351146154ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016154e590618544565b60405180910390fd5b6154fc868686868686615ddf565b6000615506614dc6565b600001905060005b84518110156156be57600085828151811061552c5761552b617891565b5b60200260200101519050600085838151811061554b5761554a617891565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156155ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016155e3906185d6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546156a29190617c2b565b92505081905550505080806156b690617a96565b91505061550e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516157359291906185f6565b60405180910390a450505050505050565b6157658473ffffffffffffffffffffffffffffffffffffffff16615df5565b15615916578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016157ab95949392919061862d565b6020604051808303816000875af19250505080156157e757506040513d601f19601f820116820180604052508101906157e4919061822a565b60015b61588d576157f3618264565b806308c379a014156158505750615808618286565b806158135750615852565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161584791906169bf565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016158849061838e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614615914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161590b90618420565b60405180910390fd5b505b505050505050565b600081836000018054905011615969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161596090618707565b60405180910390fd5b82600001828154811061597f5761597e617891565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016159f9906184b2565b60405180910390fd5b615a20868686615a1187615d65565b615a1a87615d65565b86615ddf565b6000615a2a614dc6565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015615ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615abd906185d6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254615b7c9190617c2b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051615bf992919061813d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115615c45576000600391509150615d0e565b601b8560ff1614158015615c5d5750601c8560ff1614155b15615c6f576000600491509150615d0e565b600060018787878760405160008152602001604052604051615c949493929190618752565b6020604051602081039080840390855afa158015615cb6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615d0557600060019250925050615d0e565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050615d5787828885615c0a565b935093505050935093915050565b60606000600167ffffffffffffffff811115615d8457615d836165a5565b5b604051908082528060200260200182016040528015615db25781602001602082028036833780820191505090505b5090508281600081518110615dca57615dc9617891565b5b60200260200101818152505080915050919050565b615ded868686868686615e08565b505050505050565b600080823b905060008111915050919050565b615e16868686868686615e1e565b505050505050565b615e2c8686868686866160d9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146160d1576000615e69614d60565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156160cb576000878281518110615f1e57615f1d617891565b5b6020026020010151905060008111156160b7576000898381518110615f4657615f45617891565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415615fb657818760000160008381526020019081526020016000206000828254615faa9190617c2b565b92505081905550616002565b81615fc18d83614407565b141561600157615feb8c8760008481526020019081526020016000206160e190919063ffffffff16565b50615fff818661611190919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156160685781876000016000838152602001908152602001600020600082825461605c9190617243565b925050819055506160b5565b60006160748c83614407565b14156160b45761609e8b87600084815260200190815260200160002061612b90919063ffffffff16565b506160b2818561615b90919063ffffffff16565b505b5b505b5080806160c390617a96565b915050615f00565b50505050505b505050505050565b505050505050565b6000616109836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616175565b905092915050565b6000616123836000018360001b616175565b905092915050565b6000616153836000018373ffffffffffffffffffffffffffffffffffffffff1660001b616287565b905092915050565b600061616d836000018360001b616287565b905092915050565b6000808360010160008481526020019081526020016000205490506000811461627b5760006001826161a79190617243565b9050600085600001600187600001805490506161c39190617243565b815481106161d4576161d3617891565b5b90600052602060002001549050808660000183815481106161f8576161f7617891565b5b90600052602060002001819055506001826162139190617c2b565b86600101600083815260200190815260200160002081905550856000018054806162405761623f618797565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050616281565b60009150505b92915050565b600061629383836162f7565b6162ec5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506162f1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461632690617617565b90600052602060002090601f016020900481019282616348576000855561638f565b82601f1061636157805160ff191683800117855561638f565b8280016001018555821561638f579182015b8281111561638e578251825591602001919060010190616373565b5b50905061639c91906163a0565b5090565b5b808211156163b95760008160009055506001016163a1565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006163fc826163d1565b9050919050565b61640c816163f1565b811461641757600080fd5b50565b60008135905061642981616403565b92915050565b6000819050919050565b6164428161642f565b811461644d57600080fd5b50565b60008135905061645f81616439565b92915050565b6000806040838503121561647c5761647b6163c7565b5b600061648a8582860161641a565b925050602061649b85828601616450565b9150509250929050565b6164ae8161642f565b82525050565b60006020820190506164c960008301846164a5565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b616504816164cf565b811461650f57600080fd5b50565b600081359050616521816164fb565b92915050565b60006020828403121561653d5761653c6163c7565b5b600061654b84828501616512565b91505092915050565b60008115159050919050565b61656981616554565b82525050565b60006020820190506165846000830184616560565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6165dd82616594565b810181811067ffffffffffffffff821117156165fc576165fb6165a5565b5b80604052505050565b600061660f6163bd565b905061661b82826165d4565b919050565b600067ffffffffffffffff82111561663b5761663a6165a5565b5b61664482616594565b9050602081019050919050565b82818337600083830152505050565b600061667361666e84616620565b616605565b90508281526020810184848401111561668f5761668e61658f565b5b61669a848285616651565b509392505050565b600082601f8301126166b7576166b661658a565b5b81356166c7848260208601616660565b91505092915050565b600067ffffffffffffffff8211156166eb576166ea6165a5565b5b6166f482616594565b9050602081019050919050565b600061671461670f846166d0565b616605565b9050828152602081018484840111156167305761672f61658f565b5b61673b848285616651565b509392505050565b600082601f8301126167585761675761658a565b5b8135616768848260208601616701565b91505092915050565b60008060008060008060008060006101208a8c031215616794576167936163c7565b5b60008a013567ffffffffffffffff8111156167b2576167b16163cc565b5b6167be8c828d016166a2565b99505060206167cf8c828d01616450565b98505060406167e08c828d01616450565b97505060606167f18c828d01616450565b96505060806168028c828d01616450565b95505060a06168138c828d01616450565b94505060c06168248c828d01616450565b93505060e06168358c828d01616450565b9250506101008a013567ffffffffffffffff811115616857576168566163cc565b5b6168638c828d01616743565b9150509295985092959850929598565b600080600080600060a0868803121561688f5761688e6163c7565b5b600086013567ffffffffffffffff8111156168ad576168ac6163cc565b5b6168b9888289016166a2565b95505060206168ca8882890161641a565b94505060406168db8882890161641a565b93505060606168ec8882890161641a565b92505060806168fd8882890161641a565b9150509295509295909350565b6000602082840312156169205761691f6163c7565b5b600061692e84828501616450565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015616971578082015181840152602081019050616956565b83811115616980576000848401525b50505050565b600061699182616937565b61699b8185616942565b93506169ab818560208601616953565b6169b481616594565b840191505092915050565b600060208201905081810360008301526169d98184616986565b905092915050565b6000602082840312156169f7576169f66163c7565b5b6000616a058482850161641a565b91505092915050565b600067ffffffffffffffff821115616a2957616a286165a5565b5b602082029050602081019050919050565b600080fd5b6000616a52616a4d84616a0e565b616605565b90508083825260208201905060208402830185811115616a7557616a74616a3a565b5b835b81811015616a9e5780616a8a8882616450565b845260208401935050602081019050616a77565b5050509392505050565b600082601f830112616abd57616abc61658a565b5b8135616acd848260208601616a3f565b91505092915050565b600080600080600060a08688031215616af257616af16163c7565b5b6000616b008882890161641a565b9550506020616b118882890161641a565b945050604086013567ffffffffffffffff811115616b3257616b316163cc565b5b616b3e88828901616aa8565b935050606086013567ffffffffffffffff811115616b5f57616b5e6163cc565b5b616b6b88828901616aa8565b925050608086013567ffffffffffffffff811115616b8c57616b8b6163cc565b5b616b9888828901616743565b9150509295509295909350565b616bae816163f1565b82525050565b6000602082019050616bc96000830184616ba5565b92915050565b600067ffffffffffffffff821115616bea57616be96165a5565b5b602082029050602081019050919050565b6000616c0e616c0984616bcf565b616605565b90508083825260208201905060208402830185811115616c3157616c30616a3a565b5b835b81811015616c5a5780616c46888261641a565b845260208401935050602081019050616c33565b5050509392505050565b600082601f830112616c7957616c7861658a565b5b8135616c89848260208601616bfb565b91505092915050565b60008060408385031215616ca957616ca86163c7565b5b600083013567ffffffffffffffff811115616cc757616cc66163cc565b5b616cd385828601616c64565b925050602083013567ffffffffffffffff811115616cf457616cf36163cc565b5b616d0085828601616aa8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b616d3f8161642f565b82525050565b6000616d518383616d36565b60208301905092915050565b6000602082019050919050565b6000616d7582616d0a565b616d7f8185616d15565b9350616d8a83616d26565b8060005b83811015616dbb578151616da28882616d45565b9750616dad83616d5d565b925050600181019050616d8e565b5085935050505092915050565b60006020820190508181036000830152616de28184616d6a565b905092915050565b600061012082019050616e00600083018c6164a5565b616e0d602083018b6164a5565b616e1a604083018a6164a5565b616e2760608301896164a5565b616e3460808301886164a5565b616e4160a08301876164a5565b616e4e60c08301866164a5565b616e5b60e0830185616ba5565b616e696101008301846164a5565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b616eac816163f1565b82525050565b6000616ebe8383616ea3565b60208301905092915050565b6000602082019050919050565b6000616ee282616e77565b616eec8185616e82565b9350616ef783616e93565b8060005b83811015616f28578151616f0f8882616eb2565b9750616f1a83616eca565b925050600181019050616efb565b5085935050505092915050565b60006020820190508181036000830152616f4f8184616ed7565b905092915050565b6000819050919050565b616f6a81616f57565b8114616f7557600080fd5b50565b600081359050616f8781616f61565b92915050565b600060208284031215616fa357616fa26163c7565b5b6000616fb184828501616f78565b91505092915050565b616fc381616554565b8114616fce57600080fd5b50565b600081359050616fe081616fba565b92915050565b60008060408385031215616ffd57616ffc6163c7565b5b600061700b8582860161641a565b925050602061701c85828601616fd1565b9150509250929050565b6000806040838503121561703d5761703c6163c7565b5b600061704b85828601616450565b925050602061705c8582860161641a565b9150509250929050565b600080600080600060a08688031215617082576170816163c7565b5b600061709088828901616450565b95505060206170a188828901616450565b94505060406170b288828901616450565b93505060606170c388828901616450565b92505060806170d488828901616450565b9150509295509295909350565b600080604083850312156170f8576170f76163c7565b5b600061710685828601616450565b925050602083013567ffffffffffffffff811115617127576171266163cc565b5b61713385828601616743565b9150509250929050565b60008060408385031215617154576171536163c7565b5b60006171628582860161641a565b92505060206171738582860161641a565b9150509250929050565b600080600080600060a08688031215617199576171986163c7565b5b60006171a78882890161641a565b95505060206171b88882890161641a565b94505060406171c988828901616450565b93505060606171da88828901616450565b925050608086013567ffffffffffffffff8111156171fb576171fa6163cc565b5b61720788828901616743565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061724e8261642f565b91506172598361642f565b92508282101561726c5761726b617214565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b60006172ad600283616942565b91506172b882617277565b602082019050919050565b600060208201905081810360008301526172dc816172a0565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b6000617319600283616942565b9150617324826172e3565b602082019050919050565b600060208201905081810360008301526173488161730c565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b6000617385600383616942565b91506173908261734f565b602082019050919050565b600060208201905081810360008301526173b481617378565b9050919050565b600081905092915050565b60006173d182616937565b6173db81856173bb565b93506173eb818560208601616953565b80840191505092915050565b6000819050919050565b61741261740d8261642f565b6173f7565b82525050565b60008160601b9050919050565b600061743082617418565b9050919050565b600061744282617425565b9050919050565b61745a617455826163f1565b617437565b82525050565b600061746c828d6173c6565b9150617478828c617401565b602082019150617488828b617401565b602082019150617498828a617401565b6020820191506174a88289617401565b6020820191506174b88288617401565b6020820191506174c88287617401565b6020820191506174d88286617401565b6020820191506174e88285617449565b6014820191506174f88284617401565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000617546600283616942565b915061755182617510565b602082019050919050565b6000602082019050818103600083015261757581617539565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b60006175b2600283616942565b91506175bd8261757c565b602082019050919050565b600060208201905081810360008301526175e1816175a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061762f57607f821691505b60208210811415617643576176426175e8565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b600061767f601d83616942565b915061768a82617649565b602082019050919050565b600060208201905081810360008301526176ae81617672565b9050919050565b60008190508160005260206000209050919050565b600081546176d781617617565b6176e181866173bb565b945060018216600081146176fc576001811461770d57617740565b60ff19831686528186019350617740565b617716856176b5565b60005b8381101561773857815481890152600182019150602081019050617719565b838801955050505b50505092915050565b600061775582856176ca565b915061776182846173c6565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006177c9602983616942565b91506177d48261776d565b604082019050919050565b600060208201905081810360008301526177f8816177bc565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061785b602983616942565b9150617866826177ff565b604082019050919050565b6000602082019050818103600083015261788a8161784e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061791c603183616942565b9150617927826178c0565b604082019050919050565b6000602082019050818103600083015261794b8161790f565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000617988600383616942565b915061799382617952565b602082019050919050565b600060208201905081810360008301526179b78161797b565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b60006179f4600283616942565b91506179ff826179be565b602082019050919050565b60006020820190508181036000830152617a23816179e7565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000617a60600383616942565b9150617a6b82617a2a565b602082019050919050565b60006020820190508181036000830152617a8f81617a53565b9050919050565b6000617aa18261642f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415617ad457617ad3617214565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000617b3b602983616942565b9150617b4682617adf565b604082019050919050565b60006020820190508181036000830152617b6a81617b2e565b9050919050565b6000617b7c8261642f565b9150617b878361642f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615617bc057617bbf617214565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000617c058261642f565b9150617c108361642f565b925082617c2057617c1f617bcb565b5b828206905092915050565b6000617c368261642f565b9150617c418361642f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115617c7657617c75617214565b5b828201905092915050565b6000617c8c8261642f565b9150617c978361642f565b925082617ca757617ca6617bcb565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b6000617ce8600283616942565b9150617cf382617cb2565b602082019050919050565b60006020820190508181036000830152617d1781617cdb565b9050919050565b6000617d2a8286617401565b602082019150617d3a8285617449565b601482019150617d4a8284617401565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000617db7602b83616942565b9150617dc282617d5b565b604082019050919050565b60006020820190508181036000830152617de681617daa565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000617e23601c836173bb565b9150617e2e82617ded565b601c82019050919050565b6000819050919050565b617e54617e4f82616f57565b617e39565b82525050565b6000617e6582617e16565b9150617e718284617e43565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000617ee5601883616942565b9150617ef082617eaf565b602082019050919050565b60006020820190508181036000830152617f1481617ed8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000617f51601f83616942565b9150617f5c82617f1b565b602082019050919050565b60006020820190508181036000830152617f8081617f44565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000617fe3602283616942565b9150617fee82617f87565b604082019050919050565b6000602082019050818103600083015261801281617fd6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000618075602283616942565b915061808082618019565b604082019050919050565b600060208201905081810360008301526180a481618068565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000618107602183616942565b9150618112826180ab565b604082019050919050565b60006020820190508181036000830152618136816180fa565b9050919050565b600060408201905061815260008301856164a5565b61815f60208301846164a5565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061818d82618166565b6181978185618171565b93506181a7818560208601616953565b6181b081616594565b840191505092915050565b600060a0820190506181d06000830188616ba5565b6181dd6020830187616ba5565b6181ea60408301866164a5565b6181f760608301856164a5565b81810360808301526182098184618182565b90509695505050505050565b600081519050618224816164fb565b92915050565b6000602082840312156182405761823f6163c7565b5b600061824e84828501618215565b91505092915050565b60008160e01c9050919050565b600060033d11156182835760046000803e618280600051618257565b90505b90565b600060443d101561829657618319565b61829e6163bd565b60043d036004823e80513d602482011167ffffffffffffffff821117156182c6575050618319565b808201805167ffffffffffffffff8111156182e45750505050618319565b80602083010160043d038501811115618301575050505050618319565b618310826020018501866165d4565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000618378603483616942565b91506183838261831c565b604082019050919050565b600060208201905081810360008301526183a78161836b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061840a602883616942565b9150618415826183ae565b604082019050919050565b60006020820190508181036000830152618439816183fd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061849c602583616942565b91506184a782618440565b604082019050919050565b600060208201905081810360008301526184cb8161848f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061852e602883616942565b9150618539826184d2565b604082019050919050565b6000602082019050818103600083015261855d81618521565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b60006185c0602b83616942565b91506185cb82618564565b604082019050919050565b600060208201905081810360008301526185ef816185b3565b9050919050565b600060408201905081810360008301526186108185616d6a565b905081810360208301526186248184616d6a565b90509392505050565b600060a0820190506186426000830188616ba5565b61864f6020830187616ba5565b81810360408301526186618186616d6a565b905081810360608301526186758185616d6a565b905081810360808301526186898184618182565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006186f1602283616942565b91506186fc82618695565b604082019050919050565b60006020820190508181036000830152618720816186e4565b9050919050565b61873081616f57565b82525050565b600060ff82169050919050565b61874c81618736565b82525050565b60006080820190506187676000830187618727565b6187746020830186618743565b6187816040830185618727565b61878e6060830184618727565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122047a1f42196c792d87f37ce8cf8f65b2c72f703cef3000159b68c8ad87efad4bc64736f6c634300080a0033"; + "0x608060405234801561001057600080fd5b50615dcc80620000216000396000f3fe60806040526004361061014a5760003560e01c80635c5ed16d116100b6578063bc01188e1161006f578063bc01188e14610541578063bd85b0391461056c578063d61b0c82146105a9578063db7fd408146105e6578063e985e9c514610616578063f242432a146106535761014a565b80635c5ed16d146103df5780636787d4491461041c5780636dcfd8411461046157806385bff2e71461049e578063a22cb465146104db578063b3a721d1146105045761014a565b806318160ddd1161010857806318160ddd146102a95780631b023947146102d45780632eb2c2d614610311578063481c6a751461033a5780634e1273f414610365578063572b6c05146103a25761014a565b8062fdd58e1461014f57806301ffc9a71461018c578063081cdf12146101c95780630b885ac3146102065780630e89341c1461022f57806313ba55df1461026c575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190613a8e565b61067c565b6040516101839190613add565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190613b50565b610690565b6040516101c09190613b98565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190613d9a565b6106b3565b6040516101fd9190613add565b60405180910390f35b34801561021257600080fd5b5061022d60048036038101906102289190613e9c565b610bce565b005b34801561023b57600080fd5b5061025660048036038101906102519190613f33565b610e32565b6040516102639190613fe8565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613f33565b610f56565b6040516102a09190613add565b60405180910390f35b3480156102b557600080fd5b506102be610f83565b6040516102cb9190613add565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061400a565b610f9d565b6040516103089190613add565b60405180910390f35b34801561031d57600080fd5b50610338600480360381019061033391906140ff565b610ff6565b005b34801561034657600080fd5b5061034f61108a565b60405161035c91906141dd565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906142bb565b6110bd565b60405161039991906143f1565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c4919061400a565b6112b2565b6040516103d69190613b98565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613f33565b611315565b6040516104139190613add565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613f33565b611481565b60405161045899989796959493929190614413565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613f33565b61156a565b604051610495919061455e565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061400a565b611672565b6040516104d291906143f1565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd91906145ac565b611778565b005b34801561051057600080fd5b5061052b600480360381019061052691906145ec565b6118ed565b6040516105389190613add565b60405180910390f35b34801561054d57600080fd5b506105566119a8565b60405161056391906141dd565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613f33565b6119db565b6040516105a09190613add565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb919061462c565b611a01565b6040516105dd9190613add565b60405180910390f35b61060060048036038101906105fb91906146a7565b611a72565b60405161060d9190613b98565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614703565b611eeb565b60405161064a9190613b98565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190614743565b611f88565b005b6000610688838361201c565b905092915050565b60006106ac8261069e6120ef565b61211c90919063ffffffff16565b9050919050565b60008489896106c29190614809565b101580156106d05750600085115b61070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690614889565b60405180910390fd5b85871015801561071f5750600087115b61075e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610755906148f5565b60405180910390fd5b60648311156107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079990614961565b60405180910390fd5b60006107ac612187565b905060006107b982610f9d565b905060008c8c8c8c8c8c8c8c8a8a6040516020016107e09a99989796959493929190614a26565b604051602081830303815290604052905060006108158661080784805190602001206121c3565b6121f390919063ffffffff16565b905061081f61221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790614b22565b60405180910390fd5b6108c36108bb61221a565b600201612247565b94506108cf858f612255565b6108e26108da61221a565b60020161228a565b6109326108ed61221a565b60030160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b8c61093b6122a0565b6000016000878152602001908152602001600020600001819055508b61095f6122a0565b6000016000878152602001908152602001600020600101819055508a6109836122a0565b600001600087815260200190815260200160002060020181905550896109a76122a0565b600001600087815260200190815260200160002060030181905550886109cb6122a0565b600001600087815260200190815260200160002060040181905550876109ef6122a0565b60000160008781526020019081526020016000206005018190555086610a136122a0565b60000160008781526020019081526020016000206006018190555083610a376122a0565b600001600087815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ab3610a976122a0565b600001600087815260200190815260200160002060080161228a565b610b17610abe6122a0565b600001600087815260200190815260200160002060090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b610b3384866001604051806020016040528060008152506122cd565b848473ffffffffffffffffffffffffffffffffffffffff167f4011446e11141f68f741bffe55d700b48cbc73fb927148a01c8f4664c3be014260405160405180910390a36001858573ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a4505050509998505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610bed6122ee565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614b8e565b60405180910390fd5b82610c7061231b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001610cbb6122ee565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550610d4d85612348565b83610d5661221a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081610da061221a565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610dea61221a565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60606000610e3e61236b565b60000160008481526020019081526020016000208054610e5d90614bdd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8990614bdd565b8015610ed65780601f10610eab57610100808354040283529160200191610ed6565b820191906000526020600020905b815481529060010190602001808311610eb957829003601f168201915b50505050509050600081511415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990614c5b565b60405180910390fd5b610f2a61236b565b60010181604051602001610f3f929190614d0f565b604051602081830303815290604052915050919050565b6000610f7c610f63612398565b60010160008481526020019081526020016000206123c5565b9050919050565b6000610f98610f9061221a565b600201612247565b905090565b6000610fef610faa61221a565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061103657506110358533611eeb565b5b611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90614da5565b60405180910390fd5b6110833386868686866123da565b5050505050565b600061109461221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614e37565b60405180910390fd5b600061110d6123fe565b60000190506000845167ffffffffffffffff81111561112f5761112e613bce565b5b60405190808252806020026020018201604052801561115d5781602001602082028036833780820191505090505b50905060005b85518110156112a657600073ffffffffffffffffffffffffffffffffffffffff1686828151811061119757611196614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614ef8565b60405180910390fd5b82600086838151811061120c5761120b614e57565b5b60200260200101518152602001908152602001600020600087838151811061123757611236614e57565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061128d5761128c614e57565b5b6020026020010181815250508080600101915050611163565b50809250505092915050565b60006112bc61231b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000806113206122a0565b6000016000848152602001908152602001600020905060008160020154141561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590614f64565b60405180910390fd5b60008160050154146113dc57806005015461139b82600801612247565b106113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614fd0565b60405180910390fd5b5b8060000154421180156113f3575080600101544211155b611432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114299061503c565b60405180910390fd5b60008160000154426114449190614809565b905060008260000154836001015461145c9190614809565b90506114778282856002015486600301548760040154611a01565b9350505050919050565b6000806000806000806000806000806114986122a0565b60000160008c815260200190815260200160002090506000816002015414156114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed90614f64565b60405180910390fd5b80600001548160010154826002015483600301548460040154856005015486600601548760070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661154a89600801612247565b995099509950995099509950995099509950509193959799909294969850565b60606000611576612398565b600101600084815260200190815260200160002090506000611597826123c5565b67ffffffffffffffff8111156115b0576115af613bce565b5b6040519080825280602002602001820160405280156115de5781602001602082028036833780820191505090505b50905060005b6115ed836123c5565b81101561166757611607818461242b90919063ffffffff16565b82828151811061161a57611619614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061165f9061505c565b9150506115e4565b508092505050919050565b6060600061167e612398565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006116cb82612445565b67ffffffffffffffff8111156116e4576116e3613bce565b5b6040519080825280602002602001820160405280156117125781602001602082028036833780820191505090505b50905060005b61172183612445565b81101561176d5761173b818461245a90919063ffffffff16565b82828151811061174e5761174d614e57565b5b60200260200101818152505080806117659061505c565b915050611718565b508092505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90615117565b60405180910390fd5b806117f06123fe565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e19190613b98565b60405180910390a35050565b6000806118f86122a0565b60000160008581526020019081526020016000209050600081600201541415611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90614f64565b60405180910390fd5b61199f8160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b91505092915050565b60006119b261221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006119e5612398565b6000016000838152602001908152602001600020549050919050565b6000848385611a109190614809565b87611a1b9190615137565b8486611a279190614809565b8489611a3391906151c0565b611a3d9190615137565b8688611a499190615137565b611a5391906151f1565b611a5d9190614809565b611a679190615247565b905095945050505050565b600080611a7d612187565b90506000611a896122a0565b600001600086815260200190815260200160002090506000816005015414611afd578060050154611abc82600801612247565b10611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614fd0565b60405180910390fd5b5b806000015442118015611b14575080600101544211155b611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a9061503c565b60405180910390fd5b6000816000015442611b659190614809565b9050600082600001548360010154611b7d9190614809565b90506000611b9a8383866002015487600301548860040154611a01565b905080341015611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906152c4565b60405180910390fd5b60006064856006015434611bf39190615137565b611bfd9190615247565b905060008134611c0d9190614809565b90506000611c5a8760090160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612247565b905060008b8983604051602001611c73939291906152e4565b60405160208183030381529060405290506000611ca88c611c9a84805190602001206121c3565b6121f390919063ffffffff16565b9050611cb261221a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90614b22565b60405180910390fd5b611d4f8960080161228a565b611d988960090160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061228a565b611db48a8e6001604051806020016040528060008152506122cd565b8860070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611e1e573d6000803e3d6000fd5b50611e2761221a565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015611e90573d6000803e3d6000fd5b5060018d8b73ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff60405160405180910390a460019a505050505050505050505092915050565b6000611ef56123fe565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611fc85750611fc78533611eeb565b5b612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe90614da5565b60405180910390fd5b612015338686868686612474565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615393565b60405180910390fd5b6120956123fe565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b600060186000369050101580156121a357506121a2336112b2565b5b156121b757601436033560601c90506121bf565b3390506121c0565b5b90565b6000816040516020016121d6919061542a565b604051602081830303815290604052805190602001209050919050565b60008060006122028585612498565b9150915061220f8161251b565b819250505092915050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b600081600001549050919050565b8061225e61236b565b60000160008481526020019081526020016000209080519060200190612285929190613943565b505050565b6001816000016000828254019250508190555050565b6000807f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65990508091505090565b6122d9848484846126f0565b6122e83360008686868661287a565b50505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061235161236b565b6001019080519060200190612367929190613943565b5050565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b60006123d382600001612a52565b9050919050565b6123e8868686868686612a63565b6123f6868686868686612d6f565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b600061243a8360000183612f47565b60001c905092915050565b600061245382600001612a52565b9050919050565b60006124698360000183612f47565b60001c905092915050565b612482868686868686612fbb565b61249086868686868661287a565b505050505050565b6000806041835114156124da5760008060006020860151925060408601519150606086015160001a90506124ce87828585613233565b94509450505050612514565b60408351141561250b576000806020850151915060408501519050612500868383613340565b935093505050612514565b60006002915091505b9250929050565b6000600481111561252f5761252e615450565b5b81600481111561254257612541615450565b5b141561254d576126ed565b6001600481111561256157612560615450565b5b81600481111561257457612573615450565b5b14156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906154cb565b60405180910390fd5b600260048111156125c9576125c8615450565b5b8160048111156125dc576125db615450565b5b141561261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490615537565b60405180910390fd5b6003600481111561263157612630615450565b5b81600481111561264457612643615450565b5b1415612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c906155c9565b60405180910390fd5b60048081111561269857612697615450565b5b8160048111156126ab576126aa615450565b5b14156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e39061565b565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612757906156ed565b60405180910390fd5b61277f336000866127708761338e565b6127798761338e565b86613408565b60006127896123fe565b60000160008581526020019081526020016000209050828160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ed91906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161286b92919061570d565b60405180910390a45050505050565b6128998473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612a4a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128df95949392919061578b565b6020604051808303816000875af192505050801561291b57506040513d601f19601f8201168201806040525081019061291891906157fa565b60015b6129c157612927615834565b806308c379a01415612984575061293c615856565b806129475750612986565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b9190613fe8565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061595e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3f906159f0565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90615a82565b60405180910390fd5b8151835114612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90615b14565b60405180910390fd5b612b25868686868686613408565b6000612b2f6123fe565b600001905060005b8451811015612ce7576000858281518110612b5557612b54614e57565b5b602002602001015190506000858381518110612b7457612b73614e57565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90615ba6565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccb91906151f1565b9250508190555050508080612cdf9061505c565b915050612b37565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612d5e929190615bc6565b60405180910390a450505050505050565b612d8e8473ffffffffffffffffffffffffffffffffffffffff1661341e565b15612f3f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612dd4959493929190615bfd565b6020604051808303816000875af1925050508015612e1057506040513d601f19601f82011682018060405250810190612e0d91906157fa565b60015b612eb657612e1c615834565b806308c379a01415612e795750612e31615856565b80612e3c5750612e7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e709190613fe8565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead9061595e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f34906159f0565b60405180910390fd5b505b505050505050565b600081836000018054905011612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8990615cd7565b60405180910390fd5b826000018281548110612fa857612fa7614e57565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290615a82565b60405180910390fd5b61304986868661303a8761338e565b6130438761338e565b86613408565b60006130536123fe565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e690615ba6565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a591906151f1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161322292919061570d565b60405180910390a450505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561326e576000600391509150613337565b601b8560ff16141580156132865750601c8560ff1614155b15613298576000600491509150613337565b6000600187878787604051600081526020016040526040516132bd9493929190615d22565b6020604051602081039080840390855afa1580156132df573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332e57600060019250925050613337565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061338087828885613233565b935093505050935093915050565b60606000600167ffffffffffffffff8111156133ad576133ac613bce565b5b6040519080825280602002602001820160405280156133db5781602001602082028036833780820191505090505b50905082816000815181106133f3576133f2614e57565b5b60200260200101818152505080915050919050565b613416868686868686613431565b505050505050565b600080823b905060008111915050919050565b61343f868686868686613447565b505050505050565b613455868686868686613702565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146136fa576000613492612398565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156136f457600087828151811061354757613546614e57565b5b6020026020010151905060008111156136e057600089838151811061356f5761356e614e57565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156135df578187600001600083815260200190815260200160002060008282546135d391906151f1565b9250508190555061362b565b816135ea8d8361201c565b141561362a576136148c87600084815260200190815260200160002061370a90919063ffffffff16565b50613628818661373a90919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415613691578187600001600083815260200190815260200160002060008282546136859190614809565b925050819055506136de565b600061369d8c8361201c565b14156136dd576136c78b87600084815260200190815260200160002061375490919063ffffffff16565b506136db818561378490919063ffffffff16565b505b5b505b5080806136ec9061505c565b915050613529565b50505050505b505050505050565b505050505050565b6000613732836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61379e565b905092915050565b600061374c836000018360001b61379e565b905092915050565b600061377c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6138b0565b905092915050565b6000613796836000018360001b6138b0565b905092915050565b600080836001016000848152602001908152602001600020549050600081146138a45760006001826137d09190614809565b9050600085600001600187600001805490506137ec9190614809565b815481106137fd576137fc614e57565b5b906000526020600020015490508086600001838154811061382157613820614e57565b5b906000526020600020018190555060018261383c91906151f1565b866001016000838152602001908152602001600020819055508560000180548061386957613868615d67565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506138aa565b60009150505b92915050565b60006138bc8383613920565b61391557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061391a565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461394f90614bdd565b90600052602060002090601f01602090048101928261397157600085556139b8565b82601f1061398a57805160ff19168380011785556139b8565b828001600101855582156139b8579182015b828111156139b757825182559160200191906001019061399c565b5b5090506139c591906139c9565b5090565b5b808211156139e25760008160009055506001016139ca565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a25826139fa565b9050919050565b613a3581613a1a565b8114613a4057600080fd5b50565b600081359050613a5281613a2c565b92915050565b6000819050919050565b613a6b81613a58565b8114613a7657600080fd5b50565b600081359050613a8881613a62565b92915050565b60008060408385031215613aa557613aa46139f0565b5b6000613ab385828601613a43565b9250506020613ac485828601613a79565b9150509250929050565b613ad781613a58565b82525050565b6000602082019050613af26000830184613ace565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b2d81613af8565b8114613b3857600080fd5b50565b600081359050613b4a81613b24565b92915050565b600060208284031215613b6657613b656139f0565b5b6000613b7484828501613b3b565b91505092915050565b60008115159050919050565b613b9281613b7d565b82525050565b6000602082019050613bad6000830184613b89565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c0682613bbd565b810181811067ffffffffffffffff82111715613c2557613c24613bce565b5b80604052505050565b6000613c386139e6565b9050613c448282613bfd565b919050565b600067ffffffffffffffff821115613c6457613c63613bce565b5b613c6d82613bbd565b9050602081019050919050565b82818337600083830152505050565b6000613c9c613c9784613c49565b613c2e565b905082815260208101848484011115613cb857613cb7613bb8565b5b613cc3848285613c7a565b509392505050565b600082601f830112613ce057613cdf613bb3565b5b8135613cf0848260208601613c89565b91505092915050565b600067ffffffffffffffff821115613d1457613d13613bce565b5b613d1d82613bbd565b9050602081019050919050565b6000613d3d613d3884613cf9565b613c2e565b905082815260208101848484011115613d5957613d58613bb8565b5b613d64848285613c7a565b509392505050565b600082601f830112613d8157613d80613bb3565b5b8135613d91848260208601613d2a565b91505092915050565b60008060008060008060008060006101208a8c031215613dbd57613dbc6139f0565b5b60008a013567ffffffffffffffff811115613ddb57613dda6139f5565b5b613de78c828d01613ccb565b9950506020613df88c828d01613a79565b9850506040613e098c828d01613a79565b9750506060613e1a8c828d01613a79565b9650506080613e2b8c828d01613a79565b95505060a0613e3c8c828d01613a79565b94505060c0613e4d8c828d01613a79565b93505060e0613e5e8c828d01613a79565b9250506101008a013567ffffffffffffffff811115613e8057613e7f6139f5565b5b613e8c8c828d01613d6c565b9150509295985092959850929598565b600080600080600060a08688031215613eb857613eb76139f0565b5b600086013567ffffffffffffffff811115613ed657613ed56139f5565b5b613ee288828901613ccb565b9550506020613ef388828901613a43565b9450506040613f0488828901613a43565b9350506060613f1588828901613a43565b9250506080613f2688828901613a43565b9150509295509295909350565b600060208284031215613f4957613f486139f0565b5b6000613f5784828501613a79565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f9a578082015181840152602081019050613f7f565b83811115613fa9576000848401525b50505050565b6000613fba82613f60565b613fc48185613f6b565b9350613fd4818560208601613f7c565b613fdd81613bbd565b840191505092915050565b600060208201905081810360008301526140028184613faf565b905092915050565b6000602082840312156140205761401f6139f0565b5b600061402e84828501613a43565b91505092915050565b600067ffffffffffffffff82111561405257614051613bce565b5b602082029050602081019050919050565b600080fd5b600061407b61407684614037565b613c2e565b9050808382526020820190506020840283018581111561409e5761409d614063565b5b835b818110156140c757806140b38882613a79565b8452602084019350506020810190506140a0565b5050509392505050565b600082601f8301126140e6576140e5613bb3565b5b81356140f6848260208601614068565b91505092915050565b600080600080600060a0868803121561411b5761411a6139f0565b5b600061412988828901613a43565b955050602061413a88828901613a43565b945050604086013567ffffffffffffffff81111561415b5761415a6139f5565b5b614167888289016140d1565b935050606086013567ffffffffffffffff811115614188576141876139f5565b5b614194888289016140d1565b925050608086013567ffffffffffffffff8111156141b5576141b46139f5565b5b6141c188828901613d6c565b9150509295509295909350565b6141d781613a1a565b82525050565b60006020820190506141f260008301846141ce565b92915050565b600067ffffffffffffffff82111561421357614212613bce565b5b602082029050602081019050919050565b6000614237614232846141f8565b613c2e565b9050808382526020820190506020840283018581111561425a57614259614063565b5b835b81811015614283578061426f8882613a43565b84526020840193505060208101905061425c565b5050509392505050565b600082601f8301126142a2576142a1613bb3565b5b81356142b2848260208601614224565b91505092915050565b600080604083850312156142d2576142d16139f0565b5b600083013567ffffffffffffffff8111156142f0576142ef6139f5565b5b6142fc8582860161428d565b925050602083013567ffffffffffffffff81111561431d5761431c6139f5565b5b614329858286016140d1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436881613a58565b82525050565b600061437a838361435f565b60208301905092915050565b6000602082019050919050565b600061439e82614333565b6143a8818561433e565b93506143b38361434f565b8060005b838110156143e45781516143cb888261436e565b97506143d683614386565b9250506001810190506143b7565b5085935050505092915050565b6000602082019050818103600083015261440b8184614393565b905092915050565b600061012082019050614429600083018c613ace565b614436602083018b613ace565b614443604083018a613ace565b6144506060830189613ace565b61445d6080830188613ace565b61446a60a0830187613ace565b61447760c0830186613ace565b61448460e08301856141ce565b614492610100830184613ace565b9a9950505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144d581613a1a565b82525050565b60006144e783836144cc565b60208301905092915050565b6000602082019050919050565b600061450b826144a0565b61451581856144ab565b9350614520836144bc565b8060005b8381101561455157815161453888826144db565b9750614543836144f3565b925050600181019050614524565b5085935050505092915050565b600060208201905081810360008301526145788184614500565b905092915050565b61458981613b7d565b811461459457600080fd5b50565b6000813590506145a681614580565b92915050565b600080604083850312156145c3576145c26139f0565b5b60006145d185828601613a43565b92505060206145e285828601614597565b9150509250929050565b60008060408385031215614603576146026139f0565b5b600061461185828601613a79565b925050602061462285828601613a43565b9150509250929050565b600080600080600060a08688031215614648576146476139f0565b5b600061465688828901613a79565b955050602061466788828901613a79565b945050604061467888828901613a79565b935050606061468988828901613a79565b925050608061469a88828901613a79565b9150509295509295909350565b600080604083850312156146be576146bd6139f0565b5b60006146cc85828601613a79565b925050602083013567ffffffffffffffff8111156146ed576146ec6139f5565b5b6146f985828601613d6c565b9150509250929050565b6000806040838503121561471a576147196139f0565b5b600061472885828601613a43565b925050602061473985828601613a43565b9150509250929050565b600080600080600060a0868803121561475f5761475e6139f0565b5b600061476d88828901613a43565b955050602061477e88828901613a43565b945050604061478f88828901613a79565b93505060606147a088828901613a79565b925050608086013567ffffffffffffffff8111156147c1576147c06139f5565b5b6147cd88828901613d6c565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481482613a58565b915061481f83613a58565b925082821015614832576148316147da565b5b828203905092915050565b7f4954000000000000000000000000000000000000000000000000000000000000600082015250565b6000614873600283613f6b565b915061487e8261483d565b602082019050919050565b600060208201905081810360008301526148a281614866565b9050919050565b7f4950000000000000000000000000000000000000000000000000000000000000600082015250565b60006148df600283613f6b565b91506148ea826148a9565b602082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f49534f0000000000000000000000000000000000000000000000000000000000600082015250565b600061494b600383613f6b565b915061495682614915565b602082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b600081905092915050565b600061499782613f60565b6149a18185614981565b93506149b1818560208601613f7c565b80840191505092915050565b6000819050919050565b6149d86149d382613a58565b6149bd565b82525050565b60008160601b9050919050565b60006149f6826149de565b9050919050565b6000614a08826149eb565b9050919050565b614a20614a1b82613a1a565b6149fd565b82525050565b6000614a32828d61498c565b9150614a3e828c6149c7565b602082019150614a4e828b6149c7565b602082019150614a5e828a6149c7565b602082019150614a6e82896149c7565b602082019150614a7e82886149c7565b602082019150614a8e82876149c7565b602082019150614a9e82866149c7565b602082019150614aae8285614a0f565b601482019150614abe82846149c7565b6020820191508190509b9a5050505050505050505050565b7f4e4d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b0c600283613f6b565b9150614b1782614ad6565b602082019050919050565b60006020820190508181036000830152614b3b81614aff565b9050919050565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b78600283613f6b565b9150614b8382614b42565b602082019050919050565b60006020820190508181036000830152614ba781614b6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf557607f821691505b60208210811415614c0957614c08614bae565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000614c45601d83613f6b565b9150614c5082614c0f565b602082019050919050565b60006020820190508181036000830152614c7481614c38565b9050919050565b60008190508160005260206000209050919050565b60008154614c9d81614bdd565b614ca78186614981565b94506001821660008114614cc25760018114614cd357614d06565b60ff19831686528186019350614d06565b614cdc85614c7b565b60005b83811015614cfe57815481890152600182019150602081019050614cdf565b838801955050505b50505092915050565b6000614d1b8285614c90565b9150614d27828461498c565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614d8f602983613f6b565b9150614d9a82614d33565b604082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614e21602983613f6b565b9150614e2c82614dc5565b604082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000614ee2603183613f6b565b9150614eed82614e86565b604082019050919050565b60006020820190508181036000830152614f1181614ed5565b9050919050565b7f444e450000000000000000000000000000000000000000000000000000000000600082015250565b6000614f4e600383613f6b565b9150614f5982614f18565b602082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f4352000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fba600283613f6b565b9150614fc582614f84565b602082019050919050565b60006020820190508181036000830152614fe981614fad565b9050919050565b7f4f4f540000000000000000000000000000000000000000000000000000000000600082015250565b6000615026600383613f6b565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561509a576150996147da565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615101602983613f6b565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b600061514282613a58565b915061514d83613a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615186576151856147da565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151cb82613a58565b91506151d683613a58565b9250826151e6576151e5615191565b5b828206905092915050565b60006151fc82613a58565b915061520783613a58565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523c5761523b6147da565b5b828201905092915050565b600061525282613a58565b915061525d83613a58565b92508261526d5761526c615191565b5b828204905092915050565b7f4941000000000000000000000000000000000000000000000000000000000000600082015250565b60006152ae600283613f6b565b91506152b982615278565b602082019050919050565b600060208201905081810360008301526152dd816152a1565b9050919050565b60006152f082866149c7565b6020820191506153008285614a0f565b60148201915061531082846149c7565b602082019150819050949350505050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061537d602b83613f6b565b915061538882615321565b604082019050919050565b600060208201905081810360008301526153ac81615370565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006153e9601c83614981565b91506153f4826153b3565b601c82019050919050565b6000819050919050565b6000819050919050565b61542461541f826153ff565b615409565b82525050565b6000615435826153dc565b91506154418284615413565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006154b5601883613f6b565b91506154c08261547f565b602082019050919050565b600060208201905081810360008301526154e4816154a8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615521601f83613f6b565b915061552c826154eb565b602082019050919050565b6000602082019050818103600083015261555081615514565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006155b3602283613f6b565b91506155be82615557565b604082019050919050565b600060208201905081810360008301526155e2816155a6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000615645602283613f6b565b9150615650826155e9565b604082019050919050565b6000602082019050818103600083015261567481615638565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156d7602183613f6b565b91506156e28261567b565b604082019050919050565b60006020820190508181036000830152615706816156ca565b9050919050565b60006040820190506157226000830185613ace565b61572f6020830184613ace565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061575d82615736565b6157678185615741565b9350615777818560208601613f7c565b61578081613bbd565b840191505092915050565b600060a0820190506157a060008301886141ce565b6157ad60208301876141ce565b6157ba6040830186613ace565b6157c76060830185613ace565b81810360808301526157d98184615752565b90509695505050505050565b6000815190506157f481613b24565b92915050565b6000602082840312156158105761580f6139f0565b5b600061581e848285016157e5565b91505092915050565b60008160e01c9050919050565b600060033d11156158535760046000803e615850600051615827565b90505b90565b600060443d1015615866576158e9565b61586e6139e6565b60043d036004823e80513d602482011167ffffffffffffffff821117156158965750506158e9565b808201805167ffffffffffffffff8111156158b457505050506158e9565b80602083010160043d0385018111156158d15750505050506158e9565b6158e082602001850186613bfd565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615948603483613f6b565b9150615953826158ec565b604082019050919050565b600060208201905081810360008301526159778161593b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006159da602883613f6b565b91506159e58261597e565b604082019050919050565b60006020820190508181036000830152615a09816159cd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615a6c602583613f6b565b9150615a7782615a10565b604082019050919050565b60006020820190508181036000830152615a9b81615a5f565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000615afe602883613f6b565b9150615b0982615aa2565b604082019050919050565b60006020820190508181036000830152615b2d81615af1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b6000615b90602b83613f6b565b9150615b9b82615b34565b604082019050919050565b60006020820190508181036000830152615bbf81615b83565b9050919050565b60006040820190508181036000830152615be08185614393565b90508181036020830152615bf48184614393565b90509392505050565b600060a082019050615c1260008301886141ce565b615c1f60208301876141ce565b8181036040830152615c318186614393565b90508181036060830152615c458185614393565b90508181036080830152615c598184615752565b90509695505050505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cc1602283613f6b565b9150615ccc82615c65565b604082019050919050565b60006020820190508181036000830152615cf081615cb4565b9050919050565b615d00816153ff565b82525050565b600060ff82169050919050565b615d1c81615d06565b82525050565b6000608082019050615d376000830187615cf7565b615d446020830186615d13565b615d516040830185615cf7565b615d5e6060830184615cf7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201b33f9e06b3653a10acc09aabe3711d7e642c5878651e979813fbc809968772864736f6c634300080a0033"; type CyberObjectFactoryFacetConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/CyberTokenBase__factory.ts b/packages/contracts/typechain-types/factories/CyberTokenBase__factory.ts index 649e52f..a332d1b 100644 --- a/packages/contracts/typechain-types/factories/CyberTokenBase__factory.ts +++ b/packages/contracts/typechain-types/factories/CyberTokenBase__factory.ts @@ -219,45 +219,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x1c93e179", - type: "bytes32", - }, - ], - name: "c_0x1c93e179", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x63bd0478", - type: "bytes32", - }, - ], - name: "c_0x63bd0478", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xfbe62a3d", - type: "bytes32", - }, - ], - name: "c_0xfbe62a3d", - outputs: [], - stateMutability: "pure", - type: "function", - }, { inputs: [ { @@ -574,7 +535,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b506146f6806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063572b6c05116100b8578063a22cb4651161007c578063a22cb46514610397578063bc01188e146103b3578063bd85b039146103d1578063c55bc56614610401578063e985e9c51461041d578063f242432a1461044d57610136565b8063572b6c05146102cf5780636dcfd841146102ff5780637f628e8b1461032f57806385bff2e71461034b578063929048c71461037b57610136565b806318160ddd116100ff57806318160ddd146102175780631b023947146102355780632eb2c2d614610265578063481c6a75146102815780634e1273f41461029f57610136565b8062fdd58e1461013b57806301ffc9a71461016b5780630b885ac31461019b5780630e89341c146101b757806313ba55df146101e7575b600080fd5b61015560048036038101906101509190612f66565b610469565b6040516101629190612fb5565b60405180910390f35b61018560048036038101906101809190613028565b61047d565b6040516101929190613070565b60405180910390f35b6101b560048036038101906101b091906131d1565b6104a0565b005b6101d160048036038101906101cc9190613268565b6109f0565b6040516101de919061331d565b60405180910390f35b61020160048036038101906101fc9190613268565b610ca0565b60405161020e9190612fb5565b60405180910390f35b61021f610ccd565b60405161022c9190612fb5565b60405180910390f35b61024f600480360381019061024a919061333f565b610d6b565b60405161025c9190612fb5565b60405180910390f35b61027f600480360381019061027a91906134d5565b610e48565b005b610289610edc565b60405161029691906135b3565b60405180910390f35b6102b960048036038101906102b49190613691565b610f93565b6040516102c691906137c7565b60405180910390f35b6102e960048036038101906102e4919061333f565b611188565b6040516102f69190613070565b60405180910390f35b61031960048036038101906103149190613268565b61126f565b60405161032691906138a7565b60405180910390f35b610349600480360381019061034491906138ff565b611377565b005b6103656004803603810190610360919061333f565b61137a565b60405161037291906137c7565b60405180910390f35b610395600480360381019061039091906138ff565b611480565b005b6103b160048036038101906103ac9190613958565b611483565b005b6103bb6115f8565b6040516103c891906135b3565b60405180910390f35b6103eb60048036038101906103e69190613268565b6116af565b6040516103f89190612fb5565b60405180910390f35b61041b600480360381019061041691906138ff565b6116d5565b005b61043760048036038101906104329190613998565b6116d8565b6040516104449190613070565b60405180910390f35b610467600480360381019061046291906139d8565b611775565b005b60006104758383611809565b905092915050565b60006104998261048b6118dc565b61190990919063ffffffff16565b9050919050565b6104cc7ffb264934f994ece14b386fc0be186c58f27ab7f1d9ed0c2dbf61f0a41d8a295960001b611377565b6104f87f9cb49303e2d57393fee370e71e080720e1e38459d90cea9772f03f0266c0e62260001b611377565b6105247f55910367c443c4713b200bdd68889a2360c09fbd998b1c8cf51a36cbc450df4660001b611377565b6105507f574e953eada5dcc747c84e5bae85f4417425c6a4144c50b087e5174dac600a7d60001b611377565b3373ffffffffffffffffffffffffffffffffffffffff1661056f611974565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e090613abb565b60405180910390fd5b6106157f59008a8f1d50584095ce216266c7af2cef3efa9b63497de53503ca94cbb9b24a60001b611377565b6106417fa43cd7f41895ca0e17994fcb94d0fa5858e27f48ed0cd8ff02384394fd8a33c160001b611377565b61066d7f4c55aa82e1408c3340ff78033cda644766212f0e1200ccb38a693deddd5bf52b60001b611377565b82610676611a52565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506106e37ffde6ef2df36beaa4210510184a6841e267657f7750bc29c444fba3d35a9810fd60001b611377565b61070f7ff406f6747bf4f701495660cd6812670c94badcfce31f42f58c1a6ad20e1f572060001b611377565b6001610719611974565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506107ce7f80e6b81cce390388429b4ad92d0c729633ff92a3b39c78ee557fd91eb505209960001b611377565b6107fa7fc60cf584725fea684c7294500e23761ffb83d0e20d21258a85759499dabae46060001b611377565b61080385611b30565b61082f7f7e0e6eb23f676c5a5a42ee84ce743919a30e108fc44bb1c5d3c6fd6cf837ae0d60001b611377565b61085b7fec467f686f916ec9604b7468465856c1c83ef57259fe9a6fc260464c09a9838a60001b611377565b83610864611bd7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506108d17f9e58434cd253e39e7c0dcf96fd15b5771bbf82fa978270dba3fa5846389094f760001b611377565b6108fd7fb833af1db132e6c48f679f2773d6972f1fd6f56f1d6a65223235341ebf42c0fa60001b611377565b81610906611bd7565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109737f2fc13f8ae1ee464f2b1e0b2f0fa17ab0a3c67d2e59a3321e0238afc1125a862860001b611377565b61099f7f610b1218449889738b2ada69c63c730827be1550a5a589e7adfd1f5b0904906860001b611377565b806109a8611bd7565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6060610a1e7f23f1c05e588c25ff8dc9f56733243455c53fd3f85640a1df8a15214915819a4760001b6116d5565b610a4a7f4dee7afd3e91d4c6c6a94c90162a094b064920d9387a82da1c6d064e1fe3cc5060001b6116d5565b610a767f6112c02f84912af5ab2789cbd18d5abdc3e73d6ced049ff97b0e60a19eb9de3560001b6116d5565b6000610a80611cb5565b60000160008481526020019081526020016000208054610a9f90613b0a565b80601f0160208091040260200160405190810160405280929190818152602001828054610acb90613b0a565b8015610b185780601f10610aed57610100808354040283529160200191610b18565b820191906000526020600020905b815481529060010190602001808311610afb57829003601f168201915b50505050509050610b4b7fa6cdec03e4644662815e7cbaf832198029c29d5fb0e11816137478e1a840ec4060001b6116d5565b610b777f9ab49bd638b9455b7f2e64130ddf4f233b0a3b80acefe8f789372c3efa97af2160001b6116d5565b610ba37f0a4123bd8c1b08089efacc9338be8a7f6bf7ab4c4bee8a86043851bce1caff0060001b6116d5565b600081511415610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90613b88565b60405180910390fd5b610c147f6ca6f9766d48accbefcfdddb403c058cfc26b1911cd85d1a45c019eb23605e6b60001b6116d5565b610c407f0c8e7e650704c8ee3af1f7a15c517c38dc4fc70856d2ff36fcd44c3408e32d7c60001b6116d5565b610c6c7fa601ee21d724d0cd41bcad5c9a81c9860d87f8f5d63ee068e05dacf7c6a3b0f060001b6116d5565b610c74611cb5565b60010181604051602001610c89929190613c78565b604051602081830303815290604052915050919050565b6000610cc6610cad611d93565b6001016000848152602001908152602001600020611dc0565b9050919050565b6000610cfb7fb1b4425ba2edc5e6861c5e74be5501cbd40bd6afc6403772bc96536307ec385f60001b611377565b610d277f97137defe44b8ef40f073d89a187cce75036a52cfb6d5ec319d36343c60108bb60001b611377565b610d537f208598a720e6421a1798a94c5214991ef546a92770f360775929f77a3190518160001b611377565b610d66610d5e611bd7565b600201611dd5565b905090565b6000610d997f4850a17edabc25661db4dc58012d9c932f58b3ab3facff40733e9619760ef0c960001b611377565b610dc57f16871bb7219f9ca90a5db956590e8de54ef440aa6407920859b9835141da929560001b611377565b610df17f8622a76daeef190b4a09381013fc5b5667674745e788f16d23b2aee866e060e360001b611377565b610e41610dfc611bd7565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611dd5565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e885750610e8785336116d8565b5b610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90613d0e565b60405180910390fd5b610ed5338686868686611de3565b5050505050565b6000610f0a7f2a09b9827ab94682f5e7b891ae3b8c5ce41cae475dabb6b94b9161280a7b6b2560001b611377565b610f367fc7bf4d9de951de2382a329515d163c8b3de60b5ec9513e3beb9c0779f70fa8cf60001b611377565b610f627f607acc0e7f5b80faa103c94ffdc8845d15f77dcb52635e930cdc0c13e5465fed60001b611377565b610f6a611bd7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613da0565b60405180910390fd5b6000610fe3611e07565b60000190506000845167ffffffffffffffff811115611005576110046130a6565b5b6040519080825280602002602001820160405280156110335781602001602082028036833780820191505090505b50905060005b855181101561117c57600073ffffffffffffffffffffffffffffffffffffffff1686828151811061106d5761106c613dc0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c390613e61565b60405180910390fd5b8260008683815181106110e2576110e1613dc0565b5b60200260200101518152602001908152602001600020600087838151811061110d5761110c613dc0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061116357611162613dc0565b5b6020026020010181815250508080600101915050611039565b50809250505092915050565b60006111b67f7ca6e663761a0f614c9082f178ff07503394851964914930828ae2ff86481d8e60001b611480565b6111e27f8aad3e92e7373d91f82323d355a587bfc96329cc3e91a9528217e4c84bcc063960001b611480565b61120e7f3b4e5d1c2b996ac6c6720bcd7c27922338083696d2a3f25c32b5fece8475bcae60001b611480565b611216611a52565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6060600061127b611d93565b60010160008481526020019081526020016000209050600061129c82611dc0565b67ffffffffffffffff8111156112b5576112b46130a6565b5b6040519080825280602002602001820160405280156112e35781602001602082028036833780820191505090505b50905060005b6112f283611dc0565b81101561136c5761130c8184611e3490919063ffffffff16565b82828151811061131f5761131e613dc0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061136490613eb0565b9150506112e9565b508092505050919050565b50565b60606000611386611d93565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006113d382611e4e565b67ffffffffffffffff8111156113ec576113eb6130a6565b5b60405190808252806020026020018201604052801561141a5781602001602082028036833780820191505090505b50905060005b61142983611e4e565b811015611475576114438184611e6390919063ffffffff16565b82828151811061145657611455613dc0565b5b602002602001018181525050808061146d90613eb0565b915050611420565b508092505050919050565b50565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613f6b565b60405180910390fd5b806114fb611e07565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115ec9190613070565b60405180910390a35050565b60006116267f0165c996af12bc8835cedb815a581af458d067b5bb9e5b20b6185ee555a82a1f60001b611377565b6116527ffa4f644143e5873afd934d08b4d252115745c55c98ad2539d9fddf23d8caa43260001b611377565b61167e7f1a7281130aca2e54851f40a6a951452f1a5044852232c04dbb986e289f08cfd760001b611377565b611686611bd7565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006116b9611d93565b6000016000838152602001908152602001600020549050919050565b50565b60006116e2611e07565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806117b557506117b485336116d8565b5b6117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613d0e565b60405180910390fd5b611802338686868686611e7d565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613ffd565b60405180910390fd5b611882611e07565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b60006119a27f8b6492a6876bb38cd0913d978cd1674f72509ad53daa743eb10fa4a5b109542160001b611ea1565b6119ce7f8734688ce7e316775a7605f64173dd1a8314018c64251ca9b5f78aaedc1b1d0360001b611ea1565b6119fa7f9d822fe5bafde3d4d85cdf5fa83126e47644847e6c49b38afbacd6dba30fbda260001b611ea1565b60007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050611a4b7fcd6d5fa53f783e88650b432e4b4cb55892eb0bbc47233fa5beb250f6cef6d7bb60001b611ea1565b8091505090565b6000611a807fbf28b4c694d70043cdbba1139d13e89322d9971fc2604eec0c38e355815d0bd060001b611ea4565b611aac7ff948c5bcd8a8be4422c92e8f63497dfe9d651affb2eecccb4e1e1a34b9a5a5b460001b611ea4565b611ad87ffb0af2a23ffb1b99ced27c52f498bc6ab948fe939d307309c7986f94c11539e960001b611ea4565b60007fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae9939050611b297f471ad1677eb85872327f149b61d16c373352df62511e8db57eca7d728fb69bfa60001b611ea4565b8091505090565b611b5c7f791c3597ef5db947d31801b2019c0ae1fbc8ed0ae2c503dc0474a15c92d5849e60001b6116d5565b611b887f83beed3ed19f3f5bfb7572c3835676b72c274d00ed094c05f59e63c8ab88a84060001b6116d5565b611bb47f6369348c2178daa645f0bf939f1a6678aa7569c2b9cd0fde0692d9e6a32b54b660001b6116d5565b80611bbd611cb5565b6001019080519060200190611bd3929190612e1b565b5050565b6000611c057fe345fd94e4db779611a270161ffac772f81575bb475f1d42c7b8aac50c26c99760001b611ea7565b611c317fedd75a57aad4d39568d96afe62dad6399b99e6d5ce59343e0e1d06daf02aa7d360001b611ea7565b611c5d7f04c8bce4bf1ed9ab660e8e9f46054da7edc9250a872da490effca8ad0066ede660001b611ea7565b60007f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e9050611cae7fd294efbe5ffc027d60c46b534b05b5b0b73fa47f5e0064a56d4432c41210e3f560001b611ea7565b8091505090565b6000611ce37f776de49b4a1bf86ef00deb75e863c7bb93d54dd6f3d8e2d4f0aa283f5cb993d360001b611eaa565b611d0f7fdd41ca273c50064cb67b10ee4905fef1b95ec8ac8c9637a58c89453b6234ce3e60001b611eaa565b611d3b7fc75ff05c6a0a201b061fa6f67acfdf435308c7e10dcc1f995d2ef4065aec166260001b611eaa565b60007fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c839050611d8c7fcefc80ce84ac3b3d17392585a9ac12f969438f6ee8b1eedaf3950043c3db50de60001b611eaa565b8091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b6000611dce82600001611ead565b9050919050565b600081600001549050919050565b611df1868686868686611ebe565b611dff8686868686866121ca565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b6000611e4383600001836123a2565b60001c905092915050565b6000611e5c82600001611ead565b9050919050565b6000611e7283600001836123a2565b60001c905092915050565b611e8b868686868686612416565b611e9986868686868661268e565b505050505050565b50565b50565b50565b50565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f259061408f565b60405180910390fd5b8151835114611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6990614121565b60405180910390fd5b611f80868686868686612866565b6000611f8a611e07565b600001905060005b8451811015612142576000858281518110611fb057611faf613dc0565b5b602002602001015190506000858381518110611fcf57611fce613dc0565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612070576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612067906141b3565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461212691906141d3565b925050819055505050808061213a90613eb0565b915050611f92565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516121b9929190614229565b60405180910390a450505050505050565b6121e98473ffffffffffffffffffffffffffffffffffffffff1661287c565b1561239a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161222f9594939291906142b5565b6020604051808303816000875af192505050801561226b57506040513d601f19601f820116820180604052508101906122689190614332565b60015b6123115761227761436c565b806308c379a014156122d4575061228c61438e565b8061229757506122d6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb919061331d565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614496565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f90614528565b60405180910390fd5b505b505050505050565b6000818360000180549050116123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e4906145ba565b60405180910390fd5b82600001828154811061240357612402613dc0565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d9061408f565b60405180910390fd5b6124a48686866124958761288f565b61249e8761288f565b86612866565b60006124ae611e07565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906141b3565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260091906141d3565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161267d9291906145da565b60405180910390a450505050505050565b6126ad8473ffffffffffffffffffffffffffffffffffffffff1661287c565b1561285e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016126f3959493929190614603565b6020604051808303816000875af192505050801561272f57506040513d601f19601f8201168201806040525081019061272c9190614332565b60015b6127d55761273b61436c565b806308c379a01415612798575061275061438e565b8061275b575061279a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278f919061331d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc90614496565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390614528565b60405180910390fd5b505b505050505050565b612874868686868686612909565b505050505050565b600080823b905060008111915050919050565b60606000600167ffffffffffffffff8111156128ae576128ad6130a6565b5b6040519080825280602002602001820160405280156128dc5781602001602082028036833780820191505090505b50905082816000815181106128f4576128f3613dc0565b5b60200260200101818152505080915050919050565b61291786868686868661291f565b505050505050565b61292d868686868686612bda565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612bd257600061296a611d93565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8751811015612bcc576000878281518110612a1f57612a1e613dc0565b5b602002602001015190506000811115612bb8576000898381518110612a4757612a46613dc0565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415612ab757818760000160008381526020019081526020016000206000828254612aab91906141d3565b92505081905550612b03565b81612ac28d83611809565b1415612b0257612aec8c876000848152602001908152602001600020612be290919063ffffffff16565b50612b008186612c1290919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415612b6957818760000160008381526020019081526020016000206000828254612b5d919061465d565b92505081905550612bb6565b6000612b758c83611809565b1415612bb557612b9f8b876000848152602001908152602001600020612c2c90919063ffffffff16565b50612bb38185612c5c90919063ffffffff16565b505b5b505b508080612bc490613eb0565b915050612a01565b50505050505b505050505050565b505050505050565b6000612c0a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612c76565b905092915050565b6000612c24836000018360001b612c76565b905092915050565b6000612c54836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612d88565b905092915050565b6000612c6e836000018360001b612d88565b905092915050565b60008083600101600084815260200190815260200160002054905060008114612d7c576000600182612ca8919061465d565b905060008560000160018760000180549050612cc4919061465d565b81548110612cd557612cd4613dc0565b5b9060005260206000200154905080866000018381548110612cf957612cf8613dc0565b5b9060005260206000200181905550600182612d1491906141d3565b8660010160008381526020019081526020016000208190555085600001805480612d4157612d40614691565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612d82565b60009150505b92915050565b6000612d948383612df8565b612ded578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612df2565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054612e2790613b0a565b90600052602060002090601f016020900481019282612e495760008555612e90565b82601f10612e6257805160ff1916838001178555612e90565b82800160010185558215612e90579182015b82811115612e8f578251825591602001919060010190612e74565b5b509050612e9d9190612ea1565b5090565b5b80821115612eba576000816000905550600101612ea2565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612efd82612ed2565b9050919050565b612f0d81612ef2565b8114612f1857600080fd5b50565b600081359050612f2a81612f04565b92915050565b6000819050919050565b612f4381612f30565b8114612f4e57600080fd5b50565b600081359050612f6081612f3a565b92915050565b60008060408385031215612f7d57612f7c612ec8565b5b6000612f8b85828601612f1b565b9250506020612f9c85828601612f51565b9150509250929050565b612faf81612f30565b82525050565b6000602082019050612fca6000830184612fa6565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61300581612fd0565b811461301057600080fd5b50565b60008135905061302281612ffc565b92915050565b60006020828403121561303e5761303d612ec8565b5b600061304c84828501613013565b91505092915050565b60008115159050919050565b61306a81613055565b82525050565b60006020820190506130856000830184613061565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6130de82613095565b810181811067ffffffffffffffff821117156130fd576130fc6130a6565b5b80604052505050565b6000613110612ebe565b905061311c82826130d5565b919050565b600067ffffffffffffffff82111561313c5761313b6130a6565b5b61314582613095565b9050602081019050919050565b82818337600083830152505050565b600061317461316f84613121565b613106565b9050828152602081018484840111156131905761318f613090565b5b61319b848285613152565b509392505050565b600082601f8301126131b8576131b761308b565b5b81356131c8848260208601613161565b91505092915050565b600080600080600060a086880312156131ed576131ec612ec8565b5b600086013567ffffffffffffffff81111561320b5761320a612ecd565b5b613217888289016131a3565b955050602061322888828901612f1b565b945050604061323988828901612f1b565b935050606061324a88828901612f1b565b925050608061325b88828901612f1b565b9150509295509295909350565b60006020828403121561327e5761327d612ec8565b5b600061328c84828501612f51565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132cf5780820151818401526020810190506132b4565b838111156132de576000848401525b50505050565b60006132ef82613295565b6132f981856132a0565b93506133098185602086016132b1565b61331281613095565b840191505092915050565b6000602082019050818103600083015261333781846132e4565b905092915050565b60006020828403121561335557613354612ec8565b5b600061336384828501612f1b565b91505092915050565b600067ffffffffffffffff821115613387576133866130a6565b5b602082029050602081019050919050565b600080fd5b60006133b06133ab8461336c565b613106565b905080838252602082019050602084028301858111156133d3576133d2613398565b5b835b818110156133fc57806133e88882612f51565b8452602084019350506020810190506133d5565b5050509392505050565b600082601f83011261341b5761341a61308b565b5b813561342b84826020860161339d565b91505092915050565b600067ffffffffffffffff82111561344f5761344e6130a6565b5b61345882613095565b9050602081019050919050565b600061347861347384613434565b613106565b90508281526020810184848401111561349457613493613090565b5b61349f848285613152565b509392505050565b600082601f8301126134bc576134bb61308b565b5b81356134cc848260208601613465565b91505092915050565b600080600080600060a086880312156134f1576134f0612ec8565b5b60006134ff88828901612f1b565b955050602061351088828901612f1b565b945050604086013567ffffffffffffffff81111561353157613530612ecd565b5b61353d88828901613406565b935050606086013567ffffffffffffffff81111561355e5761355d612ecd565b5b61356a88828901613406565b925050608086013567ffffffffffffffff81111561358b5761358a612ecd565b5b613597888289016134a7565b9150509295509295909350565b6135ad81612ef2565b82525050565b60006020820190506135c860008301846135a4565b92915050565b600067ffffffffffffffff8211156135e9576135e86130a6565b5b602082029050602081019050919050565b600061360d613608846135ce565b613106565b905080838252602082019050602084028301858111156136305761362f613398565b5b835b8181101561365957806136458882612f1b565b845260208401935050602081019050613632565b5050509392505050565b600082601f8301126136785761367761308b565b5b81356136888482602086016135fa565b91505092915050565b600080604083850312156136a8576136a7612ec8565b5b600083013567ffffffffffffffff8111156136c6576136c5612ecd565b5b6136d285828601613663565b925050602083013567ffffffffffffffff8111156136f3576136f2612ecd565b5b6136ff85828601613406565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61373e81612f30565b82525050565b60006137508383613735565b60208301905092915050565b6000602082019050919050565b600061377482613709565b61377e8185613714565b935061378983613725565b8060005b838110156137ba5781516137a18882613744565b97506137ac8361375c565b92505060018101905061378d565b5085935050505092915050565b600060208201905081810360008301526137e18184613769565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61381e81612ef2565b82525050565b60006138308383613815565b60208301905092915050565b6000602082019050919050565b6000613854826137e9565b61385e81856137f4565b935061386983613805565b8060005b8381101561389a5781516138818882613824565b975061388c8361383c565b92505060018101905061386d565b5085935050505092915050565b600060208201905081810360008301526138c18184613849565b905092915050565b6000819050919050565b6138dc816138c9565b81146138e757600080fd5b50565b6000813590506138f9816138d3565b92915050565b60006020828403121561391557613914612ec8565b5b6000613923848285016138ea565b91505092915050565b61393581613055565b811461394057600080fd5b50565b6000813590506139528161392c565b92915050565b6000806040838503121561396f5761396e612ec8565b5b600061397d85828601612f1b565b925050602061398e85828601613943565b9150509250929050565b600080604083850312156139af576139ae612ec8565b5b60006139bd85828601612f1b565b92505060206139ce85828601612f1b565b9150509250929050565b600080600080600060a086880312156139f4576139f3612ec8565b5b6000613a0288828901612f1b565b9550506020613a1388828901612f1b565b9450506040613a2488828901612f51565b9350506060613a3588828901612f51565b925050608086013567ffffffffffffffff811115613a5657613a55612ecd565b5b613a62888289016134a7565b9150509295509295909350565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000613aa56002836132a0565b9150613ab082613a6f565b602082019050919050565b60006020820190508181036000830152613ad481613a98565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b2257607f821691505b60208210811415613b3657613b35613adb565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000613b72601d836132a0565b9150613b7d82613b3c565b602082019050919050565b60006020820190508181036000830152613ba181613b65565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613bd581613b0a565b613bdf8186613ba8565b94506001821660008114613bfa5760018114613c0b57613c3e565b60ff19831686528186019350613c3e565b613c1485613bb3565b60005b83811015613c3657815481890152600182019150602081019050613c17565b838801955050505b50505092915050565b6000613c5282613295565b613c5c8185613ba8565b9350613c6c8185602086016132b1565b80840191505092915050565b6000613c848285613bc8565b9150613c908284613c47565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613cf86029836132a0565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613d8a6029836132a0565b9150613d9582613d2e565b604082019050919050565b60006020820190508181036000830152613db981613d7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b6000613e4b6031836132a0565b9150613e5682613def565b604082019050919050565b60006020820190508181036000830152613e7a81613e3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ebb82612f30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613eee57613eed613e81565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613f556029836132a0565b9150613f6082613ef9565b604082019050919050565b60006020820190508181036000830152613f8481613f48565b9050919050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613fe7602b836132a0565b9150613ff282613f8b565b604082019050919050565b6000602082019050818103600083015261401681613fda565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140796025836132a0565b91506140848261401d565b604082019050919050565b600060208201905081810360008301526140a88161406c565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061410b6028836132a0565b9150614116826140af565b604082019050919050565b6000602082019050818103600083015261413a816140fe565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b600061419d602b836132a0565b91506141a882614141565b604082019050919050565b600060208201905081810360008301526141cc81614190565b9050919050565b60006141de82612f30565b91506141e983612f30565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561421e5761421d613e81565b5b828201905092915050565b600060408201905081810360008301526142438185613769565b905081810360208301526142578184613769565b90509392505050565b600081519050919050565b600082825260208201905092915050565b600061428782614260565b614291818561426b565b93506142a18185602086016132b1565b6142aa81613095565b840191505092915050565b600060a0820190506142ca60008301886135a4565b6142d760208301876135a4565b81810360408301526142e98186613769565b905081810360608301526142fd8185613769565b90508181036080830152614311818461427c565b90509695505050505050565b60008151905061432c81612ffc565b92915050565b60006020828403121561434857614347612ec8565b5b60006143568482850161431d565b91505092915050565b60008160e01c9050919050565b600060033d111561438b5760046000803e61438860005161435f565b90505b90565b600060443d101561439e57614421565b6143a6612ebe565b60043d036004823e80513d602482011167ffffffffffffffff821117156143ce575050614421565b808201805167ffffffffffffffff8111156143ec5750505050614421565b80602083010160043d038501811115614409575050505050614421565b614418826020018501866130d5565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006144806034836132a0565b915061448b82614424565b604082019050919050565b600060208201905081810360008301526144af81614473565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006145126028836132a0565b915061451d826144b6565b604082019050919050565b6000602082019050818103600083015261454181614505565b9050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006145a46022836132a0565b91506145af82614548565b604082019050919050565b600060208201905081810360008301526145d381614597565b9050919050565b60006040820190506145ef6000830185612fa6565b6145fc6020830184612fa6565b9392505050565b600060a08201905061461860008301886135a4565b61462560208301876135a4565b6146326040830186612fa6565b61463f6060830185612fa6565b8181036080830152614651818461427c565b90509695505050505050565b600061466882612f30565b915061467383612f30565b92508282101561468657614685613e81565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122075728fe3b72df92e7c962aadeb904e38cba3d1c7f135d88126af1f484c91fbf364736f6c634300080a0033"; + "0x608060405234801561001057600080fd5b50613bb5806100206000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c80634e1273f4116100a2578063a22cb46511610071578063a22cb4651461033e578063bc01188e1461035a578063bd85b03914610378578063e985e9c5146103a8578063f242432a146103d857610115565b80634e1273f41461027e578063572b6c05146102ae5780636dcfd841146102de57806385bff2e71461030e57610115565b806313ba55df116100e957806313ba55df146101c657806318160ddd146101f65780631b023947146102145780632eb2c2d614610244578063481c6a751461026057610115565b8062fdd58e1461011a57806301ffc9a71461014a5780630b885ac31461017a5780630e89341c14610196575b600080fd5b610134600480360381019061012f9190612488565b6103f4565b60405161014191906124d7565b60405180910390f35b610164600480360381019061015f919061254a565b610408565b6040516101719190612592565b60405180910390f35b610194600480360381019061018f91906126f3565b61042b565b005b6101b060048036038101906101ab919061278a565b61068f565b6040516101bd919061283f565b60405180910390f35b6101e060048036038101906101db919061278a565b6107b3565b6040516101ed91906124d7565b60405180910390f35b6101fe6107e0565b60405161020b91906124d7565b60405180910390f35b61022e60048036038101906102299190612861565b6107fa565b60405161023b91906124d7565b60405180910390f35b61025e600480360381019061025991906129f7565b610853565b005b6102686108e7565b6040516102759190612ad5565b60405180910390f35b61029860048036038101906102939190612bb3565b61091a565b6040516102a59190612ce9565b60405180910390f35b6102c860048036038101906102c39190612861565b610b0f565b6040516102d59190612592565b60405180910390f35b6102f860048036038101906102f3919061278a565b610b72565b6040516103059190612dc9565b60405180910390f35b61032860048036038101906103239190612861565b610c7a565b6040516103359190612ce9565b60405180910390f35b61035860048036038101906103539190612e17565b610d80565b005b610362610ef5565b60405161036f9190612ad5565b60405180910390f35b610392600480360381019061038d919061278a565b610f28565b60405161039f91906124d7565b60405180910390f35b6103c260048036038101906103bd9190612e57565b610f4e565b6040516103cf9190612592565b60405180910390f35b6103f260048036038101906103ed9190612e97565b610feb565b005b6000610400838361107f565b905092915050565b600061042482610416611152565b61117f90919063ffffffff16565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff1661044a6111ea565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bb90612f7a565b60405180910390fd5b826104cd611217565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016105186111ea565b60030160007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506105aa85611244565b836105b3611267565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816105fd611267565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080610647611267565b60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6060600061069b611294565b600001600084815260200190815260200160002080546106ba90612fc9565b80601f01602080910402602001604051908101604052809291908181526020018280546106e690612fc9565b80156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905060008151141561077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690613047565b60405180910390fd5b610787611294565b6001018160405160200161079c929190613137565b604051602081830303815290604052915050919050565b60006107d96107c06112c1565b60010160008481526020019081526020016000206112ee565b9050919050565b60006107f56107ed611267565b600201611303565b905090565b600061084c610807611267565b60030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611303565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061089357506108928533610f4e565b5b6108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c9906131cd565b60405180910390fd5b6108e0338686868686611311565b5050505050565b60006108f1611267565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608151835114610960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109579061325f565b60405180910390fd5b600061096a611335565b60000190506000845167ffffffffffffffff81111561098c5761098b6125c8565b5b6040519080825280602002602001820160405280156109ba5781602001602082028036833780820191505090505b50905060005b8551811015610b0357600073ffffffffffffffffffffffffffffffffffffffff168682815181106109f4576109f361327f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a90613320565b60405180910390fd5b826000868381518110610a6957610a6861327f565b5b602002602001015181526020019081526020016000206000878381518110610a9457610a9361327f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610aea57610ae961327f565b5b60200260200101818152505080806001019150506109c0565b50809250505092915050565b6000610b19611217565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60606000610b7e6112c1565b600101600084815260200190815260200160002090506000610b9f826112ee565b67ffffffffffffffff811115610bb857610bb76125c8565b5b604051908082528060200260200182016040528015610be65781602001602082028036833780820191505090505b50905060005b610bf5836112ee565b811015610c6f57610c0f818461136290919063ffffffff16565b828281518110610c2257610c2161327f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080610c679061336f565b915050610bec565b508092505050919050565b60606000610c866112c1565b60020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610cd38261137c565b67ffffffffffffffff811115610cec57610ceb6125c8565b5b604051908082528060200260200182016040528015610d1a5781602001602082028036833780820191505090505b50905060005b610d298361137c565b811015610d7557610d43818461139190919063ffffffff16565b828281518110610d5657610d5561327f565b5b6020026020010181815250508080610d6d9061336f565b915050610d20565b508092505050919050565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de69061342a565b60405180910390fd5b80610df8611335565b60010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ee99190612592565b60405180910390a35050565b6000610eff611267565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610f326112c1565b6000016000838152602001908152602001600020549050919050565b6000610f58611335565b60010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061102b575061102a8533610f4e565b5b61106a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611061906131cd565b60405180910390fd5b6110783386868686866113ab565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e7906134bc565b60405180910390fd5b6110f8611335565b600001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000807f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590508091505090565b6000826000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16905092915050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000807fa5e014e253d3b66bd348c3cdd05f38b9805fff0b6471d004b58c6ada26cae99390508091505090565b8061124d611294565b600101908051906020019061126392919061233d565b5050565b6000807f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e90508091505090565b6000807fb3408a5d8f30170919d3996b6cc182726500ad24733d17ace2f621485f6e7c8390508091505090565b6000807fb31c2c74f86ca3ce94d901f5f5bbe66f7161eec2f7b5aa0b75a86371436424ea90508091505090565b60006112fc826000016113cf565b9050919050565b600081600001549050919050565b61131f8686868686866113e0565b61132d8686868686866116ec565b505050505050565b6000807f1799cf914cb0cb442ca7c7ac709ee40d0cb89e87351dc08d517fbda27d50c68b90508091505090565b600061137183600001836118c4565b60001c905092915050565b600061138a826000016113cf565b9050919050565b60006113a083600001836118c4565b60001c905092915050565b6113b9868686868686611938565b6113c7868686868686611bb0565b505050505050565b600081600001805490509050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114479061354e565b60405180910390fd5b8151835114611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b906135e0565b60405180910390fd5b6114a2868686868686611d88565b60006114ac611335565b600001905060005b84518110156116645760008582815181106114d2576114d161327f565b5b6020026020010151905060008583815181106114f1576114f061327f565b5b60200260200101519050600084600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990613672565b60405180910390fd5b81810385600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508084600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116489190613692565b925050819055505050808061165c9061336f565b9150506114b4565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116db9291906136e8565b60405180910390a450505050505050565b61170b8473ffffffffffffffffffffffffffffffffffffffff16611d9e565b156118bc578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611751959493929190613774565b6020604051808303816000875af192505050801561178d57506040513d601f19601f8201168201806040525081019061178a91906137f1565b60015b6118335761179961382b565b806308c379a014156117f657506117ae61384d565b806117b957506117f8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed919061283f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90613955565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906139e7565b60405180910390fd5b505b505050505050565b60008183600001805490501161190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690613a79565b60405180910390fd5b8260000182815481106119255761192461327f565b5b9060005260206000200154905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f9061354e565b60405180910390fd5b6119c68686866119b787611db1565b6119c087611db1565b86611d88565b60006119d0611335565b6000019050600081600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6390613672565b60405180910390fd5b83810382600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508281600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b229190613692565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b9f929190613a99565b60405180910390a450505050505050565b611bcf8473ffffffffffffffffffffffffffffffffffffffff16611d9e565b15611d80578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611c15959493929190613ac2565b6020604051808303816000875af1925050508015611c5157506040513d601f19601f82011682018060405250810190611c4e91906137f1565b60015b611cf757611c5d61382b565b806308c379a01415611cba5750611c7261384d565b80611c7d5750611cbc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb1919061283f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90613955565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d75906139e7565b60405180910390fd5b505b505050505050565b611d96868686868686611e2b565b505050505050565b600080823b905060008111915050919050565b60606000600167ffffffffffffffff811115611dd057611dcf6125c8565b5b604051908082528060200260200182016040528015611dfe5781602001602082028036833780820191505090505b5090508281600081518110611e1657611e1561327f565b5b60200260200101818152505080915050919050565b611e39868686868686611e41565b505050505050565b611e4f8686868686866120fc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146120f4576000611e8c6112c1565b9050600081600101905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008360020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b87518110156120ee576000878281518110611f4157611f4061327f565b5b6020026020010151905060008111156120da576000898381518110611f6957611f6861327f565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415611fd957818760000160008381526020019081526020016000206000828254611fcd9190613692565b92505081905550612025565b81611fe48d8361107f565b14156120245761200e8c87600084815260200190815260200160002061210490919063ffffffff16565b50612022818661213490919063ffffffff16565b505b5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141561208b5781876000016000838152602001908152602001600020600082825461207f9190613b1c565b925050819055506120d8565b60006120978c8361107f565b14156120d7576120c18b87600084815260200190815260200160002061214e90919063ffffffff16565b506120d5818561217e90919063ffffffff16565b505b5b505b5080806120e69061336f565b915050611f23565b50505050505b505050505050565b505050505050565b600061212c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612198565b905092915050565b6000612146836000018360001b612198565b905092915050565b6000612176836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6122aa565b905092915050565b6000612190836000018360001b6122aa565b905092915050565b6000808360010160008481526020019081526020016000205490506000811461229e5760006001826121ca9190613b1c565b9050600085600001600187600001805490506121e69190613b1c565b815481106121f7576121f661327f565b5b906000526020600020015490508086600001838154811061221b5761221a61327f565b5b90600052602060002001819055506001826122369190613692565b866001016000838152602001908152602001600020819055508560000180548061226357612262613b50565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506122a4565b60009150505b92915050565b60006122b6838361231a565b61230f578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612314565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805461234990612fc9565b90600052602060002090601f01602090048101928261236b57600085556123b2565b82601f1061238457805160ff19168380011785556123b2565b828001600101855582156123b2579182015b828111156123b1578251825591602001919060010190612396565b5b5090506123bf91906123c3565b5090565b5b808211156123dc5760008160009055506001016123c4565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061241f826123f4565b9050919050565b61242f81612414565b811461243a57600080fd5b50565b60008135905061244c81612426565b92915050565b6000819050919050565b61246581612452565b811461247057600080fd5b50565b6000813590506124828161245c565b92915050565b6000806040838503121561249f5761249e6123ea565b5b60006124ad8582860161243d565b92505060206124be85828601612473565b9150509250929050565b6124d181612452565b82525050565b60006020820190506124ec60008301846124c8565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612527816124f2565b811461253257600080fd5b50565b6000813590506125448161251e565b92915050565b6000602082840312156125605761255f6123ea565b5b600061256e84828501612535565b91505092915050565b60008115159050919050565b61258c81612577565b82525050565b60006020820190506125a76000830184612583565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612600826125b7565b810181811067ffffffffffffffff8211171561261f5761261e6125c8565b5b80604052505050565b60006126326123e0565b905061263e82826125f7565b919050565b600067ffffffffffffffff82111561265e5761265d6125c8565b5b612667826125b7565b9050602081019050919050565b82818337600083830152505050565b600061269661269184612643565b612628565b9050828152602081018484840111156126b2576126b16125b2565b5b6126bd848285612674565b509392505050565b600082601f8301126126da576126d96125ad565b5b81356126ea848260208601612683565b91505092915050565b600080600080600060a0868803121561270f5761270e6123ea565b5b600086013567ffffffffffffffff81111561272d5761272c6123ef565b5b612739888289016126c5565b955050602061274a8882890161243d565b945050604061275b8882890161243d565b935050606061276c8882890161243d565b925050608061277d8882890161243d565b9150509295509295909350565b6000602082840312156127a05761279f6123ea565b5b60006127ae84828501612473565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127f15780820151818401526020810190506127d6565b83811115612800576000848401525b50505050565b6000612811826127b7565b61281b81856127c2565b935061282b8185602086016127d3565b612834816125b7565b840191505092915050565b600060208201905081810360008301526128598184612806565b905092915050565b600060208284031215612877576128766123ea565b5b60006128858482850161243d565b91505092915050565b600067ffffffffffffffff8211156128a9576128a86125c8565b5b602082029050602081019050919050565b600080fd5b60006128d26128cd8461288e565b612628565b905080838252602082019050602084028301858111156128f5576128f46128ba565b5b835b8181101561291e578061290a8882612473565b8452602084019350506020810190506128f7565b5050509392505050565b600082601f83011261293d5761293c6125ad565b5b813561294d8482602086016128bf565b91505092915050565b600067ffffffffffffffff821115612971576129706125c8565b5b61297a826125b7565b9050602081019050919050565b600061299a61299584612956565b612628565b9050828152602081018484840111156129b6576129b56125b2565b5b6129c1848285612674565b509392505050565b600082601f8301126129de576129dd6125ad565b5b81356129ee848260208601612987565b91505092915050565b600080600080600060a08688031215612a1357612a126123ea565b5b6000612a218882890161243d565b9550506020612a328882890161243d565b945050604086013567ffffffffffffffff811115612a5357612a526123ef565b5b612a5f88828901612928565b935050606086013567ffffffffffffffff811115612a8057612a7f6123ef565b5b612a8c88828901612928565b925050608086013567ffffffffffffffff811115612aad57612aac6123ef565b5b612ab9888289016129c9565b9150509295509295909350565b612acf81612414565b82525050565b6000602082019050612aea6000830184612ac6565b92915050565b600067ffffffffffffffff821115612b0b57612b0a6125c8565b5b602082029050602081019050919050565b6000612b2f612b2a84612af0565b612628565b90508083825260208201905060208402830185811115612b5257612b516128ba565b5b835b81811015612b7b5780612b67888261243d565b845260208401935050602081019050612b54565b5050509392505050565b600082601f830112612b9a57612b996125ad565b5b8135612baa848260208601612b1c565b91505092915050565b60008060408385031215612bca57612bc96123ea565b5b600083013567ffffffffffffffff811115612be857612be76123ef565b5b612bf485828601612b85565b925050602083013567ffffffffffffffff811115612c1557612c146123ef565b5b612c2185828601612928565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c6081612452565b82525050565b6000612c728383612c57565b60208301905092915050565b6000602082019050919050565b6000612c9682612c2b565b612ca08185612c36565b9350612cab83612c47565b8060005b83811015612cdc578151612cc38882612c66565b9750612cce83612c7e565b925050600181019050612caf565b5085935050505092915050565b60006020820190508181036000830152612d038184612c8b565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d4081612414565b82525050565b6000612d528383612d37565b60208301905092915050565b6000602082019050919050565b6000612d7682612d0b565b612d808185612d16565b9350612d8b83612d27565b8060005b83811015612dbc578151612da38882612d46565b9750612dae83612d5e565b925050600181019050612d8f565b5085935050505092915050565b60006020820190508181036000830152612de38184612d6b565b905092915050565b612df481612577565b8114612dff57600080fd5b50565b600081359050612e1181612deb565b92915050565b60008060408385031215612e2e57612e2d6123ea565b5b6000612e3c8582860161243d565b9250506020612e4d85828601612e02565b9150509250929050565b60008060408385031215612e6e57612e6d6123ea565b5b6000612e7c8582860161243d565b9250506020612e8d8582860161243d565b9150509250929050565b600080600080600060a08688031215612eb357612eb26123ea565b5b6000612ec18882890161243d565b9550506020612ed28882890161243d565b9450506040612ee388828901612473565b9350506060612ef488828901612473565b925050608086013567ffffffffffffffff811115612f1557612f146123ef565b5b612f21888289016129c9565b9150509295509295909350565b7f4e4f000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f646002836127c2565b9150612f6f82612f2e565b602082019050919050565b60006020820190508181036000830152612f9381612f57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fe157607f821691505b60208210811415612ff557612ff4612f9a565b5b50919050565b7f455243313135355552493a20746f6b656e4964206e6f74206578697374000000600082015250565b6000613031601d836127c2565b915061303c82612ffb565b602082019050919050565b6000602082019050818103600083015261306081613024565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461309481612fc9565b61309e8186613067565b945060018216600081146130b957600181146130ca576130fd565b60ff198316865281860193506130fd565b6130d385613072565b60005b838110156130f5578154818901526001820191506020810190506130d6565b838801955050505b50505092915050565b6000613111826127b7565b61311b8185613067565b935061312b8185602086016127d3565b80840191505092915050565b60006131438285613087565b915061314f8284613106565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006131b76029836127c2565b91506131c28261315b565b604082019050919050565b600060208201905081810360008301526131e6816131aa565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006132496029836127c2565b9150613254826131ed565b604082019050919050565b600060208201905081810360008301526132788161323c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a2062617463682062616c616e636520717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061330a6031836127c2565b9150613315826132ae565b604082019050919050565b60006020820190508181036000830152613339816132fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061337a82612452565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133ad576133ac613340565b5b600182019050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006134146029836127c2565b915061341f826133b8565b604082019050919050565b6000602082019050818103600083015261344381613407565b9050919050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006134a6602b836127c2565b91506134b18261344a565b604082019050919050565b600060208201905081810360008301526134d581613499565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135386025836127c2565b9150613543826134dc565b604082019050919050565b600060208201905081810360008301526135678161352b565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006135ca6028836127c2565b91506135d58261356e565b604082019050919050565b600060208201905081810360008301526135f9816135bd565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636573206660008201527f6f72207472616e73666572000000000000000000000000000000000000000000602082015250565b600061365c602b836127c2565b915061366782613600565b604082019050919050565b6000602082019050818103600083015261368b8161364f565b9050919050565b600061369d82612452565b91506136a883612452565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136dd576136dc613340565b5b828201905092915050565b600060408201905081810360008301526137028185612c8b565b905081810360208301526137168184612c8b565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006137468261371f565b613750818561372a565b93506137608185602086016127d3565b613769816125b7565b840191505092915050565b600060a0820190506137896000830188612ac6565b6137966020830187612ac6565b81810360408301526137a88186612c8b565b905081810360608301526137bc8185612c8b565b905081810360808301526137d0818461373b565b90509695505050505050565b6000815190506137eb8161251e565b92915050565b600060208284031215613807576138066123ea565b5b6000613815848285016137dc565b91505092915050565b60008160e01c9050919050565b600060033d111561384a5760046000803e61384760005161381e565b90505b90565b600060443d101561385d576138e0565b6138656123e0565b60043d036004823e80513d602482011167ffffffffffffffff8211171561388d5750506138e0565b808201805167ffffffffffffffff8111156138ab57505050506138e0565b80602083010160043d0385018111156138c85750505050506138e0565b6138d7826020018501866125f7565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061393f6034836127c2565b915061394a826138e3565b604082019050919050565b6000602082019050818103600083015261396e81613932565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006139d16028836127c2565b91506139dc82613975565b604082019050919050565b60006020820190508181036000830152613a00816139c4565b9050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a636022836127c2565b9150613a6e82613a07565b604082019050919050565b60006020820190508181036000830152613a9281613a56565b9050919050565b6000604082019050613aae60008301856124c8565b613abb60208301846124c8565b9392505050565b600060a082019050613ad76000830188612ac6565b613ae46020830187612ac6565b613af160408301866124c8565b613afe60608301856124c8565b8181036080830152613b10818461373b565b90509695505050505050565b6000613b2782612452565b9150613b3283612452565b925082821015613b4557613b44613340565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220825a03e83c5a799c8e5baf6f837f9b5fc18752117a00f794a93319ee5ad88a6e64736f6c634300080a0033"; type CyberTokenBaseConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/ERC1155URI__factory.ts b/packages/contracts/typechain-types/factories/ERC1155URI__factory.ts index 43305f8..e02207b 100644 --- a/packages/contracts/typechain-types/factories/ERC1155URI__factory.ts +++ b/packages/contracts/typechain-types/factories/ERC1155URI__factory.ts @@ -192,19 +192,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xfbe62a3d", - type: "bytes32", - }, - ], - name: "c_0xfbe62a3d", - outputs: [], - stateMutability: "pure", - type: "function", - }, { inputs: [ { diff --git a/packages/contracts/typechain-types/factories/LibAppStorage__factory.ts b/packages/contracts/typechain-types/factories/LibAppStorage__factory.ts index 89817a8..1b9bc3a 100644 --- a/packages/contracts/typechain-types/factories/LibAppStorage__factory.ts +++ b/packages/contracts/typechain-types/factories/LibAppStorage__factory.ts @@ -19,23 +19,10 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0x2eebe50c", - type: "bytes32", - }, - ], - name: "c_0x2eebe50c", - outputs: [], - stateMutability: "pure", - type: "function", - }, ]; const _bytecode = - "0x61016e610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c8063517d217e1461004557806376d204d514610063575b600080fd5b61004d61007f565b60405161005a91906100bf565b60405180910390f35b61007d6004803603810190610078919061010b565b6100a3565b005b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e81565b50565b6000819050919050565b6100b9816100a6565b82525050565b60006020820190506100d460008301846100b0565b92915050565b600080fd5b6100e8816100a6565b81146100f357600080fd5b50565b600081359050610105816100df565b92915050565b600060208284031215610121576101206100da565b5b600061012f848285016100f6565b9150509291505056fea26469706673582212203705556238e825d12321c4df0e2c0cc330ef5e1b83778cf33fb220684faaf40b64736f6c634300080a0033"; + "0x60dc610052600b82828239805160001a607314610045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063517d217e146038575b600080fd5b603e6052565b60405160499190608d565b60405180910390f35b7f47dc25f21c7793543edaeb1ef19d41726ddbada967ae9a7980b9bd8a45228a5e81565b6000819050919050565b6087816076565b82525050565b600060208201905060a060008301846080565b9291505056fea2646970667358221220b60aaea609f55fe9d8eef52458fa0ff3fef7199e75e642d4872d6c30bb221d7a64736f6c634300080a0033"; type LibAppStorageConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/LibDiamond__factory.ts b/packages/contracts/typechain-types/factories/LibDiamond__factory.ts index daa7b2e..0099f59 100644 --- a/packages/contracts/typechain-types/factories/LibDiamond__factory.ts +++ b/packages/contracts/typechain-types/factories/LibDiamond__factory.ts @@ -19,23 +19,10 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xa32ac8c0", - type: "bytes32", - }, - ], - name: "c_0xa32ac8c0", - outputs: [], - stateMutability: "pure", - type: "function", - }, ]; const _bytecode = - "0x61016e610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80639b00bb3c14610045578063b2bebf5514610061575b600080fd5b61005f600480360381019061005a91906100e1565b61007f565b005b610069610082565b604051610076919061011d565b60405180910390f35b50565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c81565b600080fd5b6000819050919050565b6100be816100ab565b81146100c957600080fd5b50565b6000813590506100db816100b5565b92915050565b6000602082840312156100f7576100f66100a6565b5b6000610105848285016100cc565b91505092915050565b610117816100ab565b82525050565b6000602082019050610132600083018461010e565b9291505056fea2646970667358221220ee20ee54550d2ee72d6d60f90188845eb6cbae8831fe3cc40d2c66dc7c29fd9f64736f6c634300080a0033"; + "0x60dc610052600b82828239805160001a607314610045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063b2bebf55146038575b600080fd5b603e6052565b60405160499190608d565b60405180910390f35b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c81565b6000819050919050565b6087816076565b82525050565b600060208201905060a060008301846080565b9291505056fea26469706673582212207773727040417d0b2392f78d825244897b49a3e147bb1bb1a98250553ecfe0bc64736f6c634300080a0033"; type LibDiamondConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/factories/LibDropStorage__factory.ts b/packages/contracts/typechain-types/factories/LibDropStorage__factory.ts index 25e0b8e..207a289 100644 --- a/packages/contracts/typechain-types/factories/LibDropStorage__factory.ts +++ b/packages/contracts/typechain-types/factories/LibDropStorage__factory.ts @@ -22,23 +22,10 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "c__0xce10a45c", - type: "bytes32", - }, - ], - name: "c_0xce10a45c", - outputs: [], - stateMutability: "pure", - type: "function", - }, ]; const _bytecode = - "0x61016e610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80630cb7750614610045578063517d217e14610061575b600080fd5b61005f600480360381019061005a91906100e1565b61007f565b005b610069610082565b604051610076919061011d565b60405180910390f35b50565b7f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65981565b600080fd5b6000819050919050565b6100be816100ab565b81146100c957600080fd5b50565b6000813590506100db816100b5565b92915050565b6000602082840312156100f7576100f66100a6565b5b6000610105848285016100cc565b91505092915050565b610117816100ab565b82525050565b6000602082019050610132600083018461010e565b9291505056fea26469706673582212207c84b36f906374dd3def9b0721ea046d4431e160a1f4d0d7c3a475fa848cfce564736f6c634300080a0033"; + "0x60dc610052600b82828239805160001a607314610045577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063517d217e146038575b600080fd5b603e6052565b60405160499190608d565b60405180910390f35b7f6862122c88c20d0f389f9211fb45e4a0982f5f74838cd11cfb5e8c8b41fbe65981565b6000819050919050565b6087816076565b82525050565b600060208201905060a060008301846080565b9291505056fea2646970667358221220488bafa2bf3b117ddc6ab9e9d77411b4f21bc50a981cd9af9786c763a1ee71e264736f6c634300080a0033"; type LibDropStorageConstructorParams = | [signer?: Signer] diff --git a/packages/contracts/typechain-types/index.ts b/packages/contracts/typechain-types/index.ts index 0ba7a2c..d4fc2c8 100644 --- a/packages/contracts/typechain-types/index.ts +++ b/packages/contracts/typechain-types/index.ts @@ -17,7 +17,6 @@ export type { ERC1155MetadataInternal } from "./ERC1155MetadataInternal"; export type { IERC1155Metadata } from "./IERC1155Metadata"; export type { IERC1155MetadataInternal } from "./IERC1155MetadataInternal"; export type { BaseRelayRecipient } from "./BaseRelayRecipient"; -export type { BaseRelayRecipientStorage } from "./BaseRelayRecipientStorage"; export type { CyberDropBase } from "./CyberDropBase"; export type { CyberTokenBase } from "./CyberTokenBase"; export type { CyberDestinationFactoryFacet } from "./CyberDestinationFactoryFacet"; @@ -25,7 +24,6 @@ export type { CyberDestinationUtilityFactoryFacet } from "./CyberDestinationUtil export type { CyberObjectFactoryFacet } from "./CyberObjectFactoryFacet"; export type { LibDiamond } from "./LibDiamond"; export type { ERC1155URI } from "./ERC1155URI"; -export type { ERC1155URIStorage } from "./ERC1155URIStorage"; export type { LibAppStorage } from "./LibAppStorage"; export type { LibDropStorage } from "./LibDropStorage"; @@ -45,7 +43,6 @@ export { ERC1155MetadataInternal__factory } from "./factories/ERC1155MetadataInt export { IERC1155Metadata__factory } from "./factories/IERC1155Metadata__factory"; export { IERC1155MetadataInternal__factory } from "./factories/IERC1155MetadataInternal__factory"; export { BaseRelayRecipient__factory } from "./factories/BaseRelayRecipient__factory"; -export { BaseRelayRecipientStorage__factory } from "./factories/BaseRelayRecipientStorage__factory"; export { CyberDropBase__factory } from "./factories/CyberDropBase__factory"; export { CyberTokenBase__factory } from "./factories/CyberTokenBase__factory"; export { CyberDestinationFactoryFacet__factory } from "./factories/CyberDestinationFactoryFacet__factory"; @@ -53,6 +50,5 @@ export { CyberDestinationUtilityFactoryFacet__factory } from "./factories/CyberD export { CyberObjectFactoryFacet__factory } from "./factories/CyberObjectFactoryFacet__factory"; export { LibDiamond__factory } from "./factories/LibDiamond__factory"; export { ERC1155URI__factory } from "./factories/ERC1155URI__factory"; -export { ERC1155URIStorage__factory } from "./factories/ERC1155URIStorage__factory"; export { LibAppStorage__factory } from "./factories/LibAppStorage__factory"; export { LibDropStorage__factory } from "./factories/LibDropStorage__factory";