From a6502d8194c0c90ec309e5c7d98d64bbf22b118f Mon Sep 17 00:00:00 2001 From: lightsing Date: Thu, 19 Feb 2026 14:42:26 +0800 Subject: [PATCH 1/7] embed abi --- crates/bmt/src/lib.rs | 1 - crates/contracts/abi/ERC1967Proxy.json | 1 + crates/contracts/abi/IUniversalTimestamps.json | 1 + crates/contracts/abi/UniversalTimestamps.json | 1 + crates/contracts/src/lib.rs | 15 +++------------ 5 files changed, 6 insertions(+), 13 deletions(-) create mode 100644 crates/contracts/abi/ERC1967Proxy.json create mode 100644 crates/contracts/abi/IUniversalTimestamps.json create mode 100644 crates/contracts/abi/UniversalTimestamps.json diff --git a/crates/bmt/src/lib.rs b/crates/bmt/src/lib.rs index eb70e96..68b8427 100644 --- a/crates/bmt/src/lib.rs +++ b/crates/bmt/src/lib.rs @@ -1,4 +1,3 @@ -#![feature(maybe_uninit_slice)] #![feature(maybe_uninit_fill)] #![feature(likely_unlikely)] //! High performance binary Merkle tree implementation in Rust. diff --git a/crates/contracts/abi/ERC1967Proxy.json b/crates/contracts/abi/ERC1967Proxy.json new file mode 100644 index 0000000..fd28c7b --- /dev/null +++ b/crates/contracts/abi/ERC1967Proxy.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"fallback","stateMutability":"payable"},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]}],"bytecode":{"object":"0x6080604052604051610649380380610649833981810160405281019061002591906104e7565b610035828261003c60201b60201c565b5050610569565b61004b826100c060201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156100ad576100a7828261018f60201b60201c565b506100bc565b6100bb61029e60201b60201c565b5b5050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361011b57806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016101129190610550565b60405180910390fd5b8061014d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6102da60201b60201c565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f6101a284846102e360201b60201c565b90508080156101de57505f6101bb6102f760201b60201c565b11806101dd57505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b156101f9576101f16102fe60201b60201c565b915050610298565b801561023c57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016102339190610550565b60405180910390fd5b5f61024b6102f760201b60201c565b11156102645761025f61031b60201b60201c565b610296565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f3411156102d8576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f819050919050565b5f805f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61036082610337565b9050919050565b61037081610356565b811461037a575f80fd5b50565b5f8151905061038b81610367565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6103df82610399565b810181811067ffffffffffffffff821117156103fe576103fd6103a9565b5b80604052505050565b5f610410610326565b905061041c82826103d6565b919050565b5f67ffffffffffffffff82111561043b5761043a6103a9565b5b61044482610399565b9050602081019050919050565b5f5b8381101561046e578082015181840152602081019050610453565b5f8484015250505050565b5f61048b61048684610421565b610407565b9050828152602081018484840111156104a7576104a6610395565b5b6104b2848285610451565b509392505050565b5f82601f8301126104ce576104cd610391565b5b81516104de848260208601610479565b91505092915050565b5f80604083850312156104fd576104fc61032f565b5b5f61050a8582860161037d565b925050602083015167ffffffffffffffff81111561052b5761052a610333565b5b610537858286016104ba565b9150509250929050565b61054a81610356565b82525050565b5f6020820190506105635f830184610541565b92915050565b60d4806105755f395ff3fe6080604052600a600c565b005b60186014601a565b6026565b565b5f60216044565b905090565b365f80375f80365f845af43d5f803e805f81146040573d5ff35b3d5ffd5b5f606e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6095565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81905091905056fea264697066735822122045016995d1ce2872840a5fdf5a3f8e95a1449ede6e9227990ba56c4f2f35079264736f6c63430008180033","sourceMap":"600:1117:28:-:0;;;1081:133;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1155:52;1185:14;1201:5;1155:29;;;:52;;:::i;:::-;1081:133;;600:1117;;2264:344:29;2355:37;2374:17;2355:18;;;:37;;:::i;:::-;2425:17;2407:36;;;;;;;;;;;;2472:1;2458:4;:11;:15;2454:148;;;2489:53;2518:17;2537:4;2489:28;;;:53;;:::i;:::-;;2454:148;;;2573:18;:16;;;:18;;:::i;:::-;2454:148;2264:344;;:::o;1671:281::-;1781:1;1748:17;:29;;;:34;1744:119;;1834:17;1805:47;;;;;;;;;;;:::i;:::-;;;;;;;;1744:119;1928:17;1872:47;811:66;1899:19;;1872:26;;;:47;;:::i;:::-;:53;;;:73;;;;;;;;;;;;;;;;;;1671:281;:::o;4691:549:34:-;4774:12;4798;4813:47;4847:6;4855:4;4813:33;;;:47;;:::i;:::-;4798:62;;4874:7;:72;;;;;4918:1;4886:29;:27;;;:29;;:::i;:::-;:33;:59;;;;4944:1;4923:6;:18;;;:22;4886:59;4874:72;4870:364;;;4969:25;:23;;;:25;;:::i;:::-;4962:32;;;;;4870:364;5015:7;5011:223;;;5062:6;5045:24;;;;;;;;;;;:::i;:::-;;;;;;;;5011:223;5122:1;5090:29;:27;;;:29;;:::i;:::-;:33;5086:148;;;5139:27;:25;;;:27;;:::i;:::-;5086:148;;;5204:19;;;;;;;;;;;;;;5086:148;4788:452;4691:549;;;;;:::o;6113:122:29:-;6175:1;6163:9;:13;6159:70;;;6199:19;;;;;;;;;;;;;;6159:70;6113:122::o;1899:163:38:-;1960:21;2042:4;2032:14;;1899:163;;;:::o;3383:242:36:-;3466:12;3604:4;3598;3591;3585:11;3578:4;3572;3568:15;3560:6;3553:5;3540:69;3529:80;;3383:242;;;;:::o;4463:152::-;4512:12;4583:16;4575:24;;4463:152;:::o;4698:334::-;4743:19;4829:4;4823:11;4813:21;;4862:16;4854:6;4847:32;4932:16;4926:4;4919;4911:6;4907:17;4892:57;4997:16;4991:4;4987:27;4979:6;4975:40;4969:4;4962:54;4698:334;:::o;5099:223::-;5203:4;5197:11;5247:16;5241:4;5236:3;5221:43;5289:16;5284:3;5277:29;7:75:39;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:117::-;954:1;951;944:12;968:117;1077:1;1074;1067:12;1091:102;1132:6;1183:2;1179:7;1174:2;1167:5;1163:14;1159:28;1149:38;;1091:102;;;:::o;1199:180::-;1247:77;1244:1;1237:88;1344:4;1341:1;1334:15;1368:4;1365:1;1358:15;1385:281;1468:27;1490:4;1468:27;:::i;:::-;1460:6;1456:40;1598:6;1586:10;1583:22;1562:18;1550:10;1547:34;1544:62;1541:88;;;1609:18;;:::i;:::-;1541:88;1649:10;1645:2;1638:22;1428:238;1385:281;;:::o;1672:129::-;1706:6;1733:20;;:::i;:::-;1723:30;;1762:33;1790:4;1782:6;1762:33;:::i;:::-;1672:129;;;:::o;1807:307::-;1868:4;1958:18;1950:6;1947:30;1944:56;;;1980:18;;:::i;:::-;1944:56;2018:29;2040:6;2018:29;:::i;:::-;2010:37;;2102:4;2096;2092:15;2084:23;;1807:307;;;:::o;2120:246::-;2201:1;2211:113;2225:6;2222:1;2219:13;2211:113;;;2310:1;2305:3;2301:11;2295:18;2291:1;2286:3;2282:11;2275:39;2247:2;2244:1;2240:10;2235:15;;2211:113;;;2358:1;2349:6;2344:3;2340:16;2333:27;2182:184;2120:246;;;:::o;2372:432::-;2460:5;2485:65;2501:48;2542:6;2501:48;:::i;:::-;2485:65;:::i;:::-;2476:74;;2573:6;2566:5;2559:21;2611:4;2604:5;2600:16;2649:3;2640:6;2635:3;2631:16;2628:25;2625:112;;;2656:79;;:::i;:::-;2625:112;2746:52;2791:6;2786:3;2781;2746:52;:::i;:::-;2466:338;2372:432;;;;;:::o;2823:353::-;2889:5;2938:3;2931:4;2923:6;2919:17;2915:27;2905:122;;2946:79;;:::i;:::-;2905:122;3056:6;3050:13;3081:89;3166:3;3158:6;3151:4;3143:6;3139:17;3081:89;:::i;:::-;3072:98;;2895:281;2823:353;;;;:::o;3182:678::-;3270:6;3278;3327:2;3315:9;3306:7;3302:23;3298:32;3295:119;;;3333:79;;:::i;:::-;3295:119;3453:1;3478:64;3534:7;3525:6;3514:9;3510:22;3478:64;:::i;:::-;3468:74;;3424:128;3612:2;3601:9;3597:18;3591:25;3643:18;3635:6;3632:30;3629:117;;;3665:79;;:::i;:::-;3629:117;3770:73;3835:7;3826:6;3815:9;3811:22;3770:73;:::i;:::-;3760:83;;3562:291;3182:678;;;;;:::o;3866:118::-;3953:24;3971:5;3953:24;:::i;:::-;3948:3;3941:37;3866:118;;:::o;3990:222::-;4083:4;4121:2;4110:9;4106:18;4098:26;;4134:71;4202:1;4191:9;4187:17;4178:6;4134:71;:::i;:::-;3990:222;;;;:::o;600:1117:28:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600a600c565b005b60186014601a565b6026565b565b5f60216044565b905090565b365f80375f80365f845af43d5f803e805f81146040573d5ff35b3d5ffd5b5f606e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6095565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81905091905056fea264697066735822122045016995d1ce2872840a5fdf5a3f8e95a1449ede6e9227990ba56c4f2f35079264736f6c63430008180033","sourceMap":"600:1117:28:-:0;;;2676:11:30;:9;:11::i;:::-;600:1117:28;2350:83:30;2398:28;2408:17;:15;:17::i;:::-;2398:9;:28::i;:::-;2350:83::o;1583:132:28:-;1650:7;1676:32;:30;:32::i;:::-;1669:39;;1583:132;:::o;949:922:30:-;1293:14;1287:4;1281;1268:40;1513:4;1507;1491:14;1485:4;1469:14;1462:5;1449:69;1598:16;1592:4;1586;1571:44;1636:6;1708:1;1703:69;;;;1824:16;1818:4;1811:30;1703:69;1741:16;1735:4;1728:30;1441:138:29;1493:7;1519:47;811:66;1546:19;;1519:26;:47::i;:::-;:53;;;;;;;;;;;;1512:60;;1441:138;:::o;1899:163:38:-;1960:21;2042:4;2032:14;;1899:163;;;:::o","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[ERC-1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa3066ff86b94128a9d3956a63a0511fa1aae41bd455772ab587b32ff322acb2e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf7b192fd82acf6187970c80548f624b1b9c80425b62fa49e7fdb538a52de049\",\"dweb:/ipfs/QmWXG1YCde1tqDYTbNwjkZDWVgPEjzaQGSDqWkyKLzaNua\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0x80935e4fae2c414f4e7789e13a820d06901182a5733ab006f8d68b5b09db993f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://752d991d6ca1087587b48103bc623f74888054f58581ff29166d90889c4765c5\",\"dweb:/ipfs/QmRBsa6K2ChKxVWYY54YiyYhDBPbmY5HyKCtij5LoWh56o\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710\",\"dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol\":{\"keccak256\":\"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56\",\"dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":"ERC1967Proxy"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0xa3066ff86b94128a9d3956a63a0511fa1aae41bd455772ab587b32ff322acb2e","urls":["bzz-raw://bf7b192fd82acf6187970c80548f624b1b9c80425b62fa49e7fdb538a52de049","dweb:/ipfs/QmWXG1YCde1tqDYTbNwjkZDWVgPEjzaQGSDqWkyKLzaNua"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0x80935e4fae2c414f4e7789e13a820d06901182a5733ab006f8d68b5b09db993f","urls":["bzz-raw://752d991d6ca1087587b48103bc623f74888054f58581ff29166d90889c4765c5","dweb:/ipfs/QmRBsa6K2ChKxVWYY54YiyYhDBPbmY5HyKCtij5LoWh56o"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346","urls":["bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710","dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol":{"keccak256":"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583","urls":["bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56","dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","id":40451,"exportedSymbols":{"ERC1967Proxy":[40450],"ERC1967Utils":[40744],"Proxy":[40780]},"nodeType":"SourceUnit","src":"114:1604:28","nodes":[{"id":40414,"nodeType":"PragmaDirective","src":"114:24:28","nodes":[],"literals":["solidity","^","0.8",".22"]},{"id":40416,"nodeType":"ImportDirective","src":"140:35:28","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"../Proxy.sol","nameLocation":"-1:-1:-1","scope":40451,"sourceUnit":40781,"symbolAliases":[{"foreign":{"id":40415,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40780,"src":"148:5:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":40418,"nodeType":"ImportDirective","src":"176:48:28","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"./ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":40451,"sourceUnit":40745,"symbolAliases":[{"foreign":{"id":40417,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"184:12:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":40450,"nodeType":"ContractDefinition","src":"600:1117:28","nodes":[{"id":40437,"nodeType":"FunctionDefinition","src":"1081:133:28","nodes":[],"body":{"id":40436,"nodeType":"Block","src":"1145:69:28","nodes":[],"statements":[{"expression":{"arguments":[{"id":40432,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40424,"src":"1185:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40433,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40426,"src":"1201:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40429,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"1155:12:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$40744_$","typeString":"type(library ERC1967Utils)"}},"id":40431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1168:16:28","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":40559,"src":"1155:29:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":40434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1155:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40435,"nodeType":"ExpressionStatement","src":"1155:52:28"}]},"documentation":{"id":40422,"nodeType":"StructuredDocumentation","src":"637:439:28","text":" @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.\n If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an\n encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\n Requirements:\n - If `data` is empty, `msg.value` must be zero."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":40427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40424,"mutability":"mutable","name":"implementation","nameLocation":"1101:14:28","nodeType":"VariableDeclaration","scope":40437,"src":"1093:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40423,"name":"address","nodeType":"ElementaryTypeName","src":"1093:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40426,"mutability":"mutable","name":"_data","nameLocation":"1130:5:28","nodeType":"VariableDeclaration","scope":40437,"src":"1117:18:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40425,"name":"bytes","nodeType":"ElementaryTypeName","src":"1117:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1092:44:28"},"returnParameters":{"id":40428,"nodeType":"ParameterList","parameters":[],"src":"1145:0:28"},"scope":40450,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":40449,"nodeType":"FunctionDefinition","src":"1583:132:28","nodes":[],"body":{"id":40448,"nodeType":"Block","src":"1659:56:28","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40444,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"1676:12:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$40744_$","typeString":"type(library ERC1967Utils)"}},"id":40445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1689:17:28","memberName":"getImplementation","nodeType":"MemberAccess","referencedDeclaration":40496,"src":"1676:30:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":40446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1676:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":40443,"id":40447,"nodeType":"Return","src":"1669:39:28"}]},"baseFunctions":[40761],"documentation":{"id":40438,"nodeType":"StructuredDocumentation","src":"1220:358:28","text":" @dev Returns the current implementation address.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\n the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"1592:15:28","overrides":{"id":40440,"nodeType":"OverrideSpecifier","overrides":[],"src":"1632:8:28"},"parameters":{"id":40439,"nodeType":"ParameterList","parameters":[],"src":"1607:2:28"},"returnParameters":{"id":40443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40442,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40449,"src":"1650:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40441,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1649:9:28"},"scope":40450,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":40420,"name":"Proxy","nameLocations":["625:5:28"],"nodeType":"IdentifierPath","referencedDeclaration":40780,"src":"625:5:28"},"id":40421,"nodeType":"InheritanceSpecifier","src":"625:5:28"}],"canonicalName":"ERC1967Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":40419,"nodeType":"StructuredDocumentation","src":"226:373:28","text":" @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n implementation address that can be changed. This address is stored in storage in the location specified by\n https://eips.ethereum.org/EIPS/eip-1967[ERC-1967], so that it doesn't conflict with the storage layout of the\n implementation behind the proxy."},"fullyImplemented":true,"linearizedBaseContracts":[40450,40780],"name":"ERC1967Proxy","nameLocation":"609:12:28","scope":40451,"usedErrors":[40470,40483,41236,41627],"usedEvents":[40389]}],"license":"MIT"},"id":28} \ No newline at end of file diff --git a/crates/contracts/abi/IUniversalTimestamps.json b/crates/contracts/abi/IUniversalTimestamps.json new file mode 100644 index 0000000..376ce99 --- /dev/null +++ b/crates/contracts/abi/IUniversalTimestamps.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"attest","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"timestamp","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Attested","inputs":[{"name":"root","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"attest(bytes32)":"23c3617f","timestamp(bytes32)":"4d003070"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IUniversalTimestamps.sol\":\"IUniversalTimestamps\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"contracts/IUniversalTimestamps.sol\":{\"keccak256\":\"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf\",\"dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Attested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"attest"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"view","type":"function","name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/IUniversalTimestamps.sol":"IUniversalTimestamps"},"evmVersion":"cancun","libraries":{}},"sources":{"contracts/IUniversalTimestamps.sol":{"keccak256":"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0","urls":["bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf","dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/IUniversalTimestamps.sol","id":187,"exportedSymbols":{"IUniversalTimestamps":[186]},"nodeType":"SourceUnit","src":"33:262:1","nodes":[{"id":165,"nodeType":"PragmaDirective","src":"33:24:1","nodes":[],"literals":["solidity","^","0.8",".24"]},{"id":186,"nodeType":"ContractDefinition","src":"59:235:1","nodes":[{"id":173,"nodeType":"EventDefinition","src":"96:80:1","nodes":[],"anonymous":false,"eventSelector":"61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a","name":"Attested","nameLocation":"102:8:1","parameters":{"id":172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":167,"indexed":true,"mutability":"mutable","name":"root","nameLocation":"127:4:1","nodeType":"VariableDeclaration","scope":173,"src":"111:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":166,"name":"bytes32","nodeType":"ElementaryTypeName","src":"111:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":169,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"149:6:1","nodeType":"VariableDeclaration","scope":173,"src":"133:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":168,"name":"address","nodeType":"ElementaryTypeName","src":"133:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":171,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"165:9:1","nodeType":"VariableDeclaration","scope":173,"src":"157:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":170,"name":"uint256","nodeType":"ElementaryTypeName","src":"157:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"110:65:1"}},{"id":178,"nodeType":"FunctionDefinition","src":"182:39:1","nodes":[],"functionSelector":"23c3617f","implemented":false,"kind":"function","modifiers":[],"name":"attest","nameLocation":"191:6:1","parameters":{"id":176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"mutability":"mutable","name":"root","nameLocation":"206:4:1","nodeType":"VariableDeclaration","scope":178,"src":"198:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"198:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"197:14:1"},"returnParameters":{"id":177,"nodeType":"ParameterList","parameters":[],"src":"220:0:1"},"scope":186,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":185,"nodeType":"FunctionDefinition","src":"227:65:1","nodes":[],"functionSelector":"4d003070","implemented":false,"kind":"function","modifiers":[],"name":"timestamp","nameLocation":"236:9:1","parameters":{"id":181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"root","nameLocation":"254:4:1","nodeType":"VariableDeclaration","scope":185,"src":"246:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":179,"name":"bytes32","nodeType":"ElementaryTypeName","src":"246:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"245:14:1"},"returnParameters":{"id":184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":185,"src":"283:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":182,"name":"uint256","nodeType":"ElementaryTypeName","src":"283:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"282:9:1"},"scope":186,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[],"canonicalName":"IUniversalTimestamps","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"linearizedBaseContracts":[186],"name":"IUniversalTimestamps","nameLocation":"69:20:1","scope":187,"usedErrors":[],"usedEvents":[173]}],"license":"MIT"},"id":1} \ No newline at end of file diff --git a/crates/contracts/abi/UniversalTimestamps.json b/crates/contracts/abi/UniversalTimestamps.json new file mode 100644 index 0000000..b0a275b --- /dev/null +++ b/crates/contracts/abi/UniversalTimestamps.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"attest","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"timestamp","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"Attested","inputs":[{"name":"root","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001e1565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001c6565b60405180910390a15b50565b5f80620001706200017960201b60201c565b90508091505090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f67ffffffffffffffff82169050919050565b620001c081620001a2565b82525050565b5f602082019050620001db5f830184620001b5565b92915050565b608051611362620002085f395f818161060301528181610658015261081201526113625ff3fe608060405260043610610085575f3560e01c8063715018a611610058578063715018a6146101335780638da5cb5b14610149578063ad3cb1cc14610173578063c4d66de81461019d578063f2fde38b146101c557610085565b806323c3617f146100895780634d003070146100b15780634f1ef286146100ed57806352d1902d14610109575b5f80fd5b348015610094575f80fd5b506100af60048036038101906100aa9190610eb6565b6101ed565b005b3480156100bc575f80fd5b506100d760048036038101906100d29190610eb6565b6102c0565b6040516100e49190610ef9565b60405180910390f35b610107600480360381019061010291906110a8565b6102e2565b005b348015610114575f80fd5b5061011d610301565b60405161012a9190611111565b60405180910390f35b34801561013e575f80fd5b50610147610332565b005b348015610154575f80fd5b5061015d610345565b60405161016a9190611139565b60405180910390f35b34801561017e575f80fd5b5061018761037a565b60405161019491906111cc565b60405180910390f35b3480156101a8575f80fd5b506101c360048036038101906101be91906111ec565b6103b3565b005b3480156101d0575f80fd5b506101eb60048036038101906101e691906111ec565b610534565b005b5f801b8103610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022890611261565b60405180910390fd5b5f61023a6105b8565b90505f815f015f8481526020019081526020015f2054036102bc5742815f015f8481526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff16827f61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a426040516102b39190610ef9565b60405180910390a35b5050565b5f6102c96105b8565b5f015f8381526020019081526020015f20549050919050565b6102ea610601565b6102f3826106e7565b6102fd82826106f2565b5050565b5f61030a610810565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b61033a610897565b6103435f61091e565b565b5f8061034f6109ef565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f6103bc610a16565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff161480156104045750825b90505f60018367ffffffffffffffff1614801561043757505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610445575080155b1561047c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156104c9576001855f0160086101000a81548160ff0219169083151502179055505b6104d286610a29565b831561052c575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161052391906112d4565b60405180910390a15b505050505050565b61053c610897565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105ac575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105a39190611139565b60405180910390fd5b6105b58161091e565b50565b5f806105f86040518060400160405280601f81526020017f7574732e73746f726167652e556e6976657273616c54696d657374616d707300815250610a3d565b90508091505090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806106ae57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610695610a59565b73ffffffffffffffffffffffffffffffffffffffff1614155b156106e5576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6106ef610897565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561075a57506040513d601f19601f820116820180604052508101906107579190611301565b60015b61079b57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016107929190611139565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461080157806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016107f89190611111565b60405180910390fd5b61080b8383610aac565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610895576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61089f610b1e565b73ffffffffffffffffffffffffffffffffffffffff166108bd610345565b73ffffffffffffffffffffffffffffffffffffffff161461091c576108e0610b1e565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109139190611139565b60405180910390fd5b565b5f6109276109ef565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f80610a20610b25565b90508091505090565b610a31610b4e565b610a3a81610b8e565b50565b5f600182516020840120035f5260ff1960205f20169050919050565b5f610a857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b610c12565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ab582610c1b565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115610b1157610b0b8282610ce4565b50610b1a565b610b19610dd5565b5b5050565b5f33905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b610b56610e11565b610b8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610b96610b4e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c06575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bfd9190611139565b60405180910390fd5b610c0f8161091e565b50565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03610c7657806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610c6d9190611139565b60405180910390fd5b80610ca27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b610c12565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f610cf18484610e2f565b9050808015610d2757505f610d04610e43565b1180610d2657505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b15610d3c57610d34610e4a565b915050610dcf565b8015610d7f57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610d769190611139565b60405180910390fd5b5f610d88610e43565b1115610d9b57610d96610e67565b610dcd565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f341115610e0f576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610e1a610a16565b5f0160089054906101000a900460ff16905090565b5f805f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610e9581610e83565b8114610e9f575f80fd5b50565b5f81359050610eb081610e8c565b92915050565b5f60208284031215610ecb57610eca610e7b565b5b5f610ed884828501610ea2565b91505092915050565b5f819050919050565b610ef381610ee1565b82525050565b5f602082019050610f0c5f830184610eea565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f3b82610f12565b9050919050565b610f4b81610f31565b8114610f55575f80fd5b50565b5f81359050610f6681610f42565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fba82610f74565b810181811067ffffffffffffffff82111715610fd957610fd8610f84565b5b80604052505050565b5f610feb610e72565b9050610ff78282610fb1565b919050565b5f67ffffffffffffffff82111561101657611015610f84565b5b61101f82610f74565b9050602081019050919050565b828183375f83830152505050565b5f61104c61104784610ffc565b610fe2565b90508281526020810184848401111561106857611067610f70565b5b61107384828561102c565b509392505050565b5f82601f83011261108f5761108e610f6c565b5b813561109f84826020860161103a565b91505092915050565b5f80604083850312156110be576110bd610e7b565b5b5f6110cb85828601610f58565b925050602083013567ffffffffffffffff8111156110ec576110eb610e7f565b5b6110f88582860161107b565b9150509250929050565b61110b81610e83565b82525050565b5f6020820190506111245f830184611102565b92915050565b61113381610f31565b82525050565b5f60208201905061114c5f83018461112a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561118957808201518184015260208101905061116e565b5f8484015250505050565b5f61119e82611152565b6111a8818561115c565b93506111b881856020860161116c565b6111c181610f74565b840191505092915050565b5f6020820190508181035f8301526111e48184611194565b905092915050565b5f6020828403121561120157611200610e7b565b5b5f61120e84828501610f58565b91505092915050565b7f5554533a20526f6f742063616e6e6f74206265207a65726f00000000000000005f82015250565b5f61124b60188361115c565b915061125682611217565b602082019050919050565b5f6020820190508181035f8301526112788161123f565b9050919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f6112be6112b96112b48461127f565b61129b565b611288565b9050919050565b6112ce816112a4565b82525050565b5f6020820190506112e75f8301846112c5565b92915050565b5f815190506112fb81610e8c565b92915050565b5f6020828403121561131657611315610e7b565b5b5f611323848285016112ed565b9150509291505056fea2646970667358221220b5dffba878310fe071e95c50a88c1cac2cc7d9f7aa1862538e26902c7c39daed64736f6c63430008180033","sourceMap":"1042:1794:2:-:0;;;1084:4:33;1041:48;;;;;;;;;1489:53:2;;;;;;;;;;1513:22;:20;;;:22;;:::i;:::-;1042:1794;;7709:422:32;7824:30;7857:26;:24;;;:26;;:::i;:::-;7824:59;;7898:1;:15;;;;;;;;;;;;7894:76;;;7936:23;;;;;;;;;;;;;;7894:76;8001:16;7983:34;;:1;:14;;;;;;;;;;;;:34;;;7979:146;;8050:16;8033:1;:14;;;:33;;;;;;;;;;;;;;;;;;8085:29;8097:16;8085:29;;;;;;:::i;:::-;;;;;;;;7979:146;7758:373;7709:422::o;9071:205::-;9129:30;9171:12;9186:27;:25;;;:27;;:::i;:::-;9171:42;;9256:4;9246:14;;9232:38;9071:205;:::o;8819:122::-;8887:7;3147:66;8913:21;;8906:28;;8819:122;:::o;7:101:39:-;43:7;83:18;76:5;72:30;61:41;;7:101;;;:::o;114:115::-;199:23;216:5;199:23;:::i;:::-;194:3;187:36;114:115;;:::o;235:218::-;326:4;364:2;353:9;349:18;341:26;;377:69;443:1;432:9;428:17;419:6;377:69;:::i;:::-;235:218;;;;:::o;1042:1794:2:-;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610085575f3560e01c8063715018a611610058578063715018a6146101335780638da5cb5b14610149578063ad3cb1cc14610173578063c4d66de81461019d578063f2fde38b146101c557610085565b806323c3617f146100895780634d003070146100b15780634f1ef286146100ed57806352d1902d14610109575b5f80fd5b348015610094575f80fd5b506100af60048036038101906100aa9190610eb6565b6101ed565b005b3480156100bc575f80fd5b506100d760048036038101906100d29190610eb6565b6102c0565b6040516100e49190610ef9565b60405180910390f35b610107600480360381019061010291906110a8565b6102e2565b005b348015610114575f80fd5b5061011d610301565b60405161012a9190611111565b60405180910390f35b34801561013e575f80fd5b50610147610332565b005b348015610154575f80fd5b5061015d610345565b60405161016a9190611139565b60405180910390f35b34801561017e575f80fd5b5061018761037a565b60405161019491906111cc565b60405180910390f35b3480156101a8575f80fd5b506101c360048036038101906101be91906111ec565b6103b3565b005b3480156101d0575f80fd5b506101eb60048036038101906101e691906111ec565b610534565b005b5f801b8103610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022890611261565b60405180910390fd5b5f61023a6105b8565b90505f815f015f8481526020019081526020015f2054036102bc5742815f015f8481526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff16827f61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a426040516102b39190610ef9565b60405180910390a35b5050565b5f6102c96105b8565b5f015f8381526020019081526020015f20549050919050565b6102ea610601565b6102f3826106e7565b6102fd82826106f2565b5050565b5f61030a610810565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b61033a610897565b6103435f61091e565b565b5f8061034f6109ef565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f6103bc610a16565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff161480156104045750825b90505f60018367ffffffffffffffff1614801561043757505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610445575080155b1561047c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156104c9576001855f0160086101000a81548160ff0219169083151502179055505b6104d286610a29565b831561052c575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161052391906112d4565b60405180910390a15b505050505050565b61053c610897565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105ac575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105a39190611139565b60405180910390fd5b6105b58161091e565b50565b5f806105f86040518060400160405280601f81526020017f7574732e73746f726167652e556e6976657273616c54696d657374616d707300815250610a3d565b90508091505090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806106ae57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610695610a59565b73ffffffffffffffffffffffffffffffffffffffff1614155b156106e5576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6106ef610897565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561075a57506040513d601f19601f820116820180604052508101906107579190611301565b60015b61079b57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016107929190611139565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461080157806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016107f89190611111565b60405180910390fd5b61080b8383610aac565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610895576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61089f610b1e565b73ffffffffffffffffffffffffffffffffffffffff166108bd610345565b73ffffffffffffffffffffffffffffffffffffffff161461091c576108e0610b1e565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109139190611139565b60405180910390fd5b565b5f6109276109ef565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f80610a20610b25565b90508091505090565b610a31610b4e565b610a3a81610b8e565b50565b5f600182516020840120035f5260ff1960205f20169050919050565b5f610a857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b610c12565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ab582610c1b565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115610b1157610b0b8282610ce4565b50610b1a565b610b19610dd5565b5b5050565b5f33905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b610b56610e11565b610b8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610b96610b4e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c06575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bfd9190611139565b60405180910390fd5b610c0f8161091e565b50565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03610c7657806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610c6d9190611139565b60405180910390fd5b80610ca27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b610c12565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f610cf18484610e2f565b9050808015610d2757505f610d04610e43565b1180610d2657505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b15610d3c57610d34610e4a565b915050610dcf565b8015610d7f57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610d769190611139565b60405180910390fd5b5f610d88610e43565b1115610d9b57610d96610e67565b610dcd565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f341115610e0f576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610e1a610a16565b5f0160089054906101000a900460ff16905090565b5f805f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610e9581610e83565b8114610e9f575f80fd5b50565b5f81359050610eb081610e8c565b92915050565b5f60208284031215610ecb57610eca610e7b565b5b5f610ed884828501610ea2565b91505092915050565b5f819050919050565b610ef381610ee1565b82525050565b5f602082019050610f0c5f830184610eea565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f3b82610f12565b9050919050565b610f4b81610f31565b8114610f55575f80fd5b50565b5f81359050610f6681610f42565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fba82610f74565b810181811067ffffffffffffffff82111715610fd957610fd8610f84565b5b80604052505050565b5f610feb610e72565b9050610ff78282610fb1565b919050565b5f67ffffffffffffffff82111561101657611015610f84565b5b61101f82610f74565b9050602081019050919050565b828183375f83830152505050565b5f61104c61104784610ffc565b610fe2565b90508281526020810184848401111561106857611067610f70565b5b61107384828561102c565b509392505050565b5f82601f83011261108f5761108e610f6c565b5b813561109f84826020860161103a565b91505092915050565b5f80604083850312156110be576110bd610e7b565b5b5f6110cb85828601610f58565b925050602083013567ffffffffffffffff8111156110ec576110eb610e7f565b5b6110f88582860161107b565b9150509250929050565b61110b81610e83565b82525050565b5f6020820190506111245f830184611102565b92915050565b61113381610f31565b82525050565b5f60208201905061114c5f83018461112a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561118957808201518184015260208101905061116e565b5f8484015250505050565b5f61119e82611152565b6111a8818561115c565b93506111b881856020860161116c565b6111c181610f74565b840191505092915050565b5f6020820190508181035f8301526111e48184611194565b905092915050565b5f6020828403121561120157611200610e7b565b5b5f61120e84828501610f58565b91505092915050565b7f5554533a20526f6f742063616e6e6f74206265207a65726f00000000000000005f82015250565b5f61124b60188361115c565b915061125682611217565b602082019050919050565b5f6020820190508181035f8301526112788161123f565b9050919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f6112be6112b96112b48461127f565b61129b565b611288565b9050919050565b6112ce816112a4565b82525050565b5f6020820190506112e75f8301846112c5565b92915050565b5f815190506112fb81610e8c565b92915050565b5f6020828403121561131657611315610e7b565b5b5f611323848285016112ed565b9150509291505056fea2646970667358221220b5dffba878310fe071e95c50a88c1cac2cc7d9f7aa1862538e26902c7c39daed64736f6c63430008180033","sourceMap":"1042:1794:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2140:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1896:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3911:214:33;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3466:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3176:101:22;;;;;;;;;;;;;:::i;:::-;;2462:144;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1732:58:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1548:106:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3426:215:22;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2140:354:2;2213:1;2205:10;;2197:4;:18;2189:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2255:36;2294:32;:30;:32::i;:::-;2255:71;;2362:1;2340;:12;;:18;2353:4;2340:18;;;;;;;;;;;;:23;2336:152;;2400:15;2379:1;:12;;:18;2392:4;2379:18;;;;;;;;;;;:36;;;;2449:10;2434:43;;2443:4;2434:43;2461:15;2434:43;;;;;;:::i;:::-;;;;;;;;2336:152;2179:315;2140:354;:::o;1896:138::-;1952:7;1978:32;:30;:32::i;:::-;:43;;:49;2022:4;1978:49;;;;;;;;;;;;1971:56;;1896:138;;;:::o;3911:214:33:-;2568:13;:11;:13::i;:::-;4026:36:::1;4044:17;4026;:36::i;:::-;4072:46;4094:17;4113:4;4072:21;:46::i;:::-;3911:214:::0;;:::o;3466:126::-;3527:7;2839:20;:18;:20::i;:::-;811:66:29::1;3553:32:33;;3546:39;;3466:126:::0;:::o;3176:101:22:-;2355:13;:11;:13::i;:::-;3240:30:::1;3267:1;3240:18;:30::i;:::-;3176:101::o:0;2462:144::-;2508:7;2527:24;2554:20;:18;:20::i;:::-;2527:47;;2591:1;:8;;;;;;;;;;;;2584:15;;;2462:144;:::o;1732:58:33:-;;;;;;;;;;;;;;;;;;;:::o;1548:106:2:-;4158:30:32;4191:26;:24;:26::i;:::-;4158:59;;4279:19;4302:1;:15;;;;;;;;;;;;4301:16;4279:38;;4327:18;4348:1;:14;;;;;;;;;;;;4327:35;;4704:17;4739:1;4724:11;:16;;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4803:1;4788:11;:16;;;:50;;;;;4837:1;4816:4;4808:25;;;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;;;;;;;;;;;;;4849:91;4966:1;4949;:14;;;:18;;;;;;;;;;;;;;;;;;4981:14;4977:67;;;5029:4;5011:1;:15;;;:22;;;;;;;;;;;;;;;;;;4977:67;1619:28:2::1;1634:12;1619:14;:28::i;:::-;5068:14:32::0;5064:101;;;5116:5;5098:1;:15;;;:23;;;;;;;;;;;;;;;;;;5140:14;5152:1;5140:14;;;;;;:::i;:::-;;;;;;;;5064:101;4092:1079;;;;;1548:106:2;:::o;3426:215:22:-;2355:13;:11;:13::i;:::-;3530:1:::1;3510:22;;:8;:22;;::::0;3506:91:::1;;3583:1;3555:31;;;;;;;;;;;:::i;:::-;;;;;;;;3506:91;3606:28;3625:8;3606:18;:28::i;:::-;3426:215:::0;:::o;1660:230:2:-;1724:36;1772:12;1787:24;:10;;;;;;;;;;;;;;;;;:22;:24::i;:::-;1772:39;;1870:4;1860:14;;1846:38;1660:230;:::o;4328:312:33:-;4417:6;4400:23;;4408:4;4400:23;;;:120;;;;4514:6;4478:42;;:32;:30;:32::i;:::-;:42;;;;4400:120;4383:251;;;4594:29;;;;;;;;;;;;;;4383:251;4328:312::o;2750:84:2:-;2355:13:22;:11;:13::i;:::-;2750:84:2;:::o;5782:538:33:-;5899:17;5881:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5877:437;;6285:17;6243:60;;;;;;;;;;;:::i;:::-;;;;;;;;5877:437;811:66:29;5983:32:33;;5975:4;:40;5971:120;;6071:4;6042:34;;;;;;;;;;;:::i;:::-;;;;;;;;5971:120;6104:54;6134:17;6153:4;6104:29;:54::i;:::-;5934:235;5782:538;;:::o;4757:213::-;4840:6;4823:23;;4831:4;4823:23;;;4819:145;;4924:29;;;;;;;;;;;;;;4819:145;4757:213::o;2679:162:22:-;2749:12;:10;:12::i;:::-;2738:23;;:7;:5;:7::i;:::-;:23;;;2734:101;;2811:12;:10;:12::i;:::-;2784:40;;;;;;;;;;;:::i;:::-;;;;;;;;2734:101;2679:162::o;3795:248::-;3868:24;3895:20;:18;:20::i;:::-;3868:47;;3925:16;3944:1;:8;;;;;;;;;;;;3925:27;;3973:8;3962:1;:8;;;:19;;;;;;;;;;;;;;;;;;4027:8;3996:40;;4017:8;3996:40;;;;;;;;;;;;3858:185;;3795:248;:::o;1213:159::-;1265:24;1334:22;1324:32;;1213:159;:::o;9071:205:32:-;9129:30;9171:12;9186:27;:25;:27::i;:::-;9171:42;;9256:4;9246:14;;9232:38;9071:205;:::o;1868:127:22:-;6929:20:32;:18;:20::i;:::-;1950:38:22::1;1975:12;1950:24;:38::i;:::-;1868:127:::0;:::o;1701:277:37:-;1770:12;1901:1;1888:9;1882:16;1875:4;1864:9;1860:20;1850:49;1846:57;1840:4;1833:71;1956:4;1952:9;1945:4;1939;1929:21;1925:37;1917:45;;1701:277;;;:::o;1441:138:29:-;1493:7;1519:47;811:66;1546:19;;1519:26;:47::i;:::-;:53;;;;;;;;;;;;1512:60;;1441:138;:::o;2264:344::-;2355:37;2374:17;2355:18;:37::i;:::-;2425:17;2407:36;;;;;;;;;;;;2472:1;2458:4;:11;:15;2454:148;;;2489:53;2518:17;2537:4;2489:28;:53::i;:::-;;2454:148;;;2573:18;:16;:18::i;:::-;2454:148;2264:344;;:::o;908:96:25:-;961:7;987:10;980:17;;908:96;:::o;8819:122:32:-;8887:7;3147:66;8913:21;;8906:28;;8819:122;:::o;7082:141::-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;;;;;;;;;;;;;7144:73;7082:141::o;2001:235:22:-;6929:20:32;:18;:20::i;:::-;2121:1:22::1;2097:26;;:12;:26;;::::0;2093:95:::1;;2174:1;2146:31;;;;;;;;;;;:::i;:::-;;;;;;;;2093:95;2197:32;2216:12;2197:18;:32::i;:::-;2001:235:::0;:::o;1899:163:38:-;1960:21;2042:4;2032:14;;1899:163;;;:::o;1671:281:29:-;1781:1;1748:17;:29;;;:34;1744:119;;1834:17;1805:47;;;;;;;;;;;:::i;:::-;;;;;;;;1744:119;1928:17;1872:47;811:66;1899:19;;1872:26;:47::i;:::-;:53;;;:73;;;;;;;;;;;;;;;;;;1671:281;:::o;4691:549:34:-;4774:12;4798;4813:47;4847:6;4855:4;4813:33;:47::i;:::-;4798:62;;4874:7;:72;;;;;4918:1;4886:29;:27;:29::i;:::-;:33;:59;;;;4944:1;4923:6;:18;;;:22;4886:59;4874:72;4870:364;;;4969:25;:23;:25::i;:::-;4962:32;;;;;4870:364;5015:7;5011:223;;;5062:6;5045:24;;;;;;;;;;;:::i;:::-;;;;;;;;5011:223;5122:1;5090:29;:27;:29::i;:::-;:33;5086:148;;;5139:27;:25;:27::i;:::-;5086:148;;;5204:19;;;;;;;;;;;;;;5086:148;4788:452;4691:549;;;;;:::o;6113:122:29:-;6175:1;6163:9;:13;6159:70;;;6199:19;;;;;;;;;;;;;;6159:70;6113:122::o;8485:120:32:-;8535:4;8558:26;:24;:26::i;:::-;:40;;;;;;;;;;;;8551:47;;8485:120;:::o;3383:242:36:-;3466:12;3604:4;3598;3591;3585:11;3578:4;3572;3568:15;3560:6;3553:5;3540:69;3529:80;;3383:242;;;;:::o;4463:152::-;4512:12;4583:16;4575:24;;4463:152;:::o;4698:334::-;4743:19;4829:4;4823:11;4813:21;;4862:16;4854:6;4847:32;4932:16;4926:4;4919;4911:6;4907:17;4892:57;4997:16;4991:4;4987:27;4979:6;4975:40;4969:4;4962:54;4698:334;:::o;5099:223::-;5203:4;5197:11;5247:16;5241:4;5236:3;5221:43;5289:16;5284:3;5277:29;7:75:39;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:77::-;1062:7;1091:5;1080:16;;1025:77;;;:::o;1108:118::-;1195:24;1213:5;1195:24;:::i;:::-;1190:3;1183:37;1108:118;;:::o;1232:222::-;1325:4;1363:2;1352:9;1348:18;1340:26;;1376:71;1444:1;1433:9;1429:17;1420:6;1376:71;:::i;:::-;1232:222;;;;:::o;1460:126::-;1497:7;1537:42;1530:5;1526:54;1515:65;;1460:126;;;:::o;1592:96::-;1629:7;1658:24;1676:5;1658:24;:::i;:::-;1647:35;;1592:96;;;:::o;1694:122::-;1767:24;1785:5;1767:24;:::i;:::-;1760:5;1757:35;1747:63;;1806:1;1803;1796:12;1747:63;1694:122;:::o;1822:139::-;1868:5;1906:6;1893:20;1884:29;;1922:33;1949:5;1922:33;:::i;:::-;1822:139;;;;:::o;1967:117::-;2076:1;2073;2066:12;2090:117;2199:1;2196;2189:12;2213:102;2254:6;2305:2;2301:7;2296:2;2289:5;2285:14;2281:28;2271:38;;2213:102;;;:::o;2321:180::-;2369:77;2366:1;2359:88;2466:4;2463:1;2456:15;2490:4;2487:1;2480:15;2507:281;2590:27;2612:4;2590:27;:::i;:::-;2582:6;2578:40;2720:6;2708:10;2705:22;2684:18;2672:10;2669:34;2666:62;2663:88;;;2731:18;;:::i;:::-;2663:88;2771:10;2767:2;2760:22;2550:238;2507:281;;:::o;2794:129::-;2828:6;2855:20;;:::i;:::-;2845:30;;2884:33;2912:4;2904:6;2884:33;:::i;:::-;2794:129;;;:::o;2929:307::-;2990:4;3080:18;3072:6;3069:30;3066:56;;;3102:18;;:::i;:::-;3066:56;3140:29;3162:6;3140:29;:::i;:::-;3132:37;;3224:4;3218;3214:15;3206:23;;2929:307;;;:::o;3242:146::-;3339:6;3334:3;3329;3316:30;3380:1;3371:6;3366:3;3362:16;3355:27;3242:146;;;:::o;3394:423::-;3471:5;3496:65;3512:48;3553:6;3512:48;:::i;:::-;3496:65;:::i;:::-;3487:74;;3584:6;3577:5;3570:21;3622:4;3615:5;3611:16;3660:3;3651:6;3646:3;3642:16;3639:25;3636:112;;;3667:79;;:::i;:::-;3636:112;3757:54;3804:6;3799:3;3794;3757:54;:::i;:::-;3477:340;3394:423;;;;;:::o;3836:338::-;3891:5;3940:3;3933:4;3925:6;3921:17;3917:27;3907:122;;3948:79;;:::i;:::-;3907:122;4065:6;4052:20;4090:78;4164:3;4156:6;4149:4;4141:6;4137:17;4090:78;:::i;:::-;4081:87;;3897:277;3836:338;;;;:::o;4180:652::-;4257:6;4265;4314:2;4302:9;4293:7;4289:23;4285:32;4282:119;;;4320:79;;:::i;:::-;4282:119;4440:1;4465:53;4510:7;4501:6;4490:9;4486:22;4465:53;:::i;:::-;4455:63;;4411:117;4595:2;4584:9;4580:18;4567:32;4626:18;4618:6;4615:30;4612:117;;;4648:79;;:::i;:::-;4612:117;4753:62;4807:7;4798:6;4787:9;4783:22;4753:62;:::i;:::-;4743:72;;4538:287;4180:652;;;;;:::o;4838:118::-;4925:24;4943:5;4925:24;:::i;:::-;4920:3;4913:37;4838:118;;:::o;4962:222::-;5055:4;5093:2;5082:9;5078:18;5070:26;;5106:71;5174:1;5163:9;5159:17;5150:6;5106:71;:::i;:::-;4962:222;;;;:::o;5190:118::-;5277:24;5295:5;5277:24;:::i;:::-;5272:3;5265:37;5190:118;;:::o;5314:222::-;5407:4;5445:2;5434:9;5430:18;5422:26;;5458:71;5526:1;5515:9;5511:17;5502:6;5458:71;:::i;:::-;5314:222;;;;:::o;5542:99::-;5594:6;5628:5;5622:12;5612:22;;5542:99;;;:::o;5647:169::-;5731:11;5765:6;5760:3;5753:19;5805:4;5800:3;5796:14;5781:29;;5647:169;;;;:::o;5822:246::-;5903:1;5913:113;5927:6;5924:1;5921:13;5913:113;;;6012:1;6007:3;6003:11;5997:18;5993:1;5988:3;5984:11;5977:39;5949:2;5946:1;5942:10;5937:15;;5913:113;;;6060:1;6051:6;6046:3;6042:16;6035:27;5884:184;5822:246;;;:::o;6074:377::-;6162:3;6190:39;6223:5;6190:39;:::i;:::-;6245:71;6309:6;6304:3;6245:71;:::i;:::-;6238:78;;6325:65;6383:6;6378:3;6371:4;6364:5;6360:16;6325:65;:::i;:::-;6415:29;6437:6;6415:29;:::i;:::-;6410:3;6406:39;6399:46;;6166:285;6074:377;;;;:::o;6457:313::-;6570:4;6608:2;6597:9;6593:18;6585:26;;6657:9;6651:4;6647:20;6643:1;6632:9;6628:17;6621:47;6685:78;6758:4;6749:6;6685:78;:::i;:::-;6677:86;;6457:313;;;;:::o;6776:329::-;6835:6;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6981:117;6776:329;;;;:::o;7111:174::-;7251:26;7247:1;7239:6;7235:14;7228:50;7111:174;:::o;7291:366::-;7433:3;7454:67;7518:2;7513:3;7454:67;:::i;:::-;7447:74;;7530:93;7619:3;7530:93;:::i;:::-;7648:2;7643:3;7639:12;7632:19;;7291:366;;;:::o;7663:419::-;7829:4;7867:2;7856:9;7852:18;7844:26;;7916:9;7910:4;7906:20;7902:1;7891:9;7887:17;7880:47;7944:131;8070:4;7944:131;:::i;:::-;7936:139;;7663:419;;;:::o;8088:85::-;8133:7;8162:5;8151:16;;8088:85;;;:::o;8179:101::-;8215:7;8255:18;8248:5;8244:30;8233:41;;8179:101;;;:::o;8286:60::-;8314:3;8335:5;8328:12;;8286:60;;;:::o;8352:156::-;8409:9;8442:60;8459:42;8468:32;8494:5;8468:32;:::i;:::-;8459:42;:::i;:::-;8442:60;:::i;:::-;8429:73;;8352:156;;;:::o;8514:145::-;8608:44;8646:5;8608:44;:::i;:::-;8603:3;8596:57;8514:145;;:::o;8665:236::-;8765:4;8803:2;8792:9;8788:18;8780:26;;8816:78;8891:1;8880:9;8876:17;8867:6;8816:78;:::i;:::-;8665:236;;;;:::o;8907:143::-;8964:5;8995:6;8989:13;8980:22;;9011:33;9038:5;9011:33;:::i;:::-;8907:143;;;;:::o;9056:351::-;9126:6;9175:2;9163:9;9154:7;9150:23;9146:32;9143:119;;;9181:79;;:::i;:::-;9143:119;9301:1;9326:64;9382:7;9373:6;9362:9;9358:22;9326:64;:::i;:::-;9316:74;;9272:128;9056:351;;;;:::o","linkReferences":{},"immutableReferences":{"41074":[{"start":1539,"length":32},{"start":1624,"length":32},{"start":2066,"length":32}]}},"methodIdentifiers":{"UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","attest(bytes32)":"23c3617f","initialize(address)":"c4d66de8","owner()":"8da5cb5b","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","timestamp(bytes32)":"4d003070","transferOwnership(address)":"f2fde38b","upgradeToAndCall(address,bytes)":"4f1ef286"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Records and exposes timestamps for attested Merkle roots using ERC-7201 namespaced storage (`uts.storage.UniversalTimestamps`) derived via {SlotDerivation}, and is implemented as a UUPS upgradeable contract via OpenZeppelin's Initializable, OwnableUpgradeable, and UUPSUpgradeable base contracts. Storage is kept in a dedicated namespaced struct to remain layout-compatible across upgrades, while upgrades are authorized by the contract owner through {_authorizeUpgrade}.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"attest(bytes32)\":{\"params\":{\"root\":\"The Merkle Root to be attested\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"UniversalTimestamps\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"attest(bytes32)\":{\"notice\":\"Attest Merkle Root\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/UniversalTimestamps.sol\":\"UniversalTimestamps\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"contracts/IUniversalTimestamps.sol\":{\"keccak256\":\"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf\",\"dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC\"]},\"contracts/UniversalTimestamps.sol\":{\"keccak256\":\"0xb1596ca55406c833dc01c604dd4d6fb3791a9f9cc0f4cad6292757abc52acb4b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c53b928701b425781b8bce6e51fc3414d33d9d32e3b192777b6c5157396bfa\",\"dweb:/ipfs/QmQHq55s3BHW4YEhBe8bRGmxFvSc6xhWF4pUub8is9oSkf\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed\",\"dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d\",\"dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e\",\"dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455\",\"dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34\",\"dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710\",\"dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol\":{\"keccak256\":\"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56\",\"dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x94045fd4f268edf2b2d01ef119268548c320366d6f5294ad30c1b8f9d4f5225f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edfda81f426f8948b3834115c21e83c48180e6db0d2a8cd2debb2185ed349337\",\"dweb:/ipfs/QmdYZneFyDAux1BuWQxLAdqtABrGS2k9WYCa7C9dvpKkWv\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Attested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"attest"},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"view","type":"function","name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"}],"devdoc":{"kind":"dev","methods":{"attest(bytes32)":{"params":{"root":"The Merkle Root to be attested"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"attest(bytes32)":{"notice":"Attest Merkle Root"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/UniversalTimestamps.sol":"UniversalTimestamps"},"evmVersion":"cancun","libraries":{}},"sources":{"contracts/IUniversalTimestamps.sol":{"keccak256":"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0","urls":["bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf","dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC"],"license":"MIT"},"contracts/UniversalTimestamps.sol":{"keccak256":"0xb1596ca55406c833dc01c604dd4d6fb3791a9f9cc0f4cad6292757abc52acb4b","urls":["bzz-raw://e8c53b928701b425781b8bce6e51fc3414d33d9d32e3b192777b6c5157396bfa","dweb:/ipfs/QmQHq55s3BHW4YEhBe8bRGmxFvSc6xhWF4pUub8is9oSkf"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14","urls":["bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed","dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16","urls":["bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d","dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf","urls":["bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e","dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d","urls":["bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455","dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b","urls":["bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422","dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a","urls":["bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34","dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346","urls":["bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710","dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol":{"keccak256":"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583","urls":["bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56","dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x94045fd4f268edf2b2d01ef119268548c320366d6f5294ad30c1b8f9d4f5225f","urls":["bzz-raw://edfda81f426f8948b3834115c21e83c48180e6db0d2a8cd2debb2185ed349337","dweb:/ipfs/QmdYZneFyDAux1BuWQxLAdqtABrGS2k9WYCa7C9dvpKkWv"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/UniversalTimestamps.sol","id":327,"exportedSymbols":{"IUniversalTimestamps":[186],"Initializable":[41058],"OwnableUpgradeable":[40327],"SlotDerivation":[41925],"UUPSUpgradeable":[41224],"UniversalTimestamps":[326]},"nodeType":"SourceUnit","src":"33:2804:2","nodes":[{"id":188,"nodeType":"PragmaDirective","src":"33:24:2","nodes":[],"literals":["solidity","^","0.8",".24"]},{"id":190,"nodeType":"ImportDirective","src":"59:96:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40332,"symbolAliases":[{"foreign":{"id":189,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41058,"src":"67:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":192,"nodeType":"ImportDirective","src":"156:101:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40328,"symbolAliases":[{"foreign":{"id":191,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40327,"src":"164:18:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":194,"nodeType":"ImportDirective","src":"258:100:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40336,"symbolAliases":[{"foreign":{"id":193,"name":"UUPSUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41224,"src":"266:15:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":196,"nodeType":"ImportDirective","src":"359:64:2","nodes":[],"absolutePath":"contracts/IUniversalTimestamps.sol","file":"./IUniversalTimestamps.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":187,"symbolAliases":[{"foreign":{"id":195,"name":"IUniversalTimestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"367:20:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":198,"nodeType":"ImportDirective","src":"424:80:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol","file":"@openzeppelin/contracts/utils/SlotDerivation.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":41926,"symbolAliases":[{"foreign":{"id":197,"name":"SlotDerivation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41925,"src":"432:14:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":326,"nodeType":"ContractDefinition","src":"1042:1794:2","nodes":[{"id":210,"nodeType":"UsingForDirective","src":"1153:32:2","nodes":[],"global":false,"libraryName":{"id":208,"name":"SlotDerivation","nameLocations":["1159:14:2"],"nodeType":"IdentifierPath","referencedDeclaration":41925,"src":"1159:14:2"},"typeName":{"id":209,"name":"string","nodeType":"ElementaryTypeName","src":"1178:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},{"id":213,"nodeType":"VariableDeclaration","src":"1191:70:2","nodes":[],"constant":true,"mutability":"constant","name":"_NAMESPACE","nameLocation":"1215:10:2","scope":326,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":211,"name":"string","nodeType":"ElementaryTypeName","src":"1191:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"7574732e73746f726167652e556e6976657273616c54696d657374616d7073","id":212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1228:33:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_6191da0f5f254a176c2a5b8e81a37f62349600d58cdbf87518a33cdde24d517b","typeString":"literal_string \"uts.storage.UniversalTimestamps\""},"value":"uts.storage.UniversalTimestamps"},"visibility":"private"},{"id":219,"nodeType":"StructDefinition","src":"1341:89:2","nodes":[],"canonicalName":"UniversalTimestamps.UniversalTimestampsStorage","documentation":{"id":214,"nodeType":"StructuredDocumentation","src":"1268:68:2","text":"@custom:storage-location erc7201:uts.storage.UniversalTimestamps"},"members":[{"constant":false,"id":218,"mutability":"mutable","name":"timestamps","nameLocation":"1413:10:2","nodeType":"VariableDeclaration","scope":219,"src":"1385:38:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":217,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":215,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1393:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1385:27:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":216,"name":"uint256","nodeType":"ElementaryTypeName","src":"1404:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"UniversalTimestampsStorage","nameLocation":"1348:26:2","scope":326,"visibility":"public"},{"id":227,"nodeType":"FunctionDefinition","src":"1489:53:2","nodes":[],"body":{"id":226,"nodeType":"Block","src":"1503:39:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":223,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41012,"src":"1513:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1513:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":225,"nodeType":"ExpressionStatement","src":"1513:22:2"}]},"documentation":{"id":220,"nodeType":"StructuredDocumentation","src":"1436:48:2","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":221,"nodeType":"ParameterList","parameters":[],"src":"1500:2:2"},"returnParameters":{"id":222,"nodeType":"ParameterList","parameters":[],"src":"1503:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":239,"nodeType":"FunctionDefinition","src":"1548:106:2","nodes":[],"body":{"id":238,"nodeType":"Block","src":"1609:45:2","nodes":[],"statements":[{"expression":{"arguments":[{"id":235,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":229,"src":"1634:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":234,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40187,"src":"1619:14:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1619:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":237,"nodeType":"ExpressionStatement","src":"1619:28:2"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":232,"kind":"modifierInvocation","modifierName":{"id":231,"name":"initializer","nameLocations":["1597:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":40898,"src":"1597:11:2"},"nodeType":"ModifierInvocation","src":"1597:11:2"}],"name":"initialize","nameLocation":"1557:10:2","parameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":229,"mutability":"mutable","name":"initialOwner","nameLocation":"1576:12:2","nodeType":"VariableDeclaration","scope":239,"src":"1568:20:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":228,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1567:22:2"},"returnParameters":{"id":233,"nodeType":"ParameterList","parameters":[],"src":"1609:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":253,"nodeType":"FunctionDefinition","src":"1660:230:2","nodes":[],"body":{"id":252,"nodeType":"Block","src":"1762:128:2","nodes":[],"statements":[{"assignments":[246],"declarations":[{"constant":false,"id":246,"mutability":"mutable","name":"slot","nameLocation":"1780:4:2","nodeType":"VariableDeclaration","scope":252,"src":"1772:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1772:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":250,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":247,"name":"_NAMESPACE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":213,"src":"1787:10:2","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1798:11:2","memberName":"erc7201Slot","nodeType":"MemberAccess","referencedDeclaration":41808,"src":"1787:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1787:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1772:39:2"},{"AST":{"nativeSrc":"1846:38:2","nodeType":"YulBlock","src":"1846:38:2","statements":[{"nativeSrc":"1860:14:2","nodeType":"YulAssignment","src":"1860:14:2","value":{"name":"slot","nativeSrc":"1870:4:2","nodeType":"YulIdentifier","src":"1870:4:2"},"variableNames":[{"name":"$.slot","nativeSrc":"1860:6:2","nodeType":"YulIdentifier","src":"1860:6:2"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":243,"isOffset":false,"isSlot":true,"src":"1860:6:2","suffix":"slot","valueSize":1},{"declaration":246,"isOffset":false,"isSlot":false,"src":"1870:4:2","valueSize":1}],"flags":["memory-safe"],"id":251,"nodeType":"InlineAssembly","src":"1821:63:2"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getUniversalTimestampsStorage","nameLocation":"1669:30:2","parameters":{"id":240,"nodeType":"ParameterList","parameters":[],"src":"1699:2:2"},"returnParameters":{"id":244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":243,"mutability":"mutable","name":"$","nameLocation":"1759:1:2","nodeType":"VariableDeclaration","scope":253,"src":"1724:36:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"},"typeName":{"id":242,"nodeType":"UserDefinedTypeName","pathNode":{"id":241,"name":"UniversalTimestampsStorage","nameLocations":["1724:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":219,"src":"1724:26:2"},"referencedDeclaration":219,"src":"1724:26:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"}},"visibility":"internal"}],"src":"1723:38:2"},"scope":326,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":267,"nodeType":"FunctionDefinition","src":"1896:138:2","nodes":[],"body":{"id":266,"nodeType":"Block","src":"1961:73:2","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":260,"name":"_getUniversalTimestampsStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"1978:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_UniversalTimestampsStorage_$219_storage_ptr_$","typeString":"function () pure returns (struct UniversalTimestamps.UniversalTimestampsStorage storage pointer)"}},"id":261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1978:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2011:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"1978:43:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":264,"indexExpression":{"id":263,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"2022:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1978:49:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":259,"id":265,"nodeType":"Return","src":"1971:56:2"}]},"baseFunctions":[185],"functionSelector":"4d003070","implemented":true,"kind":"function","modifiers":[],"name":"timestamp","nameLocation":"1905:9:2","parameters":{"id":256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":255,"mutability":"mutable","name":"root","nameLocation":"1923:4:2","nodeType":"VariableDeclaration","scope":267,"src":"1915:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":254,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1915:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1914:14:2"},"returnParameters":{"id":259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":267,"src":"1952:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":257,"name":"uint256","nodeType":"ElementaryTypeName","src":"1952:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1951:9:2"},"scope":326,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":315,"nodeType":"FunctionDefinition","src":"2140:354:2","nodes":[],"body":{"id":314,"nodeType":"Block","src":"2179:315:2","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":274,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2197:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2213:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":276,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2205:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":275,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2205:7:2","typeDescriptions":{}}},"id":278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2205:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2197:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5554533a20526f6f742063616e6e6f74206265207a65726f","id":280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2217:26:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_2804b13209a936ca289456f44fff96ae78a8d5be97dfafdb6227532f3504fdd2","typeString":"literal_string \"UTS: Root cannot be zero\""},"value":"UTS: Root cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2804b13209a936ca289456f44fff96ae78a8d5be97dfafdb6227532f3504fdd2","typeString":"literal_string \"UTS: Root cannot be zero\""}],"id":273,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2189:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2189:55:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":282,"nodeType":"ExpressionStatement","src":"2189:55:2"},{"assignments":[285],"declarations":[{"constant":false,"id":285,"mutability":"mutable","name":"$","nameLocation":"2290:1:2","nodeType":"VariableDeclaration","scope":314,"src":"2255:36:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"},"typeName":{"id":284,"nodeType":"UserDefinedTypeName","pathNode":{"id":283,"name":"UniversalTimestampsStorage","nameLocations":["2255:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":219,"src":"2255:26:2"},"referencedDeclaration":219,"src":"2255:26:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"}},"visibility":"internal"}],"id":288,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":286,"name":"_getUniversalTimestampsStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"2294:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_UniversalTimestampsStorage_$219_storage_ptr_$","typeString":"function () pure returns (struct UniversalTimestamps.UniversalTimestampsStorage storage pointer)"}},"id":287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2294:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2255:71:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":289,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"2340:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2342:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"2340:12:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":292,"indexExpression":{"id":291,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2353:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2340:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2362:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2340:23:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":313,"nodeType":"IfStatement","src":"2336:152:2","trueBody":{"id":312,"nodeType":"Block","src":"2365:123:2","statements":[{"expression":{"id":302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":295,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"2379:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":298,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2381:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"2379:12:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":299,"indexExpression":{"id":297,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2392:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2379:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":300,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2400:5:2","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2406:9:2","memberName":"timestamp","nodeType":"MemberAccess","src":"2400:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2379:36:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":303,"nodeType":"ExpressionStatement","src":"2379:36:2"},{"eventCall":{"arguments":[{"id":305,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2443:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":306,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2449:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2453:6:2","memberName":"sender","nodeType":"MemberAccess","src":"2449:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":308,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2461:5:2","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2467:9:2","memberName":"timestamp","nodeType":"MemberAccess","src":"2461:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":304,"name":"Attested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":173,"src":"2434:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes32,address,uint256)"}},"id":310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:43:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":311,"nodeType":"EmitStatement","src":"2429:48:2"}]}}]},"baseFunctions":[178],"documentation":{"id":268,"nodeType":"StructuredDocumentation","src":"2040:95:2","text":" @notice Attest Merkle Root\n @param root The Merkle Root to be attested"},"functionSelector":"23c3617f","implemented":true,"kind":"function","modifiers":[],"name":"attest","nameLocation":"2149:6:2","parameters":{"id":271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":270,"mutability":"mutable","name":"root","nameLocation":"2164:4:2","nodeType":"VariableDeclaration","scope":315,"src":"2156:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":269,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2156:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2155:14:2"},"returnParameters":{"id":272,"nodeType":"ParameterList","parameters":[],"src":"2179:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":325,"nodeType":"FunctionDefinition","src":"2750:84:2","nodes":[],"body":{"id":324,"nodeType":"Block","src":"2832:2:2","nodes":[],"statements":[]},"baseFunctions":[41178],"documentation":{"id":316,"nodeType":"StructuredDocumentation","src":"2500:245:2","text":" @dev Authorizes an upgrade to `newImplementation`.\n This function is restricted to the contract owner via the {onlyOwner} modifier,\n ensuring that only the owner can authorize upgrades to the implementation."},"implemented":true,"kind":"function","modifiers":[{"id":322,"kind":"modifierInvocation","modifierName":{"id":321,"name":"onlyOwner","nameLocations":["2822:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":40222,"src":"2822:9:2"},"nodeType":"ModifierInvocation","src":"2822:9:2"}],"name":"_authorizeUpgrade","nameLocation":"2759:17:2","overrides":{"id":320,"nodeType":"OverrideSpecifier","overrides":[],"src":"2813:8:2"},"parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":318,"mutability":"mutable","name":"newImplementation","nameLocation":"2785:17:2","nodeType":"VariableDeclaration","scope":325,"src":"2777:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":317,"name":"address","nodeType":"ElementaryTypeName","src":"2777:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2776:27:2"},"returnParameters":{"id":323,"nodeType":"ParameterList","parameters":[],"src":"2832:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":200,"name":"Initializable","nameLocations":["1074:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":41058,"src":"1074:13:2"},"id":201,"nodeType":"InheritanceSpecifier","src":"1074:13:2"},{"baseName":{"id":202,"name":"OwnableUpgradeable","nameLocations":["1089:18:2"],"nodeType":"IdentifierPath","referencedDeclaration":40327,"src":"1089:18:2"},"id":203,"nodeType":"InheritanceSpecifier","src":"1089:18:2"},{"baseName":{"id":204,"name":"UUPSUpgradeable","nameLocations":["1109:15:2"],"nodeType":"IdentifierPath","referencedDeclaration":41224,"src":"1109:15:2"},"id":205,"nodeType":"InheritanceSpecifier","src":"1109:15:2"},{"baseName":{"id":206,"name":"IUniversalTimestamps","nameLocations":["1126:20:2"],"nodeType":"IdentifierPath","referencedDeclaration":186,"src":"1126:20:2"},"id":207,"nodeType":"InheritanceSpecifier","src":"1126:20:2"}],"canonicalName":"UniversalTimestamps","contractDependencies":[],"contractKind":"contract","documentation":{"id":199,"nodeType":"StructuredDocumentation","src":"506:535:2","text":" @title UniversalTimestamps\n @dev Records and exposes timestamps for attested Merkle roots using ERC-7201\n namespaced storage (`uts.storage.UniversalTimestamps`) derived via\n {SlotDerivation}, and is implemented as a UUPS upgradeable contract via\n OpenZeppelin's Initializable, OwnableUpgradeable, and UUPSUpgradeable\n base contracts. Storage is kept in a dedicated namespaced struct to remain\n layout-compatible across upgrades, while upgrades are authorized by the\n contract owner through {_authorizeUpgrade}."},"fullyImplemented":true,"linearizedBaseContracts":[326,186,41224,40412,40327,40381,41058],"name":"UniversalTimestamps","nameLocation":"1051:19:2","scope":327,"usedErrors":[40163,40168,40470,40483,40807,40810,41081,41086,41236,41627],"usedEvents":[173,40174,40389,40815]}],"license":"MIT"},"id":2} \ No newline at end of file diff --git a/crates/contracts/src/lib.rs b/crates/contracts/src/lib.rs index e94f338..945278d 100644 --- a/crates/contracts/src/lib.rs +++ b/crates/contracts/src/lib.rs @@ -9,18 +9,12 @@ pub mod uts { sol!( #[sol(rpc, all_derives)] IUniversalTimestamps, - concat!( - env!("CARGO_MANIFEST_DIR"), - "/../../target/foundry/IUniversalTimestamps.sol/IUniversalTimestamps.json" - ) + "abi/IUniversalTimestamps.json" ); sol!( #[sol(rpc)] UniversalTimestamps, - concat!( - env!("CARGO_MANIFEST_DIR"), - "/../../target/foundry/UniversalTimestamps.sol/UniversalTimestamps.json" - ) + "abi/UniversalTimestamps.json" ); } @@ -75,10 +69,7 @@ pub mod erc1967 { sol!( #[sol(rpc)] ERC1967Proxy, - concat!( - env!("CARGO_MANIFEST_DIR"), - "/../../target/foundry/ERC1967Proxy.sol/ERC1967Proxy.json" - ) + "abi/ERC1967Proxy.json" ); } From b8d1de2565e5bb2f38d7f6baa9a843351db88af0 Mon Sep 17 00:00:00 2001 From: lightsing Date: Thu, 19 Feb 2026 16:19:47 +0800 Subject: [PATCH 2/7] add Ethereum UTS tag --- crates/core/src/codec/v1/attestation.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/crates/core/src/codec/v1/attestation.rs b/crates/core/src/codec/v1/attestation.rs index d4695f7..4543e92 100644 --- a/crates/core/src/codec/v1/attestation.rs +++ b/crates/core/src/codec/v1/attestation.rs @@ -22,6 +22,10 @@ const TAG_SIZE: usize = 8; const BITCOIN_TAG: &[u8; 8] = b"\x05\x88\x96\x0d\x73\xd7\x19\x01"; /// Tag indicating a pending attestation. const PENDING_TAG: &[u8; 8] = b"\x83\xdf\xe3\x0d\x2e\xf9\x0c\x8e"; +/// Tag indicating an Ethereum UTS contract attestation. +/// +/// TAG = keccak256("EthereumUTSAttestation")[:8] +const ETHEREUM_UTS_TAG: &[u8; 8] = b"\xea\xf2\xbc\x69\x3c\x93\x25\x1c"; /// Tag identifying the attestation kind. pub type AttestationTag = [u8; TAG_SIZE]; @@ -218,3 +222,18 @@ impl MayHaveInput for RawAttestation { self.value.get().map(|v| v.as_slice()) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_ethereum_uts_tag() { + use sha3::{Digest, Keccak256}; + + let mut hasher = Keccak256::new(); + hasher.update(b"EthereumUTSAttestation"); + let result = hasher.finalize().to_vec(); + assert_eq!(&result[..8], ETHEREUM_UTS_TAG); + } +} From 2d0901a1270f827ff718c147d369c7c40a7c3f29 Mon Sep 17 00:00:00 2001 From: lightsing Date: Thu, 19 Feb 2026 17:13:04 +0800 Subject: [PATCH 3/7] add Ethereum UTS tag --- Cargo.lock | 3 + Cargo.toml | 1 + crates/core/Cargo.toml | 3 + crates/core/src/codec.rs | 39 ++++++++ crates/core/src/codec/imp.rs | 1 + crates/core/src/codec/imp/alloy.rs | 43 +++++++++ crates/core/src/codec/v1.rs | 3 +- crates/core/src/codec/v1/attestation.rs | 122 ++++++++++++++++++++++++ 8 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 crates/core/src/codec/imp/alloy.rs diff --git a/Cargo.lock b/Cargo.lock index fa18842..39cc7da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -83,6 +83,7 @@ checksum = "b163ff4acf0eac29af05a911397cc418a76e153467b859398adc26cb9335a611" dependencies = [ "alloy-primitives", "num_enum", + "serde", "strum", ] @@ -5781,6 +5782,8 @@ dependencies = [ name = "uts-core" version = "0.1.0" dependencies = [ + "alloy-chains", + "alloy-primitives", "auto_impl", "bytes", "criterion 0.5.1", diff --git a/Cargo.toml b/Cargo.toml index 66edd47..a4e41b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ unnecessary-debug-formatting = "warn" [workspace.dependencies] alloy = "1" +alloy-chains = "0.2" alloy-contract = "1.2" alloy-primitives = "1.5" alloy-provider = "1.2" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index b57f971..579d627 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -15,6 +15,8 @@ path = "src/bin/uts_info.rs" required-features = ["std"] [dependencies] +alloy-chains = { workspace = true } +alloy-primitives = { workspace = true } auto_impl.workspace = true bytes = { workspace = true, optional = true } digest.workspace = true @@ -36,6 +38,7 @@ default = ["std"] serde = ["dep:serde", "dep:serde_with", "serde/derive", "serde_with/hex"] std = [] tracing = ["dep:tracing"] +verifier = [] [dev-dependencies] criterion = { version = "0.5", features = ["html_reports"] } diff --git a/crates/core/src/codec.rs b/crates/core/src/codec.rs index ebc2ff5..acc83ed 100644 --- a/crates/core/src/codec.rs +++ b/crates/core/src/codec.rs @@ -77,6 +77,13 @@ pub trait Decoder: Sized { T::decode(self) } + /// Decodes a trailing optional value implementing the [`Decode`] trait. + /// + /// See [`Decode::decode_trailing`] for details and caveats. + fn decode_trailing(&mut self) -> Result, DecodeError> { + T::decode_trailing(self) + } + /// Decodes a value implementing the [`Decode`] trait. fn decode_in, A: Allocator>(&mut self, alloc: A) -> Result { T::decode_in(self, alloc) @@ -95,15 +102,47 @@ pub trait Encode { /// Deserializes a value from an OpenTimestamps-compatible byte stream. pub trait Decode: Sized { fn decode(decoder: &mut impl Decoder) -> Result; + + /// Decodes a trailing optional value implementing the [`Decode`] trait. + /// + /// This treats any `UnexpectedEof` error as an indication that the value is absent, returning `Ok(None)`. + /// + /// If the implementor returns `UnexpectedEof` for any reason other than the absence of the value, + /// it should also override this method to avoid masking the error as `Ok(None)`. + fn decode_trailing(decoder: &mut impl Decoder) -> Result, DecodeError> { + match Self::decode(decoder) { + Ok(value) => Ok(Some(value)), + Err(DecodeError::UnexpectedEof) => Ok(None), + Err(e) => Err(e), + } + } } /// Deserializes a value from an OpenTimestamps-compatible byte stream. pub trait DecodeIn: Sized { + /// See [`Decode::decode`] for details. fn decode_in(decoder: &mut impl Decoder, alloc: A) -> Result; + + /// See [`Decode::decode_trailing`] for details and caveats. + fn decode_trailing(decoder: &mut impl Decoder, alloc: A) -> Result, DecodeError> { + match Self::decode_in(decoder, alloc) { + Ok(value) => Ok(Some(value)), + Err(DecodeError::UnexpectedEof) => Ok(None), + Err(e) => Err(e), + } + } } impl> Decode for T { fn decode(decoder: &mut impl Decoder) -> Result { T::decode_in(decoder, Global) } + + fn decode_trailing(decoder: &mut impl Decoder) -> Result, DecodeError> { + match Self::decode_in(decoder, Global) { + Ok(value) => Ok(Some(value)), + Err(DecodeError::UnexpectedEof) => Ok(None), + Err(e) => Err(e), + } + } } diff --git a/crates/core/src/codec/imp.rs b/crates/core/src/codec/imp.rs index 397da10..d393fd9 100644 --- a/crates/core/src/codec/imp.rs +++ b/crates/core/src/codec/imp.rs @@ -1,6 +1,7 @@ use crate::codec::*; use alloc::vec::Vec; +mod alloy; #[cfg(feature = "bytes")] mod bytes; mod primitives; diff --git a/crates/core/src/codec/imp/alloy.rs b/crates/core/src/codec/imp/alloy.rs new file mode 100644 index 0000000..e91d6b5 --- /dev/null +++ b/crates/core/src/codec/imp/alloy.rs @@ -0,0 +1,43 @@ +use crate::codec::{Decode, DecodeError, Decoder, Encode, EncodeError, Encoder}; +use alloy_chains::Chain; +use alloy_primitives::{Address, ChainId, FixedBytes}; + +impl Encode for FixedBytes { + fn encode(&self, encoder: &mut impl Encoder) -> Result<(), EncodeError> { + encoder.write_all(self) + } +} + +impl Decode for FixedBytes { + fn decode(decoder: &mut impl Decoder) -> Result { + let mut buf = [0u8; N]; + decoder.read_exact(&mut buf)?; + Ok(Self::new(buf)) + } +} + +impl Encode for Address { + fn encode(&self, encoder: &mut impl Encoder) -> Result<(), EncodeError> { + encoder.write_all(self.0) + } +} + +impl Decode for Address { + fn decode(decoder: &mut impl Decoder) -> Result { + let inner: FixedBytes<20> = decoder.decode()?; + Ok(Self::from(inner)) + } +} + +impl Encode for Chain { + fn encode(&self, encoder: &mut impl Encoder) -> Result<(), EncodeError> { + self.id().encode(encoder) + } +} + +impl Decode for Chain { + fn decode(decoder: &mut impl Decoder) -> Result { + let id: ChainId = decoder.decode()?; + Ok(Chain::from_id(id)) + } +} diff --git a/crates/core/src/codec/v1.rs b/crates/core/src/codec/v1.rs index 4ff5925..13dae63 100644 --- a/crates/core/src/codec/v1.rs +++ b/crates/core/src/codec/v1.rs @@ -7,7 +7,8 @@ pub mod opcode; mod timestamp; pub use attestation::{ - Attestation, AttestationTag, BitcoinAttestation, PendingAttestation, RawAttestation, + Attestation, AttestationTag, BitcoinAttestation, EthereumUTSAttestation, PendingAttestation, + RawAttestation, }; pub use detached_timestamp::DetachedTimestamp; pub use digest::DigestHeader; diff --git a/crates/core/src/codec/v1/attestation.rs b/crates/core/src/codec/v1/attestation.rs index 4543e92..8aae820 100644 --- a/crates/core/src/codec/v1/attestation.rs +++ b/crates/core/src/codec/v1/attestation.rs @@ -13,6 +13,8 @@ use alloc::{ borrow::Cow, vec::Vec, }; +use alloy_chains::Chain; +use alloy_primitives::{Address, BlockNumber, ChainId, TxHash}; use core::fmt; /// Size in bytes of the tag identifying the attestation type. @@ -143,6 +145,126 @@ impl Attestation<'_> for BitcoinAttestation { } } +/// Attestation by an Ethereum UTS contract. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct EthereumUTSAttestation { + pub chain: Chain, + pub height: BlockNumber, + /// Optional extra metadata about the attestation, such as the contract address and transaction hash. + pub metadata: EthereumUTSAttestationExtraMetadata, +} + +/// Extra metadata for an Ethereum UTS attestation. +/// +/// The tx field is only present if the contract field is present, +/// and should be ignored if the contract field is None. +#[derive(Default, Debug, Clone, PartialEq, Eq)] +pub struct EthereumUTSAttestationExtraMetadata { + contract: Option
, + tx: Option, +} + +impl fmt::Display for EthereumUTSAttestation { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "UTS on chain {} at block #{}({})", + self.chain, self.height, self.metadata + ) + } +} + +impl Attestation<'_> for EthereumUTSAttestation { + const TAG: AttestationTag = *ETHEREUM_UTS_TAG; + + fn from_raw_data(data: &[u8]) -> Result { + let data = &mut &data[..]; + let chain = Chain::decode(data)?; + let height = BlockNumber::decode(data)?; + let metadata = EthereumUTSAttestationExtraMetadata::decode(data)?; + Ok(EthereumUTSAttestation { + chain, + height, + metadata, + }) + } + + fn to_raw_data_in(&self, alloc: A) -> Result, EncodeError> { + // chain id + block number + optional address + optional tx hash + const SIZE: usize = size_of::() + size_of::() + 20 + 32; + let mut buffer = Vec::with_capacity_in(20 + 32 + 32, alloc); + buffer.encode(self.chain)?; + buffer.encode(self.height)?; + buffer.encode(&self.metadata)?; + Ok(buffer) + } +} + +impl Encode for EthereumUTSAttestationExtraMetadata { + fn encode(&self, encoder: &mut impl Encoder) -> Result<(), EncodeError> { + if let Some(contract) = self.contract { + encoder.encode(&contract)?; + if let Some(tx) = self.tx { + encoder.encode(&tx)?; + } + } + Ok(()) + } +} + +impl Decode for EthereumUTSAttestationExtraMetadata { + fn decode(decoder: &mut impl Decoder) -> Result { + let contract = Address::decode_trailing(decoder)?; + let tx = if contract.is_some() { + TxHash::decode_trailing(decoder)? + } else { + None + }; + Ok(Self { contract, tx }) + } +} + +impl fmt::Display for EthereumUTSAttestationExtraMetadata { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match (self.contract, self.tx) { + (Some(contract), Some(tx)) => write!(f, "{contract} by tx: {tx}"), + (Some(contract), None) => write!(f, "{contract}"), + (None, Some(_)) => unreachable!("Tx should not be present without contract"), + (None, None) => write!(f, "no extra metadata"), + } + } +} + +impl EthereumUTSAttestationExtraMetadata { + /// Creates new extra metadata with the given contract address and no transaction hash. + pub fn new(contract: Address) -> Self { + Self { + contract: Some(contract), + tx: None, + } + } + + /// Creates new extra metadata with the given contract address and transaction hash. + pub fn new_with_tx(contract: Address, tx: TxHash) -> Self { + Self { + contract: Some(contract), + tx: Some(tx), + } + } + + /// Returns the contract address if present, or None if not. + #[inline] + pub fn contract(&self) -> Option
{ + self.contract + } + + /// Returns the transaction hash if present, or None if not. + #[inline] + pub fn tx(&self) -> Option { + self.tx + } +} + #[derive(Debug, Clone, PartialEq, Eq)] pub struct PendingAttestation<'a> { pub uri: Cow<'a, str>, From 4dd1af731dc4cec999624eeaa5d10374476e8bb5 Mon Sep 17 00:00:00 2001 From: lightsing Date: Thu, 19 Feb 2026 18:15:17 +0800 Subject: [PATCH 4/7] add verifier --- Cargo.lock | 45 +++++++++---- Cargo.toml | 1 + crates/core-wasm/src/lib.rs | 14 +++- crates/core/Cargo.toml | 5 ++ crates/core/src/codec/v1/timestamp.rs | 4 +- crates/core/src/lib.rs | 2 + crates/core/src/verifier.rs | 62 +++++++++++++++++ crates/core/src/verifier/ethereum_uts.rs | 85 ++++++++++++++++++++++++ 8 files changed, 200 insertions(+), 18 deletions(-) create mode 100644 crates/core/src/verifier.rs create mode 100644 crates/core/src/verifier/ethereum_uts.rs diff --git a/Cargo.lock b/Cargo.lock index 39cc7da..a6fdc59 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -89,9 +89,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3dcd2b4e208ce5477de90ccdcbd4bde2c8fb06af49a443974e92bb8f2c5e93f" +checksum = "b0c0dc44157867da82c469c13186015b86abef209bf0e41625e4b68bac61d728" dependencies = [ "alloy-eips", "alloy-primitives", @@ -116,9 +116,9 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee5655f234985f5ab1e31bef7e02ed11f0a899468cf3300e061e1b96e9e11de0" +checksum = "ba4cdb42df3871cd6b346d6a938ec2ba69a9a0f49d1f82714bc5c48349268434" dependencies = [ "alloy-consensus", "alloy-eips", @@ -219,15 +219,28 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "alloy-eip7928" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3231de68d5d6e75332b7489cfcc7f4dfabeba94d990a10e4b923af0e6623540" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "borsh", + "serde", +] + [[package]] name = "alloy-eips" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6847d641141b92a1557094aa6c236cbe49c06fb24144d4a21fe6acb970c15888" +checksum = "b9f7ef09f21bd1e9cb8a686f168cb4a206646804567f0889eadb8dcc4c9288c8" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", + "alloy-eip7928", "alloy-primitives", "alloy-rlp", "alloy-serde", @@ -325,9 +338,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a6cbb9f431bdad294eebb5af9b293d6979e633bfe5468d1e87c1421a858265" +checksum = "42d6d15e069a8b11f56bef2eccbad2a873c6dd4d4c81d04dda29710f5ea52f04" dependencies = [ "alloy-consensus", "alloy-eips", @@ -573,9 +586,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f9f130511b8632686dfe6f9909b38d7ae4c68de3ce17d28991400646a39b25" +checksum = "9b2dc411f13092f237d2bf6918caf80977fc2f51485f9b90cb2a2f956912c8c9" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -620,9 +633,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "067b718d2e6ac1bb889341fcc7a250cfa49bcd3ba4f23923f1c1eb1f2b10cb7c" +checksum = "e2ce1e0dbf7720eee747700e300c99aac01b1a95bb93f493a01e78ee28bb1a37" dependencies = [ "alloy-primitives", "serde", @@ -829,9 +842,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.2.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" +checksum = "6fa0c53e8c1e1ef4d01066b01c737fb62fc9397ab52c6e7bb5669f97d281b9bc" dependencies = [ "darling", "proc-macro2", @@ -5784,6 +5797,9 @@ version = "0.1.0" dependencies = [ "alloy-chains", "alloy-primitives", + "alloy-provider", + "alloy-rpc-types-eth", + "alloy-sol-types", "auto_impl", "bytes", "criterion 0.5.1", @@ -5801,6 +5817,7 @@ dependencies = [ "sha3 0.11.0-rc.3", "thiserror 2.0.17", "tracing", + "uts-contracts", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a4e41b7..48903c7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,7 @@ alloy-chains = "0.2" alloy-contract = "1.2" alloy-primitives = "1.5" alloy-provider = "1.2" +alloy-rpc-types-eth = "1.6" alloy-signer = "1.1" alloy-signer-local = "1.1" alloy-sol-types = "1.5" diff --git a/crates/core-wasm/src/lib.rs b/crates/core-wasm/src/lib.rs index 6472495..73d97b3 100644 --- a/crates/core-wasm/src/lib.rs +++ b/crates/core-wasm/src/lib.rs @@ -6,8 +6,8 @@ use serde_with::{hex::Hex, serde_as}; use uts_core::codec::{ Decode, Encode, v1::{ - Attestation, BitcoinAttestation, DetachedTimestamp, DigestHeader, MayHaveInput, - PendingAttestation, Timestamp, opcode::OpCode, + Attestation, BitcoinAttestation, DetachedTimestamp, DigestHeader, EthereumUTSAttestation, + MayHaveInput, PendingAttestation, Timestamp, opcode::OpCode, }, }; use wasm_bindgen::prelude::*; @@ -89,6 +89,10 @@ fn serialize_chain(mut current_node: &Timestamp) -> Value { Bitcoin { height: u32, }, + EthereumUTS { + chain: u64, + height: u64, + }, Unknown { #[serde_as(as = "Hex")] tag: Vec, @@ -108,6 +112,12 @@ fn serialize_chain(mut current_node: &Timestamp) -> Value { } else if raw.tag == BitcoinAttestation::TAG { let btc = BitcoinAttestation::from_raw(raw).unwrap(); chain.push(json!(AttestationStep::Bitcoin { height: btc.height })); + } else if raw.tag == EthereumUTSAttestation::TAG { + let eth = EthereumUTSAttestation::from_raw(raw).unwrap(); + chain.push(json!(AttestationStep::EthereumUTS { + chain: eth.chain.id(), + height: eth.height, + })); } else { chain.push(json!(AttestationStep::Unknown { tag: raw.tag.to_vec(), diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 579d627..619bdb9 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -17,6 +17,9 @@ required-features = ["std"] [dependencies] alloy-chains = { workspace = true } alloy-primitives = { workspace = true } +alloy-provider = { workspace = true, optional = true } +alloy-rpc-types-eth = { workspace = true, optional = true } +alloy-sol-types = { workspace = true, optional = true } auto_impl.workspace = true bytes = { workspace = true, optional = true } digest.workspace = true @@ -31,10 +34,12 @@ sha2.workspace = true sha3.workspace = true thiserror.workspace = true tracing = { workspace = true, optional = true } +uts-contracts = { workspace = true, optional = true } [features] bytes = ["dep:bytes"] default = ["std"] +ethereum-uts-verifier = ["verifier", "dep:alloy-provider", "dep:alloy-rpc-types-eth", "dep:alloy-sol-types", "dep:uts-contracts"] serde = ["dep:serde", "dep:serde_with", "serde/derive", "serde_with/hex"] std = [] tracing = ["dep:tracing"] diff --git a/crates/core/src/codec/v1/timestamp.rs b/crates/core/src/codec/v1/timestamp.rs index 7d3f7d7..2e5b459 100644 --- a/crates/core/src/codec/v1/timestamp.rs +++ b/crates/core/src/codec/v1/timestamp.rs @@ -193,14 +193,14 @@ impl Timestamp { OpCode::FORK => { debug_assert!(step.next.len() >= 2, "FORK must have at least two children"); for child in &step.next { - child.finalize(input); + child.try_finalize(input)?; } } OpCode::ATTESTATION => unreachable!("should not happen"), op => { let output = op.execute_in(input, &step.data, step.allocator().clone()); debug_assert!(step.next.len() == 1, "non-FORK must have exactly one child"); - step.next[0].finalize(&output); + step.next[0].try_finalize(&output)?; } } } diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index e524fb4..a5fe5f4 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -16,3 +16,5 @@ pub mod codec; /// Error types raised by codec operations. pub mod error; pub mod utils; +#[cfg(feature = "verifier")] +pub mod verifier; diff --git a/crates/core/src/verifier.rs b/crates/core/src/verifier.rs new file mode 100644 index 0000000..4717bab --- /dev/null +++ b/crates/core/src/verifier.rs @@ -0,0 +1,62 @@ +use crate::{ + codec::v1::{Attestation, PendingAttestation, RawAttestation}, + error::DecodeError, +}; + +#[cfg(feature = "ethereum-uts-verifier")] +mod ethereum_uts; +#[cfg(feature = "ethereum-uts-verifier")] +pub use ethereum_uts::EthereumUTSVerifier; + +#[derive(Debug, thiserror::Error)] +pub enum VerifyError { + /// The raw attestation lacks a value, so it cannot be verified. + #[error("raw attestation lacks a value")] + NoValue, + /// The attestation is still pending and cannot be verified yet. + #[error("attestation is still pending and cannot be verified yet")] + Pending, + /// The attestation is not the expected type + /// (e.g. a Bitcoin attestation was expected but an Ethereum attestation was found). + #[error("attestation is not the expected type")] + BadAttestationTag, + /// An error occurred while decoding the attestation. + #[error("error decoding attestation: {0}")] + Decode(DecodeError), + /// An error occurred while verifying the attestation. + #[error("error verifying attestation: {0}")] + Verify(#[source] Box), +} + +pub trait AttestationVerifier

