[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ARRAY_LENGTH_MISMATCH", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "CONSUMER_ALREADY_SUBSCRIBED", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "subscription", "type": "uint256" }, { "internalType": "address", "name": "consumer", "type": "address" } ], "name": "CONSUMER_NOT_FOUND", "type": "error" }, { "inputs": [], "name": "CONSUMER_ZERO", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "DATASET_OWNER_FORBIDDEN", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" }, { "internalType": "uint256", "name": "current", "type": "uint256" } ], "name": "MAX_CONSUMERS_ADDITION_REACHED", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "NOT_APPROVED_TOKEN", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "NOT_DATASET_OWNER", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "NOT_SUBSCRIPTION_OWNER", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "minimum", "type": "uint256" }, { "internalType": "uint256", "name": "maximum", "type": "uint256" }, { "internalType": "uint256", "name": "current", "type": "uint256" } ], "name": "SUBSCRIPTION_DURATION_INVALID", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "validTill", "type": "uint256" }, { "internalType": "uint256", "name": "currentTimestamp", "type": "uint256" } ], "name": "SUBSCRIPTION_ENDED", "type": "error" }, { "inputs": [], "name": "SUBSCRIPTION_FEE_EXCEEDS_LIMIT", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maximum", "type": "uint256" }, { "internalType": "uint256", "name": "current", "type": "uint256" } ], "name": "SUBSCRIPTION_REMAINING_DURATION", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "UNSUPPORTED_DATASET", "type": "error" }, { "inputs": [], "name": "UNSUPPORTED_MSG_VALUE", "type": "error" }, { "inputs": [], "name": "UNSUPPORTED_NATIVE_CURRENCY", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "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": "uint256", "name": "id", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "consumer", "type": "address" } ], "name": "ConsumerAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "consumer", "type": "address" } ], "name": "ConsumerRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "validSince", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "validTill", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "paidConsumers", "type": "uint256" } ], "name": "SubscriptionPaid", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newTrustedForwarder", "type": "address" } ], "name": "TrustedForwarderSourceChanged", "type": "event" }, { "inputs": [], "name": "MAX_SUBSCRIPTION_DURATION_IN_DAYS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SUBSCRIPTION_EXTENSION_IN_DAYS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "subscription", "type": "uint256" }, { "internalType": "address[]", "name": "consumers", "type": "address[]" } ], "name": "addConsumers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dataset", "outputs": [ { "internalType": "contract IDatasetNFT", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "datasetId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "subscription", "type": "uint256" }, { "internalType": "uint256", "name": "extraDurationInDays", "type": "uint256" }, { "internalType": "uint256", "name": "extraConsumers", "type": "uint256" }, { "internalType": "uint256", "name": "maxExtraFee", "type": "uint256" } ], "name": "extendSubscription", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "subscription", "type": "uint256" }, { "internalType": "uint256", "name": "extraDurationInDays", "type": "uint256" }, { "internalType": "address[]", "name": "extraConsumers", "type": "address[]" }, { "internalType": "uint256", "name": "maxExtraFee", "type": "uint256" } ], "name": "extendSubscriptionAndAddExtraConsumers", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "subscription", "type": "uint256" }, { "internalType": "uint256", "name": "extraConsumers", "type": "uint256" } ], "name": "extraConsumerFee", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feePerConsumerPerDay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "dataset_", "type": "address" }, { "internalType": "uint256", "name": "datasetId_", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ds", "type": "uint256" }, { "internalType": "address", "name": "consumer", "type": "address" } ], "name": "isSubscriptionPaidFor", "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": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "subscription", "type": "uint256" }, { "internalType": "address[]", "name": "consumers", "type": "address[]" } ], "name": "removeConsumers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "subscription", "type": "uint256" }, { "internalType": "address[]", "name": "oldConsumers", "type": "address[]" }, { "internalType": "address[]", "name": "newConsumers", "type": "address[]" } ], "name": "replaceConsumers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token_", "type": "address" }, { "internalType": "uint256", "name": "feePerConsumerPerDay_", "type": "uint256" } ], "name": "setFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ds", "type": "uint256" }, { "internalType": "uint256", "name": "durationInDays", "type": "uint256" }, { "internalType": "uint256", "name": "consumers", "type": "uint256" }, { "internalType": "uint256", "name": "maxFee", "type": "uint256" } ], "name": "subscribe", "outputs": [ { "internalType": "uint256", "name": "sid", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ds", "type": "uint256" }, { "internalType": "uint256", "name": "durationInDays", "type": "uint256" }, { "internalType": "address[]", "name": "consumers", "type": "address[]" }, { "internalType": "uint256", "name": "maxFee", "type": "uint256" } ], "name": "subscribeAndAddConsumers", "outputs": [ { "internalType": "uint256", "name": "sid", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ds", "type": "uint256" }, { "internalType": "uint256", "name": "durationInDays", "type": "uint256" }, { "internalType": "uint256", "name": "consumers", "type": "uint256" } ], "name": "subscriptionFee", "outputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608080604052346100c2576000549060ff8260081c16610070575060ff80821603610035575b6040516130f99081620000c88239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a138610025565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146119695750806302b728ab1461194057806306fdde031461189a578063081812fc1461187c578063095ea7b3146116ee57806314eef9dd1461165857806318160ddd1461163a5780631f5efb01146115b05780632101bf931461150057806323b872dd146114da578063253be384146114bd5780632f745c591461140b5780633cf32b14146112b757806342842e0e146112825780634f6ccce7146111f1578063544754ea146111d55780635620bb69146111af578063572b6c05146111825780636352211e1461115257806370a08231146111275780637963041d14610e1d57806395d89b4114610d3b5780639e02247e14610c79578063a22cb46514610b9f578063b88d4fde14610aea578063baa80a3114610a4d578063bd1c4e7114610a2e578063c87b56dd146109c1578063cd6dc6871461050d578063d02d7019146104ef578063e55156b514610396578063e6bebb32146102f2578063e985e9c51461029c578063f98bd812146101cf5763fc0c546a146101a057600080fd5b346101ca5760003660031901126101ca57610101546040516001600160a01b039091168152602090f35b600080fd5b6101d836611aa5565b90926101e2613094565b60018060a01b03908160fc5416602060fd546024604051809481936331a9108f60e11b835260048301525afa918215610290578391600093610260575b501691168114610248575090836102369286612b8c565b8161023d57005b61024692612d4b565b005b602490604051906321280ec360e11b82526004820152fd5b61028291935060203d8111610289575b61027a8183611b9f565b8101906123b4565b918961021f565b503d610270565b6040513d6000823e3d90fd5b346101ca5760403660031901126101ca576102b5611a48565b6102bd611a5e565b9060018060a01b03809116600052606a60205260406000209116600052602052602060ff604060002054166040519015158152f35b346101ca5760603660031901126101ca57602435604435610314600435613018565b8115801561038b575b61036357801561035157610330916124e4565b604080516001600160a01b03939093168352602083019190915290f35b0390f35b60405163358b0b7760e01b8152600490fd5b60405163f016b95760e01b81526001600482015261016d602482015260448101839052606490fd5b5061016d821161031d565b346101ca5760403660031901126101ca576103af611a48565b6103b7613094565b60fc5460fd546040516331a9108f60e11b815260048101919091526001600160a01b039182169360209390918481602481895afa90811561029057849283916000936104d0575b501691829116036104b95750169182156104a7578160249160405192838092632d5ad3d560e01b82528760048301525afa9182156102905760009261047a575b5050156104625761010180546001600160a01b031916909117905560243561010255005b602490604051906307f5aa0960e21b82526004820152fd5b6104999250803d106104a0575b6104918183611b9f565b8101906123d3565b828061043e565b503d610487565b60405163332f9a7560e01b8152600490fd5b602490604051906250b83f60e81b82526004820152fd5b6104e8919350873d89116102895761027a8183611b9f565b91886103fe565b346101ca5760003660031901126101ca57602060fd54604051908152f35b346101ca5760403660031901126101ca57610526611a48565b60005460ff8160081c1615908180926109b4575b801561099d575b1561094157600190828260ff1983161760005561092f575b506040519161056783611b83565b6013835260209272273ab5b630b49029bab139b1b934b83a34b7b760691b8482015260405161059581611b83565b60068152652720a4a9aaa160d11b858201526105c160ff60005460081c166105bc81612354565b612354565b81519167ffffffffffffffff9283811161081d57806105e1606554611cc6565b92601f938481116108c0575b50889084831160011461083e57600092610833575b5050600019600383901b1c191690861b176065555b815192831161081d57829161062d606654611cc6565b8281116107ac575b508691831160011461072a5760009261071f575b5050600019600383901b1c191690831b176066555b6106e66000549460ff8660081c169061067682612354565b61067f82612354565b60018060a01b03166bffffffffffffffffffffffff60a01b818160c954161760c9557f38dd1fb2d26f08c618b847328db3c9278e3c4c8922fec738f7d8b0a3abc8a5a787604051848152a16106d383612354565b60fc54161760fc5560243560fd55612354565b6106ec57005b7f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989261ff001916600055604051908152a1005b015190508680610649565b90859350601f1983169160666000527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943549260005b89828210610796575050841161077d575b505050811b0160665561065e565b015160001960f88460031b161c1916905586808061076f565b838501518655899790950194938401930161075e565b9091925060666000527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943548380860160051c820192898710610814575b91869589929594930160051c01915b828110610805575050610635565b600081558695508891016107f7565b925081926107e8565b634e487b7160e01b600052604160045260246000fd5b015190508980610602565b90889350601f1983169160656000527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c79260005b8c8282106108aa5750508411610891575b505050811b01606555610617565b015160001960f88460031b161c19169055898080610883565b8385015186558c97909501949384019301610872565b90915060656000527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c78480850160051c8201928b8610610926575b918a91869594930160051c01915b8281106109175750506105ed565b600081558594508a9101610909565b925081926108fb565b61ffff19166101011760005583610559565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156105415750600160ff821614610541565b50600160ff82161061053a565b346101ca5760203660031901126101ca576004356000908152606760205260409020546109f8906001600160a01b03161515611c54565b6000604051610a0681611b67565b5261034d604051610a1681611b67565b60008152604051918291602083526020830190611a08565b346101ca5760003660031901126101ca57602061010254604051908152f35b610a5636611ae0565b91610a5f613094565b9360018060a01b03948560fc5416602060fd546024604051809481936331a9108f60e11b835260048301525afa918215610290578791600093610aca575b501695168514610ab1576102469450612b8c565b6040516321280ec360e11b815260048101869052602490fd5b610ae391935060203d81116102895761027a8183611b9f565b9188610a9d565b346101ca5760803660031901126101ca57610b03611a48565b610b0b611a5e565b906064359060443567ffffffffffffffff83116101ca57366023840112156101ca57826004013593610b3c85611bc1565b92610b4a6040519485611b9f565b85845236602487870101116101ca576000602087610246986024610b9a99018389013786010152610b8a610b8584610b80613094565b611e17565b611d3e565b610b95838383611edf565b612274565b611df3565b346101ca5760403660031901126101ca57610bb8611a48565b6024358015158091036101ca57610bcd613094565b6001600160a01b03928316921690818314610c345760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319183600052606a82526040600020856000528252604060002060ff1981541660ff8316179055604051908152a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b346101ca57610c8736611b33565b90610c90613094565b9260018060a01b03938460fc5416602060fd546024604051809481936331a9108f60e11b835260048301525afa9081156102905786928391600093610d1b575b5016911681146102485750610ce3613094565b84610ced83611ca0565b91169485911603610d02576102469350612d4b565b60405163acc21a5960e01b815260048101859052602490fd5b610d3491935060203d81116102895761027a8183611b9f565b9188610cd0565b346101ca5760003660031901126101ca576040516000606654610d5d81611cc6565b80845290600190818116908115610df65750600114610d9b575b61034d84610d8781860382611b9f565b604051918291602083526020830190611a08565b6066600090815292507f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943545b828410610dde575050508101602001610d8782610d77565b80546020858701810191909152909301928101610dc6565b60ff191660208087019190915292151560051b85019092019250610d879150839050610d77565b346101ca5760603660031901126101ca5767ffffffffffffffff6024358181116101ca57610e4f903690600401611a74565b90916044359081116101ca57610e69903690600401611a74565b90610e72613094565b60018060a01b0360fc541690602060fd546024604051809581936331a9108f60e11b835260048301525afa91821561029057600092611106575b506001600160a01b03908116911681146102485750610ec9613094565b610ed4600435611ca0565b6001600160a01b0391821691168190036110ee5750600435600090815260676020526040902054610f0f906001600160a01b03161515611c54565b60043560005260ff6020526040600020938284036110dc5760005b848110610f3357005b6001600160a01b03610f4e610f49838886612d27565b612d37565b16610f5c8160038901612f28565b156110bc5780600052610100602052610f7b6004356040600020612f28565b506004357f5274c432b5877b38569ae9babd361f86e4b34d0f36aef7f6c61cbba5f185cee1600080a3610fb2610f49828686612d27565b60018060a01b0360fc5416602060fd546024604051809481936331a9108f60e11b835260048301525afa9081156102905760009161109d575b506001600160a01b0382811691161461107b57600191906110186001600160a01b03821660038a01612ece565b611024575b5001610f2a565b828060a01b0381166000526101006020526110456004356040600020612ece565b50828060a01b03166004357f4e5aab67fb6878a7c5437d638d002992f2b503107c053f38483f6b2949487493600080a38761101d565b6040516321280ec360e11b81526001600160a01b039091166004820152602490fd5b6110b6915060203d6020116102895761027a8183611b9f565b88610feb565b60449060405190632d7c4b6560e01b825260043560048301526024820152fd5b604051634456f5e960e11b8152600490fd5b6024906040519063acc21a5960e01b82526004820152fd5b61112091925060203d6020116102895761027a8183611b9f565b9086610eac565b346101ca5760203660031901126101ca57602061114a611145611a48565b611bdd565b604051908152f35b346101ca5760203660031901126101ca576020611170600435611ca0565b6040516001600160a01b039091168152f35b346101ca5760203660031901126101ca5760206111a56111a0611a48565b61303c565b6040519015158152f35b346101ca5760403660031901126101ca5760206111a56111cd611a5e565b6004356123eb565b346101ca5760003660031901126101ca576020604051601e8152f35b346101ca5760203660031901126101ca576004356099548110156112285761121a6020916122e2565b90546040519160031b1c8152f35b60405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608490fd5b346101ca57610246610b9a61129636611afe565b90604051926112a484611b67565b60008452610b8a610b8584610b80613094565b346101ca576112c536611b33565b90916112cf613094565b9060018060a01b03918260fc54169060fd546040519283916331a9108f60e11b8352600483015281602460209586935afa90811561029057859283916000936113ec575b501691168114610248575082611327613094565b8161133185611ca0565b911691829116036110ee5750600082815260676020526040902054929392611363906001600160a01b03161515611c54565b600082815260ff82526040812060030193905b81811061137f57005b8086611391610f49600194868c612d27565b1661139c8188612f28565b6113a8575b5001611376565b8060005261010085526113bf866040600020612f28565b50857f5274c432b5877b38569ae9babd361f86e4b34d0f36aef7f6c61cbba5f185cee1600080a3886113a1565b611404919350853d87116102895761027a8183611b9f565b9189611313565b346101ca5760403660031901126101ca57611424611a48565b6024359061143181611bdd565b8210156114645760018060a01b031660005260976020526040600020906000526020526020604060002054604051908152f35b60405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608490fd5b346101ca5760003660031901126101ca57602060405161016d8152f35b346101ca576102466114eb36611afe565b916114fb610b8584610b80613094565b611edf565b346101ca5760403660031901126101ca5760243580156103515760043560005260ff602052604060002090600182015491428311156115915761156960026201518061155261156f9596855490612347565b049201549361156185846124e4565b959050612508565b906124e4565b919050808211156115865760209103604051908152f35b50506020600061114a565b604051637ba532d760e11b815260048101849052426024820152604490fd5b6115b936611ae0565b926115c5929192613094565b60018060a01b03908160fc5416602060fd546024604051809481936331a9108f60e11b835260048301525afa91821561029057839160009361161a575b50169116811461024857602061114a86868686612515565b61163391935060203d81116102895761027a8183611b9f565b9188611602565b346101ca5760003660031901126101ca576020609954604051908152f35b61166136611aa5565b9192909361166d613094565b60018060a01b03908160fc5416602060fd546024604051809481936331a9108f60e11b835260048301525afa9182156102905783916000936116ce575b501691168114610248575061114a9285602096936116c793612515565b9283612d4b565b6116e791935060203d81116102895761027a8183611b9f565b91896116aa565b346101ca5760403660031901126101ca57611707611a48565b602435906001600160a01b03808061171e85611ca0565b1692169180831461182d578082611733613094565b16149081156117fd575b501561179257600083815260696020526040902080546001600160a01b0319168317905561176a83611ca0565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608490fd5b9050611807613094565b90600052606a602052816040600020911660005260205260ff604060002054168461173d565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b346101ca5760203660031901126101ca576020611170600435611d00565b346101ca5760003660031901126101ca5760405160006065546118bc81611cc6565b80845290600190818116908115610df657506001146118e55761034d84610d8781860382611b9f565b6065600090815292507f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c75b828410611928575050508101602001610d8782610d77565b80546020858701810191909152909301928101611910565b346101ca5760003660031901126101ca5760fc546040516001600160a01b039091168152602090f35b346101ca5760203660031901126101ca576004359063ffffffff60e01b82168092036101ca57602091631e44eae760e01b81149081156119ab575b5015158152f35b63780e9d6360e01b8114915081156119c5575b50836119a4565b6380ac58cd60e01b8114915081156119f7575b81156119e6575b50836119be565b6301ffc9a760e01b149050836119df565b635b5e139f60e01b811491506119d8565b919082519283825260005b848110611a34575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201611a13565b600435906001600160a01b03821682036101ca57565b602435906001600160a01b03821682036101ca57565b9181601f840112156101ca5782359167ffffffffffffffff83116101ca576020808501948460051b0101116101ca57565b60806003198201126101ca5760043591602435916044359067ffffffffffffffff82116101ca57611ad891600401611a74565b909160643590565b60809060031901126101ca5760043590602435906044359060643590565b60609060031901126101ca576001600160a01b039060043582811681036101ca579160243590811681036101ca579060443590565b9060406003198301126101ca57600435916024359067ffffffffffffffff82116101ca57611b6391600401611a74565b9091565b6020810190811067ffffffffffffffff82111761081d57604052565b6040810190811067ffffffffffffffff82111761081d57604052565b90601f8019910116810190811067ffffffffffffffff82111761081d57604052565b67ffffffffffffffff811161081d57601f01601f191660200190565b6001600160a01b03168015611bfd57600052606860205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b15611c5b57565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152606760205260409020546001600160a01b0316611cc3811515611c54565b90565b90600182811c92168015611cf6575b6020831014611ce057565b634e487b7160e01b600052602260045260246000fd5b91607f1691611cd5565b600081815260676020526040902054611d23906001600160a01b03161515611c54565b6000908152606960205260409020546001600160a01b031690565b15611d4557565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b15611dfa57565b60405162461bcd60e51b815280611e1360048201611da0565b0390fd5b906001600160a01b038080611e2b84611ca0565b16931691838314938415611e5e575b508315611e48575b50505090565b611e5491929350611d00565b1614388080611e42565b909350600052606a60205260406000208260005260205260ff604060002054169238611e3a565b15611e8c57565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b611f0391611eec84611ca0565b6001600160a01b0393848416939185168414611e85565b8382169384156120ef57839182612036575090506099549085600052609a60205281604060002055600160401b82101561081d57611f839286611f67611f508560018997016099556122e2565b819391549060031b91821b91600019901b19161790565b90555b828603612003575b50611f7c86611ca0565b1614611e85565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60008481526069602052604081206bffffffffffffffffffffffff60a01b9081815416905583825260686020526040822060001981540190558482526040822060018154019055858252606760205284604083209182541617905580a4565b61200c90611bdd565b60406000878152609760205281812083825260205288828220558881526098602052205538611f72565b858303612048575b50611f8392611f6a565b612053919250611bdd565b6000198101919082116120d957611f8392849260009088825260209060988252604091828420548281036120a2575b508a8452838381205586845260978152828420918452528120559261203e565b8785526097825283852083865282528385205488865260978352848620828752835280858720558552609882528385205538612082565b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b3d1561216b573d9061215182611bc1565b9161215f6040519384611b9f565b82523d6000602084013e565b606090565b9091600091803b1561226b576121cc60209161218a613094565b9385604051958680958194630a85bd0160e11b9b8c845260018060a01b0380951660048501528560248501526044840152608060648401526084830190611a08565b0393165af19082908261221c575b505061220e576121e8612140565b805190816122095760405162461bcd60e51b815280611e1360048201611da0565b602001fd5b6001600160e01b0319161490565b909192506020813d8211612263575b8161223860209383611b9f565b8101031261225f5751906001600160e01b03198216820361225c57509038806121da565b80fd5b5080fd5b3d915061222b565b50505050600190565b9260009290823b156122d8576121cc9260209285612290613094565b604051630a85bd0160e11b8082526001600160a01b03928316600483015299821660248201526044810193909352608060648401529195869485939184916084830190611a08565b5050505050600190565b6099548110156123195760996000527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000190600090565b634e487b7160e01b600052603260045260246000fd5b80548210156123195760005260206000200190600090565b919082039182116120d957565b1561235b57565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b908160209103126101ca57516001600160a01b03811681036101ca5790565b908160209103126101ca575180151581036101ca5790565b6123f790929192613018565b60018060a01b03918260fc54169260fd5460409283519586926331a9108f60e11b8452600484015282602460209889935afa9182156124c6579083916000936124a7575b50169116811461249f576000526101008352806000209283549060005b828110612469575060009450505050565b612473818761232f565b90549060031b1c60005260ff82526001904282866000200154116124975701612458565b509450505050565b506001925050565b6124bf919350873d89116102895761027a8183611b9f565b913861243b565b84513d6000823e3d90fd5b818102929181159184041417156120d957565b9190611cc39061250360018060a01b03610101541694610102546124d1565b6124d1565b919082018092116120d957565b612523909493929194613018565b61252e611145613094565b6127ea578315918280156127df575b6127b75781156103515761255182866124e4565b80929150116127a55761256b90612566613094565b61285f565b60fe5460001981146120d957600101918260fe55829460009184835260209260ff84526040928382209242845562015180808302928304141715612791576125b39042612508565b9360018301948555600283019586556125ca613094565b908451926125d784611b67565b8084526001600160a01b03831691821561274f5760008a815260676020526040902054612610906001600160a01b031615155b15612813565b6099548a8352609a82528088842055600160401b81101561273b5761273696948b61271595610b9a9560677fc0c5f780288600bd422b1277ec0e23da2694f7b048ca78e7c40a05f9848382389e9d9c9a9684612676611f50896001849b016099556122e2565b905561268186611bdd565b848452609782528c842081855282528c8420869055858452609882528c8420556000858152606760205260409020546126c4906001600160a01b0316151561260a565b838352606881528b8320805460010190558483525289812080546001600160a01b031916831790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4612170565b54925493549051938493846040919493926060820195825260208201520152565b0390a2565b634e487b7160e01b83526041600452602483fd5b60649087519062461bcd60e51b825280600483015260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b634e487b7160e01b82526011600452602482fd5b604051639e45baef60e01b8152600490fd5b60405163f016b95760e01b81526001600482015261016d602482015260448101869052606490fd5b5061016d851161253d565b60246127f4613094565b60405163fdb7add360e01b81526001600160a01b039091166004820152fd5b1561281a57565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b91909134612ae15760018060a01b03906101018281541690604093845160209082828201966323b872dd60e01b88521660248201523060448201528860648201526064815260a0810167ffffffffffffffff958282108783111761081d5761291092828a526128cd83611b83565b8483527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460c0820152600080998192519082855af161290a612140565b91612af3565b805190828215928315612ac9575b50505015612a73578160fc5416908060fd54602489518095819363f9c3648960e01b835260048301525afa918215612a69578692612a4a575b508354875163095ea7b360e01b81526001600160a01b0384166004820152602481018b9052908290829060449082908b9089165af18015612a40579084939291612a22575b505016915416813b15612a1e578451635259b9ab60e01b81526001600160a01b03919091166004820152602481019690965293949382908590604490829084905af18015612a14576129ef575b50505050565b8311612a00575052388080806129e9565b634e487b7160e01b81526041600452602490fd5b83513d84823e3d90fd5b8380fd5b81612a3892903d106104a0576104918183611b9f565b50388061299c565b88513d89823e3d90fd5b81612a629293503d84116102895761027a8183611b9f565b9038612957565b87513d88823e3d90fd5b60849086519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b612ad993508201810191016123d3565b38828161291e565b604051631fbeaa8f60e01b8152600490fd5b91929015612b555750815115612b07575090565b3b15612b105790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015612b685750805190602001fd5b60405162461bcd60e51b815260206004820152908190611e13906024830190611a08565b60008181526067602052604090205490939290612bb3906001600160a01b03161515611c54565b60009084825260ff60205260408220826001820195865494428611600014612d1d575085612cea575b612c0862015180612bef85548098612347565b0496612bff6002860154896124e4565b90509697612508565b925b61016d808511612cc55750612c2460028201958654612508565b95612c2f87866124e4565b9050039182116127a557612c468792612566613094565b556201518091828102928184041490151715612cb15750918061273692612c9086957fc0c5f780288600bd422b1277ec0e23da2694f7b048ca78e7c40a05f9848382389897612508565b80965555604051938493846040919493926060820195825260208201520152565b634e487b7160e01b81526011600452602490fd5b606490856040519163f016b95760e01b83526001600484015260248301526044820152fd5b62278d00428603818111612cff575050612bdc565b6044925060405191637186771960e11b835260048301526024820152fd5b9450429592612c0a565b91908110156123195760051b0190565b356001600160a01b03811681036101ca5790565b600081815260676020526040902054612d6e906001600160a01b03161515611c54565b600090808252602060ff815260409283812095600387019687546002612d948483612508565b920154809211612ea8575050815b818110612db3575050505050505050565b612dc1610f4982848a612d27565b60fc5460fd5488516331a9108f60e11b81526004808201929092526001600160a01b0393602493899083908690829089165afa918215612e9e579085918993612e7f575b501693168314612e6b5750509081612e1f6001938b612ece565b612e2b575b5001612da2565b8085526101008652612e3f87898720612ece565b50867f4e5aab67fb6878a7c5437d638d002992f2b503107c053f38483f6b29494874938680a338612e24565b88516321280ec360e11b8152908101839052fd5b612e979193508a3d8c116102895761027a8183611b9f565b9138612e05565b8b513d8a823e3d90fd5b612eb56044938892612508565b905191630fa1ec2160e41b835260048301526024820152fd5b91906001830160009082825280602052604082205415600014612f2257845494600160401b86101561273b5783612f12611f50886001604098999a0185558461232f565b9055549382526020522055600190565b50925050565b906001820190600092818452826020526040842054908115156000146130115760001991808301818111612ffd57825490848201918211612fe957808203612fb4575b50505080548015612fa057820191612f83838361232f565b909182549160031b1b191690555582526020526040812055600190565b634e487b7160e01b86526031600452602486fd5b612fd4612fc4611f50938661232f565b90549060031b1c9283928661232f565b90558652846020526040862055388080612f6b565b634e487b7160e01b88526011600452602488fd5b634e487b7160e01b87526011600452602487fd5b5050505090565b8060fd54036130245750565b60249060405190632383105b60e11b82526004820152fd5b60c95460405163572b6c0560e01b81526001600160a01b0392831660048201529160209183916024918391165afa9081156102905760009161307c575090565b611cc3915060203d81116104a0576104918183611b9f565b61309d3361303c565b806130b8575b156130b45736601319013560601c90565b3390565b5060143610156130a356fea26469706673582212206c40b167d72a7b61ce84a73a848605e23b00c1cf36af5d2d7edef527e05ecb4264736f6c63430008120033