+where + P: for<'a> Attestation<'a> + Send, + Self: Send + Sync, +{ + fn verify_raw( + &self, + raw: &RawAttestation, + ) -> impl Future> + Send { + async { + if raw.tag == PendingAttestation::TAG { + return Err(VerifyError::Pending); + } + + let Some(value) = raw.value.get() else { + return Err(VerifyError::NoValue); + }; + + match P::from_raw(raw) { + Ok(attestation) => self.verify(&attestation, value).await, + Err(DecodeError::BadAttestationTag) => Err(VerifyError::BadAttestationTag), + Err(e) => Err(VerifyError::Decode(e)), + } + } + } + + fn verify( + &self, + attestation: &P, + value: &[u8], + ) -> impl Future> + Send; +} diff --git a/crates/core/src/verifier/ethereum_uts.rs b/crates/core/src/verifier/ethereum_uts.rs new file mode 100644 index 0000000..67502b3 --- /dev/null +++ b/crates/core/src/verifier/ethereum_uts.rs @@ -0,0 +1,85 @@ +use super::{AttestationVerifier, VerifyError}; +use crate::codec::v1::EthereumUTSAttestation; +use alloy_primitives::ChainId; +use alloy_provider::{Provider, transport::TransportError}; +use alloy_rpc_types_eth::Filter; +use alloy_sol_types::SolEvent; +use digest::OutputSizeUser; +use sha3::Keccak256; +use uts_contracts::uts::Attested; + +#[derive(Debug, Clone)] +pub struct EthereumUTSVerifier { + provider: P, + chain_id: ChainId, +} + +#[derive(Debug, thiserror::Error)] +pub enum EthereumUTSVerifierError { + #[error("invalid value length for Ethereum UTS attestation")] + InvalidLength, + #[error("chain ID mismatch")] + ChainIdMismatch, + #[error("root not found in attested logs")] + NotFound, + #[error("different contract address in attested log than expected")] + ContractAddressMismatch, + #[error(transparent)] + Rpc(#[from] TransportError), +} + +impl EthereumUTSVerifier

{ + pub async fn new(provider: P) -> Result { + let chain_id = provider.get_chain_id().await?; + Ok(Self { provider, chain_id }) + } +} + +impl AttestationVerifier for EthereumUTSVerifier

{ + async fn verify( + &self, + attestation: &EthereumUTSAttestation, + value: &[u8], + ) -> Result<(), VerifyError> { + self.verify_attestation(attestation, value) + .await + .map_err(|e| VerifyError::Verify(Box::new(e))) + } +} + +impl EthereumUTSVerifier

{ + async fn verify_attestation( + &self, + attestation: &EthereumUTSAttestation, + value: &[u8], + ) -> Result<(), EthereumUTSVerifierError> { + if value.len() != Keccak256::output_size() { + return Err(EthereumUTSVerifierError::InvalidLength); + } + if attestation.chain.id() != self.chain_id { + return Err(EthereumUTSVerifierError::ChainIdMismatch); + } + + let filter = Filter::new() + .from_block(attestation.height) + .to_block(attestation.height) + .event_signature(Attested::SIGNATURE_HASH); + let logs = self.provider.get_logs(&filter).await?; + + let Some(log) = logs + .iter() + .filter_map(|log| Attested::decode_log(&log.inner).ok()) + .find(|log| log.data.root == value) + else { + return Err(EthereumUTSVerifierError::NotFound); + }; + + // perform additional checks if available + if let Some(contract_address) = attestation.metadata.contract() { + if log.address != contract_address { + return Err(EthereumUTSVerifierError::ContractAddressMismatch); + } + } + Ok(()) + } +} From 34d0ae3264d655379a2d5394bf36846936bfbfc8 Mon Sep 17 00:00:00 2001 From: lightsing Date: Fri, 20 Feb 2026 11:54:06 +0800 Subject: [PATCH 5/7] refactor --- crates/core/src/verifier.rs | 13 ++-- crates/core/src/verifier/ethereum_uts.rs | 92 +++++++++++++++++++----- 2 files changed, 84 insertions(+), 21 deletions(-) diff --git a/crates/core/src/verifier.rs b/crates/core/src/verifier.rs index 4717bab..500ad52 100644 --- a/crates/core/src/verifier.rs +++ b/crates/core/src/verifier.rs @@ -23,9 +23,10 @@ pub enum VerifyError { /// An error occurred while decoding the attestation. #[error("error decoding attestation: {0}")] Decode(DecodeError), - /// An error occurred while verifying the attestation. - #[error("error verifying attestation: {0}")] - Verify(#[source] Box), + /// An error occurred while verifying the ethereum uts attestation. + #[cfg(feature = "ethereum-uts-verifier")] + #[error("error verifying ethereum uts attestation: {0}")] + EthereumUTS(#[from] ethereum_uts::EthereumUTSVerifierError), } pub trait AttestationVerifier

@@ -33,10 +34,12 @@ where P: for<'a> Attestation<'a> + Send, Self: Send + Sync, { + type Output; + fn verify_raw( &self, raw: &RawAttestation, - ) -> impl Future> + Send { + ) -> impl Future> + Send { async { if raw.tag == PendingAttestation::TAG { return Err(VerifyError::Pending); @@ -58,5 +61,5 @@ where &self, attestation: &P, value: &[u8], - ) -> impl Future> + Send; + ) -> impl Future> + Send; } diff --git a/crates/core/src/verifier/ethereum_uts.rs b/crates/core/src/verifier/ethereum_uts.rs index 67502b3..ec0d6ca 100644 --- a/crates/core/src/verifier/ethereum_uts.rs +++ b/crates/core/src/verifier/ethereum_uts.rs @@ -1,8 +1,8 @@ use super::{AttestationVerifier, VerifyError}; use crate::codec::v1::EthereumUTSAttestation; -use alloy_primitives::ChainId; +use alloy_primitives::{Address, ChainId, TxHash}; use alloy_provider::{Provider, transport::TransportError}; -use alloy_rpc_types_eth::Filter; +use alloy_rpc_types_eth::{Filter, Log}; use alloy_sol_types::SolEvent; use digest::OutputSizeUser; use sha3::Keccak256; @@ -22,8 +22,10 @@ pub enum EthereumUTSVerifierError { ChainIdMismatch, #[error("root not found in attested logs")] NotFound, - #[error("different contract address in attested log than expected")] - ContractAddressMismatch, + #[error("contract address mismatch, expected {expected}, found {found}")] + ContractMismatch { expected: Address, found: Address }, + #[error("transaction hash mismatch, expected {expected}, found {found}")] + TransactionMismatch { expected: TxHash, found: TxHash }, #[error(transparent)] Rpc(#[from] TransportError), } @@ -36,14 +38,14 @@ impl EthereumUTSVerifier

{ } impl AttestationVerifier for EthereumUTSVerifier

{ + type Output = Log; + async fn verify( &self, attestation: &EthereumUTSAttestation, value: &[u8], - ) -> Result<(), VerifyError> { - self.verify_attestation(attestation, value) - .await - .map_err(|e| VerifyError::Verify(Box::new(e))) + ) -> Result { + Ok(self.verify_attestation(attestation, value).await?) } } @@ -52,7 +54,7 @@ impl EthereumUTSVerifier

{ &self, attestation: &EthereumUTSAttestation, value: &[u8], - ) -> Result<(), EthereumUTSVerifierError> { + ) -> Result, EthereumUTSVerifierError> { if value.len() != Keccak256::output_size() { return Err(EthereumUTSVerifierError::InvalidLength); } @@ -67,19 +69,77 @@ impl EthereumUTSVerifier

{ let logs = self.provider.get_logs(&filter).await?; let Some(log) = logs - .iter() - .filter_map(|log| Attested::decode_log(&log.inner).ok()) - .find(|log| log.data.root == value) + .into_iter() + .filter_map(|log| { + Attested::decode_log(&log.inner) + .map(|inner| Log { + inner, + block_hash: log.block_hash, + block_number: log.block_number, + block_timestamp: log.block_timestamp, + transaction_hash: log.transaction_hash, + transaction_index: log.transaction_index, + log_index: log.log_index, + removed: log.removed, + }) + .ok() + }) + .find(|log| log.inner.data.root == value) else { return Err(EthereumUTSVerifierError::NotFound); }; // perform additional checks if available - if let Some(contract_address) = attestation.metadata.contract() { - if log.address != contract_address { - return Err(EthereumUTSVerifierError::ContractAddressMismatch); + if let Some(contract) = attestation.metadata.contract() { + if log.inner.address != contract { + return Err(EthereumUTSVerifierError::ContractMismatch { + expected: contract, + found: log.inner.address, + }); + } + if let Some(expect_tx) = attestation.metadata.tx() + && let Some(found_tx) = log.transaction_hash + && expect_tx != found_tx + { + return Err(EthereumUTSVerifierError::TransactionMismatch { + expected: expect_tx, + found: found_tx, + }); } } - Ok(()) + Ok(log) + } +} + +impl EthereumUTSVerifierError { + /// The error indicates this attestation is invalid and cannot be verified. + #[inline] + pub fn is_fatal(&self) -> bool { + matches!( + self, + EthereumUTSVerifierError::InvalidLength | EthereumUTSVerifierError::NotFound + ) + } + + /// The error indicates this attestation is valid but not attested by the expected contract or transaction. + #[inline] + pub fn is_mismatch(&self) -> bool { + matches!( + self, + EthereumUTSVerifierError::ContractMismatch { .. } + | EthereumUTSVerifierError::TransactionMismatch { .. } + ) + } + + /// The error indicates this attestation may be valid but cannot be verified at the moment. + #[inline] + pub fn should_retry(&self) -> bool { + matches!(self, EthereumUTSVerifierError::Rpc(_)) + } + + /// The error indicates this attestation may be valid but the provider is not suitable for verifying it. + #[inline] + pub fn is_wrong_provider(&self) -> bool { + matches!(self, EthereumUTSVerifierError::ChainIdMismatch) } } From 90f61d40c2a6cf1f1535e3a90a2b8104a369938b Mon Sep 17 00:00:00 2001 From: lightsing Date: Sat, 21 Feb 2026 12:05:25 +0800 Subject: [PATCH 6/7] deploy default instance --- Cargo.lock | 1 + crates/contracts/Cargo.toml | 1 + crates/contracts/abi/ERC1967Proxy.json | 2 +- .../contracts/abi/IUniversalTimestamps.json | 2 +- crates/contracts/abi/UniversalTimestamps.json | 2 +- crates/contracts/src/lib.rs | 5 +++ foundry.toml | 11 ++++++ script/DeployCreate2.s.sol | 35 +++++++++++++++++++ 8 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 script/DeployCreate2.s.sol diff --git a/Cargo.lock b/Cargo.lock index a6fdc59..d401d33 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5785,6 +5785,7 @@ version = "0.1.0" dependencies = [ "alloy", "alloy-contract", + "alloy-primitives", "alloy-sol-types", "eyre", "futures", diff --git a/crates/contracts/Cargo.toml b/crates/contracts/Cargo.toml index 67f2682..ac9d9ac 100644 --- a/crates/contracts/Cargo.toml +++ b/crates/contracts/Cargo.toml @@ -10,6 +10,7 @@ version.workspace = true [dependencies] alloy-contract = { workspace = true } +alloy-primitives = { workspace = true } alloy-sol-types = { workspace = true, features = ["json"] } [dev-dependencies] diff --git a/crates/contracts/abi/ERC1967Proxy.json b/crates/contracts/abi/ERC1967Proxy.json index fd28c7b..0650ce4 100644 --- a/crates/contracts/abi/ERC1967Proxy.json +++ b/crates/contracts/abi/ERC1967Proxy.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"fallback","stateMutability":"payable"},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]}],"bytecode":{"object":"0x6080604052604051610649380380610649833981810160405281019061002591906104e7565b610035828261003c60201b60201c565b5050610569565b61004b826100c060201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156100ad576100a7828261018f60201b60201c565b506100bc565b6100bb61029e60201b60201c565b5b5050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361011b57806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016101129190610550565b60405180910390fd5b8061014d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6102da60201b60201c565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f6101a284846102e360201b60201c565b90508080156101de57505f6101bb6102f760201b60201c565b11806101dd57505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b156101f9576101f16102fe60201b60201c565b915050610298565b801561023c57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016102339190610550565b60405180910390fd5b5f61024b6102f760201b60201c565b11156102645761025f61031b60201b60201c565b610296565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f3411156102d8576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f819050919050565b5f805f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61036082610337565b9050919050565b61037081610356565b811461037a575f80fd5b50565b5f8151905061038b81610367565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6103df82610399565b810181811067ffffffffffffffff821117156103fe576103fd6103a9565b5b80604052505050565b5f610410610326565b905061041c82826103d6565b919050565b5f67ffffffffffffffff82111561043b5761043a6103a9565b5b61044482610399565b9050602081019050919050565b5f5b8381101561046e578082015181840152602081019050610453565b5f8484015250505050565b5f61048b61048684610421565b610407565b9050828152602081018484840111156104a7576104a6610395565b5b6104b2848285610451565b509392505050565b5f82601f8301126104ce576104cd610391565b5b81516104de848260208601610479565b91505092915050565b5f80604083850312156104fd576104fc61032f565b5b5f61050a8582860161037d565b925050602083015167ffffffffffffffff81111561052b5761052a610333565b5b610537858286016104ba565b9150509250929050565b61054a81610356565b82525050565b5f6020820190506105635f830184610541565b92915050565b60d4806105755f395ff3fe6080604052600a600c565b005b60186014601a565b6026565b565b5f60216044565b905090565b365f80375f80365f845af43d5f803e805f81146040573d5ff35b3d5ffd5b5f606e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6095565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81905091905056fea264697066735822122045016995d1ce2872840a5fdf5a3f8e95a1449ede6e9227990ba56c4f2f35079264736f6c63430008180033","sourceMap":"600:1117:28:-:0;;;1081:133;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1155:52;1185:14;1201:5;1155:29;;;:52;;:::i;:::-;1081:133;;600:1117;;2264:344:29;2355:37;2374:17;2355:18;;;:37;;:::i;:::-;2425:17;2407:36;;;;;;;;;;;;2472:1;2458:4;:11;:15;2454:148;;;2489:53;2518:17;2537:4;2489:28;;;:53;;:::i;:::-;;2454:148;;;2573:18;:16;;;:18;;:::i;:::-;2454:148;2264:344;;:::o;1671:281::-;1781:1;1748:17;:29;;;:34;1744:119;;1834:17;1805:47;;;;;;;;;;;:::i;:::-;;;;;;;;1744:119;1928:17;1872:47;811:66;1899:19;;1872:26;;;:47;;:::i;:::-;:53;;;:73;;;;;;;;;;;;;;;;;;1671:281;:::o;4691:549:34:-;4774:12;4798;4813:47;4847:6;4855:4;4813:33;;;:47;;:::i;:::-;4798:62;;4874:7;:72;;;;;4918:1;4886:29;:27;;;:29;;:::i;:::-;:33;:59;;;;4944:1;4923:6;:18;;;:22;4886:59;4874:72;4870:364;;;4969:25;:23;;;:25;;:::i;:::-;4962:32;;;;;4870:364;5015:7;5011:223;;;5062:6;5045:24;;;;;;;;;;;:::i;:::-;;;;;;;;5011:223;5122:1;5090:29;:27;;;:29;;:::i;:::-;:33;5086:148;;;5139:27;:25;;;:27;;:::i;:::-;5086:148;;;5204:19;;;;;;;;;;;;;;5086:148;4788:452;4691:549;;;;;:::o;6113:122:29:-;6175:1;6163:9;:13;6159:70;;;6199:19;;;;;;;;;;;;;;6159:70;6113:122::o;1899:163:38:-;1960:21;2042:4;2032:14;;1899:163;;;:::o;3383:242:36:-;3466:12;3604:4;3598;3591;3585:11;3578:4;3572;3568:15;3560:6;3553:5;3540:69;3529:80;;3383:242;;;;:::o;4463:152::-;4512:12;4583:16;4575:24;;4463:152;:::o;4698:334::-;4743:19;4829:4;4823:11;4813:21;;4862:16;4854:6;4847:32;4932:16;4926:4;4919;4911:6;4907:17;4892:57;4997:16;4991:4;4987:27;4979:6;4975:40;4969:4;4962:54;4698:334;:::o;5099:223::-;5203:4;5197:11;5247:16;5241:4;5236:3;5221:43;5289:16;5284:3;5277:29;7:75:39;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:117::-;954:1;951;944:12;968:117;1077:1;1074;1067:12;1091:102;1132:6;1183:2;1179:7;1174:2;1167:5;1163:14;1159:28;1149:38;;1091:102;;;:::o;1199:180::-;1247:77;1244:1;1237:88;1344:4;1341:1;1334:15;1368:4;1365:1;1358:15;1385:281;1468:27;1490:4;1468:27;:::i;:::-;1460:6;1456:40;1598:6;1586:10;1583:22;1562:18;1550:10;1547:34;1544:62;1541:88;;;1609:18;;:::i;:::-;1541:88;1649:10;1645:2;1638:22;1428:238;1385:281;;:::o;1672:129::-;1706:6;1733:20;;:::i;:::-;1723:30;;1762:33;1790:4;1782:6;1762:33;:::i;:::-;1672:129;;;:::o;1807:307::-;1868:4;1958:18;1950:6;1947:30;1944:56;;;1980:18;;:::i;:::-;1944:56;2018:29;2040:6;2018:29;:::i;:::-;2010:37;;2102:4;2096;2092:15;2084:23;;1807:307;;;:::o;2120:246::-;2201:1;2211:113;2225:6;2222:1;2219:13;2211:113;;;2310:1;2305:3;2301:11;2295:18;2291:1;2286:3;2282:11;2275:39;2247:2;2244:1;2240:10;2235:15;;2211:113;;;2358:1;2349:6;2344:3;2340:16;2333:27;2182:184;2120:246;;;:::o;2372:432::-;2460:5;2485:65;2501:48;2542:6;2501:48;:::i;:::-;2485:65;:::i;:::-;2476:74;;2573:6;2566:5;2559:21;2611:4;2604:5;2600:16;2649:3;2640:6;2635:3;2631:16;2628:25;2625:112;;;2656:79;;:::i;:::-;2625:112;2746:52;2791:6;2786:3;2781;2746:52;:::i;:::-;2466:338;2372:432;;;;;:::o;2823:353::-;2889:5;2938:3;2931:4;2923:6;2919:17;2915:27;2905:122;;2946:79;;:::i;:::-;2905:122;3056:6;3050:13;3081:89;3166:3;3158:6;3151:4;3143:6;3139:17;3081:89;:::i;:::-;3072:98;;2895:281;2823:353;;;;:::o;3182:678::-;3270:6;3278;3327:2;3315:9;3306:7;3302:23;3298:32;3295:119;;;3333:79;;:::i;:::-;3295:119;3453:1;3478:64;3534:7;3525:6;3514:9;3510:22;3478:64;:::i;:::-;3468:74;;3424:128;3612:2;3601:9;3597:18;3591:25;3643:18;3635:6;3632:30;3629:117;;;3665:79;;:::i;:::-;3629:117;3770:73;3835:7;3826:6;3815:9;3811:22;3770:73;:::i;:::-;3760:83;;3562:291;3182:678;;;;;:::o;3866:118::-;3953:24;3971:5;3953:24;:::i;:::-;3948:3;3941:37;3866:118;;:::o;3990:222::-;4083:4;4121:2;4110:9;4106:18;4098:26;;4134:71;4202:1;4191:9;4187:17;4178:6;4134:71;:::i;:::-;3990:222;;;;:::o;600:1117:28:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600a600c565b005b60186014601a565b6026565b565b5f60216044565b905090565b365f80375f80365f845af43d5f803e805f81146040573d5ff35b3d5ffd5b5f606e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6095565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81905091905056fea264697066735822122045016995d1ce2872840a5fdf5a3f8e95a1449ede6e9227990ba56c4f2f35079264736f6c63430008180033","sourceMap":"600:1117:28:-:0;;;2676:11:30;:9;:11::i;:::-;600:1117:28;2350:83:30;2398:28;2408:17;:15;:17::i;:::-;2398:9;:28::i;:::-;2350:83::o;1583:132:28:-;1650:7;1676:32;:30;:32::i;:::-;1669:39;;1583:132;:::o;949:922:30:-;1293:14;1287:4;1281;1268:40;1513:4;1507;1491:14;1485:4;1469:14;1462:5;1449:69;1598:16;1592:4;1586;1571:44;1636:6;1708:1;1703:69;;;;1824:16;1818:4;1811:30;1703:69;1741:16;1735:4;1728:30;1441:138:29;1493:7;1519:47;811:66;1546:19;;1519:26;:47::i;:::-;:53;;;;;;;;;;;;1512:60;;1441:138;:::o;1899:163:38:-;1960:21;2042:4;2032:14;;1899:163;;;:::o","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[ERC-1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa3066ff86b94128a9d3956a63a0511fa1aae41bd455772ab587b32ff322acb2e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf7b192fd82acf6187970c80548f624b1b9c80425b62fa49e7fdb538a52de049\",\"dweb:/ipfs/QmWXG1YCde1tqDYTbNwjkZDWVgPEjzaQGSDqWkyKLzaNua\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0x80935e4fae2c414f4e7789e13a820d06901182a5733ab006f8d68b5b09db993f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://752d991d6ca1087587b48103bc623f74888054f58581ff29166d90889c4765c5\",\"dweb:/ipfs/QmRBsa6K2ChKxVWYY54YiyYhDBPbmY5HyKCtij5LoWh56o\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710\",\"dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol\":{\"keccak256\":\"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56\",\"dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":"ERC1967Proxy"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0xa3066ff86b94128a9d3956a63a0511fa1aae41bd455772ab587b32ff322acb2e","urls":["bzz-raw://bf7b192fd82acf6187970c80548f624b1b9c80425b62fa49e7fdb538a52de049","dweb:/ipfs/QmWXG1YCde1tqDYTbNwjkZDWVgPEjzaQGSDqWkyKLzaNua"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0x80935e4fae2c414f4e7789e13a820d06901182a5733ab006f8d68b5b09db993f","urls":["bzz-raw://752d991d6ca1087587b48103bc623f74888054f58581ff29166d90889c4765c5","dweb:/ipfs/QmRBsa6K2ChKxVWYY54YiyYhDBPbmY5HyKCtij5LoWh56o"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346","urls":["bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710","dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol":{"keccak256":"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583","urls":["bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56","dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","id":40451,"exportedSymbols":{"ERC1967Proxy":[40450],"ERC1967Utils":[40744],"Proxy":[40780]},"nodeType":"SourceUnit","src":"114:1604:28","nodes":[{"id":40414,"nodeType":"PragmaDirective","src":"114:24:28","nodes":[],"literals":["solidity","^","0.8",".22"]},{"id":40416,"nodeType":"ImportDirective","src":"140:35:28","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"../Proxy.sol","nameLocation":"-1:-1:-1","scope":40451,"sourceUnit":40781,"symbolAliases":[{"foreign":{"id":40415,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40780,"src":"148:5:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":40418,"nodeType":"ImportDirective","src":"176:48:28","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"./ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":40451,"sourceUnit":40745,"symbolAliases":[{"foreign":{"id":40417,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"184:12:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":40450,"nodeType":"ContractDefinition","src":"600:1117:28","nodes":[{"id":40437,"nodeType":"FunctionDefinition","src":"1081:133:28","nodes":[],"body":{"id":40436,"nodeType":"Block","src":"1145:69:28","nodes":[],"statements":[{"expression":{"arguments":[{"id":40432,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40424,"src":"1185:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40433,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40426,"src":"1201:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40429,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"1155:12:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$40744_$","typeString":"type(library ERC1967Utils)"}},"id":40431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1168:16:28","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":40559,"src":"1155:29:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":40434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1155:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40435,"nodeType":"ExpressionStatement","src":"1155:52:28"}]},"documentation":{"id":40422,"nodeType":"StructuredDocumentation","src":"637:439:28","text":" @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.\n If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an\n encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\n Requirements:\n - If `data` is empty, `msg.value` must be zero."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":40427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40424,"mutability":"mutable","name":"implementation","nameLocation":"1101:14:28","nodeType":"VariableDeclaration","scope":40437,"src":"1093:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40423,"name":"address","nodeType":"ElementaryTypeName","src":"1093:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40426,"mutability":"mutable","name":"_data","nameLocation":"1130:5:28","nodeType":"VariableDeclaration","scope":40437,"src":"1117:18:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40425,"name":"bytes","nodeType":"ElementaryTypeName","src":"1117:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1092:44:28"},"returnParameters":{"id":40428,"nodeType":"ParameterList","parameters":[],"src":"1145:0:28"},"scope":40450,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":40449,"nodeType":"FunctionDefinition","src":"1583:132:28","nodes":[],"body":{"id":40448,"nodeType":"Block","src":"1659:56:28","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40444,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"1676:12:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$40744_$","typeString":"type(library ERC1967Utils)"}},"id":40445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1689:17:28","memberName":"getImplementation","nodeType":"MemberAccess","referencedDeclaration":40496,"src":"1676:30:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":40446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1676:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":40443,"id":40447,"nodeType":"Return","src":"1669:39:28"}]},"baseFunctions":[40761],"documentation":{"id":40438,"nodeType":"StructuredDocumentation","src":"1220:358:28","text":" @dev Returns the current implementation address.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\n the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"1592:15:28","overrides":{"id":40440,"nodeType":"OverrideSpecifier","overrides":[],"src":"1632:8:28"},"parameters":{"id":40439,"nodeType":"ParameterList","parameters":[],"src":"1607:2:28"},"returnParameters":{"id":40443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40442,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40449,"src":"1650:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40441,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1649:9:28"},"scope":40450,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":40420,"name":"Proxy","nameLocations":["625:5:28"],"nodeType":"IdentifierPath","referencedDeclaration":40780,"src":"625:5:28"},"id":40421,"nodeType":"InheritanceSpecifier","src":"625:5:28"}],"canonicalName":"ERC1967Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":40419,"nodeType":"StructuredDocumentation","src":"226:373:28","text":" @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n implementation address that can be changed. This address is stored in storage in the location specified by\n https://eips.ethereum.org/EIPS/eip-1967[ERC-1967], so that it doesn't conflict with the storage layout of the\n implementation behind the proxy."},"fullyImplemented":true,"linearizedBaseContracts":[40450,40780],"name":"ERC1967Proxy","nameLocation":"609:12:28","scope":40451,"usedErrors":[40470,40483,41236,41627],"usedEvents":[40389]}],"license":"MIT"},"id":28} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"fallback","stateMutability":"payable"},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]}],"bytecode":{"object":"0x608060405260405161037338038061037383398101604081905261002291610219565b61002c8282610033565b50506102fa565b61003c82610091565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561008557610080828261010c565b505050565b61008d6101ad565b5050565b806001600160a01b03163b5f036100cb57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61011984846101ce565b905080801561013a57505f3d118061013a57505f846001600160a01b03163b115b1561014f576101476101e1565b9150506101a7565b801561017957604051639996b31560e01b81526001600160a01b03851660048201526024016100c2565b3d1561018c576101876101fa565b6101a5565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156101cc5760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561022a575f80fd5b82516001600160a01b0381168114610240575f80fd5b602084810151919350906001600160401b038082111561025e575f80fd5b818601915086601f830112610271575f80fd5b81518181111561028357610283610205565b604051601f8201601f19908116603f011681019083821181831017156102ab576102ab610205565b8160405282815289868487010111156102c2575f80fd5b5f93505b828410156102e357848401860151818501870152928501926102c6565b5f8684830101528096505050505050509250929050565b606d806103065f395ff3fe6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffd","sourceMap":"600:1117:28:-:0;;;1081:133;;;;;;;;;;;;;;;;;;:::i;:::-;1155:52;1185:14;1201:5;1155:29;:52::i;:::-;1081:133;;600:1117;;2264:344:29;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:29;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;:::-;;2264:344;;:::o;2454:148::-;2573:18;:16;:18::i;:::-;2264:344;;:::o;1671:281::-;1748:17;-1:-1:-1;;;;;1748:29:29;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:29;;-1:-1:-1;;;;;1523:32:39;;1805:47:29;;;1505:51:39;1478:18;;1805:47:29;;;;;;;;1744:119;811:66;1872:73;;-1:-1:-1;;;;;;1872:73:29;-1:-1:-1;;;;;1872:73:29;;;;;;;;;;1671:281::o;4691:549:34:-;4774:12;4798;4813:47;4847:6;4855:4;4813:33;:47::i;:::-;4798:62;;4874:7;:72;;;;-1:-1:-1;4918:1:34;4583:16:36;4886:33:34;:59;;;;4944:1;4923:6;-1:-1:-1;;;;;4923:18:34;;:22;4886:59;4870:364;;;4969:25;:23;:25::i;:::-;4962:32;;;;;4870:364;5015:7;5011:223;;;5045:24;;-1:-1:-1;;;5045:24:34;;-1:-1:-1;;;;;1523:32:39;;5045:24:34;;;1505:51:39;1478:18;;5045:24:34;1359:203:39;5011:223:34;4583:16:36;5090:33:34;5086:148;;5139:27;:25;:27::i;:::-;5086:148;;;5204:19;;-1:-1:-1;;;5204:19:34;;;;;;;;;;;5086:148;4788:452;4691:549;;;;;:::o;6113:122:29:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:29;;;;;;;;;;;6159:70;6113:122::o;3383:242:36:-;3466:12;3604:4;3598;3591;3585:11;3578:4;3572;3568:15;3560:6;3553:5;3540:69;3529:80;3383:242;-1:-1:-1;;;3383:242:36:o;4698:334::-;4829:4;4823:11;4862:16;4847:32;;4932:16;4926:4;4919;4907:17;;4892:57;4997:16;4991:4;4987:27;4979:6;4975:40;4969:4;4962:54;4698:334;:::o;5099:223::-;5203:4;5197:11;5247:16;5241:4;5236:3;5221:43;5289:16;5284:3;5277:29;14:127:39;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:1208;234:6;242;295:2;283:9;274:7;270:23;266:32;263:52;;;311:1;308;301:12;263:52;337:16;;-1:-1:-1;;;;;382:31:39;;372:42;;362:70;;428:1;425;418:12;362:70;475:2;506:18;;;500:25;451:5;;-1:-1:-1;475:2:39;-1:-1:-1;;;;;574:14:39;;;571:34;;;601:1;598;591:12;571:34;639:6;628:9;624:22;614:32;;684:7;677:4;673:2;669:13;665:27;655:55;;706:1;703;696:12;655:55;735:2;729:9;757:2;753;750:10;747:36;;;763:18;;:::i;:::-;838:2;832:9;806:2;892:13;;-1:-1:-1;;888:22:39;;;912:2;884:31;880:40;868:53;;;936:18;;;956:22;;;933:46;930:72;;;982:18;;:::i;:::-;1022:10;1018:2;1011:22;1057:2;1049:6;1042:18;1097:7;1092:2;1087;1083;1079:11;1075:20;1072:33;1069:53;;;1118:1;1115;1108:12;1069:53;1140:1;1131:10;;1150:129;1164:2;1161:1;1158:9;1150:129;;;1252:10;;;1248:19;;1242:26;1221:14;;;1217:23;;1210:59;1175:10;;;;1150:129;;;1321:1;1316:2;1311;1303:6;1299:15;1295:24;1288:35;1342:6;1332:16;;;;;;;;146:1208;;;;;:::o;1359:203::-;600:1117:28;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffd","sourceMap":"600:1117:28:-:0;;;2676:11:30;:9;:11::i;:::-;600:1117:28;2350:83:30;2398:28;2408:17;:15;:17::i;:::-;2398:9;:28::i;:::-;2350:83::o;1583:132:28:-;1650:7;1676:32;811:66:29;1519:53;-1:-1:-1;;;;;1519:53:29;;1441:138;1676:32:28;1669:39;;1583:132;:::o;949:922:30:-;1293:14;1287:4;1281;1268:40;1513:4;1507;1491:14;1485:4;1469:14;1462:5;1449:69;1598:16;1592:4;1586;1571:44;1636:6;1703:69;;;;1824:16;1818:4;1811:30;1703:69;1741:16;1735:4;1728:30","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[ERC-1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa3066ff86b94128a9d3956a63a0511fa1aae41bd455772ab587b32ff322acb2e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf7b192fd82acf6187970c80548f624b1b9c80425b62fa49e7fdb538a52de049\",\"dweb:/ipfs/QmWXG1YCde1tqDYTbNwjkZDWVgPEjzaQGSDqWkyKLzaNua\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0x80935e4fae2c414f4e7789e13a820d06901182a5733ab006f8d68b5b09db993f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://752d991d6ca1087587b48103bc623f74888054f58581ff29166d90889c4765c5\",\"dweb:/ipfs/QmRBsa6K2ChKxVWYY54YiyYhDBPbmY5HyKCtij5LoWh56o\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710\",\"dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol\":{\"keccak256\":\"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56\",\"dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `data` is empty, `msg.value` must be zero."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":"ERC1967Proxy"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0xa3066ff86b94128a9d3956a63a0511fa1aae41bd455772ab587b32ff322acb2e","urls":["bzz-raw://bf7b192fd82acf6187970c80548f624b1b9c80425b62fa49e7fdb538a52de049","dweb:/ipfs/QmWXG1YCde1tqDYTbNwjkZDWVgPEjzaQGSDqWkyKLzaNua"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0x80935e4fae2c414f4e7789e13a820d06901182a5733ab006f8d68b5b09db993f","urls":["bzz-raw://752d991d6ca1087587b48103bc623f74888054f58581ff29166d90889c4765c5","dweb:/ipfs/QmRBsa6K2ChKxVWYY54YiyYhDBPbmY5HyKCtij5LoWh56o"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346","urls":["bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710","dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol":{"keccak256":"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583","urls":["bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56","dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","id":40451,"exportedSymbols":{"ERC1967Proxy":[40450],"ERC1967Utils":[40744],"Proxy":[40780]},"nodeType":"SourceUnit","src":"114:1604:28","nodes":[{"id":40414,"nodeType":"PragmaDirective","src":"114:24:28","nodes":[],"literals":["solidity","^","0.8",".22"]},{"id":40416,"nodeType":"ImportDirective","src":"140:35:28","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"../Proxy.sol","nameLocation":"-1:-1:-1","scope":40451,"sourceUnit":40781,"symbolAliases":[{"foreign":{"id":40415,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40780,"src":"148:5:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":40418,"nodeType":"ImportDirective","src":"176:48:28","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"./ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":40451,"sourceUnit":40745,"symbolAliases":[{"foreign":{"id":40417,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"184:12:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":40450,"nodeType":"ContractDefinition","src":"600:1117:28","nodes":[{"id":40437,"nodeType":"FunctionDefinition","src":"1081:133:28","nodes":[],"body":{"id":40436,"nodeType":"Block","src":"1145:69:28","nodes":[],"statements":[{"expression":{"arguments":[{"id":40432,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40424,"src":"1185:14:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40433,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40426,"src":"1201:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40429,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"1155:12:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$40744_$","typeString":"type(library ERC1967Utils)"}},"id":40431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1168:16:28","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":40559,"src":"1155:29:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":40434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1155:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40435,"nodeType":"ExpressionStatement","src":"1155:52:28"}]},"documentation":{"id":40422,"nodeType":"StructuredDocumentation","src":"637:439:28","text":" @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.\n If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an\n encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\n Requirements:\n - If `data` is empty, `msg.value` must be zero."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":40427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40424,"mutability":"mutable","name":"implementation","nameLocation":"1101:14:28","nodeType":"VariableDeclaration","scope":40437,"src":"1093:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40423,"name":"address","nodeType":"ElementaryTypeName","src":"1093:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40426,"mutability":"mutable","name":"_data","nameLocation":"1130:5:28","nodeType":"VariableDeclaration","scope":40437,"src":"1117:18:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40425,"name":"bytes","nodeType":"ElementaryTypeName","src":"1117:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1092:44:28"},"returnParameters":{"id":40428,"nodeType":"ParameterList","parameters":[],"src":"1145:0:28"},"scope":40450,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":40449,"nodeType":"FunctionDefinition","src":"1583:132:28","nodes":[],"body":{"id":40448,"nodeType":"Block","src":"1659:56:28","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40444,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40744,"src":"1676:12:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$40744_$","typeString":"type(library ERC1967Utils)"}},"id":40445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1689:17:28","memberName":"getImplementation","nodeType":"MemberAccess","referencedDeclaration":40496,"src":"1676:30:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":40446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1676:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":40443,"id":40447,"nodeType":"Return","src":"1669:39:28"}]},"baseFunctions":[40761],"documentation":{"id":40438,"nodeType":"StructuredDocumentation","src":"1220:358:28","text":" @dev Returns the current implementation address.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\n the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"1592:15:28","overrides":{"id":40440,"nodeType":"OverrideSpecifier","overrides":[],"src":"1632:8:28"},"parameters":{"id":40439,"nodeType":"ParameterList","parameters":[],"src":"1607:2:28"},"returnParameters":{"id":40443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40442,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40449,"src":"1650:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40441,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1649:9:28"},"scope":40450,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":40420,"name":"Proxy","nameLocations":["625:5:28"],"nodeType":"IdentifierPath","referencedDeclaration":40780,"src":"625:5:28"},"id":40421,"nodeType":"InheritanceSpecifier","src":"625:5:28"}],"canonicalName":"ERC1967Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":40419,"nodeType":"StructuredDocumentation","src":"226:373:28","text":" @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n implementation address that can be changed. This address is stored in storage in the location specified by\n https://eips.ethereum.org/EIPS/eip-1967[ERC-1967], so that it doesn't conflict with the storage layout of the\n implementation behind the proxy."},"fullyImplemented":true,"linearizedBaseContracts":[40450,40780],"name":"ERC1967Proxy","nameLocation":"609:12:28","scope":40451,"usedErrors":[40470,40483,41236,41627],"usedEvents":[40389]}],"license":"MIT"},"id":28} \ No newline at end of file diff --git a/crates/contracts/abi/IUniversalTimestamps.json b/crates/contracts/abi/IUniversalTimestamps.json index 376ce99..9a80366 100644 --- a/crates/contracts/abi/IUniversalTimestamps.json +++ b/crates/contracts/abi/IUniversalTimestamps.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"attest","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"timestamp","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Attested","inputs":[{"name":"root","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"attest(bytes32)":"23c3617f","timestamp(bytes32)":"4d003070"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IUniversalTimestamps.sol\":\"IUniversalTimestamps\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"contracts/IUniversalTimestamps.sol\":{\"keccak256\":\"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf\",\"dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Attested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"attest"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"view","type":"function","name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/IUniversalTimestamps.sol":"IUniversalTimestamps"},"evmVersion":"cancun","libraries":{}},"sources":{"contracts/IUniversalTimestamps.sol":{"keccak256":"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0","urls":["bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf","dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/IUniversalTimestamps.sol","id":187,"exportedSymbols":{"IUniversalTimestamps":[186]},"nodeType":"SourceUnit","src":"33:262:1","nodes":[{"id":165,"nodeType":"PragmaDirective","src":"33:24:1","nodes":[],"literals":["solidity","^","0.8",".24"]},{"id":186,"nodeType":"ContractDefinition","src":"59:235:1","nodes":[{"id":173,"nodeType":"EventDefinition","src":"96:80:1","nodes":[],"anonymous":false,"eventSelector":"61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a","name":"Attested","nameLocation":"102:8:1","parameters":{"id":172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":167,"indexed":true,"mutability":"mutable","name":"root","nameLocation":"127:4:1","nodeType":"VariableDeclaration","scope":173,"src":"111:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":166,"name":"bytes32","nodeType":"ElementaryTypeName","src":"111:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":169,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"149:6:1","nodeType":"VariableDeclaration","scope":173,"src":"133:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":168,"name":"address","nodeType":"ElementaryTypeName","src":"133:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":171,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"165:9:1","nodeType":"VariableDeclaration","scope":173,"src":"157:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":170,"name":"uint256","nodeType":"ElementaryTypeName","src":"157:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"110:65:1"}},{"id":178,"nodeType":"FunctionDefinition","src":"182:39:1","nodes":[],"functionSelector":"23c3617f","implemented":false,"kind":"function","modifiers":[],"name":"attest","nameLocation":"191:6:1","parameters":{"id":176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"mutability":"mutable","name":"root","nameLocation":"206:4:1","nodeType":"VariableDeclaration","scope":178,"src":"198:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"198:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"197:14:1"},"returnParameters":{"id":177,"nodeType":"ParameterList","parameters":[],"src":"220:0:1"},"scope":186,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":185,"nodeType":"FunctionDefinition","src":"227:65:1","nodes":[],"functionSelector":"4d003070","implemented":false,"kind":"function","modifiers":[],"name":"timestamp","nameLocation":"236:9:1","parameters":{"id":181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"root","nameLocation":"254:4:1","nodeType":"VariableDeclaration","scope":185,"src":"246:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":179,"name":"bytes32","nodeType":"ElementaryTypeName","src":"246:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"245:14:1"},"returnParameters":{"id":184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":185,"src":"283:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":182,"name":"uint256","nodeType":"ElementaryTypeName","src":"283:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"282:9:1"},"scope":186,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[],"canonicalName":"IUniversalTimestamps","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"linearizedBaseContracts":[186],"name":"IUniversalTimestamps","nameLocation":"69:20:1","scope":187,"usedErrors":[],"usedEvents":[173]}],"license":"MIT"},"id":1} \ No newline at end of file +{"abi":[{"type":"function","name":"attest","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"timestamp","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Attested","inputs":[{"name":"root","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"attest(bytes32)":"23c3617f","timestamp(bytes32)":"4d003070"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IUniversalTimestamps.sol\":\"IUniversalTimestamps\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"contracts/IUniversalTimestamps.sol\":{\"keccak256\":\"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf\",\"dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Attested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"attest"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"view","type":"function","name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"contracts/IUniversalTimestamps.sol":"IUniversalTimestamps"},"evmVersion":"cancun","libraries":{}},"sources":{"contracts/IUniversalTimestamps.sol":{"keccak256":"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0","urls":["bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf","dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/IUniversalTimestamps.sol","id":187,"exportedSymbols":{"IUniversalTimestamps":[186]},"nodeType":"SourceUnit","src":"33:262:1","nodes":[{"id":165,"nodeType":"PragmaDirective","src":"33:24:1","nodes":[],"literals":["solidity","^","0.8",".24"]},{"id":186,"nodeType":"ContractDefinition","src":"59:235:1","nodes":[{"id":173,"nodeType":"EventDefinition","src":"96:80:1","nodes":[],"anonymous":false,"eventSelector":"61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a","name":"Attested","nameLocation":"102:8:1","parameters":{"id":172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":167,"indexed":true,"mutability":"mutable","name":"root","nameLocation":"127:4:1","nodeType":"VariableDeclaration","scope":173,"src":"111:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":166,"name":"bytes32","nodeType":"ElementaryTypeName","src":"111:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":169,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"149:6:1","nodeType":"VariableDeclaration","scope":173,"src":"133:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":168,"name":"address","nodeType":"ElementaryTypeName","src":"133:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":171,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"165:9:1","nodeType":"VariableDeclaration","scope":173,"src":"157:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":170,"name":"uint256","nodeType":"ElementaryTypeName","src":"157:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"110:65:1"}},{"id":178,"nodeType":"FunctionDefinition","src":"182:39:1","nodes":[],"functionSelector":"23c3617f","implemented":false,"kind":"function","modifiers":[],"name":"attest","nameLocation":"191:6:1","parameters":{"id":176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"mutability":"mutable","name":"root","nameLocation":"206:4:1","nodeType":"VariableDeclaration","scope":178,"src":"198:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"198:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"197:14:1"},"returnParameters":{"id":177,"nodeType":"ParameterList","parameters":[],"src":"220:0:1"},"scope":186,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":185,"nodeType":"FunctionDefinition","src":"227:65:1","nodes":[],"functionSelector":"4d003070","implemented":false,"kind":"function","modifiers":[],"name":"timestamp","nameLocation":"236:9:1","parameters":{"id":181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"root","nameLocation":"254:4:1","nodeType":"VariableDeclaration","scope":185,"src":"246:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":179,"name":"bytes32","nodeType":"ElementaryTypeName","src":"246:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"245:14:1"},"returnParameters":{"id":184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":185,"src":"283:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":182,"name":"uint256","nodeType":"ElementaryTypeName","src":"283:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"282:9:1"},"scope":186,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[],"canonicalName":"IUniversalTimestamps","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"linearizedBaseContracts":[186],"name":"IUniversalTimestamps","nameLocation":"69:20:1","scope":187,"usedErrors":[],"usedEvents":[173]}],"license":"MIT"},"id":1} \ No newline at end of file diff --git a/crates/contracts/abi/UniversalTimestamps.json b/crates/contracts/abi/UniversalTimestamps.json index b0a275b..1110a7d 100644 --- a/crates/contracts/abi/UniversalTimestamps.json +++ b/crates/contracts/abi/UniversalTimestamps.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"attest","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"timestamp","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"Attested","inputs":[{"name":"root","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001e1565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001c6565b60405180910390a15b50565b5f80620001706200017960201b60201c565b90508091505090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f67ffffffffffffffff82169050919050565b620001c081620001a2565b82525050565b5f602082019050620001db5f830184620001b5565b92915050565b608051611362620002085f395f818161060301528181610658015261081201526113625ff3fe608060405260043610610085575f3560e01c8063715018a611610058578063715018a6146101335780638da5cb5b14610149578063ad3cb1cc14610173578063c4d66de81461019d578063f2fde38b146101c557610085565b806323c3617f146100895780634d003070146100b15780634f1ef286146100ed57806352d1902d14610109575b5f80fd5b348015610094575f80fd5b506100af60048036038101906100aa9190610eb6565b6101ed565b005b3480156100bc575f80fd5b506100d760048036038101906100d29190610eb6565b6102c0565b6040516100e49190610ef9565b60405180910390f35b610107600480360381019061010291906110a8565b6102e2565b005b348015610114575f80fd5b5061011d610301565b60405161012a9190611111565b60405180910390f35b34801561013e575f80fd5b50610147610332565b005b348015610154575f80fd5b5061015d610345565b60405161016a9190611139565b60405180910390f35b34801561017e575f80fd5b5061018761037a565b60405161019491906111cc565b60405180910390f35b3480156101a8575f80fd5b506101c360048036038101906101be91906111ec565b6103b3565b005b3480156101d0575f80fd5b506101eb60048036038101906101e691906111ec565b610534565b005b5f801b8103610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022890611261565b60405180910390fd5b5f61023a6105b8565b90505f815f015f8481526020019081526020015f2054036102bc5742815f015f8481526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff16827f61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a426040516102b39190610ef9565b60405180910390a35b5050565b5f6102c96105b8565b5f015f8381526020019081526020015f20549050919050565b6102ea610601565b6102f3826106e7565b6102fd82826106f2565b5050565b5f61030a610810565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b61033a610897565b6103435f61091e565b565b5f8061034f6109ef565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f6103bc610a16565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff161480156104045750825b90505f60018367ffffffffffffffff1614801561043757505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610445575080155b1561047c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156104c9576001855f0160086101000a81548160ff0219169083151502179055505b6104d286610a29565b831561052c575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161052391906112d4565b60405180910390a15b505050505050565b61053c610897565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105ac575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105a39190611139565b60405180910390fd5b6105b58161091e565b50565b5f806105f86040518060400160405280601f81526020017f7574732e73746f726167652e556e6976657273616c54696d657374616d707300815250610a3d565b90508091505090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806106ae57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610695610a59565b73ffffffffffffffffffffffffffffffffffffffff1614155b156106e5576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6106ef610897565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561075a57506040513d601f19601f820116820180604052508101906107579190611301565b60015b61079b57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016107929190611139565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461080157806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016107f89190611111565b60405180910390fd5b61080b8383610aac565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610895576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61089f610b1e565b73ffffffffffffffffffffffffffffffffffffffff166108bd610345565b73ffffffffffffffffffffffffffffffffffffffff161461091c576108e0610b1e565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109139190611139565b60405180910390fd5b565b5f6109276109ef565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f80610a20610b25565b90508091505090565b610a31610b4e565b610a3a81610b8e565b50565b5f600182516020840120035f5260ff1960205f20169050919050565b5f610a857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b610c12565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ab582610c1b565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115610b1157610b0b8282610ce4565b50610b1a565b610b19610dd5565b5b5050565b5f33905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b610b56610e11565b610b8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610b96610b4e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c06575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bfd9190611139565b60405180910390fd5b610c0f8161091e565b50565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03610c7657806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610c6d9190611139565b60405180910390fd5b80610ca27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b610c12565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f610cf18484610e2f565b9050808015610d2757505f610d04610e43565b1180610d2657505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b15610d3c57610d34610e4a565b915050610dcf565b8015610d7f57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610d769190611139565b60405180910390fd5b5f610d88610e43565b1115610d9b57610d96610e67565b610dcd565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f341115610e0f576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610e1a610a16565b5f0160089054906101000a900460ff16905090565b5f805f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610e9581610e83565b8114610e9f575f80fd5b50565b5f81359050610eb081610e8c565b92915050565b5f60208284031215610ecb57610eca610e7b565b5b5f610ed884828501610ea2565b91505092915050565b5f819050919050565b610ef381610ee1565b82525050565b5f602082019050610f0c5f830184610eea565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f3b82610f12565b9050919050565b610f4b81610f31565b8114610f55575f80fd5b50565b5f81359050610f6681610f42565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fba82610f74565b810181811067ffffffffffffffff82111715610fd957610fd8610f84565b5b80604052505050565b5f610feb610e72565b9050610ff78282610fb1565b919050565b5f67ffffffffffffffff82111561101657611015610f84565b5b61101f82610f74565b9050602081019050919050565b828183375f83830152505050565b5f61104c61104784610ffc565b610fe2565b90508281526020810184848401111561106857611067610f70565b5b61107384828561102c565b509392505050565b5f82601f83011261108f5761108e610f6c565b5b813561109f84826020860161103a565b91505092915050565b5f80604083850312156110be576110bd610e7b565b5b5f6110cb85828601610f58565b925050602083013567ffffffffffffffff8111156110ec576110eb610e7f565b5b6110f88582860161107b565b9150509250929050565b61110b81610e83565b82525050565b5f6020820190506111245f830184611102565b92915050565b61113381610f31565b82525050565b5f60208201905061114c5f83018461112a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561118957808201518184015260208101905061116e565b5f8484015250505050565b5f61119e82611152565b6111a8818561115c565b93506111b881856020860161116c565b6111c181610f74565b840191505092915050565b5f6020820190508181035f8301526111e48184611194565b905092915050565b5f6020828403121561120157611200610e7b565b5b5f61120e84828501610f58565b91505092915050565b7f5554533a20526f6f742063616e6e6f74206265207a65726f00000000000000005f82015250565b5f61124b60188361115c565b915061125682611217565b602082019050919050565b5f6020820190508181035f8301526112788161123f565b9050919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f6112be6112b96112b48461127f565b61129b565b611288565b9050919050565b6112ce816112a4565b82525050565b5f6020820190506112e75f8301846112c5565b92915050565b5f815190506112fb81610e8c565b92915050565b5f6020828403121561131657611315610e7b565b5b5f611323848285016112ed565b9150509291505056fea2646970667358221220b5dffba878310fe071e95c50a88c1cac2cc7d9f7aa1862538e26902c7c39daed64736f6c63430008180033","sourceMap":"1042:1794:2:-:0;;;1084:4:33;1041:48;;;;;;;;;1489:53:2;;;;;;;;;;1513:22;:20;;;:22;;:::i;:::-;1042:1794;;7709:422:32;7824:30;7857:26;:24;;;:26;;:::i;:::-;7824:59;;7898:1;:15;;;;;;;;;;;;7894:76;;;7936:23;;;;;;;;;;;;;;7894:76;8001:16;7983:34;;:1;:14;;;;;;;;;;;;:34;;;7979:146;;8050:16;8033:1;:14;;;:33;;;;;;;;;;;;;;;;;;8085:29;8097:16;8085:29;;;;;;:::i;:::-;;;;;;;;7979:146;7758:373;7709:422::o;9071:205::-;9129:30;9171:12;9186:27;:25;;;:27;;:::i;:::-;9171:42;;9256:4;9246:14;;9232:38;9071:205;:::o;8819:122::-;8887:7;3147:66;8913:21;;8906:28;;8819:122;:::o;7:101:39:-;43:7;83:18;76:5;72:30;61:41;;7:101;;;:::o;114:115::-;199:23;216:5;199:23;:::i;:::-;194:3;187:36;114:115;;:::o;235:218::-;326:4;364:2;353:9;349:18;341:26;;377:69;443:1;432:9;428:17;419:6;377:69;:::i;:::-;235:218;;;;:::o;1042:1794:2:-;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610085575f3560e01c8063715018a611610058578063715018a6146101335780638da5cb5b14610149578063ad3cb1cc14610173578063c4d66de81461019d578063f2fde38b146101c557610085565b806323c3617f146100895780634d003070146100b15780634f1ef286146100ed57806352d1902d14610109575b5f80fd5b348015610094575f80fd5b506100af60048036038101906100aa9190610eb6565b6101ed565b005b3480156100bc575f80fd5b506100d760048036038101906100d29190610eb6565b6102c0565b6040516100e49190610ef9565b60405180910390f35b610107600480360381019061010291906110a8565b6102e2565b005b348015610114575f80fd5b5061011d610301565b60405161012a9190611111565b60405180910390f35b34801561013e575f80fd5b50610147610332565b005b348015610154575f80fd5b5061015d610345565b60405161016a9190611139565b60405180910390f35b34801561017e575f80fd5b5061018761037a565b60405161019491906111cc565b60405180910390f35b3480156101a8575f80fd5b506101c360048036038101906101be91906111ec565b6103b3565b005b3480156101d0575f80fd5b506101eb60048036038101906101e691906111ec565b610534565b005b5f801b8103610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022890611261565b60405180910390fd5b5f61023a6105b8565b90505f815f015f8481526020019081526020015f2054036102bc5742815f015f8481526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff16827f61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a426040516102b39190610ef9565b60405180910390a35b5050565b5f6102c96105b8565b5f015f8381526020019081526020015f20549050919050565b6102ea610601565b6102f3826106e7565b6102fd82826106f2565b5050565b5f61030a610810565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b61033a610897565b6103435f61091e565b565b5f8061034f6109ef565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f6103bc610a16565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff161480156104045750825b90505f60018367ffffffffffffffff1614801561043757505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610445575080155b1561047c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156104c9576001855f0160086101000a81548160ff0219169083151502179055505b6104d286610a29565b831561052c575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161052391906112d4565b60405180910390a15b505050505050565b61053c610897565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105ac575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105a39190611139565b60405180910390fd5b6105b58161091e565b50565b5f806105f86040518060400160405280601f81526020017f7574732e73746f726167652e556e6976657273616c54696d657374616d707300815250610a3d565b90508091505090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806106ae57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610695610a59565b73ffffffffffffffffffffffffffffffffffffffff1614155b156106e5576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6106ef610897565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561075a57506040513d601f19601f820116820180604052508101906107579190611301565b60015b61079b57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016107929190611139565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461080157806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016107f89190611111565b60405180910390fd5b61080b8383610aac565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610895576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61089f610b1e565b73ffffffffffffffffffffffffffffffffffffffff166108bd610345565b73ffffffffffffffffffffffffffffffffffffffff161461091c576108e0610b1e565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109139190611139565b60405180910390fd5b565b5f6109276109ef565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f80610a20610b25565b90508091505090565b610a31610b4e565b610a3a81610b8e565b50565b5f600182516020840120035f5260ff1960205f20169050919050565b5f610a857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b610c12565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ab582610c1b565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115610b1157610b0b8282610ce4565b50610b1a565b610b19610dd5565b5b5050565b5f33905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b610b56610e11565b610b8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610b96610b4e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c06575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bfd9190611139565b60405180910390fd5b610c0f8161091e565b50565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03610c7657806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610c6d9190611139565b60405180910390fd5b80610ca27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b610c12565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f610cf18484610e2f565b9050808015610d2757505f610d04610e43565b1180610d2657505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b15610d3c57610d34610e4a565b915050610dcf565b8015610d7f57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610d769190611139565b60405180910390fd5b5f610d88610e43565b1115610d9b57610d96610e67565b610dcd565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f341115610e0f576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610e1a610a16565b5f0160089054906101000a900460ff16905090565b5f805f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610e9581610e83565b8114610e9f575f80fd5b50565b5f81359050610eb081610e8c565b92915050565b5f60208284031215610ecb57610eca610e7b565b5b5f610ed884828501610ea2565b91505092915050565b5f819050919050565b610ef381610ee1565b82525050565b5f602082019050610f0c5f830184610eea565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f3b82610f12565b9050919050565b610f4b81610f31565b8114610f55575f80fd5b50565b5f81359050610f6681610f42565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fba82610f74565b810181811067ffffffffffffffff82111715610fd957610fd8610f84565b5b80604052505050565b5f610feb610e72565b9050610ff78282610fb1565b919050565b5f67ffffffffffffffff82111561101657611015610f84565b5b61101f82610f74565b9050602081019050919050565b828183375f83830152505050565b5f61104c61104784610ffc565b610fe2565b90508281526020810184848401111561106857611067610f70565b5b61107384828561102c565b509392505050565b5f82601f83011261108f5761108e610f6c565b5b813561109f84826020860161103a565b91505092915050565b5f80604083850312156110be576110bd610e7b565b5b5f6110cb85828601610f58565b925050602083013567ffffffffffffffff8111156110ec576110eb610e7f565b5b6110f88582860161107b565b9150509250929050565b61110b81610e83565b82525050565b5f6020820190506111245f830184611102565b92915050565b61113381610f31565b82525050565b5f60208201905061114c5f83018461112a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561118957808201518184015260208101905061116e565b5f8484015250505050565b5f61119e82611152565b6111a8818561115c565b93506111b881856020860161116c565b6111c181610f74565b840191505092915050565b5f6020820190508181035f8301526111e48184611194565b905092915050565b5f6020828403121561120157611200610e7b565b5b5f61120e84828501610f58565b91505092915050565b7f5554533a20526f6f742063616e6e6f74206265207a65726f00000000000000005f82015250565b5f61124b60188361115c565b915061125682611217565b602082019050919050565b5f6020820190508181035f8301526112788161123f565b9050919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f6112be6112b96112b48461127f565b61129b565b611288565b9050919050565b6112ce816112a4565b82525050565b5f6020820190506112e75f8301846112c5565b92915050565b5f815190506112fb81610e8c565b92915050565b5f6020828403121561131657611315610e7b565b5b5f611323848285016112ed565b9150509291505056fea2646970667358221220b5dffba878310fe071e95c50a88c1cac2cc7d9f7aa1862538e26902c7c39daed64736f6c63430008180033","sourceMap":"1042:1794:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2140:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1896:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3911:214:33;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3466:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3176:101:22;;;;;;;;;;;;;:::i;:::-;;2462:144;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1732:58:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1548:106:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3426:215:22;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2140:354:2;2213:1;2205:10;;2197:4;:18;2189:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2255:36;2294:32;:30;:32::i;:::-;2255:71;;2362:1;2340;:12;;:18;2353:4;2340:18;;;;;;;;;;;;:23;2336:152;;2400:15;2379:1;:12;;:18;2392:4;2379:18;;;;;;;;;;;:36;;;;2449:10;2434:43;;2443:4;2434:43;2461:15;2434:43;;;;;;:::i;:::-;;;;;;;;2336:152;2179:315;2140:354;:::o;1896:138::-;1952:7;1978:32;:30;:32::i;:::-;:43;;:49;2022:4;1978:49;;;;;;;;;;;;1971:56;;1896:138;;;:::o;3911:214:33:-;2568:13;:11;:13::i;:::-;4026:36:::1;4044:17;4026;:36::i;:::-;4072:46;4094:17;4113:4;4072:21;:46::i;:::-;3911:214:::0;;:::o;3466:126::-;3527:7;2839:20;:18;:20::i;:::-;811:66:29::1;3553:32:33;;3546:39;;3466:126:::0;:::o;3176:101:22:-;2355:13;:11;:13::i;:::-;3240:30:::1;3267:1;3240:18;:30::i;:::-;3176:101::o:0;2462:144::-;2508:7;2527:24;2554:20;:18;:20::i;:::-;2527:47;;2591:1;:8;;;;;;;;;;;;2584:15;;;2462:144;:::o;1732:58:33:-;;;;;;;;;;;;;;;;;;;:::o;1548:106:2:-;4158:30:32;4191:26;:24;:26::i;:::-;4158:59;;4279:19;4302:1;:15;;;;;;;;;;;;4301:16;4279:38;;4327:18;4348:1;:14;;;;;;;;;;;;4327:35;;4704:17;4739:1;4724:11;:16;;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4803:1;4788:11;:16;;;:50;;;;;4837:1;4816:4;4808:25;;;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;;;;;;;;;;;;;4849:91;4966:1;4949;:14;;;:18;;;;;;;;;;;;;;;;;;4981:14;4977:67;;;5029:4;5011:1;:15;;;:22;;;;;;;;;;;;;;;;;;4977:67;1619:28:2::1;1634:12;1619:14;:28::i;:::-;5068:14:32::0;5064:101;;;5116:5;5098:1;:15;;;:23;;;;;;;;;;;;;;;;;;5140:14;5152:1;5140:14;;;;;;:::i;:::-;;;;;;;;5064:101;4092:1079;;;;;1548:106:2;:::o;3426:215:22:-;2355:13;:11;:13::i;:::-;3530:1:::1;3510:22;;:8;:22;;::::0;3506:91:::1;;3583:1;3555:31;;;;;;;;;;;:::i;:::-;;;;;;;;3506:91;3606:28;3625:8;3606:18;:28::i;:::-;3426:215:::0;:::o;1660:230:2:-;1724:36;1772:12;1787:24;:10;;;;;;;;;;;;;;;;;:22;:24::i;:::-;1772:39;;1870:4;1860:14;;1846:38;1660:230;:::o;4328:312:33:-;4417:6;4400:23;;4408:4;4400:23;;;:120;;;;4514:6;4478:42;;:32;:30;:32::i;:::-;:42;;;;4400:120;4383:251;;;4594:29;;;;;;;;;;;;;;4383:251;4328:312::o;2750:84:2:-;2355:13:22;:11;:13::i;:::-;2750:84:2;:::o;5782:538:33:-;5899:17;5881:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5877:437;;6285:17;6243:60;;;;;;;;;;;:::i;:::-;;;;;;;;5877:437;811:66:29;5983:32:33;;5975:4;:40;5971:120;;6071:4;6042:34;;;;;;;;;;;:::i;:::-;;;;;;;;5971:120;6104:54;6134:17;6153:4;6104:29;:54::i;:::-;5934:235;5782:538;;:::o;4757:213::-;4840:6;4823:23;;4831:4;4823:23;;;4819:145;;4924:29;;;;;;;;;;;;;;4819:145;4757:213::o;2679:162:22:-;2749:12;:10;:12::i;:::-;2738:23;;:7;:5;:7::i;:::-;:23;;;2734:101;;2811:12;:10;:12::i;:::-;2784:40;;;;;;;;;;;:::i;:::-;;;;;;;;2734:101;2679:162::o;3795:248::-;3868:24;3895:20;:18;:20::i;:::-;3868:47;;3925:16;3944:1;:8;;;;;;;;;;;;3925:27;;3973:8;3962:1;:8;;;:19;;;;;;;;;;;;;;;;;;4027:8;3996:40;;4017:8;3996:40;;;;;;;;;;;;3858:185;;3795:248;:::o;1213:159::-;1265:24;1334:22;1324:32;;1213:159;:::o;9071:205:32:-;9129:30;9171:12;9186:27;:25;:27::i;:::-;9171:42;;9256:4;9246:14;;9232:38;9071:205;:::o;1868:127:22:-;6929:20:32;:18;:20::i;:::-;1950:38:22::1;1975:12;1950:24;:38::i;:::-;1868:127:::0;:::o;1701:277:37:-;1770:12;1901:1;1888:9;1882:16;1875:4;1864:9;1860:20;1850:49;1846:57;1840:4;1833:71;1956:4;1952:9;1945:4;1939;1929:21;1925:37;1917:45;;1701:277;;;:::o;1441:138:29:-;1493:7;1519:47;811:66;1546:19;;1519:26;:47::i;:::-;:53;;;;;;;;;;;;1512:60;;1441:138;:::o;2264:344::-;2355:37;2374:17;2355:18;:37::i;:::-;2425:17;2407:36;;;;;;;;;;;;2472:1;2458:4;:11;:15;2454:148;;;2489:53;2518:17;2537:4;2489:28;:53::i;:::-;;2454:148;;;2573:18;:16;:18::i;:::-;2454:148;2264:344;;:::o;908:96:25:-;961:7;987:10;980:17;;908:96;:::o;8819:122:32:-;8887:7;3147:66;8913:21;;8906:28;;8819:122;:::o;7082:141::-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;;;;;;;;;;;;;7144:73;7082:141::o;2001:235:22:-;6929:20:32;:18;:20::i;:::-;2121:1:22::1;2097:26;;:12;:26;;::::0;2093:95:::1;;2174:1;2146:31;;;;;;;;;;;:::i;:::-;;;;;;;;2093:95;2197:32;2216:12;2197:18;:32::i;:::-;2001:235:::0;:::o;1899:163:38:-;1960:21;2042:4;2032:14;;1899:163;;;:::o;1671:281:29:-;1781:1;1748:17;:29;;;:34;1744:119;;1834:17;1805:47;;;;;;;;;;;:::i;:::-;;;;;;;;1744:119;1928:17;1872:47;811:66;1899:19;;1872:26;:47::i;:::-;:53;;;:73;;;;;;;;;;;;;;;;;;1671:281;:::o;4691:549:34:-;4774:12;4798;4813:47;4847:6;4855:4;4813:33;:47::i;:::-;4798:62;;4874:7;:72;;;;;4918:1;4886:29;:27;:29::i;:::-;:33;:59;;;;4944:1;4923:6;:18;;;:22;4886:59;4874:72;4870:364;;;4969:25;:23;:25::i;:::-;4962:32;;;;;4870:364;5015:7;5011:223;;;5062:6;5045:24;;;;;;;;;;;:::i;:::-;;;;;;;;5011:223;5122:1;5090:29;:27;:29::i;:::-;:33;5086:148;;;5139:27;:25;:27::i;:::-;5086:148;;;5204:19;;;;;;;;;;;;;;5086:148;4788:452;4691:549;;;;;:::o;6113:122:29:-;6175:1;6163:9;:13;6159:70;;;6199:19;;;;;;;;;;;;;;6159:70;6113:122::o;8485:120:32:-;8535:4;8558:26;:24;:26::i;:::-;:40;;;;;;;;;;;;8551:47;;8485:120;:::o;3383:242:36:-;3466:12;3604:4;3598;3591;3585:11;3578:4;3572;3568:15;3560:6;3553:5;3540:69;3529:80;;3383:242;;;;:::o;4463:152::-;4512:12;4583:16;4575:24;;4463:152;:::o;4698:334::-;4743:19;4829:4;4823:11;4813:21;;4862:16;4854:6;4847:32;4932:16;4926:4;4919;4911:6;4907:17;4892:57;4997:16;4991:4;4987:27;4979:6;4975:40;4969:4;4962:54;4698:334;:::o;5099:223::-;5203:4;5197:11;5247:16;5241:4;5236:3;5221:43;5289:16;5284:3;5277:29;7:75:39;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:77::-;1062:7;1091:5;1080:16;;1025:77;;;:::o;1108:118::-;1195:24;1213:5;1195:24;:::i;:::-;1190:3;1183:37;1108:118;;:::o;1232:222::-;1325:4;1363:2;1352:9;1348:18;1340:26;;1376:71;1444:1;1433:9;1429:17;1420:6;1376:71;:::i;:::-;1232:222;;;;:::o;1460:126::-;1497:7;1537:42;1530:5;1526:54;1515:65;;1460:126;;;:::o;1592:96::-;1629:7;1658:24;1676:5;1658:24;:::i;:::-;1647:35;;1592:96;;;:::o;1694:122::-;1767:24;1785:5;1767:24;:::i;:::-;1760:5;1757:35;1747:63;;1806:1;1803;1796:12;1747:63;1694:122;:::o;1822:139::-;1868:5;1906:6;1893:20;1884:29;;1922:33;1949:5;1922:33;:::i;:::-;1822:139;;;;:::o;1967:117::-;2076:1;2073;2066:12;2090:117;2199:1;2196;2189:12;2213:102;2254:6;2305:2;2301:7;2296:2;2289:5;2285:14;2281:28;2271:38;;2213:102;;;:::o;2321:180::-;2369:77;2366:1;2359:88;2466:4;2463:1;2456:15;2490:4;2487:1;2480:15;2507:281;2590:27;2612:4;2590:27;:::i;:::-;2582:6;2578:40;2720:6;2708:10;2705:22;2684:18;2672:10;2669:34;2666:62;2663:88;;;2731:18;;:::i;:::-;2663:88;2771:10;2767:2;2760:22;2550:238;2507:281;;:::o;2794:129::-;2828:6;2855:20;;:::i;:::-;2845:30;;2884:33;2912:4;2904:6;2884:33;:::i;:::-;2794:129;;;:::o;2929:307::-;2990:4;3080:18;3072:6;3069:30;3066:56;;;3102:18;;:::i;:::-;3066:56;3140:29;3162:6;3140:29;:::i;:::-;3132:37;;3224:4;3218;3214:15;3206:23;;2929:307;;;:::o;3242:146::-;3339:6;3334:3;3329;3316:30;3380:1;3371:6;3366:3;3362:16;3355:27;3242:146;;;:::o;3394:423::-;3471:5;3496:65;3512:48;3553:6;3512:48;:::i;:::-;3496:65;:::i;:::-;3487:74;;3584:6;3577:5;3570:21;3622:4;3615:5;3611:16;3660:3;3651:6;3646:3;3642:16;3639:25;3636:112;;;3667:79;;:::i;:::-;3636:112;3757:54;3804:6;3799:3;3794;3757:54;:::i;:::-;3477:340;3394:423;;;;;:::o;3836:338::-;3891:5;3940:3;3933:4;3925:6;3921:17;3917:27;3907:122;;3948:79;;:::i;:::-;3907:122;4065:6;4052:20;4090:78;4164:3;4156:6;4149:4;4141:6;4137:17;4090:78;:::i;:::-;4081:87;;3897:277;3836:338;;;;:::o;4180:652::-;4257:6;4265;4314:2;4302:9;4293:7;4289:23;4285:32;4282:119;;;4320:79;;:::i;:::-;4282:119;4440:1;4465:53;4510:7;4501:6;4490:9;4486:22;4465:53;:::i;:::-;4455:63;;4411:117;4595:2;4584:9;4580:18;4567:32;4626:18;4618:6;4615:30;4612:117;;;4648:79;;:::i;:::-;4612:117;4753:62;4807:7;4798:6;4787:9;4783:22;4753:62;:::i;:::-;4743:72;;4538:287;4180:652;;;;;:::o;4838:118::-;4925:24;4943:5;4925:24;:::i;:::-;4920:3;4913:37;4838:118;;:::o;4962:222::-;5055:4;5093:2;5082:9;5078:18;5070:26;;5106:71;5174:1;5163:9;5159:17;5150:6;5106:71;:::i;:::-;4962:222;;;;:::o;5190:118::-;5277:24;5295:5;5277:24;:::i;:::-;5272:3;5265:37;5190:118;;:::o;5314:222::-;5407:4;5445:2;5434:9;5430:18;5422:26;;5458:71;5526:1;5515:9;5511:17;5502:6;5458:71;:::i;:::-;5314:222;;;;:::o;5542:99::-;5594:6;5628:5;5622:12;5612:22;;5542:99;;;:::o;5647:169::-;5731:11;5765:6;5760:3;5753:19;5805:4;5800:3;5796:14;5781:29;;5647:169;;;;:::o;5822:246::-;5903:1;5913:113;5927:6;5924:1;5921:13;5913:113;;;6012:1;6007:3;6003:11;5997:18;5993:1;5988:3;5984:11;5977:39;5949:2;5946:1;5942:10;5937:15;;5913:113;;;6060:1;6051:6;6046:3;6042:16;6035:27;5884:184;5822:246;;;:::o;6074:377::-;6162:3;6190:39;6223:5;6190:39;:::i;:::-;6245:71;6309:6;6304:3;6245:71;:::i;:::-;6238:78;;6325:65;6383:6;6378:3;6371:4;6364:5;6360:16;6325:65;:::i;:::-;6415:29;6437:6;6415:29;:::i;:::-;6410:3;6406:39;6399:46;;6166:285;6074:377;;;;:::o;6457:313::-;6570:4;6608:2;6597:9;6593:18;6585:26;;6657:9;6651:4;6647:20;6643:1;6632:9;6628:17;6621:47;6685:78;6758:4;6749:6;6685:78;:::i;:::-;6677:86;;6457:313;;;;:::o;6776:329::-;6835:6;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6981:117;6776:329;;;;:::o;7111:174::-;7251:26;7247:1;7239:6;7235:14;7228:50;7111:174;:::o;7291:366::-;7433:3;7454:67;7518:2;7513:3;7454:67;:::i;:::-;7447:74;;7530:93;7619:3;7530:93;:::i;:::-;7648:2;7643:3;7639:12;7632:19;;7291:366;;;:::o;7663:419::-;7829:4;7867:2;7856:9;7852:18;7844:26;;7916:9;7910:4;7906:20;7902:1;7891:9;7887:17;7880:47;7944:131;8070:4;7944:131;:::i;:::-;7936:139;;7663:419;;;:::o;8088:85::-;8133:7;8162:5;8151:16;;8088:85;;;:::o;8179:101::-;8215:7;8255:18;8248:5;8244:30;8233:41;;8179:101;;;:::o;8286:60::-;8314:3;8335:5;8328:12;;8286:60;;;:::o;8352:156::-;8409:9;8442:60;8459:42;8468:32;8494:5;8468:32;:::i;:::-;8459:42;:::i;:::-;8442:60;:::i;:::-;8429:73;;8352:156;;;:::o;8514:145::-;8608:44;8646:5;8608:44;:::i;:::-;8603:3;8596:57;8514:145;;:::o;8665:236::-;8765:4;8803:2;8792:9;8788:18;8780:26;;8816:78;8891:1;8880:9;8876:17;8867:6;8816:78;:::i;:::-;8665:236;;;;:::o;8907:143::-;8964:5;8995:6;8989:13;8980:22;;9011:33;9038:5;9011:33;:::i;:::-;8907:143;;;;:::o;9056:351::-;9126:6;9175:2;9163:9;9154:7;9150:23;9146:32;9143:119;;;9181:79;;:::i;:::-;9143:119;9301:1;9326:64;9382:7;9373:6;9362:9;9358:22;9326:64;:::i;:::-;9316:74;;9272:128;9056:351;;;;:::o","linkReferences":{},"immutableReferences":{"41074":[{"start":1539,"length":32},{"start":1624,"length":32},{"start":2066,"length":32}]}},"methodIdentifiers":{"UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","attest(bytes32)":"23c3617f","initialize(address)":"c4d66de8","owner()":"8da5cb5b","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","timestamp(bytes32)":"4d003070","transferOwnership(address)":"f2fde38b","upgradeToAndCall(address,bytes)":"4f1ef286"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Records and exposes timestamps for attested Merkle roots using ERC-7201 namespaced storage (`uts.storage.UniversalTimestamps`) derived via {SlotDerivation}, and is implemented as a UUPS upgradeable contract via OpenZeppelin's Initializable, OwnableUpgradeable, and UUPSUpgradeable base contracts. Storage is kept in a dedicated namespaced struct to remain layout-compatible across upgrades, while upgrades are authorized by the contract owner through {_authorizeUpgrade}.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"attest(bytes32)\":{\"params\":{\"root\":\"The Merkle Root to be attested\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"UniversalTimestamps\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"attest(bytes32)\":{\"notice\":\"Attest Merkle Root\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/UniversalTimestamps.sol\":\"UniversalTimestamps\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"contracts/IUniversalTimestamps.sol\":{\"keccak256\":\"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf\",\"dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC\"]},\"contracts/UniversalTimestamps.sol\":{\"keccak256\":\"0xb1596ca55406c833dc01c604dd4d6fb3791a9f9cc0f4cad6292757abc52acb4b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c53b928701b425781b8bce6e51fc3414d33d9d32e3b192777b6c5157396bfa\",\"dweb:/ipfs/QmQHq55s3BHW4YEhBe8bRGmxFvSc6xhWF4pUub8is9oSkf\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed\",\"dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d\",\"dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e\",\"dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455\",\"dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34\",\"dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710\",\"dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol\":{\"keccak256\":\"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56\",\"dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x94045fd4f268edf2b2d01ef119268548c320366d6f5294ad30c1b8f9d4f5225f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edfda81f426f8948b3834115c21e83c48180e6db0d2a8cd2debb2185ed349337\",\"dweb:/ipfs/QmdYZneFyDAux1BuWQxLAdqtABrGS2k9WYCa7C9dvpKkWv\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Attested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"attest"},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"view","type":"function","name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"}],"devdoc":{"kind":"dev","methods":{"attest(bytes32)":{"params":{"root":"The Merkle Root to be attested"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"attest(bytes32)":{"notice":"Attest Merkle Root"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/UniversalTimestamps.sol":"UniversalTimestamps"},"evmVersion":"cancun","libraries":{}},"sources":{"contracts/IUniversalTimestamps.sol":{"keccak256":"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0","urls":["bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf","dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC"],"license":"MIT"},"contracts/UniversalTimestamps.sol":{"keccak256":"0xb1596ca55406c833dc01c604dd4d6fb3791a9f9cc0f4cad6292757abc52acb4b","urls":["bzz-raw://e8c53b928701b425781b8bce6e51fc3414d33d9d32e3b192777b6c5157396bfa","dweb:/ipfs/QmQHq55s3BHW4YEhBe8bRGmxFvSc6xhWF4pUub8is9oSkf"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14","urls":["bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed","dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16","urls":["bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d","dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf","urls":["bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e","dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d","urls":["bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455","dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b","urls":["bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422","dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a","urls":["bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34","dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346","urls":["bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710","dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol":{"keccak256":"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583","urls":["bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56","dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x94045fd4f268edf2b2d01ef119268548c320366d6f5294ad30c1b8f9d4f5225f","urls":["bzz-raw://edfda81f426f8948b3834115c21e83c48180e6db0d2a8cd2debb2185ed349337","dweb:/ipfs/QmdYZneFyDAux1BuWQxLAdqtABrGS2k9WYCa7C9dvpKkWv"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/UniversalTimestamps.sol","id":327,"exportedSymbols":{"IUniversalTimestamps":[186],"Initializable":[41058],"OwnableUpgradeable":[40327],"SlotDerivation":[41925],"UUPSUpgradeable":[41224],"UniversalTimestamps":[326]},"nodeType":"SourceUnit","src":"33:2804:2","nodes":[{"id":188,"nodeType":"PragmaDirective","src":"33:24:2","nodes":[],"literals":["solidity","^","0.8",".24"]},{"id":190,"nodeType":"ImportDirective","src":"59:96:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40332,"symbolAliases":[{"foreign":{"id":189,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41058,"src":"67:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":192,"nodeType":"ImportDirective","src":"156:101:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40328,"symbolAliases":[{"foreign":{"id":191,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40327,"src":"164:18:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":194,"nodeType":"ImportDirective","src":"258:100:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40336,"symbolAliases":[{"foreign":{"id":193,"name":"UUPSUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41224,"src":"266:15:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":196,"nodeType":"ImportDirective","src":"359:64:2","nodes":[],"absolutePath":"contracts/IUniversalTimestamps.sol","file":"./IUniversalTimestamps.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":187,"symbolAliases":[{"foreign":{"id":195,"name":"IUniversalTimestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"367:20:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":198,"nodeType":"ImportDirective","src":"424:80:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol","file":"@openzeppelin/contracts/utils/SlotDerivation.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":41926,"symbolAliases":[{"foreign":{"id":197,"name":"SlotDerivation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41925,"src":"432:14:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":326,"nodeType":"ContractDefinition","src":"1042:1794:2","nodes":[{"id":210,"nodeType":"UsingForDirective","src":"1153:32:2","nodes":[],"global":false,"libraryName":{"id":208,"name":"SlotDerivation","nameLocations":["1159:14:2"],"nodeType":"IdentifierPath","referencedDeclaration":41925,"src":"1159:14:2"},"typeName":{"id":209,"name":"string","nodeType":"ElementaryTypeName","src":"1178:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},{"id":213,"nodeType":"VariableDeclaration","src":"1191:70:2","nodes":[],"constant":true,"mutability":"constant","name":"_NAMESPACE","nameLocation":"1215:10:2","scope":326,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":211,"name":"string","nodeType":"ElementaryTypeName","src":"1191:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"7574732e73746f726167652e556e6976657273616c54696d657374616d7073","id":212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1228:33:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_6191da0f5f254a176c2a5b8e81a37f62349600d58cdbf87518a33cdde24d517b","typeString":"literal_string \"uts.storage.UniversalTimestamps\""},"value":"uts.storage.UniversalTimestamps"},"visibility":"private"},{"id":219,"nodeType":"StructDefinition","src":"1341:89:2","nodes":[],"canonicalName":"UniversalTimestamps.UniversalTimestampsStorage","documentation":{"id":214,"nodeType":"StructuredDocumentation","src":"1268:68:2","text":"@custom:storage-location erc7201:uts.storage.UniversalTimestamps"},"members":[{"constant":false,"id":218,"mutability":"mutable","name":"timestamps","nameLocation":"1413:10:2","nodeType":"VariableDeclaration","scope":219,"src":"1385:38:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":217,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":215,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1393:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1385:27:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":216,"name":"uint256","nodeType":"ElementaryTypeName","src":"1404:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"UniversalTimestampsStorage","nameLocation":"1348:26:2","scope":326,"visibility":"public"},{"id":227,"nodeType":"FunctionDefinition","src":"1489:53:2","nodes":[],"body":{"id":226,"nodeType":"Block","src":"1503:39:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":223,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41012,"src":"1513:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1513:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":225,"nodeType":"ExpressionStatement","src":"1513:22:2"}]},"documentation":{"id":220,"nodeType":"StructuredDocumentation","src":"1436:48:2","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":221,"nodeType":"ParameterList","parameters":[],"src":"1500:2:2"},"returnParameters":{"id":222,"nodeType":"ParameterList","parameters":[],"src":"1503:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":239,"nodeType":"FunctionDefinition","src":"1548:106:2","nodes":[],"body":{"id":238,"nodeType":"Block","src":"1609:45:2","nodes":[],"statements":[{"expression":{"arguments":[{"id":235,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":229,"src":"1634:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":234,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40187,"src":"1619:14:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1619:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":237,"nodeType":"ExpressionStatement","src":"1619:28:2"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":232,"kind":"modifierInvocation","modifierName":{"id":231,"name":"initializer","nameLocations":["1597:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":40898,"src":"1597:11:2"},"nodeType":"ModifierInvocation","src":"1597:11:2"}],"name":"initialize","nameLocation":"1557:10:2","parameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":229,"mutability":"mutable","name":"initialOwner","nameLocation":"1576:12:2","nodeType":"VariableDeclaration","scope":239,"src":"1568:20:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":228,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1567:22:2"},"returnParameters":{"id":233,"nodeType":"ParameterList","parameters":[],"src":"1609:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":253,"nodeType":"FunctionDefinition","src":"1660:230:2","nodes":[],"body":{"id":252,"nodeType":"Block","src":"1762:128:2","nodes":[],"statements":[{"assignments":[246],"declarations":[{"constant":false,"id":246,"mutability":"mutable","name":"slot","nameLocation":"1780:4:2","nodeType":"VariableDeclaration","scope":252,"src":"1772:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1772:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":250,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":247,"name":"_NAMESPACE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":213,"src":"1787:10:2","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1798:11:2","memberName":"erc7201Slot","nodeType":"MemberAccess","referencedDeclaration":41808,"src":"1787:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1787:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1772:39:2"},{"AST":{"nativeSrc":"1846:38:2","nodeType":"YulBlock","src":"1846:38:2","statements":[{"nativeSrc":"1860:14:2","nodeType":"YulAssignment","src":"1860:14:2","value":{"name":"slot","nativeSrc":"1870:4:2","nodeType":"YulIdentifier","src":"1870:4:2"},"variableNames":[{"name":"$.slot","nativeSrc":"1860:6:2","nodeType":"YulIdentifier","src":"1860:6:2"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":243,"isOffset":false,"isSlot":true,"src":"1860:6:2","suffix":"slot","valueSize":1},{"declaration":246,"isOffset":false,"isSlot":false,"src":"1870:4:2","valueSize":1}],"flags":["memory-safe"],"id":251,"nodeType":"InlineAssembly","src":"1821:63:2"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getUniversalTimestampsStorage","nameLocation":"1669:30:2","parameters":{"id":240,"nodeType":"ParameterList","parameters":[],"src":"1699:2:2"},"returnParameters":{"id":244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":243,"mutability":"mutable","name":"$","nameLocation":"1759:1:2","nodeType":"VariableDeclaration","scope":253,"src":"1724:36:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"},"typeName":{"id":242,"nodeType":"UserDefinedTypeName","pathNode":{"id":241,"name":"UniversalTimestampsStorage","nameLocations":["1724:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":219,"src":"1724:26:2"},"referencedDeclaration":219,"src":"1724:26:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"}},"visibility":"internal"}],"src":"1723:38:2"},"scope":326,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":267,"nodeType":"FunctionDefinition","src":"1896:138:2","nodes":[],"body":{"id":266,"nodeType":"Block","src":"1961:73:2","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":260,"name":"_getUniversalTimestampsStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"1978:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_UniversalTimestampsStorage_$219_storage_ptr_$","typeString":"function () pure returns (struct UniversalTimestamps.UniversalTimestampsStorage storage pointer)"}},"id":261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1978:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2011:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"1978:43:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":264,"indexExpression":{"id":263,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"2022:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1978:49:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":259,"id":265,"nodeType":"Return","src":"1971:56:2"}]},"baseFunctions":[185],"functionSelector":"4d003070","implemented":true,"kind":"function","modifiers":[],"name":"timestamp","nameLocation":"1905:9:2","parameters":{"id":256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":255,"mutability":"mutable","name":"root","nameLocation":"1923:4:2","nodeType":"VariableDeclaration","scope":267,"src":"1915:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":254,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1915:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1914:14:2"},"returnParameters":{"id":259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":267,"src":"1952:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":257,"name":"uint256","nodeType":"ElementaryTypeName","src":"1952:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1951:9:2"},"scope":326,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":315,"nodeType":"FunctionDefinition","src":"2140:354:2","nodes":[],"body":{"id":314,"nodeType":"Block","src":"2179:315:2","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":274,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2197:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2213:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":276,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2205:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":275,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2205:7:2","typeDescriptions":{}}},"id":278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2205:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2197:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5554533a20526f6f742063616e6e6f74206265207a65726f","id":280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2217:26:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_2804b13209a936ca289456f44fff96ae78a8d5be97dfafdb6227532f3504fdd2","typeString":"literal_string \"UTS: Root cannot be zero\""},"value":"UTS: Root cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2804b13209a936ca289456f44fff96ae78a8d5be97dfafdb6227532f3504fdd2","typeString":"literal_string \"UTS: Root cannot be zero\""}],"id":273,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2189:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2189:55:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":282,"nodeType":"ExpressionStatement","src":"2189:55:2"},{"assignments":[285],"declarations":[{"constant":false,"id":285,"mutability":"mutable","name":"$","nameLocation":"2290:1:2","nodeType":"VariableDeclaration","scope":314,"src":"2255:36:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"},"typeName":{"id":284,"nodeType":"UserDefinedTypeName","pathNode":{"id":283,"name":"UniversalTimestampsStorage","nameLocations":["2255:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":219,"src":"2255:26:2"},"referencedDeclaration":219,"src":"2255:26:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"}},"visibility":"internal"}],"id":288,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":286,"name":"_getUniversalTimestampsStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"2294:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_UniversalTimestampsStorage_$219_storage_ptr_$","typeString":"function () pure returns (struct UniversalTimestamps.UniversalTimestampsStorage storage pointer)"}},"id":287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2294:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2255:71:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":289,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"2340:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2342:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"2340:12:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":292,"indexExpression":{"id":291,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2353:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2340:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2362:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2340:23:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":313,"nodeType":"IfStatement","src":"2336:152:2","trueBody":{"id":312,"nodeType":"Block","src":"2365:123:2","statements":[{"expression":{"id":302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":295,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"2379:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":298,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2381:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"2379:12:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":299,"indexExpression":{"id":297,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2392:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2379:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":300,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2400:5:2","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2406:9:2","memberName":"timestamp","nodeType":"MemberAccess","src":"2400:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2379:36:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":303,"nodeType":"ExpressionStatement","src":"2379:36:2"},{"eventCall":{"arguments":[{"id":305,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2443:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":306,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2449:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2453:6:2","memberName":"sender","nodeType":"MemberAccess","src":"2449:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":308,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2461:5:2","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2467:9:2","memberName":"timestamp","nodeType":"MemberAccess","src":"2461:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":304,"name":"Attested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":173,"src":"2434:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes32,address,uint256)"}},"id":310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:43:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":311,"nodeType":"EmitStatement","src":"2429:48:2"}]}}]},"baseFunctions":[178],"documentation":{"id":268,"nodeType":"StructuredDocumentation","src":"2040:95:2","text":" @notice Attest Merkle Root\n @param root The Merkle Root to be attested"},"functionSelector":"23c3617f","implemented":true,"kind":"function","modifiers":[],"name":"attest","nameLocation":"2149:6:2","parameters":{"id":271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":270,"mutability":"mutable","name":"root","nameLocation":"2164:4:2","nodeType":"VariableDeclaration","scope":315,"src":"2156:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":269,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2156:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2155:14:2"},"returnParameters":{"id":272,"nodeType":"ParameterList","parameters":[],"src":"2179:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":325,"nodeType":"FunctionDefinition","src":"2750:84:2","nodes":[],"body":{"id":324,"nodeType":"Block","src":"2832:2:2","nodes":[],"statements":[]},"baseFunctions":[41178],"documentation":{"id":316,"nodeType":"StructuredDocumentation","src":"2500:245:2","text":" @dev Authorizes an upgrade to `newImplementation`.\n This function is restricted to the contract owner via the {onlyOwner} modifier,\n ensuring that only the owner can authorize upgrades to the implementation."},"implemented":true,"kind":"function","modifiers":[{"id":322,"kind":"modifierInvocation","modifierName":{"id":321,"name":"onlyOwner","nameLocations":["2822:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":40222,"src":"2822:9:2"},"nodeType":"ModifierInvocation","src":"2822:9:2"}],"name":"_authorizeUpgrade","nameLocation":"2759:17:2","overrides":{"id":320,"nodeType":"OverrideSpecifier","overrides":[],"src":"2813:8:2"},"parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":318,"mutability":"mutable","name":"newImplementation","nameLocation":"2785:17:2","nodeType":"VariableDeclaration","scope":325,"src":"2777:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":317,"name":"address","nodeType":"ElementaryTypeName","src":"2777:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2776:27:2"},"returnParameters":{"id":323,"nodeType":"ParameterList","parameters":[],"src":"2832:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":200,"name":"Initializable","nameLocations":["1074:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":41058,"src":"1074:13:2"},"id":201,"nodeType":"InheritanceSpecifier","src":"1074:13:2"},{"baseName":{"id":202,"name":"OwnableUpgradeable","nameLocations":["1089:18:2"],"nodeType":"IdentifierPath","referencedDeclaration":40327,"src":"1089:18:2"},"id":203,"nodeType":"InheritanceSpecifier","src":"1089:18:2"},{"baseName":{"id":204,"name":"UUPSUpgradeable","nameLocations":["1109:15:2"],"nodeType":"IdentifierPath","referencedDeclaration":41224,"src":"1109:15:2"},"id":205,"nodeType":"InheritanceSpecifier","src":"1109:15:2"},{"baseName":{"id":206,"name":"IUniversalTimestamps","nameLocations":["1126:20:2"],"nodeType":"IdentifierPath","referencedDeclaration":186,"src":"1126:20:2"},"id":207,"nodeType":"InheritanceSpecifier","src":"1126:20:2"}],"canonicalName":"UniversalTimestamps","contractDependencies":[],"contractKind":"contract","documentation":{"id":199,"nodeType":"StructuredDocumentation","src":"506:535:2","text":" @title UniversalTimestamps\n @dev Records and exposes timestamps for attested Merkle roots using ERC-7201\n namespaced storage (`uts.storage.UniversalTimestamps`) derived via\n {SlotDerivation}, and is implemented as a UUPS upgradeable contract via\n OpenZeppelin's Initializable, OwnableUpgradeable, and UUPSUpgradeable\n base contracts. Storage is kept in a dedicated namespaced struct to remain\n layout-compatible across upgrades, while upgrades are authorized by the\n contract owner through {_authorizeUpgrade}."},"fullyImplemented":true,"linearizedBaseContracts":[326,186,41224,40412,40327,40381,41058],"name":"UniversalTimestamps","nameLocation":"1051:19:2","scope":327,"usedErrors":[40163,40168,40470,40483,40807,40810,41081,41086,41236,41627],"usedEvents":[173,40174,40389,40815]}],"license":"MIT"},"id":2} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"attest","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"timestamp","inputs":[{"name":"root","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"Attested","inputs":[{"name":"root","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610b046100f95f395f81816104bb015281816104e401526106280152610b045ff3fe608060405260043610610084575f3560e01c8063715018a611610057578063715018a6146101025780638da5cb5b14610116578063ad3cb1cc1461015c578063c4d66de814610199578063f2fde38b146101b8575f80fd5b806323c3617f146100885780634d003070146100a95780634f1ef286146100db57806352d1902d146100ee575b5f80fd5b348015610093575f80fd5b506100a76100a236600461095e565b6101d7565b005b3480156100b4575f80fd5b506100c86100c336600461095e565b610295565b6040519081526020015b60405180910390f35b6100a76100e93660046109a4565b6102ae565b3480156100f9575f80fd5b506100c86102c9565b34801561010d575f80fd5b506100a76102e4565b348015610121575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016100d2565b348015610167575f80fd5b5061018c604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100d29190610a60565b3480156101a4575f80fd5b506100a76101b3366004610aac565b6102f7565b3480156101c3575f80fd5b506100a76101d2366004610aac565b6103f0565b806102295760405162461bcd60e51b815260206004820152601860248201527f5554533a20526f6f742063616e6e6f74206265207a65726f000000000000000060448201526064015b60405180910390fd5b5f61023261042d565b5f8381526020829052604081205491925003610291575f828152602082815260409182902042908190559151918252339184917f61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a910160405180910390a35b5050565b5f61029e61042d565b5f92835260205250604090205490565b6102b66104b0565b6102bf82610554565b610291828261055c565b5f6102d261061d565b505f80516020610ae483398151915290565b6102ec610666565b6102f55f6106c1565b565b5f610300610731565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156103275750825b90505f8267ffffffffffffffff1660011480156103435750303b155b905081158015610351575080155b1561036f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039957845460ff60401b1916600160401b1785555b6103a286610759565b83156103e857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103f8610666565b6001600160a01b03811661042157604051631e4fbdf760e01b81525f6004820152602401610220565b61042a816106c1565b50565b60408051808201909152601f81527f7574732e73746f726167652e556e6976657273616c54696d657374616d7073006020909101527f6191da0f5f254a176c2a5b8e81a37f62349600d58cdbf87518a33cdde24d517a5f908152807f500a69046951d8ea21a7dabf6fe6e1792e3ffa4dc61a276ae65b0e2b034681005b92915050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061053657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661052a5f80516020610ae4833981519152546001600160a01b031690565b6001600160a01b031614155b156102f55760405163703e46dd60e11b815260040160405180910390fd5b61042a610666565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156105b6575060408051601f3d908101601f191682019092526105b391810190610acc565b60015b6105de57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610220565b5f80516020610ae4833981519152811461060e57604051632a87526960e21b815260048101829052602401610220565b610618838361076a565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102f55760405163703e46dd60e11b815260040160405180910390fd5b336106987f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146102f55760405163118cdaa760e01b8152336004820152602401610220565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006104aa565b6107616107bf565b61042a816107e4565b610773826107ec565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156107b757610618828261084f565b6102916108ef565b6107c761090e565b6102f557604051631afcd79f60e31b815260040160405180910390fd5b6103f86107bf565b806001600160a01b03163b5f0361082157604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610220565b5f80516020610ae483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61085c8484610927565b905080801561087d57505f3d118061087d57505f846001600160a01b03163b115b156108925761088a61093a565b9150506104aa565b80156108bc57604051639996b31560e01b81526001600160a01b0385166004820152602401610220565b3d156108cf576108ca610953565b6108e8565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b34156102f55760405163b398979f60e01b815260040160405180910390fd5b5f610917610731565b54600160401b900460ff16919050565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f6020828403121561096e575f80fd5b5035919050565b80356001600160a01b038116811461098b575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156109b5575f80fd5b6109be83610975565b9150602083013567ffffffffffffffff808211156109da575f80fd5b818501915085601f8301126109ed575f80fd5b8135818111156109ff576109ff610990565b604051601f8201601f19908116603f01168101908382118183101715610a2757610a27610990565b81604052828152886020848701011115610a3f575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f602080835283518060208501525f5b81811015610a8c57858101830151858201604001528201610a70565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215610abc575f80fd5b610ac582610975565b9392505050565b5f60208284031215610adc575f80fd5b505191905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","sourceMap":"1042:1794:2:-:0;;;1084:4:33;1041:48;;1489:53:2;;;;;;;;;-1:-1:-1;1513:22:2;:20;:22::i;:::-;1042:1794;;7709:422:32;3147:66;7898:15;;;;;;;7894:76;;;7936:23;;-1:-1:-1;;;7936:23:32;;;;;;;;;;;7894:76;7983:14;;-1:-1:-1;;;;;7983:14:32;;;:34;7979:146;;8033:33;;-1:-1:-1;;;;;;8033:33:32;-1:-1:-1;;;;;8033:33:32;;;;;8085:29;;158:50:39;;;8085:29:32;;146:2:39;131:18;8085:29:32;;;;;;;7979:146;7758:373;7709:422::o;14:200:39:-;1042:1794:2;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610084575f3560e01c8063715018a611610057578063715018a6146101025780638da5cb5b14610116578063ad3cb1cc1461015c578063c4d66de814610199578063f2fde38b146101b8575f80fd5b806323c3617f146100885780634d003070146100a95780634f1ef286146100db57806352d1902d146100ee575b5f80fd5b348015610093575f80fd5b506100a76100a236600461095e565b6101d7565b005b3480156100b4575f80fd5b506100c86100c336600461095e565b610295565b6040519081526020015b60405180910390f35b6100a76100e93660046109a4565b6102ae565b3480156100f9575f80fd5b506100c86102c9565b34801561010d575f80fd5b506100a76102e4565b348015610121575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016100d2565b348015610167575f80fd5b5061018c604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100d29190610a60565b3480156101a4575f80fd5b506100a76101b3366004610aac565b6102f7565b3480156101c3575f80fd5b506100a76101d2366004610aac565b6103f0565b806102295760405162461bcd60e51b815260206004820152601860248201527f5554533a20526f6f742063616e6e6f74206265207a65726f000000000000000060448201526064015b60405180910390fd5b5f61023261042d565b5f8381526020829052604081205491925003610291575f828152602082815260409182902042908190559151918252339184917f61cae4201bb8c0117495b22a70f5202410666b349c27302dac280dc054b60f2a910160405180910390a35b5050565b5f61029e61042d565b5f92835260205250604090205490565b6102b66104b0565b6102bf82610554565b610291828261055c565b5f6102d261061d565b505f80516020610ae483398151915290565b6102ec610666565b6102f55f6106c1565b565b5f610300610731565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156103275750825b90505f8267ffffffffffffffff1660011480156103435750303b155b905081158015610351575080155b1561036f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039957845460ff60401b1916600160401b1785555b6103a286610759565b83156103e857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103f8610666565b6001600160a01b03811661042157604051631e4fbdf760e01b81525f6004820152602401610220565b61042a816106c1565b50565b60408051808201909152601f81527f7574732e73746f726167652e556e6976657273616c54696d657374616d7073006020909101527f6191da0f5f254a176c2a5b8e81a37f62349600d58cdbf87518a33cdde24d517a5f908152807f500a69046951d8ea21a7dabf6fe6e1792e3ffa4dc61a276ae65b0e2b034681005b92915050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061053657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661052a5f80516020610ae4833981519152546001600160a01b031690565b6001600160a01b031614155b156102f55760405163703e46dd60e11b815260040160405180910390fd5b61042a610666565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156105b6575060408051601f3d908101601f191682019092526105b391810190610acc565b60015b6105de57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610220565b5f80516020610ae4833981519152811461060e57604051632a87526960e21b815260048101829052602401610220565b610618838361076a565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102f55760405163703e46dd60e11b815260040160405180910390fd5b336106987f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146102f55760405163118cdaa760e01b8152336004820152602401610220565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006104aa565b6107616107bf565b61042a816107e4565b610773826107ec565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156107b757610618828261084f565b6102916108ef565b6107c761090e565b6102f557604051631afcd79f60e31b815260040160405180910390fd5b6103f86107bf565b806001600160a01b03163b5f0361082157604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610220565b5f80516020610ae483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61085c8484610927565b905080801561087d57505f3d118061087d57505f846001600160a01b03163b115b156108925761088a61093a565b9150506104aa565b80156108bc57604051639996b31560e01b81526001600160a01b0385166004820152602401610220565b3d156108cf576108ca610953565b6108e8565b60405163d6bda27560e01b815260040160405180910390fd5b5092915050565b34156102f55760405163b398979f60e01b815260040160405180910390fd5b5f610917610731565b54600160401b900460ff16919050565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f6020828403121561096e575f80fd5b5035919050565b80356001600160a01b038116811461098b575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156109b5575f80fd5b6109be83610975565b9150602083013567ffffffffffffffff808211156109da575f80fd5b818501915085601f8301126109ed575f80fd5b8135818111156109ff576109ff610990565b604051601f8201601f19908116603f01168101908382118183101715610a2757610a27610990565b81604052828152886020848701011115610a3f575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f602080835283518060208501525f5b81811015610a8c57858101830151858201604001528201610a70565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215610abc575f80fd5b610ac582610975565b9392505050565b5f60208284031215610adc575f80fd5b505191905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","sourceMap":"1042:1794:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2140:354;;;;;;;;;;-1:-1:-1;2140:354:2;;;;;:::i;:::-;;:::i;:::-;;1896:138;;;;;;;;;;-1:-1:-1;1896:138:2;;;;;:::i;:::-;;:::i;:::-;;;345:25:39;;;333:2;318:18;1896:138:2;;;;;;;;3911:214:33;;;;;;:::i;:::-;;:::i;3466:126::-;;;;;;;;;;;;;:::i;3176:101:22:-;;;;;;;;;;;;;:::i;2462:144::-;;;;;;;;;;-1:-1:-1;1334:22:22;2591:8;2462:144;;-1:-1:-1;;;;;2591:8:22;;;2019:51:39;;2007:2;1992:18;2462:144:22;1873:203:39;1732:58:33;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1732:58:33;;;;;;;;;;;;:::i;1548:106:2:-;;;;;;;;;;-1:-1:-1;1548:106:2;;;;;:::i;:::-;;:::i;3426:215:22:-;;;;;;;;;;-1:-1:-1;3426:215:22;;;;;:::i;:::-;;:::i;2140:354:2:-;2197:4;2189:55;;;;-1:-1:-1;;;2189:55:2;;3027:2:39;2189:55:2;;;3009:21:39;3066:2;3046:18;;;3039:30;3105:26;3085:18;;;3078:54;3149:18;;2189:55:2;;;;;;;;;2255:36;2294:32;:30;:32::i;:::-;2340:12;:18;;;;;;;;;;;2255:71;;-1:-1:-1;2340:23:2;2336:152;;2379:12;:18;;;;;;;;;;;;2400:15;2379:36;;;;2434:43;;345:25:39;;;2449:10:2;;2379:18;;2434:43;;318:18:39;2434:43:2;;;;;;;2336:152;2179:315;2140:354;:::o;1896:138::-;1952:7;1978:32;:30;:32::i;:::-;:43;:49;;;;;-1:-1:-1;1978:49:2;;;;;1896:138::o;3911:214:33:-;2568:13;:11;:13::i;:::-;4026:36:::1;4044:17;4026;:36::i;:::-;4072:46;4094:17;4113:4;4072:21;:46::i;3466:126::-:0;3527:7;2839:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3466:126:33;:::o;3176:101:22:-;2355:13;:11;:13::i;:::-;3240:30:::1;3267:1;3240:18;:30::i;:::-;3176:101::o:0;1548:106:2:-;4158:30:32;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:32;-1:-1:-1;;;4302:15:32;;;4301:16;;4348:14;;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;:16;;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:32;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:32;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:32;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:32;-1:-1:-1;;;5011:22:32;;;4977:67;1619:28:2::1;1634:12;1619:14;:28::i;:::-;5068:14:32::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:32;;;5140:14;;-1:-1:-1;3331:50:39;;5140:14:32;;3319:2:39;3304:18;5140:14:32;;;;;;;5064:101;4092:1079;;;;;1548:106:2;:::o;3426:215:22:-;2355:13;:11;:13::i;:::-;-1:-1:-1;;;;;3510:22:22;::::1;3506:91;;3555:31;::::0;-1:-1:-1;;;3555:31:22;;3583:1:::1;3555:31;::::0;::::1;2019:51:39::0;1992:18;;3555:31:22::1;1873:203:39::0;3506:91:22::1;3606:28;3625:8;3606:18;:28::i;:::-;3426:215:::0;:::o;1660:230:2:-;1787:10;;;;;;;;;;;;;;;;;;1846:57:37;1724:36:2;1833:71:37;;;1724:36:2;1925:37:37;1787:24:2;1772:39;1660:230;-1:-1:-1;;1660:230:2:o;4328:312:33:-;4408:4;-1:-1:-1;;;;;4417:6:33;4400:23;;;:120;;;4514:6;-1:-1:-1;;;;;4478:42:33;:32;-1:-1:-1;;;;;;;;;;;1519:53:29;-1:-1:-1;;;;;1519:53:29;;1441:138;4478:32:33;-1:-1:-1;;;;;4478:42:33;;;4400:120;4383:251;;;4594:29;;-1:-1:-1;;;4594:29:33;;;;;;;;;;;2750:84:2;2355:13:22;:11;:13::i;5782:538:33:-;5899:17;-1:-1:-1;;;;;5881:50:33;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5881:52:33;;;;;;;;-1:-1:-1;;5881:52:33;;;;;;;;;;;;:::i;:::-;;;5877:437;;6243:60;;-1:-1:-1;;;6243:60:33;;-1:-1:-1;;;;;2037:32:39;;6243:60:33;;;2019:51:39;1992:18;;6243:60:33;1873:203:39;5877:437:33;-1:-1:-1;;;;;;;;;;;5975:40:33;;5971:120;;6042:34;;-1:-1:-1;;;6042:34:33;;;;;345:25:39;;;318:18;;6042:34:33;199:177:39;5971:120:33;6104:54;6134:17;6153:4;6104:29;:54::i;:::-;5934:235;5782:538;;:::o;4757:213::-;4831:4;-1:-1:-1;;;;;4840:6:33;4823:23;;4819:145;;4924:29;;-1:-1:-1;;;4924:29:33;;;;;;;;;;;2679:162:22;987:10:25;2738:7:22;1334:22;2591:8;-1:-1:-1;;;;;2591:8:22;;2462:144;2738:7;-1:-1:-1;;;;;2738:23:22;;2734:101;;2784:40;;-1:-1:-1;;;2784:40:22;;987:10:25;2784:40:22;;;2019:51:39;1992:18;;2784:40:22;1873:203:39;3795:248:22;1334:22;3944:8;;-1:-1:-1;;;;;;3962:19:22;;-1:-1:-1;;;;;3962:19:22;;;;;;;;3996:40;;3944:8;;;;;3996:40;;3868:24;;3996:40;3858:185;;3795:248;:::o;9071:205:32:-;9129:30;;3147:66;9186:27;8819:122;1868:127:22;6929:20:32;:18;:20::i;:::-;1950:38:22::1;1975:12;1950:24;:38::i;2264:344:29:-:0;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:29;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;7082:141:32:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:32;;;;;;;;;;;2001:235:22;6929:20:32;:18;:20::i;1671:281:29:-;1748:17;-1:-1:-1;;;;;1748:29:29;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:29;;-1:-1:-1;;;;;2037:32:39;;1805:47:29;;;2019:51:39;1992:18;;1805:47:29;1873:203:39;1744:119:29;-1:-1:-1;;;;;;;;;;;1872:73:29;;-1:-1:-1;;;;;;1872:73:29;-1:-1:-1;;;;;1872:73:29;;;;;;;;;;1671:281::o;4691:549:34:-;4774:12;4798;4813:47;4847:6;4855:4;4813:33;:47::i;:::-;4798:62;;4874:7;:72;;;;-1:-1:-1;4918:1:34;4583:16:36;4886:33:34;:59;;;;4944:1;4923:6;-1:-1:-1;;;;;4923:18:34;;:22;4886:59;4870:364;;;4969:25;:23;:25::i;:::-;4962:32;;;;;4870:364;5015:7;5011:223;;;5045:24;;-1:-1:-1;;;5045:24:34;;-1:-1:-1;;;;;2037:32:39;;5045:24:34;;;2019:51:39;1992:18;;5045:24:34;1873:203:39;5011:223:34;4583:16:36;5090:33:34;5086:148;;5139:27;:25;:27::i;:::-;5086:148;;;5204:19;;-1:-1:-1;;;5204:19:34;;;;;;;;;;;5086:148;4788:452;4691:549;;;;:::o;6113:122:29:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:29;;;;;;;;;;;8485:120:32;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:32;;;;;;-1:-1:-1;8485:120:32:o;3383:242:36:-;3466:12;3604:4;3598;3591;3585:11;3578:4;3572;3568:15;3560:6;3553:5;3540:69;3529:80;3383:242;-1:-1:-1;;;3383:242:36:o;4698:334::-;4829:4;4823:11;4862:16;4847:32;;4932:16;4926:4;4919;4907:17;;4892:57;4997:16;4991:4;4987:27;4979:6;4975:40;4969:4;4962:54;4698:334;:::o;5099:223::-;5203:4;5197:11;5247:16;5241:4;5236:3;5221:43;5289:16;5284:3;5277:29;14:180:39;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:39;;14:180;-1:-1:-1;14:180:39:o;381:173::-;449:20;;-1:-1:-1;;;;;498:31:39;;488:42;;478:70;;544:1;541;534:12;478:70;381:173;;;:::o;559:127::-;620:10;615:3;611:20;608:1;601:31;651:4;648:1;641:15;675:4;672:1;665:15;691:995;768:6;776;829:2;817:9;808:7;804:23;800:32;797:52;;;845:1;842;835:12;797:52;868:29;887:9;868:29;:::i;:::-;858:39;;948:2;937:9;933:18;920:32;971:18;1012:2;1004:6;1001:14;998:34;;;1028:1;1025;1018:12;998:34;1066:6;1055:9;1051:22;1041:32;;1111:7;1104:4;1100:2;1096:13;1092:27;1082:55;;1133:1;1130;1123:12;1082:55;1169:2;1156:16;1191:2;1187;1184:10;1181:36;;;1197:18;;:::i;:::-;1272:2;1266:9;1240:2;1326:13;;-1:-1:-1;;1322:22:39;;;1346:2;1318:31;1314:40;1302:53;;;1370:18;;;1390:22;;;1367:46;1364:72;;;1416:18;;:::i;:::-;1456:10;1452:2;1445:22;1491:2;1483:6;1476:18;1531:7;1526:2;1521;1517;1513:11;1509:20;1506:33;1503:53;;;1552:1;1549;1542:12;1503:53;1608:2;1603;1599;1595:11;1590:2;1582:6;1578:15;1565:46;1653:1;1648:2;1643;1635:6;1631:15;1627:24;1620:35;1674:6;1664:16;;;;;;;691:995;;;;;:::o;2081:548::-;2193:4;2222:2;2251;2240:9;2233:21;2283:6;2277:13;2326:6;2321:2;2310:9;2306:18;2299:34;2351:1;2361:140;2375:6;2372:1;2369:13;2361:140;;;2470:14;;;2466:23;;2460:30;2436:17;;;2455:2;2432:26;2425:66;2390:10;;2361:140;;;2365:3;2550:1;2545:2;2536:6;2525:9;2521:22;2517:31;2510:42;2620:2;2613;2609:7;2604:2;2596:6;2592:15;2588:29;2577:9;2573:45;2569:54;2561:62;;;;2081:548;;;;:::o;2634:186::-;2693:6;2746:2;2734:9;2725:7;2721:23;2717:32;2714:52;;;2762:1;2759;2752:12;2714:52;2785:29;2804:9;2785:29;:::i;:::-;2775:39;2634:186;-1:-1:-1;;;2634:186:39:o;3392:184::-;3462:6;3515:2;3503:9;3494:7;3490:23;3486:32;3483:52;;;3531:1;3528;3521:12;3483:52;-1:-1:-1;3554:16:39;;3392:184;-1:-1:-1;3392:184:39:o","linkReferences":{},"immutableReferences":{"41074":[{"start":1211,"length":32},{"start":1252,"length":32},{"start":1576,"length":32}]}},"methodIdentifiers":{"UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","attest(bytes32)":"23c3617f","initialize(address)":"c4d66de8","owner()":"8da5cb5b","proxiableUUID()":"52d1902d","renounceOwnership()":"715018a6","timestamp(bytes32)":"4d003070","transferOwnership(address)":"f2fde38b","upgradeToAndCall(address,bytes)":"4f1ef286"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Records and exposes timestamps for attested Merkle roots using ERC-7201 namespaced storage (`uts.storage.UniversalTimestamps`) derived via {SlotDerivation}, and is implemented as a UUPS upgradeable contract via OpenZeppelin's Initializable, OwnableUpgradeable, and UUPSUpgradeable base contracts. Storage is kept in a dedicated namespaced struct to remain layout-compatible across upgrades, while upgrades are authorized by the contract owner through {_authorizeUpgrade}.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"attest(bytes32)\":{\"params\":{\"root\":\"The Merkle Root to be attested\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"UniversalTimestamps\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"attest(bytes32)\":{\"notice\":\"Attest Merkle Root\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/UniversalTimestamps.sol\":\"UniversalTimestamps\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\"]},\"sources\":{\"contracts/IUniversalTimestamps.sol\":{\"keccak256\":\"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf\",\"dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC\"]},\"contracts/UniversalTimestamps.sol\":{\"keccak256\":\"0xb1596ca55406c833dc01c604dd4d6fb3791a9f9cc0f4cad6292757abc52acb4b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c53b928701b425781b8bce6e51fc3414d33d9d32e3b192777b6c5157396bfa\",\"dweb:/ipfs/QmQHq55s3BHW4YEhBe8bRGmxFvSc6xhWF4pUub8is9oSkf\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed\",\"dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d\",\"dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e\",\"dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455\",\"dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34\",\"dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710\",\"dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol\":{\"keccak256\":\"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56\",\"dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x94045fd4f268edf2b2d01ef119268548c320366d6f5294ad30c1b8f9d4f5225f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://edfda81f426f8948b3834115c21e83c48180e6db0d2a8cd2debb2185ed349337\",\"dweb:/ipfs/QmdYZneFyDAux1BuWQxLAdqtABrGS2k9WYCa7C9dvpKkWv\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"timestamp","type":"uint256","indexed":false}],"type":"event","name":"Attested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"attest"},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"view","type":"function","name":"timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"}],"devdoc":{"kind":"dev","methods":{"attest(bytes32)":{"params":{"root":"The Merkle Root to be attested"}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"attest(bytes32)":{"notice":"Attest Merkle Root"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"contracts/UniversalTimestamps.sol":"UniversalTimestamps"},"evmVersion":"cancun","libraries":{}},"sources":{"contracts/IUniversalTimestamps.sol":{"keccak256":"0xfa9490d2704cebe76fa78d15f51ed3bf13577ffaf782fe0337db402872571df0","urls":["bzz-raw://c42b87e7040e6d72f5b49a2bff481191678e15df1c19793e9c55800e8f5276cf","dweb:/ipfs/QmNr4ET95fihTnh3YF6WjjKUsCFU7KkoPkvKAizb83pyCC"],"license":"MIT"},"contracts/UniversalTimestamps.sol":{"keccak256":"0xb1596ca55406c833dc01c604dd4d6fb3791a9f9cc0f4cad6292757abc52acb4b","urls":["bzz-raw://e8c53b928701b425781b8bce6e51fc3414d33d9d32e3b192777b6c5157396bfa","dweb:/ipfs/QmQHq55s3BHW4YEhBe8bRGmxFvSc6xhWF4pUub8is9oSkf"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14","urls":["bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed","dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x30d125b8417684dbfea3e8d57284b353a86b22077237b4aaf098c0b54b153e16","urls":["bzz-raw://2813775a6326190e75dfa9005c1abbdb1e541c195c0bf5656dd4199e8c66fd8d","dweb:/ipfs/QmYDKANBezQXNrEDyJ69RVXkgypW1hWj7MAvjfdNHTZY8L"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x4918e374e9ce84e9b196486bafbd46851d5e72ab315e31f0b1d7c443dcfea5bf","urls":["bzz-raw://2ced247afc54a93a13922ebbd63add61130abe483ab5b5b78e7e991d564d150e","dweb:/ipfs/QmTfxjcTgfekiguegjvYMyfqhyRNffui17f8xi86BCZNVt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d","urls":["bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455","dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5","urls":["bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c","dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b","urls":["bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422","dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618","urls":["bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a","dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b","urls":["bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d","dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x1a26353563a2c63b4120ea0b94727253eeff84fe2241d42c1452308b9080e66a","urls":["bzz-raw://49a95e36d267828b4357186a79917002d616d8634e25d1f9818e2354cd2e7d34","dweb:/ipfs/QmWDkqE4KkyLAS2UkLsRgXE1FGB1qfEgBC3zMXBVsVWfdk"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x0fa9e0d3a859900b5a46f70a03c73adf259603d5e05027a37fe0b45529d85346","urls":["bzz-raw://c2add4da0240c9f2ce47649c8bb6b11b40e98cf6f88b8bdc76b2704e89391710","dweb:/ipfs/QmNQTwF2uVzu4CRtNxr8bxyP9XuW6VsZuo2Nr4KR2bZr3d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/LowLevelCall.sol":{"keccak256":"0x5b4802a4352474792df3107e961d1cc593e47b820c14f69d3505cb28f5a6a583","urls":["bzz-raw://a6f86fd01f829499fe0545ff5dda07d4521988e88bfe0bf801fc15650921ed56","dweb:/ipfs/QmUUKu4ZDffHAmfkf3asuQfmLTyfpuy2Amdncc3SqfzKPG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x94045fd4f268edf2b2d01ef119268548c320366d6f5294ad30c1b8f9d4f5225f","urls":["bzz-raw://edfda81f426f8948b3834115c21e83c48180e6db0d2a8cd2debb2185ed349337","dweb:/ipfs/QmdYZneFyDAux1BuWQxLAdqtABrGS2k9WYCa7C9dvpKkWv"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97","urls":["bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b","dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/UniversalTimestamps.sol","id":327,"exportedSymbols":{"IUniversalTimestamps":[186],"Initializable":[41058],"OwnableUpgradeable":[40327],"SlotDerivation":[41925],"UUPSUpgradeable":[41224],"UniversalTimestamps":[326]},"nodeType":"SourceUnit","src":"33:2804:2","nodes":[{"id":188,"nodeType":"PragmaDirective","src":"33:24:2","nodes":[],"literals":["solidity","^","0.8",".24"]},{"id":190,"nodeType":"ImportDirective","src":"59:96:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40332,"symbolAliases":[{"foreign":{"id":189,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41058,"src":"67:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":192,"nodeType":"ImportDirective","src":"156:101:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40328,"symbolAliases":[{"foreign":{"id":191,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40327,"src":"164:18:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":194,"nodeType":"ImportDirective","src":"258:100:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":40336,"symbolAliases":[{"foreign":{"id":193,"name":"UUPSUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41224,"src":"266:15:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":196,"nodeType":"ImportDirective","src":"359:64:2","nodes":[],"absolutePath":"contracts/IUniversalTimestamps.sol","file":"./IUniversalTimestamps.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":187,"symbolAliases":[{"foreign":{"id":195,"name":"IUniversalTimestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"367:20:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":198,"nodeType":"ImportDirective","src":"424:80:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol","file":"@openzeppelin/contracts/utils/SlotDerivation.sol","nameLocation":"-1:-1:-1","scope":327,"sourceUnit":41926,"symbolAliases":[{"foreign":{"id":197,"name":"SlotDerivation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41925,"src":"432:14:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":326,"nodeType":"ContractDefinition","src":"1042:1794:2","nodes":[{"id":210,"nodeType":"UsingForDirective","src":"1153:32:2","nodes":[],"global":false,"libraryName":{"id":208,"name":"SlotDerivation","nameLocations":["1159:14:2"],"nodeType":"IdentifierPath","referencedDeclaration":41925,"src":"1159:14:2"},"typeName":{"id":209,"name":"string","nodeType":"ElementaryTypeName","src":"1178:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},{"id":213,"nodeType":"VariableDeclaration","src":"1191:70:2","nodes":[],"constant":true,"mutability":"constant","name":"_NAMESPACE","nameLocation":"1215:10:2","scope":326,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":211,"name":"string","nodeType":"ElementaryTypeName","src":"1191:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"7574732e73746f726167652e556e6976657273616c54696d657374616d7073","id":212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1228:33:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_6191da0f5f254a176c2a5b8e81a37f62349600d58cdbf87518a33cdde24d517b","typeString":"literal_string \"uts.storage.UniversalTimestamps\""},"value":"uts.storage.UniversalTimestamps"},"visibility":"private"},{"id":219,"nodeType":"StructDefinition","src":"1341:89:2","nodes":[],"canonicalName":"UniversalTimestamps.UniversalTimestampsStorage","documentation":{"id":214,"nodeType":"StructuredDocumentation","src":"1268:68:2","text":"@custom:storage-location erc7201:uts.storage.UniversalTimestamps"},"members":[{"constant":false,"id":218,"mutability":"mutable","name":"timestamps","nameLocation":"1413:10:2","nodeType":"VariableDeclaration","scope":219,"src":"1385:38:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":217,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":215,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1393:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1385:27:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":216,"name":"uint256","nodeType":"ElementaryTypeName","src":"1404:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"UniversalTimestampsStorage","nameLocation":"1348:26:2","scope":326,"visibility":"public"},{"id":227,"nodeType":"FunctionDefinition","src":"1489:53:2","nodes":[],"body":{"id":226,"nodeType":"Block","src":"1503:39:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":223,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41012,"src":"1513:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1513:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":225,"nodeType":"ExpressionStatement","src":"1513:22:2"}]},"documentation":{"id":220,"nodeType":"StructuredDocumentation","src":"1436:48:2","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":221,"nodeType":"ParameterList","parameters":[],"src":"1500:2:2"},"returnParameters":{"id":222,"nodeType":"ParameterList","parameters":[],"src":"1503:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":239,"nodeType":"FunctionDefinition","src":"1548:106:2","nodes":[],"body":{"id":238,"nodeType":"Block","src":"1609:45:2","nodes":[],"statements":[{"expression":{"arguments":[{"id":235,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":229,"src":"1634:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":234,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40187,"src":"1619:14:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1619:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":237,"nodeType":"ExpressionStatement","src":"1619:28:2"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":232,"kind":"modifierInvocation","modifierName":{"id":231,"name":"initializer","nameLocations":["1597:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":40898,"src":"1597:11:2"},"nodeType":"ModifierInvocation","src":"1597:11:2"}],"name":"initialize","nameLocation":"1557:10:2","parameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":229,"mutability":"mutable","name":"initialOwner","nameLocation":"1576:12:2","nodeType":"VariableDeclaration","scope":239,"src":"1568:20:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":228,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1567:22:2"},"returnParameters":{"id":233,"nodeType":"ParameterList","parameters":[],"src":"1609:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":253,"nodeType":"FunctionDefinition","src":"1660:230:2","nodes":[],"body":{"id":252,"nodeType":"Block","src":"1762:128:2","nodes":[],"statements":[{"assignments":[246],"declarations":[{"constant":false,"id":246,"mutability":"mutable","name":"slot","nameLocation":"1780:4:2","nodeType":"VariableDeclaration","scope":252,"src":"1772:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1772:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":250,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":247,"name":"_NAMESPACE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":213,"src":"1787:10:2","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1798:11:2","memberName":"erc7201Slot","nodeType":"MemberAccess","referencedDeclaration":41808,"src":"1787:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1787:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1772:39:2"},{"AST":{"nativeSrc":"1846:38:2","nodeType":"YulBlock","src":"1846:38:2","statements":[{"nativeSrc":"1860:14:2","nodeType":"YulAssignment","src":"1860:14:2","value":{"name":"slot","nativeSrc":"1870:4:2","nodeType":"YulIdentifier","src":"1870:4:2"},"variableNames":[{"name":"$.slot","nativeSrc":"1860:6:2","nodeType":"YulIdentifier","src":"1860:6:2"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":243,"isOffset":false,"isSlot":true,"src":"1860:6:2","suffix":"slot","valueSize":1},{"declaration":246,"isOffset":false,"isSlot":false,"src":"1870:4:2","valueSize":1}],"flags":["memory-safe"],"id":251,"nodeType":"InlineAssembly","src":"1821:63:2"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getUniversalTimestampsStorage","nameLocation":"1669:30:2","parameters":{"id":240,"nodeType":"ParameterList","parameters":[],"src":"1699:2:2"},"returnParameters":{"id":244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":243,"mutability":"mutable","name":"$","nameLocation":"1759:1:2","nodeType":"VariableDeclaration","scope":253,"src":"1724:36:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"},"typeName":{"id":242,"nodeType":"UserDefinedTypeName","pathNode":{"id":241,"name":"UniversalTimestampsStorage","nameLocations":["1724:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":219,"src":"1724:26:2"},"referencedDeclaration":219,"src":"1724:26:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"}},"visibility":"internal"}],"src":"1723:38:2"},"scope":326,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":267,"nodeType":"FunctionDefinition","src":"1896:138:2","nodes":[],"body":{"id":266,"nodeType":"Block","src":"1961:73:2","nodes":[],"statements":[{"expression":{"baseExpression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":260,"name":"_getUniversalTimestampsStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"1978:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_UniversalTimestampsStorage_$219_storage_ptr_$","typeString":"function () pure returns (struct UniversalTimestamps.UniversalTimestampsStorage storage pointer)"}},"id":261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1978:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2011:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"1978:43:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":264,"indexExpression":{"id":263,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":255,"src":"2022:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1978:49:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":259,"id":265,"nodeType":"Return","src":"1971:56:2"}]},"baseFunctions":[185],"functionSelector":"4d003070","implemented":true,"kind":"function","modifiers":[],"name":"timestamp","nameLocation":"1905:9:2","parameters":{"id":256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":255,"mutability":"mutable","name":"root","nameLocation":"1923:4:2","nodeType":"VariableDeclaration","scope":267,"src":"1915:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":254,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1915:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1914:14:2"},"returnParameters":{"id":259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":267,"src":"1952:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":257,"name":"uint256","nodeType":"ElementaryTypeName","src":"1952:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1951:9:2"},"scope":326,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":315,"nodeType":"FunctionDefinition","src":"2140:354:2","nodes":[],"body":{"id":314,"nodeType":"Block","src":"2179:315:2","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":274,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2197:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2213:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":276,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2205:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":275,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2205:7:2","typeDescriptions":{}}},"id":278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2205:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2197:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5554533a20526f6f742063616e6e6f74206265207a65726f","id":280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2217:26:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_2804b13209a936ca289456f44fff96ae78a8d5be97dfafdb6227532f3504fdd2","typeString":"literal_string \"UTS: Root cannot be zero\""},"value":"UTS: Root cannot be zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2804b13209a936ca289456f44fff96ae78a8d5be97dfafdb6227532f3504fdd2","typeString":"literal_string \"UTS: Root cannot be zero\""}],"id":273,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2189:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2189:55:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":282,"nodeType":"ExpressionStatement","src":"2189:55:2"},{"assignments":[285],"declarations":[{"constant":false,"id":285,"mutability":"mutable","name":"$","nameLocation":"2290:1:2","nodeType":"VariableDeclaration","scope":314,"src":"2255:36:2","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"},"typeName":{"id":284,"nodeType":"UserDefinedTypeName","pathNode":{"id":283,"name":"UniversalTimestampsStorage","nameLocations":["2255:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":219,"src":"2255:26:2"},"referencedDeclaration":219,"src":"2255:26:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage"}},"visibility":"internal"}],"id":288,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":286,"name":"_getUniversalTimestampsStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"2294:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_UniversalTimestampsStorage_$219_storage_ptr_$","typeString":"function () pure returns (struct UniversalTimestamps.UniversalTimestampsStorage storage pointer)"}},"id":287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2294:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2255:71:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":289,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"2340:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2342:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"2340:12:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":292,"indexExpression":{"id":291,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2353:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2340:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2362:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2340:23:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":313,"nodeType":"IfStatement","src":"2336:152:2","trueBody":{"id":312,"nodeType":"Block","src":"2365:123:2","statements":[{"expression":{"id":302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":295,"name":"$","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"2379:1:2","typeDescriptions":{"typeIdentifier":"t_struct$_UniversalTimestampsStorage_$219_storage_ptr","typeString":"struct UniversalTimestamps.UniversalTimestampsStorage storage pointer"}},"id":298,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2381:10:2","memberName":"timestamps","nodeType":"MemberAccess","referencedDeclaration":218,"src":"2379:12:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":299,"indexExpression":{"id":297,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2392:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2379:18:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":300,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2400:5:2","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2406:9:2","memberName":"timestamp","nodeType":"MemberAccess","src":"2400:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2379:36:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":303,"nodeType":"ExpressionStatement","src":"2379:36:2"},{"eventCall":{"arguments":[{"id":305,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":270,"src":"2443:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":306,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2449:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2453:6:2","memberName":"sender","nodeType":"MemberAccess","src":"2449:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":308,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2461:5:2","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2467:9:2","memberName":"timestamp","nodeType":"MemberAccess","src":"2461:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":304,"name":"Attested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":173,"src":"2434:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes32,address,uint256)"}},"id":310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:43:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":311,"nodeType":"EmitStatement","src":"2429:48:2"}]}}]},"baseFunctions":[178],"documentation":{"id":268,"nodeType":"StructuredDocumentation","src":"2040:95:2","text":" @notice Attest Merkle Root\n @param root The Merkle Root to be attested"},"functionSelector":"23c3617f","implemented":true,"kind":"function","modifiers":[],"name":"attest","nameLocation":"2149:6:2","parameters":{"id":271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":270,"mutability":"mutable","name":"root","nameLocation":"2164:4:2","nodeType":"VariableDeclaration","scope":315,"src":"2156:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":269,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2156:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2155:14:2"},"returnParameters":{"id":272,"nodeType":"ParameterList","parameters":[],"src":"2179:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":325,"nodeType":"FunctionDefinition","src":"2750:84:2","nodes":[],"body":{"id":324,"nodeType":"Block","src":"2832:2:2","nodes":[],"statements":[]},"baseFunctions":[41178],"documentation":{"id":316,"nodeType":"StructuredDocumentation","src":"2500:245:2","text":" @dev Authorizes an upgrade to `newImplementation`.\n This function is restricted to the contract owner via the {onlyOwner} modifier,\n ensuring that only the owner can authorize upgrades to the implementation."},"implemented":true,"kind":"function","modifiers":[{"id":322,"kind":"modifierInvocation","modifierName":{"id":321,"name":"onlyOwner","nameLocations":["2822:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":40222,"src":"2822:9:2"},"nodeType":"ModifierInvocation","src":"2822:9:2"}],"name":"_authorizeUpgrade","nameLocation":"2759:17:2","overrides":{"id":320,"nodeType":"OverrideSpecifier","overrides":[],"src":"2813:8:2"},"parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":318,"mutability":"mutable","name":"newImplementation","nameLocation":"2785:17:2","nodeType":"VariableDeclaration","scope":325,"src":"2777:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":317,"name":"address","nodeType":"ElementaryTypeName","src":"2777:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2776:27:2"},"returnParameters":{"id":323,"nodeType":"ParameterList","parameters":[],"src":"2832:0:2"},"scope":326,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":200,"name":"Initializable","nameLocations":["1074:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":41058,"src":"1074:13:2"},"id":201,"nodeType":"InheritanceSpecifier","src":"1074:13:2"},{"baseName":{"id":202,"name":"OwnableUpgradeable","nameLocations":["1089:18:2"],"nodeType":"IdentifierPath","referencedDeclaration":40327,"src":"1089:18:2"},"id":203,"nodeType":"InheritanceSpecifier","src":"1089:18:2"},{"baseName":{"id":204,"name":"UUPSUpgradeable","nameLocations":["1109:15:2"],"nodeType":"IdentifierPath","referencedDeclaration":41224,"src":"1109:15:2"},"id":205,"nodeType":"InheritanceSpecifier","src":"1109:15:2"},{"baseName":{"id":206,"name":"IUniversalTimestamps","nameLocations":["1126:20:2"],"nodeType":"IdentifierPath","referencedDeclaration":186,"src":"1126:20:2"},"id":207,"nodeType":"InheritanceSpecifier","src":"1126:20:2"}],"canonicalName":"UniversalTimestamps","contractDependencies":[],"contractKind":"contract","documentation":{"id":199,"nodeType":"StructuredDocumentation","src":"506:535:2","text":" @title UniversalTimestamps\n @dev Records and exposes timestamps for attested Merkle roots using ERC-7201\n namespaced storage (`uts.storage.UniversalTimestamps`) derived via\n {SlotDerivation}, and is implemented as a UUPS upgradeable contract via\n OpenZeppelin's Initializable, OwnableUpgradeable, and UUPSUpgradeable\n base contracts. Storage is kept in a dedicated namespaced struct to remain\n layout-compatible across upgrades, while upgrades are authorized by the\n contract owner through {_authorizeUpgrade}."},"fullyImplemented":true,"linearizedBaseContracts":[326,186,41224,40412,40327,40381,41058],"name":"UniversalTimestamps","nameLocation":"1051:19:2","scope":327,"usedErrors":[40163,40168,40470,40483,40807,40810,41081,41086,41236,41627],"usedEvents":[173,40174,40389,40815]}],"license":"MIT"},"id":2} \ No newline at end of file diff --git a/crates/contracts/src/lib.rs b/crates/contracts/src/lib.rs index 1032d4c..f955e44 100644 --- a/crates/contracts/src/lib.rs +++ b/crates/contracts/src/lib.rs @@ -2,6 +2,8 @@ /// UniversalTimestamps contract pub mod uts { + use alloy_primitives::{Address, address}; + #[doc(hidden)] pub mod binding { use alloy_sol_types::sol; @@ -24,6 +26,9 @@ pub mod uts { pub use binding::UniversalTimestamps::{BYTECODE, DEPLOYED_BYTECODE, deploy, deploy_builder}; + /// Default address for the UniversalTimestamps contract. + pub const DEFAULT_ADDRESS: Address = address!("0xceB7a9E77bd00D0391349B9bC989167cAB5e35e7"); + #[cfg(test)] mod tests { use super::*; diff --git a/foundry.toml b/foundry.toml index 46135a3..eed2c8e 100644 --- a/foundry.toml +++ b/foundry.toml @@ -13,3 +13,14 @@ script = "contract-scripts" solc_version = "0.8.24" src = "contracts" test = "contract-tests" + +# Set EVM version explicitly (must match across environments) +evm_version = "cancun" + +# Disable metadata hash for deterministic bytecode +bytecode_hash = "none" +cbor_metadata = false + +# If using optimizer, keep settings consistent +optimizer = true +optimizer_runs = 200 diff --git a/script/DeployCreate2.s.sol b/script/DeployCreate2.s.sol new file mode 100644 index 0000000..07a73ab --- /dev/null +++ b/script/DeployCreate2.s.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import {Script, console} from "forge-std/Script.sol"; +import {UniversalTimestamps} from "../contracts/UniversalTimestamps.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +interface ICreateX { + function deployCreate2(bytes32 salt, bytes memory initCode) external payable returns (address); + + function computeCreate2Address(bytes32 salt, bytes32 initCodeHash) external view returns (address); +} + +contract DeployCreate2 is Script { + // CreateX is deployed at the same address on all supported chains + ICreateX constant CREATEX = ICreateX(0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed); + bytes32 constant SALT = keccak256("universal-timestamps"); + + function run() public { + address owner = vm.envAddress("OWNER_ADDRESS"); + + vm.startBroadcast(); + UniversalTimestamps implementation = new UniversalTimestamps{salt: SALT}(); + // Implementation deployed at: 0x2D806e4ae1c3FDCfecb019B192a53371CAC889A7 + console.log("Implementation deployed at:", address(implementation)); + + bytes memory initData = abi.encodeCall(UniversalTimestamps.initialize, (owner)); + + ERC1967Proxy proxy = new ERC1967Proxy{salt: SALT}(address(implementation), initData); + vm.stopBroadcast(); + + // Proxy deployed at: 0xceB7a9E77bd00D0391349B9bC989167cAB5e35e7 + console.log("Proxy deployed at:", address(proxy)); + } +} From 5101782b0d4eb8b18f0ab71e512347c7acdb8966 Mon Sep 17 00:00:00 2001 From: lightsing Date: Sat, 21 Feb 2026 12:15:10 +0800 Subject: [PATCH 7/7] fmt --- crates/calendar/src/main.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/crates/calendar/src/main.rs b/crates/calendar/src/main.rs index a6431fb..0480225 100644 --- a/crates/calendar/src/main.rs +++ b/crates/calendar/src/main.rs @@ -1,6 +1,6 @@ //! Calendar server -use alloy_primitives::{address, b256}; +use alloy_primitives::b256; use alloy_provider::{ProviderBuilder, network::EthereumWallet}; use alloy_signer_local::{LocalSigner, MnemonicBuilder}; use axum::{ @@ -33,9 +33,6 @@ async fn main() -> eyre::Result<()> { // TODO: graceful shutdown let journal = Journal::with_capacity(RING_BUFFER_CAPACITY); - // ethereum provider - // Implementation deployed at: 0xf74254bf3c40b29259ce12bd35e74f40b0fda07d - // Proxy deployed at: 0x98c857e675e472cf2fd98c478ed4ecc4caf81fae let key = MnemonicBuilder::from_phrase(env::var("MNEMONIC")?.as_str()) .index(0u32)? .build()?; @@ -44,10 +41,7 @@ async fn main() -> eyre::Result<()> { .connect("https://0xrpc.io/sep") .await?; - let contract = UniversalTimestamps::new( - address!("0x98c857e675e472cf2fd98c478ed4ecc4caf81fae"), - provider.clone(), - ); + let contract = UniversalTimestamps::new(uts_contracts::uts::DEFAULT_ADDRESS, provider.clone()); // stamper let reader = journal.reader();