@invisi-labs/sdk 1.1.6 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/broadcaster-3KTB4JO2.cjs +21 -0
- package/dist/broadcaster-3KTB4JO2.cjs.map +1 -0
- package/dist/broadcaster-7ZKKSTZQ.js +21 -0
- package/dist/broadcaster-preparation-PJ263WBL.cjs +15 -0
- package/dist/broadcaster-preparation-PJ263WBL.cjs.map +1 -0
- package/dist/broadcaster-preparation-ZQAPZAUG.js +15 -0
- package/dist/broadcaster-preparation-ZQAPZAUG.js.map +1 -0
- package/dist/chunk-2URICDPW.cjs +167 -0
- package/dist/chunk-2URICDPW.cjs.map +1 -0
- package/dist/chunk-3D24ABYR.js +86 -0
- package/dist/chunk-3D24ABYR.js.map +1 -0
- package/dist/chunk-3KTQQZOW.cjs +71 -0
- package/dist/chunk-3KTQQZOW.cjs.map +1 -0
- package/dist/chunk-4H4FARQK.js +1582 -0
- package/dist/chunk-4H4FARQK.js.map +1 -0
- package/dist/chunk-4SDP53YQ.cjs +765 -0
- package/dist/chunk-4SDP53YQ.cjs.map +1 -0
- package/dist/{chunk-QC6TQR3R.js → chunk-4VI6LYGH.js} +35 -12
- package/dist/chunk-4VI6LYGH.js.map +1 -0
- package/dist/chunk-BBSRP4MH.cjs +287 -0
- package/dist/chunk-BBSRP4MH.cjs.map +1 -0
- package/dist/chunk-DGMVGFKM.js +41 -0
- package/dist/chunk-DGMVGFKM.js.map +1 -0
- package/dist/chunk-GUD3LAUO.js +765 -0
- package/dist/chunk-GUD3LAUO.js.map +1 -0
- package/dist/chunk-HCB7RQ3S.cjs +79 -0
- package/dist/chunk-HCB7RQ3S.cjs.map +1 -0
- package/dist/{broadcaster-preparation-QVL62KM6.js → chunk-HKGJXQVN.js} +73 -34
- package/dist/chunk-HKGJXQVN.js.map +1 -0
- package/dist/chunk-HLH5JZD4.js +287 -0
- package/dist/chunk-HLH5JZD4.js.map +1 -0
- package/dist/chunk-J6TZZVAM.cjs +230 -0
- package/dist/chunk-J6TZZVAM.cjs.map +1 -0
- package/dist/chunk-LOR6PYH5.cjs +397 -0
- package/dist/chunk-LOR6PYH5.cjs.map +1 -0
- package/dist/chunk-MA2QZEF5.cjs +399 -0
- package/dist/chunk-MA2QZEF5.cjs.map +1 -0
- package/dist/chunk-MI4IP4ZD.cjs +86 -0
- package/dist/chunk-MI4IP4ZD.cjs.map +1 -0
- package/dist/chunk-NKYHYIRP.cjs +1582 -0
- package/dist/chunk-NKYHYIRP.cjs.map +1 -0
- package/dist/chunk-OCZLJKIA.cjs +41 -0
- package/dist/chunk-OCZLJKIA.cjs.map +1 -0
- package/dist/chunk-R5YAOJKB.js +71 -0
- package/dist/chunk-R5YAOJKB.js.map +1 -0
- package/dist/chunk-RY4M2CIQ.js +399 -0
- package/dist/chunk-RY4M2CIQ.js.map +1 -0
- package/dist/chunk-THMD5QO2.js +79 -0
- package/dist/chunk-THMD5QO2.js.map +1 -0
- package/dist/chunk-ZD2652WH.js +230 -0
- package/dist/chunk-ZD2652WH.js.map +1 -0
- package/dist/credit.cjs +1 -0
- package/dist/credit.cjs.map +1 -0
- package/dist/credit.d.cts +12 -0
- package/dist/credit.d.ts +12 -0
- package/dist/credit.js +1 -0
- package/dist/credit.js.map +1 -0
- package/dist/ethers.cjs +11 -385
- package/dist/ethers.cjs.map +1 -1
- package/dist/ethers.d.cts +16 -6
- package/dist/ethers.d.ts +16 -6
- package/dist/ethers.js +1 -1
- package/dist/index-CLhGwLxZ.d.cts +42 -0
- package/dist/index-Crp-ZFiM.d.ts +42 -0
- package/dist/index.cjs +479 -7847
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +87 -710
- package/dist/index.d.ts +87 -710
- package/dist/index.js +407 -869
- package/dist/index.js.map +1 -1
- package/dist/note.cjs +11 -0
- package/dist/note.cjs.map +1 -0
- package/dist/note.d.cts +29 -0
- package/dist/note.d.ts +29 -0
- package/dist/note.js +11 -0
- package/dist/note.js.map +1 -0
- package/dist/operation-bridge-CoECSxfi.d.cts +472 -0
- package/dist/operation-bridge-CoECSxfi.d.ts +472 -0
- package/dist/preparation-HUBTVCZE.js +404 -0
- package/dist/preparation-HUBTVCZE.js.map +1 -0
- package/dist/preparation-QD3ZSYV5.cjs +404 -0
- package/dist/preparation-QD3ZSYV5.cjs.map +1 -0
- package/dist/provenance-preparation-43DN2WK7.cjs +16 -0
- package/dist/provenance-preparation-43DN2WK7.cjs.map +1 -0
- package/dist/provenance-preparation-HEZE4L5H.js +16 -0
- package/dist/provenance-preparation-HEZE4L5H.js.map +1 -0
- package/dist/provenance.cjs +59 -0
- package/dist/provenance.cjs.map +1 -0
- package/dist/provenance.d.cts +34 -0
- package/dist/provenance.d.ts +34 -0
- package/dist/provenance.js +59 -0
- package/dist/provenance.js.map +1 -0
- package/dist/receipt-logs-8Msm_HZS.d.ts +322 -0
- package/dist/receipt-logs-DWG4In8N.d.cts +322 -0
- package/dist/session-support.cjs +189 -0
- package/dist/session-support.cjs.map +1 -0
- package/dist/session-support.d.cts +284 -0
- package/dist/session-support.d.ts +284 -0
- package/dist/session-support.js +189 -0
- package/dist/session-support.js.map +1 -0
- package/package.json +25 -19
- package/dist/NoteOutput-DRkVnwlx.d.cts +0 -398
- package/dist/NoteOutput-DpDC6T2O.d.ts +0 -398
- package/dist/broadcaster-preparation-QVL62KM6.js.map +0 -1
- package/dist/chunk-4SD3MW6N.js +0 -4711
- package/dist/chunk-4SD3MW6N.js.map +0 -1
- package/dist/chunk-FL4TIGWW.js +0 -1781
- package/dist/chunk-FL4TIGWW.js.map +0 -1
- package/dist/chunk-QC6TQR3R.js.map +0 -1
- package/dist/indexeddb.cjs +0 -6878
- package/dist/indexeddb.cjs.map +0 -1
- package/dist/indexeddb.d.cts +0 -20
- package/dist/indexeddb.d.ts +0 -20
- package/dist/indexeddb.js +0 -71
- package/dist/indexeddb.js.map +0 -1
- package/dist/memory.cjs +0 -6886
- package/dist/memory.cjs.map +0 -1
- package/dist/memory.d.cts +0 -12
- package/dist/memory.d.ts +0 -12
- package/dist/memory.js +0 -11
- package/dist/sqlite.cjs +0 -6862
- package/dist/sqlite.cjs.map +0 -1
- package/dist/sqlite.d.cts +0 -28
- package/dist/sqlite.d.ts +0 -28
- package/dist/sqlite.js +0 -55
- package/dist/sqlite.js.map +0 -1
- package/dist/state-C4HZFotm.d.cts +0 -78
- package/dist/state-C4HZFotm.d.ts +0 -78
- package/dist/store-8aBhnbGr.d.ts +0 -42
- package/dist/store-YrbXb6CY.d.cts +0 -42
- /package/dist/{memory.js.map → broadcaster-7ZKKSTZQ.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/gas-benchmarks.json","../src/gas-estimation.ts","../src/session/protocol-events.ts","../src/session/receipt-logs.ts","../src/session/discovery.ts","../src/session/DisclosureVerifier.ts","../src/session/store.ts","../src/session/operation-execution.ts","../src/session/proof-integrity.ts","../src/session/operation-preview.ts","../src/session/Operation.ts","../src/session/operation-confirmation.ts","../src/session/aggregate-receipt.ts","../src/session/receipts.ts","../src/session/WalletSession.ts","../src/session/history.ts","../src/session/refresh.ts","../src/session/WalletUpdater.ts","../src/session/inventory.ts","../src/session/codec.ts","../src/session/index.ts"],"sourcesContent":["[\n {\n \"formatVersion\": 1,\n \"id\": \"protocol-044e2ee-bc51dde071f1-prague-credit-real\",\n \"deployment\": {\n \"chainId\": \"31337\",\n \"protocolAddress\": \"0x8a276b1F407e1273EDFf65e2f6292ee18dA68DD9\",\n \"runtimeCodeHash\": \"0xf311c797d0296b13c1ef3f230bf4aadd621e38572f0c09a3f631b8edd0402ab4\",\n \"tokenAddress\": \"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf\"\n },\n \"source\": {\n \"protocolCommit\": \"044e2ee9aeb9ba0e3dbd0630247495189e0405d4\",\n \"measuredAt\": \"2026-11-05T09:54:05.044Z\",\n \"chain\": \"Anvil 31337\",\n \"hardfork\": \"prague\",\n \"token\": \"MockERC20\",\n \"verifier\": \"real\",\n \"fingerprints\": {\n \"protocolSourceSha256\": \"bc51dde071f1ac4616b3264305aeb2b04b52e0d13772625feed53fb5e8dae51b\",\n \"dirtyDiffSha256\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"compiledArtifactsSha256\": \"4900a39e94aeb31f686915bf8618efabf573b93365444db46a0bff3544741221\",\n \"creditManifestSha256\": \"c27ff83889c3082b4c918bd63e15437881f0a6f12ed7f130312e1140873679fb\",\n \"userManifestSha256\": \"9ef9d34d4459c2843d022712093216142e3eacdd1467d2382a6a68ad36c33b8f\",\n \"sdkSourceSha256\": \"0f2fe2deda57196d3736964c8e2caea6d4975d2c246cb6d11edbb6c4b5eeead6\"\n },\n \"toolchain\": {\n \"solidity\": \"0.8.38\",\n \"barretenberg\": \"6.0.0\",\n \"noir\": \"1.0.0-rc.6\",\n \"evmVersion\": \"prague\",\n \"optimizerRuns\": 200,\n \"anvil\": \"anvil Version: 1.8.6\"\n },\n \"blockGasLimit\": \"500000000\",\n \"runtimeContracts\": {\n \"transact_user_slots14_direct_Verifier\": {\n \"address\": \"0x5FbDB2315678afecb367f032d93F642f64180aa3\",\n \"runtimeCodeHash\": \"0x42d1932097f18874242d98855b2fc167471ba84dd122ab3744996dd64320f675\"\n },\n \"transact_user_slots14-adapter\": {\n \"address\": \"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512\",\n \"runtimeCodeHash\": \"0x876f0e43fc1d24475c0c63ee8c7907427d534b0c604f5985aacd28ee2c6d1b12\"\n },\n \"transact_user_slots56_direct_Verifier\": {\n \"address\": \"0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0\",\n \"runtimeCodeHash\": \"0xefca4a7ee5382b0f2029571f6781f2ade7ac698906c32d3e49f10def631e7882\"\n },\n \"transact_user_slots56-adapter\": {\n \"address\": \"0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9\",\n \"runtimeCodeHash\": \"0x945680c4278b61c07bf07fa7637908e9a38ccd414c9330bf23b3c41119ea0de6\"\n },\n \"transact_user_slots112_direct_Verifier\": {\n \"address\": \"0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9\",\n \"runtimeCodeHash\": \"0xfbf97cd940123ab3e81ce55283efb48b55ddaa95423fff4d0d648b248f4e196b\"\n },\n \"transact_user_slots112-adapter\": {\n \"address\": \"0x5FC8d32690cc91D4c39d9d3abcBD16989F875707\",\n \"runtimeCodeHash\": \"0xac129aa749b7ece8c51ed68f4f0afcc82a1cbd7b2a01f5ff7ff7de1dcde21b1e\"\n },\n \"transact_user_slots168_direct_Verifier\": {\n \"address\": \"0x0165878A594ca255338adfa4d48449f69242Eb8F\",\n \"runtimeCodeHash\": \"0x7ee9799d55001f74c8d88179dd0247b3de932516f975605ba248b52e7ba540c8\"\n },\n \"transact_user_slots168-adapter\": {\n \"address\": \"0xa513E6E4b8f2a923D98304ec87F64353C4D5C853\",\n \"runtimeCodeHash\": \"0x24b5ea6f436b90b3821bd0ea4872fb205c996fd74f1546bc1086d98b7ec5d87d\"\n },\n \"transact_aggregate_14_4_Verifier\": {\n \"address\": \"0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6\",\n \"runtimeCodeHash\": \"0xae41039ded63fa7777c99a2552ba603a3a4d9703d464079dff787dab6893ef24\"\n },\n \"transact_aggregate_14_4-adapter\": {\n \"address\": \"0x8A791620dd6260079BF849Dc5567aDC3F2FdC318\",\n \"runtimeCodeHash\": \"0xf4e86e9b2001f5972ce00f7fcd5a01deb9bfe5d676e437e74135ee7036469ca3\"\n },\n \"transact_aggregate_14_8_Verifier\": {\n \"address\": \"0x610178dA211FEF7D417bC0e6FeD39F05609AD788\",\n \"runtimeCodeHash\": \"0x089f476f56fb1003586b18c0b5a75f9d24c76d4804d84ea202005371eae333de\"\n },\n \"transact_aggregate_14_8-adapter\": {\n \"address\": \"0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e\",\n \"runtimeCodeHash\": \"0xc40142342902da65f45bb995724b129389e3505c283d7209a6c29bf27521c363\"\n },\n \"transact_aggregate_14_12_Verifier\": {\n \"address\": \"0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0\",\n \"runtimeCodeHash\": \"0xe0cba79e66fdb75dbc082ef0f938b07e4d38acce283b87869fe414083b3e08b0\"\n },\n \"transact_aggregate_14_12-adapter\": {\n \"address\": \"0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82\",\n \"runtimeCodeHash\": \"0x155bfc9367a6f3c96ac9b4d1dc1d0358a4046b584a9a1322a9582557ea691ff4\"\n },\n \"create_credit_direct_Verifier\": {\n \"address\": \"0x9A676e781A523b5d0C0e43731313A708CB607508\",\n \"runtimeCodeHash\": \"0xbc88c374cc3c0c1e2cdf8663cee4c960f3a3ba4b210e2c520ca111e56461b23a\"\n },\n \"create_credit-adapter\": {\n \"address\": \"0x0B306BF915C4d645ff596e518fAf3F9669b97016\",\n \"runtimeCodeHash\": \"0xfd39446d56c189fbb35c0906e525433b6b9c63444c97b13990b7dd6f19bd38fc\"\n },\n \"credit_draw_slots1_direct_Verifier\": {\n \"address\": \"0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1\",\n \"runtimeCodeHash\": \"0x47be80e72c3a22ea044638f6004de8c3a0264d5a0d17189c01153cdabfd7bab6\"\n },\n \"credit_draw_slots1-adapter\": {\n \"address\": \"0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE\",\n \"runtimeCodeHash\": \"0x73a2af387b45cecf383b90f4cebb54b263f621a5038da947944c54f1089ba288\"\n },\n \"credit_draw_slots12_direct_Verifier\": {\n \"address\": \"0x68B1D87F95878fE05B998F19b66F4baba5De1aed\",\n \"runtimeCodeHash\": \"0x244d9ba22f5c736c2a5c42c466701e2a8ba7ae8108665133541026ea45d56e04\"\n },\n \"credit_draw_slots12-adapter\": {\n \"address\": \"0x3Aa5ebB10DC797CAC828524e59A333d0A371443c\",\n \"runtimeCodeHash\": \"0x63c200eae61218b865f3c8b418bf0887da7a70ebf41f55825e4750c36a1d1914\"\n },\n \"credit_draw_slots50_direct_Verifier\": {\n \"address\": \"0xc6e7DF5E7b4f2A278906862b61205850344D4e7d\",\n \"runtimeCodeHash\": \"0x2ad5eb64bcfae34ef04111dd8f9c1ffc5fc8aa6c1ad3a65d8da78233f3390660\"\n },\n \"credit_draw_slots50-adapter\": {\n \"address\": \"0x59b670e9fA9D0A427751Af201D676719a970857b\",\n \"runtimeCodeHash\": \"0x1716df69f1eb1c1db485bc3ba4a4ed5a1009275c9058a9e96b28ab3431a6c006\"\n },\n \"credit_draw_slots120_direct_Verifier\": {\n \"address\": \"0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1\",\n \"runtimeCodeHash\": \"0x523b6d211618bbd33d708f8198b9f3daafc10e2fa7a6a857db5795ed748a24e4\"\n },\n \"credit_draw_slots120-adapter\": {\n \"address\": \"0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44\",\n \"runtimeCodeHash\": \"0x32d875eb4f4c27252fa958971b66e1fdff8c02adb007fea2bf31eee4b851a132\"\n },\n \"credit_cancel_direct_Verifier\": {\n \"address\": \"0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f\",\n \"runtimeCodeHash\": \"0x4058133b7ecd31fe06749bfa3107ad0fbcdc9bf72d3b9cbf4dbd2b2f65be6d35\"\n },\n \"credit_cancel-adapter\": {\n \"address\": \"0x4A679253410272dd5232B3Ff7cF5dbB88f295319\",\n \"runtimeCodeHash\": \"0x0f570794fb4b7f15a791c59c760732d9f9408d1e3bea881ba7c5b76b36fb4e9b\"\n },\n \"credit_top_up_direct_Verifier\": {\n \"address\": \"0x7a2088a1bFc9d81c55368AE168C2C02570cB814F\",\n \"runtimeCodeHash\": \"0x7ada3623c851a9cfba7863a75f4fa289d747040f1a822510eefecc53d70180cd\"\n },\n \"credit_top_up-adapter\": {\n \"address\": \"0x09635F643e140090A9A8Dcd712eD6285858ceBef\",\n \"runtimeCodeHash\": \"0x23bba4eca8306f4bc02ead10449775a359beeed2065ea8c84da4dc6b9e4dfc82\"\n },\n \"PrivateTransferVerifierRegistry\": {\n \"address\": \"0xc5a5C42992dECbae36851359345FE25997F5C42d\",\n \"runtimeCodeHash\": \"0xbc74aacbc22d853cb50fe2041f20014e644fa8f83e06f51656b4667f1da164bc\"\n },\n \"CrossTreeVerifierRegistry\": {\n \"address\": \"0x67d269191c92Caf3cD7723F116c85e6E9bf55933\",\n \"runtimeCodeHash\": \"0x818ce6a634a11cdd9913873d3a265254dda45b490431ad1636373237e2685ba1\"\n },\n \"DualVerifierRouter\": {\n \"address\": \"0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E\",\n \"runtimeCodeHash\": \"0xb3bdc1aa5a6e4eac85e3651615c7942c5565f0593d79bacccb19b5aa587548ca\"\n },\n \"AtomicBatchOutputLib\": {\n \"address\": \"0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690\",\n \"runtimeCodeHash\": \"0xef68c4a35a62fbbb4d0918f1612f0ffd9d250c9ceefd38e59e9c8ef042addb45\"\n },\n \"FundingLib\": {\n \"address\": \"0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB\",\n \"runtimeCodeHash\": \"0x36f4e6d20cf7ca1b221dad34bc34ed7b8540c0e774c594652048822272e6bb52\"\n },\n \"PrivateTransferLib\": {\n \"address\": \"0x9E545E3C0baAB3E08CdfD552C960A1050f373042\",\n \"runtimeCodeHash\": \"0x1e538d13c68b2a7a2f605466cd7c09c166b904476a6b5b372f8b9b45d9de9a62\"\n },\n \"CrossTreeTransferLib\": {\n \"address\": \"0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9\",\n \"runtimeCodeHash\": \"0x9ec892d5a5d1c38e3218c7d38c74bd63034641cc458a195ec63c6a50f67ded25\"\n },\n \"AggregateTransferLib\": {\n \"address\": \"0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8\",\n \"runtimeCodeHash\": \"0x2c01c84317448e4786e7a7b9c06f6f3b4990354f151ae6914cdb75d8b7ebe881\"\n },\n \"CreateCreditLib\": {\n \"address\": \"0x851356ae760d987E095750cCeb3bC6014560891C\",\n \"runtimeCodeHash\": \"0x8b28e626c6a0f41179880773a48681362a05e0eee12193d1641ae5bb625fe960\"\n },\n \"CreditLifecycleLib\": {\n \"address\": \"0xf5059a5D33d5853360D16C683c16e67980206f36\",\n \"runtimeCodeHash\": \"0xa177a7f1dfb69cf2d6eea899ef8170959587b8cb3c60559c3b2cecf62309bfc4\"\n },\n \"ShieldLib\": {\n \"address\": \"0x95401dc811bb5740090279Ba06cfA8fcF6113778\",\n \"runtimeCodeHash\": \"0xfde7bbf1c02e17ab2d9fc9849fc282b29ac1db86378eec27f3a006d7484aa768\"\n },\n \"InvisiFactory\": {\n \"address\": \"0x998abeb3E57409262aE5b751f60747921B33613E\",\n \"runtimeCodeHash\": \"0x9055356390e48564adeca0065b12698a5d09451960af97ad2f5c2e450cb9c84c\"\n },\n \"InvisiAddressRegistry\": {\n \"address\": \"0x70e0bA845a1A0F2DA3359C97E0285013525FFC49\",\n \"runtimeCodeHash\": \"0x007da3f4e888366ba0eed52cd511c4a369359291387ad19ca37e89eb395fce30\"\n },\n \"InvisiProtocol\": {\n \"address\": \"0x8a276b1F407e1273EDFf65e2f6292ee18dA68DD9\",\n \"runtimeCodeHash\": \"0xf311c797d0296b13c1ef3f230bf4aadd621e38572f0c09a3f631b8edd0402ab4\"\n },\n \"MockERC20\": {\n \"address\": \"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf\",\n \"runtimeCodeHash\": \"0xf7f676b5c54f6e94f82f0de65a0117468a0d915e8a79d150e74f76bd6d7f708b\"\n }\n },\n \"assumptions\": [\n \"normal CREATE/Factory deployment and fresh registry; EIP170/EIP3860 unchanged; no code/storage injection\",\n \"Solidity0.8.38 optimizer200 Prague; pinned BB6.0.0 real verifiers; every native proof independently verified\",\n \"one physical source tree and 123 existing leaves shared by every sample; top-up has two authenticated source groups; no rollover or screener\",\n \"funding/approvals/121 genuine Credit seeds/usage-seed draw/payout reset excluded from business gas\",\n \"each round restores identical token balances, exact caller allowance100, note cursor, nullifiers and baseline; spender payout starts zero; broadcasterFee0\",\n \"complete receipt.gasUsed is measured, including verifier/calldata/logging/output insertion; memo0\",\n \"Prague local block gas limit500000000; measured transactions may be unmineable under lower network transaction/block limits\",\n \"observed three-sample ranges are neither a confidence interval nor a recommended transaction gas limit\"\n ]\n },\n \"measurements\": [\n {\n \"id\": \"create-credit-caller-0x0\",\n \"shape\": {\n \"kind\": \"create-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 1132\n },\n \"circuit\": {\n \"circuitName\": \"create_credit\",\n \"target\": \"evm\",\n \"artifactSha256\": \"16a41fd585d5f925e4e93fd6a308e1ca8c90ea287778871cb0d214f0d0e223ce\",\n \"vkSha256\": \"e8d3dc1f6922dbe1a0aa6016e65664be28d7005180ee943a4b237ac5518971bb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1577203\",\n \"transactionHash\": \"0xf0532b598b3e3716709ff7aab549f95775ac0587c2f7cd0203f1a07cc32b46fc\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x61f3ac4cb127a29dc679067666d91e3c123fda2fe8a149e46992d0581de6dbc6\",\n \"calldataBytes\": 11844\n },\n {\n \"gasUsed\": \"1577191\",\n \"transactionHash\": \"0xcd1718bea7c432458c18f4215c36fa95ad5da0242fad67f1daaa33344518ae05\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x08215dac6d5558f7ec753df9f66b3a03c7071b7c85b650ba170f621895ea53be\",\n \"calldataBytes\": 11844\n },\n {\n \"gasUsed\": \"1577203\",\n \"transactionHash\": \"0xfd07f0fb37c58e302100fb533f946d8fae09514e53181666efc346313c758224\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x5b1ac84931e9343276e5241088041bac0d07f1d7eced2b335eeccfe1a266d05d\",\n \"calldataBytes\": 11844\n }\n ]\n },\n {\n \"id\": \"create-credit-1x1\",\n \"shape\": {\n \"kind\": \"create-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"create_credit\",\n \"target\": \"evm\",\n \"artifactSha256\": \"16a41fd585d5f925e4e93fd6a308e1ca8c90ea287778871cb0d214f0d0e223ce\",\n \"vkSha256\": \"e8d3dc1f6922dbe1a0aa6016e65664be28d7005180ee943a4b237ac5518971bb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1673934\",\n \"transactionHash\": \"0x267c40c655eaf82407bd9dcf4413a0e3ee991a39e2bf9f28506eb761d8eaf8ea\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x137299123d2f9e8bae9f56f5f6e66f6020d41cc6e2397071458fb28abdc1d6b5\",\n \"calldataBytes\": 12196\n },\n {\n \"gasUsed\": \"1673898\",\n \"transactionHash\": \"0x967d376d819fb00d0d52fb28ca8b3c1fce10e7ac9ff0314772c8d367b51b2e52\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x16992b27d6bec5d87d6f2488ea31ad232b48dc0fd2effb724e312ddf83dd84f8\",\n \"calldataBytes\": 12196\n },\n {\n \"gasUsed\": \"1673994\",\n \"transactionHash\": \"0xd474a561f35e353f446d312aba4338011f6a1765e5019cd839498ade1b2c8ad4\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xdd2ff761b339b033dd11b462585cf747fdf97f6c304a66ddd1344d2421b790ae\",\n \"calldataBytes\": 12196\n }\n ]\n },\n {\n \"id\": \"draw-credit-1-partial\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 1,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 1,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1132\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots1\",\n \"target\": \"evm\",\n \"artifactSha256\": \"4542b227e0552b45c302f1dace21cadeba4962c96244e021472f1f7531cff8d1\",\n \"vkSha256\": \"43c051a2bedf9454c12e70b10156361e414944823ba23e80662c16c7ced0a2ce\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1587992\",\n \"transactionHash\": \"0x7eecfe45066881f2e3a39d4d016e5234793a3927056ec51e5772661a7b0b8bd2\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x4c6dd7f24673ec5e8f2bc6303827e3329f3b73d37043a638ed1bd4655282fa6a\",\n \"calldataBytes\": 11588\n },\n {\n \"gasUsed\": \"1587992\",\n \"transactionHash\": \"0xb196e4ce260287d68a8ef8e072605f2cfb97e299e1ed3d8654ff33560a29a34d\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x600aeaf1ca61fe7e4eb39dd8b618f696ba4b6a18a867232af62296c1fc7a24c0\",\n \"calldataBytes\": 11588\n },\n {\n \"gasUsed\": \"1587848\",\n \"transactionHash\": \"0x14de44b3d363a129e8404c1e068d54098ccaf409bc0aaa142a962de94bc21825\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x5312304c773a695984e22ff3eb08c4ca6f022e6e6bc8d7706012846ce8ac4f7c\",\n \"calldataBytes\": 11588\n }\n ]\n },\n {\n \"id\": \"draw-credit-1-full\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 1,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 1,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots1\",\n \"target\": \"evm\",\n \"artifactSha256\": \"4542b227e0552b45c302f1dace21cadeba4962c96244e021472f1f7531cff8d1\",\n \"vkSha256\": \"43c051a2bedf9454c12e70b10156361e414944823ba23e80662c16c7ced0a2ce\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1043043\",\n \"transactionHash\": \"0xfc91b84385a2f69bc253f0f486aa171a4911edd3041647b3758b44c0102c7c2f\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x96f83ea8e57ebf1b8572bfbcb6285b8a57c894be0e3134e0c2b24dc44262fb07\",\n \"calldataBytes\": 10372\n },\n {\n \"gasUsed\": \"1043043\",\n \"transactionHash\": \"0xddf613a92d05c1b80cf9074a0484fdbf3a2bfd94555b0d9c266fdfbe2661ed59\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x27b36ebdd105eeb91be849f002816030377ea2e892fb7e1462509aa7b8632e6f\",\n \"calldataBytes\": 10372\n },\n {\n \"gasUsed\": \"1043091\",\n \"transactionHash\": \"0x6df6942fafe1ef79c963b912206bd57443c90f9c8398e5529baf39d438a15b78\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x95af3836c6fe01edbc70bab01ba2e844d0e8fdf9e03884ea5a9d569fd585ee81\",\n \"calldataBytes\": 10372\n }\n ]\n },\n {\n \"id\": \"draw-credit-12-partial\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 12,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 12,\n \"creditOutputs\": 12,\n \"creditRemainders\": 12,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 13584\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots12\",\n \"target\": \"evm\",\n \"artifactSha256\": \"dd72b0867fc3be7cd90de263bd2d0892075cb18eb4f6dd671b13111710f10369\",\n \"vkSha256\": \"5e31d771e6294993736078596d9c69f21fe7595eda50e3cce6d7406b65cf1443\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"3099088\",\n \"transactionHash\": \"0x8a760b052eb9354ef7fd539ab21105ddec51feb6b4b9c51a73a139ac4f9bc1fe\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x5f29a09258dbebafa6fa286c0a1d286bb54694df2e8bd7e7f0e1c9db26b53401\",\n \"calldataBytes\": 30276\n },\n {\n \"gasUsed\": \"3099004\",\n \"transactionHash\": \"0x4af726505fdf1cdcb053d45cce369ff2a17a023b497b438206f232577f52a721\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x762f0616f93335375441b637c545c4691e7ba09fae40952a220ef00a67198a87\",\n \"calldataBytes\": 30276\n },\n {\n \"gasUsed\": \"3099136\",\n \"transactionHash\": \"0xf27042c34b5e7c0e0bfc2e7c6c1e3dcd5b24c98b09c91ab73d156a2d0e474698\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xa7bde9fc7b6fe8e9a9082f4ae597f73608ad9ced3d670506b29584b2c67ab496\",\n \"calldataBytes\": 30276\n }\n ]\n },\n {\n \"id\": \"draw-credit-12-full\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 12,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 12,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots12\",\n \"target\": \"evm\",\n \"artifactSha256\": \"dd72b0867fc3be7cd90de263bd2d0892075cb18eb4f6dd671b13111710f10369\",\n \"vkSha256\": \"5e31d771e6294993736078596d9c69f21fe7595eda50e3cce6d7406b65cf1443\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1537560\",\n \"transactionHash\": \"0x6c78554a23c04c179a16a9da6c401f0097c02833d8e1c4a3cdeb79107c028333\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xf463ea49ed0328a93b53bc796ff2e0dd46201cd3fee06e6fff160dbb95fe0654\",\n \"calldataBytes\": 15684\n },\n {\n \"gasUsed\": \"1537620\",\n \"transactionHash\": \"0x8097a25c8c2ebced9bfa1baf39e128741e486ed5f7e23aed33ff03b280ac5a7f\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xb121edc36419facbb33f4ca69021bcd71ab6f412664591edf040ac6558b44507\",\n \"calldataBytes\": 15684\n },\n {\n \"gasUsed\": \"1537560\",\n \"transactionHash\": \"0x0a8311777aa63d9239647a14da359672f126c7aa306148d6f44f19eff48dab29\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x065a0f3dd444525a0bed28045e978e3ba74c820eda5ecc488d04e83f416ab4f0\",\n \"calldataBytes\": 15684\n }\n ]\n },\n {\n \"id\": \"draw-credit-50-partial\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 50,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 50,\n \"creditOutputs\": 50,\n \"creditRemainders\": 50,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 56600\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots50\",\n \"target\": \"evm\",\n \"artifactSha256\": \"09c7469866748b4c0c4bbf2b040844771948a170999f6dc7a38fe5c0ecda4054\",\n \"vkSha256\": \"7b613225b6f32a077011d4196c356e836d22dcd116efe687fde53144fbd8db9f\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"7998858\",\n \"transactionHash\": \"0x35a5ff5940aa7939214f82471b8d73531c07b1fcaa543bf31b0f7c1c91db73e2\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x74175711e91a10d93a426d0ef778f12a15793ff5f8f9d8b397057e7cb4e27975\",\n \"calldataBytes\": 94276\n },\n {\n \"gasUsed\": \"7998498\",\n \"transactionHash\": \"0x5e7a948f90e0d37a068d2904d5c1233b0ad6ecda632ef6968f4ec81daa3e932b\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x8b348e78bbce768f9b44d55c43017b08ae0720cf010b923d658e4150bc4bd41f\",\n \"calldataBytes\": 94276\n },\n {\n \"gasUsed\": \"7998498\",\n \"transactionHash\": \"0xf3d92e00b47c5d1c888f98c038b1dbac1986888fabbb40690762b0e9eea6b923\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x1ae727d66e31623abc741d7e5c62db4197c6238fc73a6c0984725b1dee43b9b0\",\n \"calldataBytes\": 94276\n }\n ]\n },\n {\n \"id\": \"draw-credit-50-full\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 50,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 50,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots50\",\n \"target\": \"evm\",\n \"artifactSha256\": \"09c7469866748b4c0c4bbf2b040844771948a170999f6dc7a38fe5c0ecda4054\",\n \"vkSha256\": \"7b613225b6f32a077011d4196c356e836d22dcd116efe687fde53144fbd8db9f\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"3220161\",\n \"transactionHash\": \"0xadd94db9328f43891fc6cb9c788415319c95a98bcd8b98e2a245d3ba07c1f20a\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x257deb859f7a2c14ef38cb32797b6d0278b25ce2c7cd75ccf81f0c00a1b97250\",\n \"calldataBytes\": 33476\n },\n {\n \"gasUsed\": \"3219933\",\n \"transactionHash\": \"0xe631bbd7681d42974d3b1b25f6e0c7602d32196253f6cee4dc67b5e87929132f\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xafee3915573a0316c9df0f1a56b7a4c4ff8652e74c3890f851ef351e7faedbf3\",\n \"calldataBytes\": 33476\n },\n {\n \"gasUsed\": \"3219897\",\n \"transactionHash\": \"0xfb3807a266b2bfa971b87b3820b6eba6ab968f1028b1d77c9fbcb19177fb7319\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xe6310300cca8b021fd969b27392eae58c21a9c15e071ff8836e42e6490265c0c\",\n \"calldataBytes\": 33476\n }\n ]\n },\n {\n \"id\": \"draw-credit-120-partial\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 120,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 120,\n \"creditOutputs\": 120,\n \"creditRemainders\": 120,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 135840\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots120\",\n \"target\": \"evm\",\n \"artifactSha256\": \"6ccd0366a669c50fd5da875c3eae194fe8aa4c36d35a5f9ebfd64636ea599b48\",\n \"vkSha256\": \"d715848afc5c1ecdfcef5ed5026865abef5040a3bc232fd65330a5ffee8475fb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"17418369\",\n \"transactionHash\": \"0xfab5aadd357ae6105c153dcc98aee2df80a5b46bd911dab0bd457c5440c0e9bb\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xa277729db5ab154b10f2a0c6daa2540f66de7f81e05a289f2f057fef30e43275\",\n \"calldataBytes\": 211140\n },\n {\n \"gasUsed\": \"17418537\",\n \"transactionHash\": \"0xa3d1311b426b88808cd9a5403ecd36c3aea806ac7e2089e6aa22eba7f82e80f6\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x1abf2a9ae3d60f84947bce8449d3ee19e6542a14c6bb1dcde4d37c4df9ab6dfc\",\n \"calldataBytes\": 211140\n },\n {\n \"gasUsed\": \"17417949\",\n \"transactionHash\": \"0x6c7e3735c0d30d2b1897bbacd1a85d8534b714564c87449d1c66fb7b96aebf19\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x17bbc7923c075a1beaf345fbe768629d1c895a32835343640ecb5f7a48da18ab\",\n \"calldataBytes\": 211140\n }\n ]\n },\n {\n \"id\": \"draw-credit-120-full\",\n \"shape\": {\n \"kind\": \"draw-credit\",\n \"target\": \"evm\",\n \"capacity\": 120,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 120,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_draw_slots120\",\n \"target\": \"evm\",\n \"artifactSha256\": \"6ccd0366a669c50fd5da875c3eae194fe8aa4c36d35a5f9ebfd64636ea599b48\",\n \"vkSha256\": \"d715848afc5c1ecdfcef5ed5026865abef5040a3bc232fd65330a5ffee8475fb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"6297541\",\n \"transactionHash\": \"0x0e8e80524d7c23a263ad9ed122bb61e5a1ab19285585ac402b7206d87abaf067\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x7ee829303eaaffc7823238e99e83304ccfd3ba349c64fecdee00b882fe39f854\",\n \"calldataBytes\": 65220\n },\n {\n \"gasUsed\": \"6297661\",\n \"transactionHash\": \"0x98f2be383f19b1b17f86c6d365abe86655163b7846c29e5614667ab0e2823bc8\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x3738cef2d40552677299002974043a4355f37d1d76575ee52fc4fe6b6e0c33dd\",\n \"calldataBytes\": 65220\n },\n {\n \"gasUsed\": \"6297613\",\n \"transactionHash\": \"0xb574546b0aacd7d6910e25a2a749aad7f009ed725618763c6229ee7a99fd811e\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x26a15b914134d2f5d5597d632328d368888f3d3076b486231345bb20a4749230\",\n \"calldataBytes\": 65220\n }\n ]\n },\n {\n \"id\": \"top-up-credit-1x1-unchanged-limits\",\n \"shape\": {\n \"kind\": \"top-up-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 2,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"credit_top_up\",\n \"target\": \"evm\",\n \"artifactSha256\": \"3004eea1c26ec8e33f8fc9ee171a3b6af250682efb607f7003ae58f8327998ab\",\n \"vkSha256\": \"b7f378a871a27649c3f7fd1af554c8f87d99bcf0780b21972e910212ed4e5a0d\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1714625\",\n \"transactionHash\": \"0x5cebd593124a22bfeac5d22ea51735fedbf409f61e42abd1f398c1b907f4b192\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x04b820b1ac7b4697cc16e2d29e5ba8b530906b6fa5e75da2b022b0a5851cf150\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1714697\",\n \"transactionHash\": \"0xd4506ce267c635552b112ee7d304d45433c34d938baf95a46241b88c33f7e57e\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xe7424e20b69104ccf5d407ceb8d72a8fbd3a73ea76fea15c59d8a6e9f0ff3909\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1714577\",\n \"transactionHash\": \"0xcf1af44b92f6fa4a46962ece6cbd9216db16438b0ce3320c78f62a59d8753875\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x8a4e50a429190ed3f3d33c8863682d989bdf553cb5e0d961ebd9283f19b1aeea\",\n \"calldataBytes\": 12356\n }\n ]\n },\n {\n \"id\": \"top-up-credit-1x1-changed-limits\",\n \"shape\": {\n \"kind\": \"top-up-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 2,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"credit_top_up\",\n \"target\": \"evm\",\n \"artifactSha256\": \"3004eea1c26ec8e33f8fc9ee171a3b6af250682efb607f7003ae58f8327998ab\",\n \"vkSha256\": \"b7f378a871a27649c3f7fd1af554c8f87d99bcf0780b21972e910212ed4e5a0d\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1714697\",\n \"transactionHash\": \"0xa35c6efd60b27de672329ca9b8f05bb076f8d4e2505ee94a95387e097f9a967b\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x1dd5c7d5206498ad08edcbaa5ba2002560008a6caff12383a14e3733718f0814\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1714637\",\n \"transactionHash\": \"0xf8d23c58fa9030fc891c27e45b9bd5905a8b0fe065b83803dbf0239441b64a72\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0xc30c6143900dad39d793dc13065fd9c8f1c2e4f77fd350f9a4b3c7eea930c840\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1714709\",\n \"transactionHash\": \"0xed72962263a722fcc0d8cb4218579d161dba700c490258c8b0e35a86c574b49e\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x227f3f3fc06e7263168584b1e23d0f722a3255ec818570e76fd36ee4423efcfd\",\n \"calldataBytes\": 12356\n }\n ]\n },\n {\n \"id\": \"cancel-credit-1\",\n \"shape\": {\n \"kind\": \"cancel-credit\",\n \"target\": \"evm\",\n \"capacity\": 1,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 1,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_cancel\",\n \"target\": \"evm\",\n \"artifactSha256\": \"6485609280fe5a3d44ca9f1865b29b44253b3d2cd49770d000e7bb7a3db8e65d\",\n \"vkSha256\": \"d74cf842d204cdf271c06a69482ddff11568e89630346b634d486205bec4bd9e\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"988734\",\n \"transactionHash\": \"0x6a029f228817b397197ad191ec2f4d8e17e004c5c93b58ffcf7ae0d83bb4661a\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x2d0c2050a76696544b225b450634bf892e336157e5dbe41f1a821af8d0c2702e\",\n \"calldataBytes\": 9604\n },\n {\n \"gasUsed\": \"988734\",\n \"transactionHash\": \"0xd9a72b12117c0a3f3905b567922ca326ae21be4447b5e85b4a7b4744be8c2046\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x50f057b1b6c559b46df96c6eea7f22f40a11c39186e8869c819cdc343e56826b\",\n \"calldataBytes\": 9604\n },\n {\n \"gasUsed\": \"988698\",\n \"transactionHash\": \"0x5d7aeb7e7089d3ab48d8e2bfe482d0c65caacb39779e3550118f49937f43f494\",\n \"blockNumber\": \"172\",\n \"blockHash\": \"0x58dd724ad5f1bca91a0b7bc69722f58890c02e0d205193ad2bb47960bced25d6\",\n \"calldataBytes\": 9604\n }\n ]\n }\n ]\n },\n {\n \"formatVersion\": 1,\n \"id\": \"protocol-92ef274-osaka-real\",\n \"deployment\": {\n \"chainId\": \"31337\",\n \"protocolAddress\": \"0x8870C63A18a9480C7de9B860b849fD293832856D\",\n \"runtimeCodeHash\": \"0x604572c0da90ea139b774cd0d2962a2972fac46e0556c7cec6f6f9aac5deef14\",\n \"tokenAddress\": \"0x4826533B4897376654Bb4d4AD88B7faFD0C98528\"\n },\n \"source\": {\n \"protocolCommit\": \"92ef274c6b36d783507699a33ee20e52192c83c7\",\n \"measuredAt\": \"2026-10-27T08:42:15.991Z\",\n \"chain\": \"Anvil 31337\",\n \"hardfork\": \"osaka\",\n \"token\": \"MockERC20\",\n \"verifier\": \"real\",\n \"assumptions\": [\n \"normal CREATE/Factory deployment; no code or storage injection\",\n \"Solidity 0.8.27 optimizer 200; real BB 5.2.1 verifiers\",\n \"one source tree; two existing leaves; no rollover or screener\",\n \"funding/approval setup excluded; complete transaction receipt gas included\",\n \"exact allowance for caller funding; configured benchmark payout balances\",\n \"observed local samples, not a confidence interval or gas limit\"\n ]\n },\n \"measurements\": [\n {\n \"id\": \"shield-1\",\n \"shape\": {\n \"kind\": \"shield\",\n \"target\": \"evm\",\n \"capacity\": 0,\n \"noteInputs\": 0,\n \"noteOutputs\": 1,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 226\n },\n \"circuit\": null,\n \"samples\": [\n {\n \"gasUsed\": \"649286\",\n \"transactionHash\": \"0xcc299d1780ada9a69b1d9f0f3d06a165db15fccbd2b7ff407834f02f5d563a18\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0xbcb868e781a20588d2fa099a4d7f87c1600044a2e5ec1e369e384d7a5f22f00a\",\n \"calldataBytes\": 1156\n },\n {\n \"gasUsed\": \"649322\",\n \"transactionHash\": \"0x95139dff109725989f0769e3e6fb9bd3e7e1bf581fd475f14e822875eb90fda4\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x7ace353fea4fc8c856c0fd45521d200b02619921977709ff4f910e0ff41c06fe\",\n \"calldataBytes\": 1156\n },\n {\n \"gasUsed\": \"649322\",\n \"transactionHash\": \"0xef578bb38dc8ff8bfd47d2e76e3ab4273019ea9a385f5d2fd99add32ceaecb58\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0xded817f8ef89637e2443e3b626c0837f184ca134fe753be913d5570554c649a6\",\n \"calldataBytes\": 1156\n }\n ]\n },\n {\n \"id\": \"shield-2\",\n \"shape\": {\n \"kind\": \"shield\",\n \"target\": \"evm\",\n \"capacity\": 0,\n \"noteInputs\": 0,\n \"noteOutputs\": 2,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 452\n },\n \"circuit\": null,\n \"samples\": [\n {\n \"gasUsed\": \"757063\",\n \"transactionHash\": \"0x024e2dfbd6f50c368e2a4aa347e3029de668f4ebd36b80227aa003bb7ac21c74\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x8ed63973c158d706ac54bb646626e4f0db5777b4bd56d179b94503af6c417c50\",\n \"calldataBytes\": 1668\n },\n {\n \"gasUsed\": \"757063\",\n \"transactionHash\": \"0x898d852ab28f68adac4d30b160a3dbfee33fa7ca875f70df9eb7763b6b1cd1f0\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x9bb6810de38193933a9f26fa03d3d9bad1ca0151ff5e04544c56520e09da3043\",\n \"calldataBytes\": 1668\n },\n {\n \"gasUsed\": \"757039\",\n \"transactionHash\": \"0x8ff9720e3197aab2d741fbd8d0fa2969203ea8cd051d9649d1e5eb890bcc2be3\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x8604c75eb6363aaae774276e638f5b749aae1f8f815eb99ab1183137eef5730e\",\n \"calldataBytes\": 1668\n }\n ]\n },\n {\n \"id\": \"shield-10\",\n \"shape\": {\n \"kind\": \"shield\",\n \"target\": \"evm\",\n \"capacity\": 0,\n \"noteInputs\": 0,\n \"noteOutputs\": 10,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 2260\n },\n \"circuit\": null,\n \"samples\": [\n {\n \"gasUsed\": \"1692143\",\n \"transactionHash\": \"0x6c13db8bd8a8599daf5034e56712abefbf406982fafe7647b6d22291ba4199ed\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x1ab2ae514f408a79e0c40ca10cee74b2e23d7c8a5f24641b8eea3e1cf58ce700\",\n \"calldataBytes\": 5764\n },\n {\n \"gasUsed\": \"1692083\",\n \"transactionHash\": \"0x5e476c9d3838b782a51332af9bf5c372d29fc411c2168a7af619c52bd5309c7b\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0x9c62bc72fc90f990c6711b48865ff922a1856ae05c4fef61dad5f4da7d948401\",\n \"calldataBytes\": 5764\n },\n {\n \"gasUsed\": \"1692203\",\n \"transactionHash\": \"0x0092e2d9160fad95279cde586fc6c79c713244f55db8a2060a5abab9d98c176a\",\n \"blockNumber\": \"50\",\n \"blockHash\": \"0xac1bf780b4cc05b4dcc7ee5d741c049ba99ab4af9bdcd25104add730c2a14152\",\n \"calldataBytes\": 5764\n }\n ]\n },\n {\n \"id\": \"transfer-1x2\",\n \"shape\": {\n \"kind\": \"transfer\",\n \"target\": \"evm\",\n \"capacity\": 14,\n \"noteInputs\": 1,\n \"noteOutputs\": 2,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 452\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots14\",\n \"target\": \"evm\",\n \"artifactSha256\": \"2a6a20839e90b88b1ecd629f59a01821bad3ee11dbe04db1fd9cdce7a3de0e84\",\n \"vkSha256\": \"ffe0e1a4e690792ecb4eb1fc1acc9ff60f13d3b5af03cfc6ae6d6bf26e99bdea\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1617516\",\n \"transactionHash\": \"0xf49ea3d31cc1346472172e2dee84f9360f60a3fe948a3ef6e87f727af6d42f0d\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xf59c57e63ec2f03abc36d28f273b0af5290184dc97197df740b23d79a851a887\",\n \"calldataBytes\": 11012\n },\n {\n \"gasUsed\": \"1617516\",\n \"transactionHash\": \"0xf8d11286f1f2a4db006ff6b06900c47d0fbf685984499e1e5d4aea49478ba8e5\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xeb5a800190be3534c9e2675c97ac56d0e0be8adef55f60bd32d375776a7d150c\",\n \"calldataBytes\": 11012\n },\n {\n \"gasUsed\": \"1617504\",\n \"transactionHash\": \"0x8939fcea97079a3c5118b9e94325455e2ad1cdb47310ae499a277272654b3eb6\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xecffefb593e2fec5d5827cfd39d0cc4d0efb67dbff6f8dbbd0d2db2439a80cf9\",\n \"calldataBytes\": 11012\n }\n ]\n },\n {\n \"id\": \"transfer-1x14\",\n \"shape\": {\n \"kind\": \"transfer\",\n \"target\": \"evm\",\n \"capacity\": 56,\n \"noteInputs\": 1,\n \"noteOutputs\": 14,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 3164\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots56\",\n \"target\": \"evm\",\n \"artifactSha256\": \"ba83ec2f177d16fa88ea04bc54f2e99920f1ac195cdb05b88b9b3bbc245fd953\",\n \"vkSha256\": \"6ad5d3aff0c72a632fb19895658af093a6a92478a9994985e838a71e61237720\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"2489010\",\n \"transactionHash\": \"0x053557acea930a869d6469c91e9bc015d0893607a6ab18d2af684986f7074676\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x734873097eb5e4cb66bfc2cdb61fac6753b53a4b9450fb22895281100af3aaf3\",\n \"calldataBytes\": 17156\n },\n {\n \"gasUsed\": \"2489106\",\n \"transactionHash\": \"0xb3990edb994011775e275bc1eb38c527b7206a2bfadf510e8aa53e260f3594b8\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xf8cb019ebb0ecd0ec5d6634198292883c63fe93a7c65c34f9f3120c6cc54f1cf\",\n \"calldataBytes\": 17156\n },\n {\n \"gasUsed\": \"2489094\",\n \"transactionHash\": \"0xc97079019567ff8a79d285421351ee4bc48d14092a0e12ff634151719e991088\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x5a6947839165c8961eeeb9190331415c40366a78b4a6a5771e7b8954dbb8b3c7\",\n \"calldataBytes\": 17156\n }\n ]\n },\n {\n \"id\": \"transfer-1x56\",\n \"shape\": {\n \"kind\": \"transfer\",\n \"target\": \"evm\",\n \"capacity\": 112,\n \"noteInputs\": 1,\n \"noteOutputs\": 56,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 12656\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots112\",\n \"target\": \"evm\",\n \"artifactSha256\": \"713b78469b6e97711122210f8497942120c1c9d66d3604bc184566c4eba59cc3\",\n \"vkSha256\": \"d6a46e297949c28b9a62fd9aef1f202870fdca97b8bfb15beefd27b9e9f3d86e\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"5389227\",\n \"transactionHash\": \"0xb820d3c358724c1d64422017f232d074e4ff1ffaf1b1ce5ee719409427cf2208\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x474bd1e52457801d1a596a9f23aeb6d365a17be028ee0c8cf8fd4758eaa1106b\",\n \"calldataBytes\": 36356\n },\n {\n \"gasUsed\": \"5389095\",\n \"transactionHash\": \"0x16514d8cf1136d7a7f40591859e2ea2d256af66520498e1fc81eb28837db600d\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x42314a0d6eb9e765869e1b66b279444c78f919d2c28aed544d9fa7ac3bd2acb4\",\n \"calldataBytes\": 36356\n },\n {\n \"gasUsed\": \"5389203\",\n \"transactionHash\": \"0xee69d565a7eafb60ad7a47afe80a49d4fa40b50660669d9141e7dc6f4c3dbe0d\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x0dcdada663ee04dd63e06fcdb79dacc5623201d29b687f63deede2b4762a994e\",\n \"calldataBytes\": 36356\n }\n ]\n },\n {\n \"id\": \"transfer-1x112\",\n \"shape\": {\n \"kind\": \"transfer\",\n \"target\": \"evm\",\n \"capacity\": 168,\n \"noteInputs\": 1,\n \"noteOutputs\": 112,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 25312\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots168\",\n \"target\": \"evm\",\n \"artifactSha256\": \"f7b3b1384e961367702f544299ca3521d8205fac31b7691c45ff84325d5a31c3\",\n \"vkSha256\": \"e00181533d7e35d2307570528f9e7f8f88e2909b6ae338d93373b608dea96881\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"9139842\",\n \"transactionHash\": \"0x09951c4e00b868b6660429d187a482004646e4c84ef341d3b98352c249db6a06\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xba9da3c08189335acff1eb33554f5f12475e4a6510324cf6ec9eadf340ce15d2\",\n \"calldataBytes\": 61444\n },\n {\n \"gasUsed\": \"9139650\",\n \"transactionHash\": \"0xb06f69d1c6e5406758918d5d296ab889bab4c3814f616cc581ad312cc7ebb2f3\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x5516a76b4b366f2e539a67bb848b7d232c3e6f328d34ca5bd3dba43a14c316bf\",\n \"calldataBytes\": 61444\n },\n {\n \"gasUsed\": \"9139530\",\n \"transactionHash\": \"0x116c4875b7712b7cb51cdb0fcb6e66a95733dca272aa272bc0b1fd265edbe26c\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xd36340fddd1eace21b73f785c6589bf73b07bef782f2e78a5e3d3d828b0b607c\",\n \"calldataBytes\": 61444\n }\n ]\n },\n {\n \"id\": \"withdraw-1x1\",\n \"shape\": {\n \"kind\": \"withdraw\",\n \"target\": \"evm\",\n \"capacity\": 14,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 226\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots14\",\n \"target\": \"evm\",\n \"artifactSha256\": \"2a6a20839e90b88b1ecd629f59a01821bad3ee11dbe04db1fd9cdce7a3de0e84\",\n \"vkSha256\": \"ffe0e1a4e690792ecb4eb1fc1acc9ff60f13d3b5af03cfc6ae6d6bf26e99bdea\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1597571\",\n \"transactionHash\": \"0x326892d32146e0bc36b396fd3973151a629312df68ed25a4ffbb6a3da23ba274\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x3e0f326cba3dd019b86431b4c22145758a7f10c121a696a81a094746b04495b5\",\n \"calldataBytes\": 10564\n },\n {\n \"gasUsed\": \"1597715\",\n \"transactionHash\": \"0x2e3a15157ac9c07e4717bbd4641481ce3bc0068d26157752815b6ec6b30acdd0\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xab7fceac97d55e8702d1202b98d3a05c4b1e0f71e51b6d88d7e80e91cc338596\",\n \"calldataBytes\": 10564\n },\n {\n \"gasUsed\": \"1597595\",\n \"transactionHash\": \"0x5052e94a67520c43416cdcb60a1365a126560861173d0eef46bcbf0a566fe947\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x9a64cf76b646b5a07b72fcc61266e87f17365fec891701c331982a93e5ba9b89\",\n \"calldataBytes\": 10564\n }\n ]\n },\n {\n \"id\": \"sweep-1x0\",\n \"shape\": {\n \"kind\": \"sweep\",\n \"target\": \"evm\",\n \"capacity\": 14,\n \"noteInputs\": 1,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"transact_user_slots14\",\n \"target\": \"evm\",\n \"artifactSha256\": \"2a6a20839e90b88b1ecd629f59a01821bad3ee11dbe04db1fd9cdce7a3de0e84\",\n \"vkSha256\": \"ffe0e1a4e690792ecb4eb1fc1acc9ff60f13d3b5af03cfc6ae6d6bf26e99bdea\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1069308\",\n \"transactionHash\": \"0xb1ab469d05ca5f49659f54a332cc172892dcce37e475342fbf52fa9cfb4d3927\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xe5b04579149987198801f1ca19ab771d5262de2aaf9861a6c962d50d1c6baef0\",\n \"calldataBytes\": 10116\n },\n {\n \"gasUsed\": \"1069284\",\n \"transactionHash\": \"0xd6adee997f7e1e19e3918f913f6ee48d94df69c09ed74e333325023089e7f6df\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0xcb225566f8f1ea6ae8da30158b8f1aef03d50fa4ea352a00aa42b7f41a05d63c\",\n \"calldataBytes\": 10116\n },\n {\n \"gasUsed\": \"1069308\",\n \"transactionHash\": \"0xe06dd7f3a2718bc9a9412c2d6f505960ce225b2e5fe6c1c66bb5b0e8f427006f\",\n \"blockNumber\": \"49\",\n \"blockHash\": \"0x37a08c5918892e1c19df017c746ab0ede03c1bb195c3be593d70c1f9de91897e\",\n \"calldataBytes\": 10116\n }\n ]\n }\n ]\n },\n {\n \"formatVersion\": 1,\n \"id\": \"protocol-044e2ee-bc51dde071f1-prague-credit-real-accrued-fees\",\n \"deployment\": {\n \"chainId\": \"31337\",\n \"protocolAddress\": \"0x8a276b1F407e1273EDFf65e2f6292ee18dA68DD9\",\n \"runtimeCodeHash\": \"0xf311c797d0296b13c1ef3f230bf4aadd621e38572f0c09a3f631b8edd0402ab4\",\n \"tokenAddress\": \"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf\"\n },\n \"source\": {\n \"protocolCommit\": \"044e2ee9aeb9ba0e3dbd0630247495189e0405d4\",\n \"measuredAt\": \"2026-11-05T10:18:51.134Z\",\n \"chain\": \"Anvil 31337\",\n \"hardfork\": \"prague\",\n \"token\": \"MockERC20\",\n \"verifier\": \"real\",\n \"fingerprints\": {\n \"protocolSourceSha256\": \"bc51dde071f1ac4616b3264305aeb2b04b52e0d13772625feed53fb5e8dae51b\",\n \"dirtyDiffSha256\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"compiledArtifactsSha256\": \"4900a39e94aeb31f686915bf8618efabf573b93365444db46a0bff3544741221\",\n \"creditManifestSha256\": \"c27ff83889c3082b4c918bd63e15437881f0a6f12ed7f130312e1140873679fb\",\n \"userManifestSha256\": \"9ef9d34d4459c2843d022712093216142e3eacdd1467d2382a6a68ad36c33b8f\",\n \"sdkSourceSha256\": \"11b42d88482ab2b0ce8adf02a8fef00a667fc73e4cb5c926cd76da6181c5ce15\"\n },\n \"toolchain\": {\n \"solidity\": \"0.8.38\",\n \"barretenberg\": \"6.0.0\",\n \"noir\": \"1.0.0-rc.6\",\n \"evmVersion\": \"prague\",\n \"optimizerRuns\": 200,\n \"anvil\": \"anvil Version: 1.8.6\"\n },\n \"blockGasLimit\": \"500000000\",\n \"runtimeContracts\": {\n \"transact_user_slots14_direct_Verifier\": {\n \"address\": \"0x5FbDB2315678afecb367f032d93F642f64180aa3\",\n \"runtimeCodeHash\": \"0x42d1932097f18874242d98855b2fc167471ba84dd122ab3744996dd64320f675\"\n },\n \"transact_user_slots14-adapter\": {\n \"address\": \"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512\",\n \"runtimeCodeHash\": \"0x876f0e43fc1d24475c0c63ee8c7907427d534b0c604f5985aacd28ee2c6d1b12\"\n },\n \"transact_user_slots56_direct_Verifier\": {\n \"address\": \"0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0\",\n \"runtimeCodeHash\": \"0xefca4a7ee5382b0f2029571f6781f2ade7ac698906c32d3e49f10def631e7882\"\n },\n \"transact_user_slots56-adapter\": {\n \"address\": \"0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9\",\n \"runtimeCodeHash\": \"0x945680c4278b61c07bf07fa7637908e9a38ccd414c9330bf23b3c41119ea0de6\"\n },\n \"transact_user_slots112_direct_Verifier\": {\n \"address\": \"0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9\",\n \"runtimeCodeHash\": \"0xfbf97cd940123ab3e81ce55283efb48b55ddaa95423fff4d0d648b248f4e196b\"\n },\n \"transact_user_slots112-adapter\": {\n \"address\": \"0x5FC8d32690cc91D4c39d9d3abcBD16989F875707\",\n \"runtimeCodeHash\": \"0xac129aa749b7ece8c51ed68f4f0afcc82a1cbd7b2a01f5ff7ff7de1dcde21b1e\"\n },\n \"transact_user_slots168_direct_Verifier\": {\n \"address\": \"0x0165878A594ca255338adfa4d48449f69242Eb8F\",\n \"runtimeCodeHash\": \"0x7ee9799d55001f74c8d88179dd0247b3de932516f975605ba248b52e7ba540c8\"\n },\n \"transact_user_slots168-adapter\": {\n \"address\": \"0xa513E6E4b8f2a923D98304ec87F64353C4D5C853\",\n \"runtimeCodeHash\": \"0x24b5ea6f436b90b3821bd0ea4872fb205c996fd74f1546bc1086d98b7ec5d87d\"\n },\n \"transact_aggregate_14_4_Verifier\": {\n \"address\": \"0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6\",\n \"runtimeCodeHash\": \"0xae41039ded63fa7777c99a2552ba603a3a4d9703d464079dff787dab6893ef24\"\n },\n \"transact_aggregate_14_4-adapter\": {\n \"address\": \"0x8A791620dd6260079BF849Dc5567aDC3F2FdC318\",\n \"runtimeCodeHash\": \"0xf4e86e9b2001f5972ce00f7fcd5a01deb9bfe5d676e437e74135ee7036469ca3\"\n },\n \"transact_aggregate_14_8_Verifier\": {\n \"address\": \"0x610178dA211FEF7D417bC0e6FeD39F05609AD788\",\n \"runtimeCodeHash\": \"0x089f476f56fb1003586b18c0b5a75f9d24c76d4804d84ea202005371eae333de\"\n },\n \"transact_aggregate_14_8-adapter\": {\n \"address\": \"0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e\",\n \"runtimeCodeHash\": \"0xc40142342902da65f45bb995724b129389e3505c283d7209a6c29bf27521c363\"\n },\n \"transact_aggregate_14_12_Verifier\": {\n \"address\": \"0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0\",\n \"runtimeCodeHash\": \"0xe0cba79e66fdb75dbc082ef0f938b07e4d38acce283b87869fe414083b3e08b0\"\n },\n \"transact_aggregate_14_12-adapter\": {\n \"address\": \"0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82\",\n \"runtimeCodeHash\": \"0x155bfc9367a6f3c96ac9b4d1dc1d0358a4046b584a9a1322a9582557ea691ff4\"\n },\n \"create_credit_direct_Verifier\": {\n \"address\": \"0x9A676e781A523b5d0C0e43731313A708CB607508\",\n \"runtimeCodeHash\": \"0xbc88c374cc3c0c1e2cdf8663cee4c960f3a3ba4b210e2c520ca111e56461b23a\"\n },\n \"create_credit-adapter\": {\n \"address\": \"0x0B306BF915C4d645ff596e518fAf3F9669b97016\",\n \"runtimeCodeHash\": \"0xfd39446d56c189fbb35c0906e525433b6b9c63444c97b13990b7dd6f19bd38fc\"\n },\n \"credit_draw_slots1_direct_Verifier\": {\n \"address\": \"0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1\",\n \"runtimeCodeHash\": \"0x47be80e72c3a22ea044638f6004de8c3a0264d5a0d17189c01153cdabfd7bab6\"\n },\n \"credit_draw_slots1-adapter\": {\n \"address\": \"0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE\",\n \"runtimeCodeHash\": \"0x73a2af387b45cecf383b90f4cebb54b263f621a5038da947944c54f1089ba288\"\n },\n \"credit_draw_slots12_direct_Verifier\": {\n \"address\": \"0x68B1D87F95878fE05B998F19b66F4baba5De1aed\",\n \"runtimeCodeHash\": \"0x244d9ba22f5c736c2a5c42c466701e2a8ba7ae8108665133541026ea45d56e04\"\n },\n \"credit_draw_slots12-adapter\": {\n \"address\": \"0x3Aa5ebB10DC797CAC828524e59A333d0A371443c\",\n \"runtimeCodeHash\": \"0x63c200eae61218b865f3c8b418bf0887da7a70ebf41f55825e4750c36a1d1914\"\n },\n \"credit_draw_slots50_direct_Verifier\": {\n \"address\": \"0xc6e7DF5E7b4f2A278906862b61205850344D4e7d\",\n \"runtimeCodeHash\": \"0x2ad5eb64bcfae34ef04111dd8f9c1ffc5fc8aa6c1ad3a65d8da78233f3390660\"\n },\n \"credit_draw_slots50-adapter\": {\n \"address\": \"0x59b670e9fA9D0A427751Af201D676719a970857b\",\n \"runtimeCodeHash\": \"0x1716df69f1eb1c1db485bc3ba4a4ed5a1009275c9058a9e96b28ab3431a6c006\"\n },\n \"credit_draw_slots120_direct_Verifier\": {\n \"address\": \"0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1\",\n \"runtimeCodeHash\": \"0x523b6d211618bbd33d708f8198b9f3daafc10e2fa7a6a857db5795ed748a24e4\"\n },\n \"credit_draw_slots120-adapter\": {\n \"address\": \"0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44\",\n \"runtimeCodeHash\": \"0x32d875eb4f4c27252fa958971b66e1fdff8c02adb007fea2bf31eee4b851a132\"\n },\n \"credit_cancel_direct_Verifier\": {\n \"address\": \"0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f\",\n \"runtimeCodeHash\": \"0x4058133b7ecd31fe06749bfa3107ad0fbcdc9bf72d3b9cbf4dbd2b2f65be6d35\"\n },\n \"credit_cancel-adapter\": {\n \"address\": \"0x4A679253410272dd5232B3Ff7cF5dbB88f295319\",\n \"runtimeCodeHash\": \"0x0f570794fb4b7f15a791c59c760732d9f9408d1e3bea881ba7c5b76b36fb4e9b\"\n },\n \"credit_top_up_direct_Verifier\": {\n \"address\": \"0x7a2088a1bFc9d81c55368AE168C2C02570cB814F\",\n \"runtimeCodeHash\": \"0x7ada3623c851a9cfba7863a75f4fa289d747040f1a822510eefecc53d70180cd\"\n },\n \"credit_top_up-adapter\": {\n \"address\": \"0x09635F643e140090A9A8Dcd712eD6285858ceBef\",\n \"runtimeCodeHash\": \"0x23bba4eca8306f4bc02ead10449775a359beeed2065ea8c84da4dc6b9e4dfc82\"\n },\n \"PrivateTransferVerifierRegistry\": {\n \"address\": \"0xc5a5C42992dECbae36851359345FE25997F5C42d\",\n \"runtimeCodeHash\": \"0xbc74aacbc22d853cb50fe2041f20014e644fa8f83e06f51656b4667f1da164bc\"\n },\n \"CrossTreeVerifierRegistry\": {\n \"address\": \"0x67d269191c92Caf3cD7723F116c85e6E9bf55933\",\n \"runtimeCodeHash\": \"0x818ce6a634a11cdd9913873d3a265254dda45b490431ad1636373237e2685ba1\"\n },\n \"DualVerifierRouter\": {\n \"address\": \"0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E\",\n \"runtimeCodeHash\": \"0xb3bdc1aa5a6e4eac85e3651615c7942c5565f0593d79bacccb19b5aa587548ca\"\n },\n \"AtomicBatchOutputLib\": {\n \"address\": \"0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690\",\n \"runtimeCodeHash\": \"0xef68c4a35a62fbbb4d0918f1612f0ffd9d250c9ceefd38e59e9c8ef042addb45\"\n },\n \"FundingLib\": {\n \"address\": \"0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB\",\n \"runtimeCodeHash\": \"0x36f4e6d20cf7ca1b221dad34bc34ed7b8540c0e774c594652048822272e6bb52\"\n },\n \"PrivateTransferLib\": {\n \"address\": \"0x9E545E3C0baAB3E08CdfD552C960A1050f373042\",\n \"runtimeCodeHash\": \"0x1e538d13c68b2a7a2f605466cd7c09c166b904476a6b5b372f8b9b45d9de9a62\"\n },\n \"CrossTreeTransferLib\": {\n \"address\": \"0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9\",\n \"runtimeCodeHash\": \"0x9ec892d5a5d1c38e3218c7d38c74bd63034641cc458a195ec63c6a50f67ded25\"\n },\n \"AggregateTransferLib\": {\n \"address\": \"0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8\",\n \"runtimeCodeHash\": \"0x2c01c84317448e4786e7a7b9c06f6f3b4990354f151ae6914cdb75d8b7ebe881\"\n },\n \"CreateCreditLib\": {\n \"address\": \"0x851356ae760d987E095750cCeb3bC6014560891C\",\n \"runtimeCodeHash\": \"0x8b28e626c6a0f41179880773a48681362a05e0eee12193d1641ae5bb625fe960\"\n },\n \"CreditLifecycleLib\": {\n \"address\": \"0xf5059a5D33d5853360D16C683c16e67980206f36\",\n \"runtimeCodeHash\": \"0xa177a7f1dfb69cf2d6eea899ef8170959587b8cb3c60559c3b2cecf62309bfc4\"\n },\n \"ShieldLib\": {\n \"address\": \"0x95401dc811bb5740090279Ba06cfA8fcF6113778\",\n \"runtimeCodeHash\": \"0xfde7bbf1c02e17ab2d9fc9849fc282b29ac1db86378eec27f3a006d7484aa768\"\n },\n \"InvisiFactory\": {\n \"address\": \"0x998abeb3E57409262aE5b751f60747921B33613E\",\n \"runtimeCodeHash\": \"0x9055356390e48564adeca0065b12698a5d09451960af97ad2f5c2e450cb9c84c\"\n },\n \"InvisiAddressRegistry\": {\n \"address\": \"0x70e0bA845a1A0F2DA3359C97E0285013525FFC49\",\n \"runtimeCodeHash\": \"0x007da3f4e888366ba0eed52cd511c4a369359291387ad19ca37e89eb395fce30\"\n },\n \"InvisiProtocol\": {\n \"address\": \"0x8a276b1F407e1273EDFf65e2f6292ee18dA68DD9\",\n \"runtimeCodeHash\": \"0xf311c797d0296b13c1ef3f230bf4aadd621e38572f0c09a3f631b8edd0402ab4\"\n },\n \"MockERC20\": {\n \"address\": \"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf\",\n \"runtimeCodeHash\": \"0xf7f676b5c54f6e94f82f0de65a0117468a0d915e8a79d150e74f76bd6d7f708b\"\n }\n },\n \"assumptions\": [\n \"normal CREATE/Factory deployment and fresh registry; EIP170/EIP3860 unchanged; no code/storage injection\",\n \"Solidity0.8.38 optimizer200 Prague; pinned BB6.0.0 real verifiers; every native proof independently verified\",\n \"one physical source tree and 4 existing leaves shared by every sample; top-up has two authenticated source groups; no rollover or screener\",\n \"funding/approvals/2 genuine Credit seeds/usage-seed draw/payout reset excluded from business gas\",\n \"each round restores identical token balances, exact caller allowance105, note cursor, nullifiers and baseline; spender payout starts zero; broadcasterFee5\",\n \"complete receipt.gasUsed is measured, including verifier/calldata/logging/output insertion; memo0\",\n \"Prague local block gas limit500000000; measured transactions may be unmineable under lower network transaction/block limits\",\n \"observed three-sample ranges are neither a confidence interval nor a recommended transaction gas limit\"\n ]\n },\n \"measurements\": [\n {\n \"id\": \"create-credit-caller-0x0\",\n \"shape\": {\n \"kind\": \"create-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 0,\n \"creditInputs\": 0,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"caller\",\n \"permit\": false,\n \"deliveryBytes\": 1132\n },\n \"circuit\": {\n \"circuitName\": \"create_credit\",\n \"target\": \"evm\",\n \"artifactSha256\": \"16a41fd585d5f925e4e93fd6a308e1ca8c90ea287778871cb0d214f0d0e223ce\",\n \"vkSha256\": \"e8d3dc1f6922dbe1a0aa6016e65664be28d7005180ee943a4b237ac5518971bb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1591717\",\n \"transactionHash\": \"0xd06c84a0fd796d0100870a9f1a17be8069677f0f304664d3670712740c8bdf62\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x3d7c908964c165726e2ec0e921e61287864c7a5cb4677bd472f1d2d3b22c0d1b\",\n \"calldataBytes\": 11844\n },\n {\n \"gasUsed\": \"1591897\",\n \"transactionHash\": \"0x9eb1f64a8aeffff70213ef442d8553fff10676770768b1f4ad37508cf354c11c\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xe52bf98f68f306ce13761e3e985c04572d43ac09b0790db5c5217144d68c044d\",\n \"calldataBytes\": 11844\n },\n {\n \"gasUsed\": \"1591957\",\n \"transactionHash\": \"0xb3ff21541b1acc1ced31459140c0016f2a5abc25a4723086e3012861d4a8f718\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x681e28c2f26a020985e262c947b3732edaeeeff78f6d59d4957c188af53cfedc\",\n \"calldataBytes\": 11844\n }\n ]\n },\n {\n \"id\": \"create-credit-1x1\",\n \"shape\": {\n \"kind\": \"create-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 1,\n \"creditInputs\": 0,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"create_credit\",\n \"target\": \"evm\",\n \"artifactSha256\": \"16a41fd585d5f925e4e93fd6a308e1ca8c90ea287778871cb0d214f0d0e223ce\",\n \"vkSha256\": \"e8d3dc1f6922dbe1a0aa6016e65664be28d7005180ee943a4b237ac5518971bb\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1631989\",\n \"transactionHash\": \"0xf8acf0ee3e372c214ce5ef60d8e28b75ca3041a77d41d1e94acec78070572b5d\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xd822acd15a4373e9c901579700c1f5e83810cf4a3760c99bd535196550f05676\",\n \"calldataBytes\": 12196\n },\n {\n \"gasUsed\": \"1632085\",\n \"transactionHash\": \"0x5315adad09961f10a32d18b8337513347327b85475a5fccf2b700262e34660f0\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xd8a5f0b8fe42d735c3e0107291afae3973e14bb8fcbff48ea3a30f65172022e8\",\n \"calldataBytes\": 12196\n },\n {\n \"gasUsed\": \"1632013\",\n \"transactionHash\": \"0xbd92a3f189c9cdc991cb2843959d2d020ab3f1aeb48fdb0315147f204b9e4295\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x77deffc18bfbc2cbc8e29c34b62b3be52984869cdcc73ccd245b03025d59797c\",\n \"calldataBytes\": 12196\n }\n ]\n },\n {\n \"id\": \"top-up-credit-1x1-unchanged-limits\",\n \"shape\": {\n \"kind\": \"top-up-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 2,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"credit_top_up\",\n \"target\": \"evm\",\n \"artifactSha256\": \"3004eea1c26ec8e33f8fc9ee171a3b6af250682efb607f7003ae58f8327998ab\",\n \"vkSha256\": \"b7f378a871a27649c3f7fd1af554c8f87d99bcf0780b21972e910212ed4e5a0d\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1672668\",\n \"transactionHash\": \"0x7a0ce3262fedebbd2b7c919f37fe0beb0b34d89a8a71223f13e9946c04131e21\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x34c561de8fae1ca6230391e9dfe98187cf68bc30b51b4c7338083e4d5349dbff\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1672824\",\n \"transactionHash\": \"0xf27e9d4e588253646168e8db8bc187e5483dbb0ddc147728c29e06f2ab397349\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xae2cd77d442ba1d55b436388eeded196dcd8735152c0c56dee8830f0ddd457c9\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1672824\",\n \"transactionHash\": \"0xd0633554a0a357d450e49fadecdfb61f39410a2b77969a445a00d7796c088f8a\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x4851b2333dcb118bd2ca4c6e1332736d32d074e90096e6d144ea4d4262a01124\",\n \"calldataBytes\": 12356\n }\n ]\n },\n {\n \"id\": \"top-up-credit-1x1-changed-limits\",\n \"shape\": {\n \"kind\": \"top-up-credit\",\n \"target\": \"evm\",\n \"capacity\": 10,\n \"noteInputs\": 1,\n \"noteOutputs\": 1,\n \"sourceTrees\": 2,\n \"creditInputs\": 1,\n \"creditOutputs\": 1,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 1360\n },\n \"circuit\": {\n \"circuitName\": \"credit_top_up\",\n \"target\": \"evm\",\n \"artifactSha256\": \"3004eea1c26ec8e33f8fc9ee171a3b6af250682efb607f7003ae58f8327998ab\",\n \"vkSha256\": \"b7f378a871a27649c3f7fd1af554c8f87d99bcf0780b21972e910212ed4e5a0d\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1672824\",\n \"transactionHash\": \"0x7dcd2f549ac253a1db6bf1956a0ae4f7116258cefa4d6468635694cc0cb310d6\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x1b318287c6f265fae88233ea20e7a881723fd01f48ff86941323ad0e465f4757\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1672824\",\n \"transactionHash\": \"0x71b6d1de440b578539ca0045c74ee688dbd9ed1971cb19d12fc9256d46d3a6bd\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x4a9cf7f534d3136b7042447671dd14663bfecce06bb1d432570871de0800995f\",\n \"calldataBytes\": 12356\n },\n {\n \"gasUsed\": \"1672812\",\n \"transactionHash\": \"0x781a4f563c1f9d17ec5228f49dd32942622e2090b7cefabf718e575ec1159697\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0xb7f060617081dd56a3a4fa723a2308ef008da493417dffe3d31b130dfb0f3e64\",\n \"calldataBytes\": 12356\n }\n ]\n },\n {\n \"id\": \"cancel-credit-1\",\n \"shape\": {\n \"kind\": \"cancel-credit\",\n \"target\": \"evm\",\n \"capacity\": 1,\n \"noteInputs\": 0,\n \"noteOutputs\": 0,\n \"sourceTrees\": 1,\n \"creditInputs\": 1,\n \"creditOutputs\": 0,\n \"creditRemainders\": 0,\n \"funding\": \"none\",\n \"permit\": false,\n \"deliveryBytes\": 0\n },\n \"circuit\": {\n \"circuitName\": \"credit_cancel\",\n \"target\": \"evm\",\n \"artifactSha256\": \"6485609280fe5a3d44ca9f1865b29b44253b3d2cd49770d000e7bb7a3db8e65d\",\n \"vkSha256\": \"d74cf842d204cdf271c06a69482ddff11568e89630346b634d486205bec4bd9e\"\n },\n \"samples\": [\n {\n \"gasUsed\": \"1013031\",\n \"transactionHash\": \"0x14678b9811132c703f7593ee8e4c1dcaf478e11cf4ca06615cf432c9866b3bc3\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x433f2aa3603339fcb28150f0fa6cc45f696cd04808fca1edb0798d674d6488f6\",\n \"calldataBytes\": 9604\n },\n {\n \"gasUsed\": \"1012983\",\n \"transactionHash\": \"0xa4be323a92ee04c57343c79997480fd32cbb6982641c8982504337f634e5d19b\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x7e283b15e8f895ddc75e93041590b0fc7ade0833405e2fa2b349b63649b244d6\",\n \"calldataBytes\": 9604\n },\n {\n \"gasUsed\": \"1013043\",\n \"transactionHash\": \"0x4795ce2a29ea83ea3d44a92624fbd52ab370e6140404d94ecff0e5dee9c04e65\",\n \"blockNumber\": \"53\",\n \"blockHash\": \"0x90c7422c05e18142fe87c610e13eca9379055d4086019e46d4cacab875959a42\",\n \"calldataBytes\": 9604\n }\n ]\n }\n ]\n }\n]\n","import type { Hex } from \"@invisi-labs/core\";\nimport type { TokenProtocol } from \"@invisi-labs/protocol\";\nimport type { OperationPlan } from \"./session/operation-types\";\nimport { operationSources } from \"./session/operation-protocol\";\nimport referenceProfiles from \"./data/gas-benchmarks.json\";\n\nexport interface GasBenchmarkShape {\n kind: OperationPlan[\"kind\"];\n target: string;\n capacity: number;\n noteInputs: number;\n noteOutputs: number;\n sourceTrees: number;\n creditInputs: number;\n creditOutputs: number;\n creditRemainders: number;\n funding: \"none\" | \"caller\" | \"signature\";\n permit: boolean;\n deliveryBytes: number;\n}\nexport interface GasBenchmarkDeployment {\n chainId: string;\n protocolAddress: Hex;\n runtimeCodeHash: Hex | null;\n tokenAddress: Hex;\n}\nexport interface GasBenchmarkCircuit {\n circuitName: string;\n target: string;\n artifactSha256: string;\n vkSha256: string;\n}\nexport interface GasBenchmarkSample {\n gasUsed: string;\n transactionHash: Hex;\n blockNumber: string;\n blockHash: Hex;\n calldataBytes: number;\n}\nexport interface GasBenchmarkProfile {\n formatVersion: 1;\n id: string;\n deployment: GasBenchmarkDeployment;\n source: {\n protocolCommit: string;\n fingerprints?: {\n protocolSourceSha256: string;\n dirtyDiffSha256: string;\n compiledArtifactsSha256: string;\n creditManifestSha256: string;\n userManifestSha256: string;\n sdkSourceSha256: string;\n };\n toolchain?: {\n solidity: string;\n barretenberg: string;\n noir: string;\n evmVersion: string;\n optimizerRuns: number;\n anvil: string;\n };\n blockGasLimit?: string;\n runtimeContracts?: Record<string, { address: Hex; runtimeCodeHash: Hex }>;\n measuredAt: string;\n chain: string;\n hardfork: string;\n token: string;\n verifier: \"real\";\n assumptions: string[];\n };\n measurements: Array<{\n id: string;\n shape: GasBenchmarkShape;\n circuit: GasBenchmarkCircuit | null;\n samples: GasBenchmarkSample[];\n }>;\n}\nexport interface GasEstimateRequest {\n deployment: GasBenchmarkDeployment;\n shape: GasBenchmarkShape;\n circuit: GasBenchmarkCircuit | null;\n}\nexport type BenchmarkGasEstimate = {\n source: \"benchmark\";\n request: GasEstimateRequest;\n} & (\n | {\n available: false;\n reason: \"deployment-not-covered\" | \"shape-not-covered\" | \"recursive-member-only\";\n }\n | {\n available: true;\n gasUnits: bigint;\n range: { min: bigint; max: bigint; kind: \"observed\" };\n samples: number;\n profileId: string;\n measurementId: string;\n evidence: GasBenchmarkProfile[\"source\"];\n }\n);\nconst word = /^0x[0-9a-fA-F]{64}$/;\nconst address = /^0x[0-9a-fA-F]{40}$/;\nconst decimal = /^(0|[1-9][0-9]*)$/;\nconst shapeKeys: Array<keyof GasBenchmarkShape> = [\n \"kind\",\n \"target\",\n \"capacity\",\n \"noteInputs\",\n \"noteOutputs\",\n \"sourceTrees\",\n \"creditInputs\",\n \"creditOutputs\",\n \"creditRemainders\",\n \"funding\",\n \"permit\",\n \"deliveryBytes\",\n];\n\n/** Copy trusted benchmark records; validation checks format, not their publisher's honesty. */\nexport function copyGasBenchmarks(profiles: readonly GasBenchmarkProfile[]): GasBenchmarkProfile[] {\n const copy = structuredClone([...profiles]);\n for (const p of copy) {\n if (\n p.formatVersion !== 1 ||\n !p.id ||\n !decimal.test(p.deployment.chainId) ||\n !address.test(p.deployment.protocolAddress) ||\n !address.test(p.deployment.tokenAddress) ||\n !p.deployment.runtimeCodeHash ||\n !word.test(p.deployment.runtimeCodeHash) ||\n p.source.verifier !== \"real\" ||\n !/^[0-9a-f]{40}$/i.test(p.source.protocolCommit) ||\n !p.source.measuredAt ||\n !Array.isArray(p.source.assumptions) ||\n !p.source.assumptions.every((assumption) => typeof assumption === \"string\") ||\n !p.measurements.length\n )\n throw new Error(\"invalid gas benchmark profile\");\n if (\n p.source.fingerprints &&\n ![\n \"protocolSourceSha256\",\n \"dirtyDiffSha256\",\n \"compiledArtifactsSha256\",\n \"creditManifestSha256\",\n \"userManifestSha256\",\n \"sdkSourceSha256\",\n ].every((key) => {\n const v = (p.source.fingerprints as unknown as Record<string, unknown>)[key];\n return typeof v === \"string\" && /^[a-f0-9]{64}$/i.test(v);\n })\n )\n throw new Error(\"invalid benchmark source fingerprint\");\n if (\n p.source.blockGasLimit !== undefined &&\n (!decimal.test(p.source.blockGasLimit) || BigInt(p.source.blockGasLimit) <= 0n)\n )\n throw new Error(\"invalid benchmark block gas limit\");\n if (\n p.source.runtimeContracts &&\n !Object.values(p.source.runtimeContracts).every(\n (v) => address.test(v.address) && word.test(v.runtimeCodeHash)\n )\n )\n throw new Error(\"invalid benchmark runtime identity\");\n if (\n p.source.toolchain &&\n (![\"solidity\", \"barretenberg\", \"noir\", \"evmVersion\", \"anvil\"].every((key) => {\n const v = (p.source.toolchain as unknown as Record<string, unknown>)[key];\n return typeof v === \"string\" && v.length > 0;\n }) ||\n !Number.isSafeInteger(p.source.toolchain.optimizerRuns) ||\n p.source.toolchain.optimizerRuns < 0)\n )\n throw new Error(\"invalid benchmark toolchain\");\n for (const m of p.measurements) {\n if (\n !m.id ||\n !m.samples.length ||\n ![\"none\", \"caller\", \"signature\"].includes(m.shape.funding) ||\n typeof m.shape.permit !== \"boolean\"\n )\n throw new Error(\"invalid gas benchmark measurement\");\n for (const key of shapeKeys) {\n const value = m.shape[key];\n if (\n ![\"kind\", \"target\", \"funding\", \"permit\"].includes(key) &&\n (!Number.isSafeInteger(value) || Number(value) < 0)\n )\n throw new Error(\"invalid gas benchmark shape\");\n }\n if (\n m.circuit &&\n (![m.circuit.artifactSha256, m.circuit.vkSha256].every((hash) =>\n /^[a-f0-9]{64}$/i.test(hash)\n ) ||\n !m.circuit.circuitName ||\n !m.circuit.target)\n )\n throw new Error(\"invalid gas benchmark circuit identity\");\n const hashes = new Set<string>();\n for (const sample of m.samples) {\n if (\n typeof sample.gasUsed !== \"string\" ||\n !decimal.test(sample.gasUsed) ||\n BigInt(sample.gasUsed) <= 0n ||\n !word.test(sample.transactionHash) ||\n !word.test(sample.blockHash) ||\n !decimal.test(sample.blockNumber) ||\n !Number.isSafeInteger(sample.calldataBytes) ||\n sample.calldataBytes < 0 ||\n hashes.has(sample.transactionHash.toLowerCase())\n )\n throw new Error(\"invalid gas benchmark receipt\");\n hashes.add(sample.transactionHash.toLowerCase());\n }\n }\n }\n return copy;\n}\n/** Parse a trusted, JSON-compatible benchmark catalog. No network access or publisher authentication. */\nexport function defineGasBenchmarks(input: unknown): GasBenchmarkProfile[] {\n if (!Array.isArray(input)) throw new Error(\"invalid gas benchmark catalog\");\n try {\n return copyGasBenchmarks(input as GasBenchmarkProfile[]);\n } catch {\n throw new Error(\"invalid gas benchmark catalog\");\n }\n}\nconst defaultProfiles = defineGasBenchmarks(referenceProfiles);\n\nfunction sameDeployment(a: GasBenchmarkDeployment, b: GasBenchmarkDeployment) {\n return (\n a.chainId === b.chainId &&\n a.protocolAddress.toLowerCase() === b.protocolAddress.toLowerCase() &&\n a.tokenAddress.toLowerCase() === b.tokenAddress.toLowerCase() &&\n a.runtimeCodeHash?.toLowerCase() === b.runtimeCodeHash?.toLowerCase()\n );\n}\nfunction sameCircuit(a: GasBenchmarkCircuit | null, b: GasBenchmarkCircuit | null) {\n return a === null\n ? b === null\n : b !== null &&\n a.circuitName === b.circuitName &&\n a.target === b.target &&\n a.artifactSha256.toLowerCase() === b.artifactSha256.toLowerCase() &&\n a.vkSha256.toLowerCase() === b.vkSha256.toLowerCase();\n}\n\n/** Pure reference lookup. No proof, RPC, current fee price, extrapolation or transaction gas limit. */\nexport function estimateBenchmarkGas(\n plan: OperationPlan,\n protocol: TokenProtocol,\n profiles?: readonly GasBenchmarkProfile[]\n): BenchmarkGasEstimate {\n const credit = plan.credit;\n const deliveries = credit?.deliveries ?? plan.outputs.map((out) => out.delivery);\n const request: GasEstimateRequest = {\n deployment: {\n chainId: plan.context.chainId.toString(),\n protocolAddress: plan.context.protocolAddress,\n runtimeCodeHash: protocol.expectedRuntimeCodeHash ?? null,\n tokenAddress: plan.context.tokenAddress,\n },\n shape: {\n kind: plan.kind,\n target: plan.statement?.target ?? \"evm\",\n capacity: plan.capacity ?? 0,\n noteInputs: plan.inputs.length,\n noteOutputs: plan.outputs.length,\n sourceTrees: operationSources(plan).length,\n creditInputs: credit?.inputs.length ?? 0,\n creditOutputs: credit?.outputs.length ?? 0,\n creditRemainders:\n credit?.draw?.remainderCommitments.filter((hash) => BigInt(hash) !== 0n).length ??\n 0,\n funding: plan.fundingMode,\n permit: (plan.funding.permit?.deadline ?? 0n) !== 0n,\n deliveryBytes: deliveries.reduce(\n (sum, d) => sum + (d.ciphertext.length - 2) / 2 + (d.clue.length - 2) / 2,\n 0\n ),\n },\n circuit: plan.statement\n ? {\n circuitName: plan.statement.circuitName,\n target: plan.statement.target,\n artifactSha256: plan.statement.artifactSha256,\n vkSha256: plan.statement.vkSha256,\n }\n : null,\n };\n const base = { source: \"benchmark\" as const, request };\n if (request.shape.target === \"noir-recursive\")\n return { ...base, available: false, reason: \"recursive-member-only\" };\n const candidates = (profiles ?? defaultProfiles).filter((p) =>\n sameDeployment(p.deployment, request.deployment)\n );\n if (!request.deployment.runtimeCodeHash || !candidates.length)\n return { ...base, available: false, reason: \"deployment-not-covered\" };\n const exact = candidates.flatMap((profile) =>\n profile.measurements\n .filter(\n (m) =>\n shapeKeys.every((key) => m.shape[key] === request.shape[key]) &&\n sameCircuit(m.circuit, request.circuit)\n )\n .map((measurement) => ({ profile, measurement }))\n );\n const mean = (measurement: GasBenchmarkProfile[\"measurements\"][number]) => {\n const count = BigInt(measurement.samples.length);\n return (\n (measurement.samples.reduce((sum, s) => sum + BigInt(s.gasUsed), 0n) + count - 1n) /\n count\n );\n };\n exact.sort((a, b) =>\n mean(a.measurement) > mean(b.measurement)\n ? -1\n : mean(a.measurement) < mean(b.measurement)\n ? 1\n : a.measurement.id.localeCompare(b.measurement.id)\n );\n if (exact.length) {\n const { profile, measurement } = exact[0]!;\n const gas = measurement.samples.map((sample) => BigInt(sample.gasUsed));\n const count = BigInt(gas.length);\n return {\n ...base,\n available: true,\n gasUnits: (gas.reduce((sum, value) => sum + value, 0n) + count - 1n) / count,\n range: {\n min: gas.reduce((a, b) => (a < b ? a : b)),\n max: gas.reduce((a, b) => (a > b ? a : b)),\n kind: \"observed\",\n },\n samples: gas.length,\n profileId: profile.id,\n measurementId: measurement.id,\n evidence: structuredClone(profile.source),\n };\n }\n return { ...base, available: false, reason: \"shape-not-covered\" };\n}\n\n/** Pre-proof reference only; ethers must estimate the final transaction independently. */\nexport interface GasReference {\n gasUnits: bigint;\n}\n\n/** Internal workload envelope for combinations without an exact receipt measurement. */\nexport function estimateShapeGas(\n request: GasEstimateRequest,\n profiles: readonly GasBenchmarkProfile[] = defaultProfiles\n): GasReference {\n if (request.shape.target === \"noir-recursive\") {\n throw new Error(\n \"Estimate gas for the complete aggregate, not an individual recursive member\"\n );\n }\n const measurements = profiles.flatMap((profile) => profile.measurements);\n const matching = measurements.filter(\n (measurement) =>\n measurement.shape.kind === request.shape.kind &&\n measurement.shape.target === request.shape.target &&\n sameCircuit(measurement.circuit, request.circuit)\n );\n const exact = matching.filter((measurement) =>\n shapeKeys.every((key) => measurement.shape[key] === request.shape[key])\n );\n if (exact.length) {\n const means = exact.map((m) => {\n const count = BigInt(m.samples.length);\n return (m.samples.reduce((sum, s) => sum + BigInt(s.gasUsed), 0n) + count - 1n) / count;\n });\n return { gasUnits: means.reduce((max, v) => (v > max ? v : max)) };\n }\n if (\n [\"create-credit\", \"draw-credit\", \"top-up-credit\", \"cancel-credit\"].includes(\n request.shape.kind\n ) &&\n !matching.length\n )\n throw new Error(\"No current Credit gas reference for this artifact and verification key\");\n const candidates = matching.length\n ? matching\n : measurements.filter(\n (measurement) =>\n measurement.shape.kind === request.shape.kind &&\n measurement.shape.target === request.shape.target\n );\n if (!candidates.length) throw new Error(\"No gas reference for this operation kind and target\");\n // Scale upward only. This intentionally overcounts shared verification work rather than\n // claiming a calibrated marginal cost for unmeasured input, tree or authorization paths.\n const dimensions = [\n \"noteInputs\",\n \"noteOutputs\",\n \"sourceTrees\",\n \"creditInputs\",\n \"creditOutputs\",\n \"creditRemainders\",\n \"deliveryBytes\",\n ...(!matching.length ? [\"capacity\"] : []),\n ] as const;\n // Same public shape may have several private-policy variants. Use their worst observed\n // receipt before comparing different workload baselines, so a cheaper variant cannot win.\n const groups = new Map<string, (typeof candidates)[number]>();\n for (const candidate of candidates) {\n const key = JSON.stringify([\n shapeKeys.map((k) => candidate.shape[k]),\n candidate.circuit?.circuitName,\n candidate.circuit?.target,\n candidate.circuit?.artifactSha256.toLowerCase(),\n candidate.circuit?.vkSha256.toLowerCase(),\n ]);\n const previous = groups.get(key);\n groups.set(\n key,\n previous\n ? { ...candidate, samples: [...previous.samples, ...candidate.samples] }\n : candidate\n );\n }\n const estimates = [...groups.values()].map((measurement) => {\n let numerator = 1n;\n let denominator = 1n;\n for (const key of dimensions) {\n const current = BigInt(request.shape[key as keyof GasBenchmarkShape] as number) + 1n;\n const baseline =\n BigInt(measurement.shape[key as keyof GasBenchmarkShape] as number) + 1n;\n if (current * denominator > numerator * baseline) {\n numerator = current;\n denominator = baseline;\n }\n }\n let gas = measurement.samples.reduce(\n (max, sample) => (BigInt(sample.gasUsed) > max ? BigInt(sample.gasUsed) : max),\n 0n\n );\n gas = (gas * numerator + denominator - 1n) / denominator;\n // These external calls were absent from the bundled receipt matrix. Reserve the cost\n // of one complete measured operation for each additional authorization mechanism.\n if (request.shape.funding === \"signature\" && measurement.shape.funding !== \"signature\")\n gas *= 2n;\n if (request.shape.permit && !measurement.shape.permit) gas *= 2n;\n return gas;\n });\n return { gasUnits: estimates.reduce((min, gas) => (gas < min ? gas : min)) };\n}\n\nexport function estimateGasReference(\n plan: OperationPlan,\n protocol: TokenProtocol,\n profiles?: readonly GasBenchmarkProfile[]\n): GasReference {\n const reference = estimateBenchmarkGas(plan, protocol, profiles);\n if (reference.available) return { gasUnits: reference.gasUnits };\n // Team records take priority only for their exact deployment and shape. The built-in\n // reference model is deployment-independent and covers the current SDK operation family.\n return estimateShapeGas(reference.request);\n}\n","import { invisiProtocolAbi } from \"@invisi-labs/protocol/contracts\";\nimport { Interface, type Result } from \"ethers\";\n\nconst protocolInterface = new Interface(invisiProtocolAbi);\n\n/** Decode only canonical protocol receipt bytes before routing events to token wallets. */\nexport function decodeProtocolEvent(log: { data: string; topics: readonly string[] }) {\n const decoded = protocolInterface.parseLog(log);\n if (!decoded) throw new Error(\"Unknown protocol receipt event\");\n const encoded = protocolInterface.encodeEventLog(decoded.fragment, decoded.args);\n if (\n encoded.data.toLowerCase() !== log.data.toLowerCase() ||\n encoded.topics.length !== log.topics.length ||\n encoded.topics.some(\n (topic, index) => topic.toLowerCase() !== log.topics[index]!.toLowerCase()\n )\n )\n throw new Error(\"Noncanonical protocol receipt event\");\n const args = decoded.args.toObject(true);\n // Preserve empty protocol arrays: ethers toObject(true) represents an empty Result as {}.\n for (const key of [\n \"tokens\",\n \"commitments\",\n \"nullifiers\",\n \"outputCommitments\",\n \"leafIndices\",\n \"remainderLeafIndices\",\n ]) {\n const values = decoded.args.getValue(key) as Result | undefined;\n if (values) args[key] = values.toArray(true);\n }\n for (const key of [\"sources\", \"deliveries\"]) {\n const values = decoded.args.getValue(key) as Result[] | undefined;\n if (values) args[key] = values.map((value) => value.toObject(true));\n }\n const params = decoded.args.getValue(\"params\") as Result | undefined;\n if (params) {\n const source = (params.getValue(\"creation\") as Result | undefined) ?? params;\n const target = params.getValue(\"creation\") ? args.params.creation : args.params;\n for (const key of [\"nullifiers\", \"remainderCommitments\", \"expiries\", \"recoveryAmounts\"]) {\n const values = source.getValue(key) as Result | undefined;\n if (values) target[key] = values.toArray(true);\n }\n const sources = source.getValue(\"sources\") as Result[] | undefined;\n if (sources) target.sources = sources.map((value) => value.toObject(true));\n }\n return { eventName: decoded.name, args };\n}\n","import type { Address } from \"@invisi-labs/protocol/contracts\";\nimport type { CanonicalReceipt } from \"@invisi-labs/protocol\";\nimport type { DeliveryEventLog } from \"./discovery\";\nimport { decodeProtocolEvent } from \"./protocol-events\";\n\n/** Decode independently fetched canonical receipt bytes, never normalized service events. */\nexport function readProtocolLogs(\n receipt: CanonicalReceipt,\n protocolAddress: Address\n): DeliveryEventLog[] {\n if (\n receipt.status !== \"success\" ||\n !/^0x[0-9a-fA-F]{64}$/.test(receipt.transactionHash) ||\n typeof receipt.block.number !== \"bigint\" ||\n receipt.block.number < 0n ||\n !/^0x[0-9a-fA-F]{64}$/.test(receipt.block.hash)\n )\n throw new Error(\"Invalid canonical protocol receipt\");\n const seen = new Set<number>();\n return receipt.logs\n .filter((log) => log.address.toLowerCase() === protocolAddress.toLowerCase())\n .map((log) => {\n if (\n log.transactionHash.toLowerCase() !== receipt.transactionHash.toLowerCase() ||\n !Number.isSafeInteger(log.logIndex) ||\n log.logIndex < 0 ||\n seen.has(log.logIndex)\n )\n throw new Error(\"Invalid canonical receipt log identity\");\n seen.add(log.logIndex);\n const decoded = decodeProtocolEvent(log);\n return {\n address: log.address,\n eventName: decoded.eventName,\n args: decoded.args as Record<string, unknown>,\n blockNumber: receipt.block.number,\n blockHash: receipt.block.hash,\n transactionHash: receipt.transactionHash.toLowerCase(),\n logIndex: log.logIndex,\n removed: false,\n } as DeliveryEventLog;\n })\n .sort((a, b) => a.logIndex! - b.logIndex!);\n}\n","import { MAX_CIPHERTEXT_BYTES } from \"@invisi-labs/core\";\nimport type { Address, Hex } from \"@invisi-labs/protocol/contracts\";\nimport { isAddress } from \"ethers\";\n\nimport {\n decodeAddress,\n ReceivingAddress,\n type CreditDeliveryState,\n type Note,\n type ViewingCapability,\n} from \"@invisi-labs/core\";\nimport { normalizeOpaqueDelivery } from \"@invisi-labs/protocol\";\n\nexport interface DiscoveryContext {\n chainId: bigint;\n protocolAddress: Address;\n}\n/** Decoded logs from complete canonical transaction receipts, including insertion logs. */\nexport interface DeliveryEventLog {\n address: string;\n eventName: string;\n args?: Record<string, unknown>;\n blockNumber?: bigint | null;\n blockHash?: Hex | null;\n transactionHash?: Hex | null;\n logIndex?: number | null;\n removed?: boolean;\n}\nexport interface DeliveryCandidate {\n tokenAddress: Address;\n treeId: bigint;\n leafIndex: number;\n commitment: Hex;\n role: \"funds\" | \"owner\" | \"spender\";\n delivery: { ciphertext: Hex; clue: Hex };\n blockNumber: bigint;\n blockHash: Hex;\n transactionHash: Hex;\n}\nconst EVENTS = new Set([\n \"CommitmentsInserted\",\n \"BatchOutputs\",\n \"Shield\",\n \"Transact\",\n \"CrossTreeTransact\",\n \"CreditCreated\",\n \"CreditDraw\",\n \"CreditToppedUp\",\n \"CreditCancelled\",\n]);\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) throw new Error(message);\n}\nfunction object(value: unknown): Record<string, unknown> {\n check(value && typeof value === \"object\" && !Array.isArray(value), \"invalid event object\");\n return value as Record<string, unknown>;\n}\nfunction array(value: unknown): unknown[] {\n check(Array.isArray(value), \"invalid event array\");\n check(\n Array.from({ length: value.length }, (_, i) => i in value).every(Boolean),\n \"sparse event array\"\n );\n return value;\n}\nfunction integer(value: unknown): bigint {\n check(\n typeof value === \"bigint\" || (typeof value === \"number\" && Number.isSafeInteger(value)),\n \"invalid event integer\"\n );\n const n = BigInt(value);\n check(n >= 0n, \"negative event integer\");\n return n;\n}\nfunction index(value: unknown): number {\n const n = integer(value);\n check(n < 65536n, \"invalid event leaf index\");\n return Number(n);\n}\nfunction hash(value: unknown): Hex {\n check(typeof value === \"string\" && /^0x[0-9a-fA-F]{64}$/.test(value), \"invalid event hash\");\n return value.toLowerCase() as Hex;\n}\nfunction contextCheck(context: DiscoveryContext): void {\n check(context.chainId >= 0n && context.chainId < 1n << 64n, \"invalid discovery chain\");\n check(\n isAddress(context.protocolAddress) && BigInt(context.protocolAddress) !== 0n,\n \"invalid discovery instance/token\"\n );\n}\nconst position = (tree: bigint, at: number) => `${tree}:${at}`;\n\n/** Correlate deliveries with canonical insertion events, never service-supplied balances or positions.\n * The caller selects a confirmed chain/deployment and supplies complete decoded receipts.\n */\nexport function extractDeliveryCandidates(\n logs: readonly DeliveryEventLog[],\n context: DiscoveryContext,\n confirmedThrough: bigint\n): DeliveryCandidate[] {\n contextCheck(context);\n check(confirmedThrough >= 0n, \"invalid confirmed height\");\n const relevant = logs.filter(\n (log) =>\n log.address.toLowerCase() === context.protocolAddress.toLowerCase() &&\n EVENTS.has(log.eventName)\n );\n const insertions = new Map<string, Hex>();\n const metadata = (log: DeliveryEventLog) => {\n check(!log.removed, \"discovery resync required after reorg\");\n check(\n typeof log.blockNumber === \"bigint\" &&\n log.blockNumber >= 0n &&\n log.blockNumber <= confirmedThrough,\n \"event is not confirmed\"\n );\n check(Number.isSafeInteger(log.logIndex) && log.logIndex! >= 0, \"invalid log position\");\n return {\n blockNumber: log.blockNumber,\n blockHash: hash(log.blockHash),\n transactionHash: hash(log.transactionHash),\n };\n };\n const insertionKey = (log: DeliveryEventLog, tree: bigint, at: number) =>\n `${hash(log.transactionHash)}:${position(tree, at)}`;\n for (const log of relevant) {\n metadata(log);\n if (log.eventName !== \"CommitmentsInserted\" && log.eventName !== \"BatchOutputs\") continue;\n const a = object(log.args),\n tree = integer(a.treeId),\n start = index(a.startLeafIndex),\n leaves = array(a.commitments);\n check(tree > 0n && tree < 1n << 64n, \"invalid insertion tree\");\n check(start + leaves.length <= 65536, \"insertion exceeds tree capacity\");\n for (const [i, leaf] of leaves.entries()) {\n const key = insertionKey(log, tree, start + i),\n value = hash(leaf),\n previous = insertions.get(key);\n check(!previous || previous === value, \"conflicting insertion events\");\n insertions.set(key, value);\n }\n }\n const results = new Map<string, DeliveryCandidate>();\n const add = (\n log: DeliveryEventLog,\n tree: bigint,\n at: number,\n commitment: unknown,\n role: DeliveryCandidate[\"role\"],\n wire: unknown,\n token: unknown = log.args?.token ??\n (log.args?.params as { token?: unknown; creation?: { token?: unknown } } | undefined)\n ?.token ??\n (log.args?.params as { creation?: { token?: unknown } } | undefined)?.creation?.token\n ) => {\n check(tree > 0n && tree < 1n << 64n, \"invalid output tree\");\n const inserted = insertions.get(insertionKey(log, tree, at));\n check(inserted, \"delivery has no matching canonical insertion\");\n if (commitment !== undefined)\n check(hash(commitment) === inserted, \"delivery commitment conflicts with insertion\");\n const delivery = normalizeOpaqueDelivery(wire as never, { allowEmpty: role === \"funds\" });\n check(\n typeof token === \"string\" && isAddress(token) && BigInt(token) !== 0n,\n \"invalid event token\"\n );\n const value = {\n tokenAddress: token as Address,\n treeId: tree,\n leafIndex: at,\n commitment: inserted,\n role,\n delivery,\n ...metadata(log),\n };\n const key = `${insertionKey(log, tree, at)}:${role}`,\n previous = results.get(key);\n check(\n !previous ||\n (previous.tokenAddress.toLowerCase() === token.toLowerCase() &&\n previous.delivery.ciphertext === delivery.ciphertext &&\n previous.delivery.clue === delivery.clue &&\n previous.blockHash === value.blockHash),\n \"conflicting delivery events\"\n );\n results.set(key, value);\n };\n const creation = (\n log: DeliveryEventLog,\n a: Record<string, unknown>,\n fields: Record<string, unknown>\n ) => {\n const tree = integer(a.outputTreeId),\n leaves = array(a.leafIndices),\n ds = array(a.deliveries);\n const change = hash(fields.changeCommitment),\n hasChange = BigInt(change) !== 0n;\n check(\n ds.length === 3 && leaves.length === (hasChange ? 2 : 1),\n \"invalid Credit creation delivery slots\"\n );\n add(log, tree, index(leaves[0]), fields.creditCommitment, \"owner\", ds[0]);\n add(log, tree, index(leaves[0]), fields.creditCommitment, \"spender\", ds[1]);\n if (hasChange) add(log, tree, index(leaves[1]), change, \"funds\", ds[2]);\n else normalizeOpaqueDelivery(ds[2] as never, { empty: true });\n };\n for (const log of relevant) {\n const a = object(log.args);\n if (log.eventName === \"Shield\") {\n const ds = array(a.deliveries),\n tree = integer(a.treeId),\n start = index(a.startLeafIndex);\n check(start + ds.length <= 65536, \"shield exceeds tree capacity\");\n ds.forEach((d, i) => add(log, tree, start + i, undefined, \"funds\", d));\n } else if (log.eventName === \"Transact\" || log.eventName === \"CrossTreeTransact\") {\n const cs = array(a.outputCommitments),\n ds = array(a.deliveries),\n leaves = array(a.leafIndices),\n tree = integer(a.outputTreeId);\n check(\n cs.length === ds.length && cs.length === leaves.length,\n \"invalid transact delivery slots\"\n );\n cs.forEach((c, i) => add(log, tree, index(leaves[i]), c, \"funds\", ds[i]));\n } else if (log.eventName === \"BatchOutputs\") {\n const tokens = array(a.tokens);\n const cs = array(a.commitments),\n tree = integer(a.treeId),\n start = index(a.startLeafIndex),\n packed = a.packedDeliveries;\n check(\n typeof packed === \"string\" && /^0x(?:[0-9a-fA-F]{2})*$/.test(packed),\n \"invalid packed deliveries\"\n );\n check(tokens.length === cs.length, \"batch token count mismatch\");\n check(start + cs.length <= 65536, \"batch exceeds tree capacity\");\n let offset = 2;\n cs.forEach((c, i) => {\n check(offset + 4 <= packed.length, \"truncated delivery length prefix\");\n const length = Number.parseInt(packed.slice(offset, offset + 4), 16);\n offset += 4;\n check(\n length <= MAX_CIPHERTEXT_BYTES &&\n offset + length * 2 + (length === 0 ? 0 : 136) <= packed.length,\n \"invalid packed delivery length\"\n );\n const ciphertext = `0x${packed.slice(offset, offset + length * 2)}`;\n offset += length * 2;\n const clue = length === 0 ? \"0x\" : `0x${packed.slice(offset, offset + 136)}`;\n if (length !== 0) offset += 136;\n add(log, tree, start + i, c, \"funds\", { ciphertext, clue }, tokens[i]);\n });\n check(offset === packed.length, \"trailing packed delivery bytes\");\n } else if (log.eventName === \"CreditCreated\") creation(log, a, a);\n else if (log.eventName === \"CreditToppedUp\")\n creation(log, a, object(object(a.params).creation));\n else if (log.eventName === \"CreditDraw\") {\n const p = object(a.params),\n cs = array(p.remainderCommitments),\n ds = array(a.deliveries),\n leaves = array(a.remainderLeafIndices),\n tree = integer(a.outputTreeId);\n check(\n ds.length === 2 * cs.length && leaves.length === cs.length,\n \"invalid draw delivery slots\"\n );\n cs.forEach((c, i) => {\n if (BigInt(hash(c)) === 0n) {\n check(integer(leaves[i]) === 0n, \"absent remainder has nonzero position\");\n normalizeOpaqueDelivery(ds[2 * i] as never, { empty: true });\n normalizeOpaqueDelivery(ds[2 * i + 1] as never, { empty: true });\n } else {\n add(log, tree, index(leaves[i]), c, \"owner\", ds[2 * i]);\n add(log, tree, index(leaves[i]), c, \"spender\", ds[2 * i + 1]);\n }\n });\n }\n }\n return [...results.values()];\n}\nexport interface DiscoveredNote extends Omit<DeliveryCandidate, \"delivery\" | \"role\"> {\n note: Note;\n}\nexport interface DiscoveredCredit extends Omit<DeliveryCandidate, \"delivery\"> {\n role: \"owner\" | \"spender\";\n state: CreditDeliveryState;\n}\n/** Authenticate private deliveries from a single batch of canonical receipts. */\nexport async function decryptCandidates(\n logs: readonly DeliveryEventLog[],\n options: {\n context: DiscoveryContext;\n viewing: Pick<ViewingCapability, \"ownerAddress\" | \"decryptNote\" | \"decryptCredit\">;\n confirmedThrough: bigint;\n }\n): Promise<{ notes: DiscoveredNote[]; credits: DiscoveredCredit[] }> {\n contextCheck(options.context);\n decodeAddress(ReceivingAddress.fromIdentity(options.viewing.ownerAddress).toString());\n check(\n !logs.some(\n (log) =>\n log.address.toLowerCase() === options.context.protocolAddress.toLowerCase() &&\n log.removed\n ),\n \"discovery resync required after reorg\"\n );\n const candidates = extractDeliveryCandidates(logs, options.context, options.confirmedThrough);\n const positions = new Map<string, DeliveryCandidate>();\n const unique = new Map<string, DeliveryCandidate>();\n for (const candidate of candidates) {\n const key = position(candidate.treeId, candidate.leafIndex);\n const previous = positions.get(key);\n check(\n !previous ||\n (previous.commitment === candidate.commitment &&\n previous.blockHash === candidate.blockHash &&\n previous.transactionHash === candidate.transactionHash &&\n previous.tokenAddress.toLowerCase() === candidate.tokenAddress.toLowerCase()),\n \"conflicting canonical position\"\n );\n positions.set(key, candidate);\n unique.set(`${key}:${candidate.role}`, candidate);\n }\n const notes: DiscoveredNote[] = [];\n const credits: DiscoveredCredit[] = [];\n for (const candidate of unique.values()) {\n const { delivery, role, ...positionData } = candidate;\n const context = {\n chainId: options.context.chainId,\n protocolAddress: BigInt(options.context.protocolAddress),\n tokenAddress: BigInt(candidate.tokenAddress),\n outputCommitment: candidate.commitment,\n };\n // Non-recipient ciphertexts and failed authentication are normal scan outcomes.\n try {\n if (role === \"funds\") {\n if (delivery.ciphertext === \"0x\") continue;\n const note = await options.viewing.decryptNote(delivery.ciphertext, context);\n notes.push({ ...positionData, note });\n } else {\n const state = await options.viewing.decryptCredit(delivery.ciphertext, {\n ...context,\n role,\n });\n credits.push({ ...positionData, role, state });\n }\n } catch {\n /* Unrelated or invalid output: never add unauthenticated amounts. */\n }\n }\n return { notes, credits };\n}\n","import type { Provider } from \"ethers\";\nimport { EthersChainReader } from \"../integrations/ethers\";\nimport type { Hex } from \"@invisi-labs/protocol/contracts\";\nimport { readProtocolLogs } from \"./receipt-logs\";\n\nimport { Disclosure, type DisclosureOutput, type DisclosureResult } from \"@invisi-labs/core\";\nimport { TokenProtocol, type CanonicalBlock, type ChainReader } from \"@invisi-labs/protocol\";\nimport { extractDeliveryCandidates } from \"./discovery\";\n\nexport interface DisclosureReference {\n transactionHash: Hex;\n treeId: bigint;\n leafIndex: number;\n role: \"funds\" | \"owner\" | \"spender\";\n}\n\nexport type DisclosureReader = Pick<\n ChainReader,\n \"getChainId\" | \"getCode\" | \"getReceipt\" | \"getBlock\" | \"getLatestBlockNumber\"\n>;\n\nexport interface DisclosureVerifierOptions {\n protocol: TokenProtocol;\n reader: DisclosureReader;\n /** Minimum confirmations including the inclusion block; defaults to one. */\n confirmations?: number;\n}\n\nexport interface DisclosureEvidence {\n reference: Readonly<DisclosureReference>;\n block: Readonly<CanonicalBlock>;\n confirmations: bigint;\n output: Readonly<DisclosureOutput>;\n}\n\nexport interface VerifiedDisclosure {\n result: DisclosureResult;\n block: Readonly<CanonicalBlock>;\n confirmations: bigint;\n output: Readonly<DisclosureReference & { commitment: Hex }>;\n}\n\nfunction check(value: unknown, message: string): asserts value {\n if (!value) throw new Error(message);\n}\n\nfunction reference(value: DisclosureReference): DisclosureReference {\n check(/^0x[0-9a-fA-F]{64}$/.test(value.transactionHash), \"invalid disclosure transaction hash\");\n check(\n typeof value.treeId === \"bigint\" && value.treeId > 0n && value.treeId < 1n << 64n,\n \"invalid disclosure tree ID\"\n );\n check(\n Number.isSafeInteger(value.leafIndex) && value.leafIndex >= 0 && value.leafIndex < 65536,\n \"invalid disclosure leaf index\"\n );\n check([\"funds\", \"owner\", \"spender\"].includes(value.role), \"invalid disclosure reference role\");\n return {\n transactionHash: value.transactionHash.toLowerCase() as Hex,\n treeId: value.treeId,\n leafIndex: value.leafIndex,\n role: value.role,\n };\n}\n\n/** Read-only verification against a trusted RPC and authenticated protocol deployment.\n * Results establish output content/inclusion at a block, not payer identity, spent state or wallet completeness.\n */\nexport class DisclosureVerifier {\n readonly #protocol: TokenProtocol;\n readonly #reader: DisclosureReader;\n readonly #confirmations: bigint;\n\n constructor(\n options:\n | DisclosureVerifierOptions\n | (Omit<DisclosureVerifierOptions, \"reader\"> & { provider: Provider })\n ) {\n const confirmations = options.confirmations ?? 1;\n check(\n Number.isSafeInteger(confirmations) && confirmations >= 1,\n \"invalid disclosure confirmations\"\n );\n this.#protocol = options.protocol;\n this.#reader =\n \"provider\" in options ? new EthersChainReader(options.provider) : options.reader;\n this.#confirmations = BigInt(confirmations);\n Object.freeze(this);\n }\n\n private async barrier(block: Readonly<CanonicalBlock>): Promise<bigint> {\n await this.#protocol.validateDeployment(this.#reader);\n const canonical = await this.#reader.getBlock(block.number);\n check(\n canonical.number === block.number &&\n canonical.hash.toLowerCase() === block.hash.toLowerCase(),\n \"disclosure canonical block changed; reorg verification required\"\n );\n const head = await this.#reader.getLatestBlockNumber();\n check(\n head >= block.number && head - block.number + 1n >= this.#confirmations,\n \"insufficient disclosure confirmations\"\n );\n check(\n (await this.#reader.getChainId()) === this.#protocol.context.chainId,\n \"disclosure chain changed during verification\"\n );\n return head - block.number + 1n;\n }\n\n /** Resolve the exact inserted output and its delivery from a successful canonical receipt. */\n async readOutput(value: DisclosureReference): Promise<DisclosureEvidence> {\n const selected = reference(value);\n await this.#protocol.validateDeployment(this.#reader);\n const received = await this.#reader.getReceipt(selected.transactionHash);\n check(received, \"disclosure transaction receipt is unavailable\");\n const receipt = structuredClone(received);\n check(receipt.status === \"success\", \"disclosure requires a successful transaction receipt\");\n check(\n receipt.transactionHash.toLowerCase() === selected.transactionHash,\n \"disclosure receipt transaction mismatch\"\n );\n check(\n typeof receipt.block.number === \"bigint\" &&\n receipt.block.number >= 0n &&\n /^0x[0-9a-fA-F]{64}$/.test(receipt.block.hash),\n \"invalid disclosure receipt block\"\n );\n const { context } = this.#protocol;\n const logs = readProtocolLogs(receipt, context.protocolAddress);\n const candidates = extractDeliveryCandidates(logs, context, receipt.block.number).filter(\n (candidate) =>\n candidate.treeId === selected.treeId &&\n candidate.leafIndex === selected.leafIndex &&\n candidate.role === selected.role &&\n candidate.tokenAddress.toLowerCase() === context.tokenAddress.toLowerCase()\n );\n check(\n candidates.length === 1,\n \"disclosure output has no unique canonical insertion and delivery\"\n );\n const candidate = candidates[0]!;\n const confirmations = await this.barrier(receipt.block);\n return Object.freeze({\n reference: Object.freeze(selected),\n block: Object.freeze({ ...receipt.block }),\n confirmations,\n output: Object.freeze({\n chainId: context.chainId,\n protocolAddress: BigInt(context.protocolAddress),\n tokenAddress: BigInt(context.tokenAddress),\n outputCommitment: candidate.commitment,\n role: selected.role,\n ciphertext: candidate.delivery.ciphertext,\n }),\n });\n }\n\n async verify(disclosure: Disclosure, value: DisclosureReference): Promise<VerifiedDisclosure> {\n const evidence = await this.readOutput(value);\n const result = await disclosure.verify(evidence.output);\n const confirmations = await this.barrier(evidence.block);\n return Object.freeze({\n result: Object.freeze(result),\n block: evidence.block,\n confirmations,\n output: Object.freeze({\n ...evidence.reference,\n commitment: evidence.output.outputCommitment,\n }),\n });\n }\n\n toJSON() {\n return { disclosureVerifier: true, confirmations: this.#confirmations.toString() };\n }\n\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n}\n","import { FIELD_MODULUS, normalizeCreditDeliveryState } from \"@invisi-labs/core\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils\";\nimport type { WalletScope, WalletState, WalletStore } from \"./state\";\nimport { creditReservationKey } from \"./state\";\nexport function scopeKey(scope: WalletScope): string {\n if (\n typeof scope.namespace !== \"string\" ||\n !scope.namespace.length ||\n scope.namespace.length > 256\n )\n throw new Error(\"invalid wallet namespace\");\n if (typeof scope.chainId !== \"bigint\" || scope.chainId < 0n || scope.chainId >= 1n << 64n)\n throw new Error(\"invalid scope chain\");\n for (const address of [scope.protocolAddress])\n if (!/^0x[0-9a-fA-F]{40}$/.test(address) || BigInt(address) === 0n)\n throw new Error(\"invalid scope deployment\");\n if (\n !/^0x[0-9a-fA-F]{40}$/.test(scope.ownerAddress) ||\n BigInt(scope.ownerAddress) <= 0n ||\n BigInt(scope.ownerAddress) >= 1n << 160n\n )\n throw new Error(\"invalid scope wallet\");\n return bytesToHex(\n sha256(\n utf8ToBytes(\n \"Invisi.WalletScope.v1:\" +\n JSON.stringify([\n scope.namespace,\n scope.chainId.toString(),\n scope.protocolAddress.toLowerCase(),\n scope.ownerAddress.toLowerCase(),\n ])\n )\n )\n );\n}\nexport function initialState(scope: WalletScope): WalletState {\n scopeKey(scope);\n return {\n schemaVersion: 1,\n scope: { ...scope },\n revision: 0,\n notes: {},\n credits: {},\n reservations: {},\n operations: {},\n };\n}\nexport function validateState(state: WalletState, scope: WalletScope, revision: number): void {\n if (\n !state ||\n state.schemaVersion !== 1 ||\n scopeKey(state.scope) !== scopeKey(scope) ||\n state.revision !== revision\n )\n throw new Error(\"wallet state scope/schema/revision mismatch\");\n if (!Number.isSafeInteger(revision) || revision < 0)\n throw new Error(\"invalid wallet state revision\");\n for (const field of [state.notes, state.credits, state.reservations, state.operations])\n if (!field || typeof field !== \"object\" || Array.isArray(field))\n throw new Error(\"invalid wallet state records\");\n for (const record of Object.values(state.notes)) {\n if (\n typeof record.note.tokenAddress !== \"bigint\" ||\n record.note.tokenAddress <= 0n ||\n record.note.tokenAddress >= 1n << 160n ||\n record.note.chainId !== scope.chainId ||\n record.note.protocolAddress !== BigInt(scope.protocolAddress) ||\n record.note.ownerAddress.toLowerCase() !== scope.ownerAddress.toLowerCase() ||\n typeof record.note.amount !== \"bigint\" ||\n record.note.amount <= 0n ||\n record.note.amount >= 1n << 128n\n )\n throw new Error(\"invalid stored note context or amount\");\n if (![\"unspent\", \"unknown\", \"spent\"].includes(record.spent))\n throw new Error(\"invalid spent state\");\n }\n for (const record of Object.values(state.credits)) {\n const note = normalizeCreditDeliveryState(record.state).note;\n if (\n note.chainId !== scope.chainId ||\n note.protocolAddress !== BigInt(scope.protocolAddress) ||\n ![\"owner\", \"spender\"].includes(record.role) ||\n (record.role === \"owner\"\n ? note.ownerWalletIdentity\n : note.spenderWalletIdentity\n ).toLowerCase() !== scope.ownerAddress.toLowerCase() ||\n ![\"unspent\", \"unknown\", \"spent\"].includes(record.spent)\n )\n throw new Error(\"invalid stored Credit context or role\");\n }\n for (const record of [...Object.values(state.notes), ...Object.values(state.credits)]) {\n if (\n !/^0x[0-9a-fA-F]{64}$/.test(record.commitment) ||\n BigInt(record.commitment) <= 0n ||\n BigInt(record.commitment) >= FIELD_MODULUS ||\n typeof record.treeId !== \"bigint\" ||\n record.treeId < 1n ||\n record.treeId >= 1n << 64n ||\n !Number.isInteger(record.leafIndex) ||\n record.leafIndex < 0 ||\n record.leafIndex >= 65536 ||\n typeof record.blockNumber !== \"bigint\" ||\n record.blockNumber < 0n ||\n !/^0x[0-9a-fA-F]{64}$/.test(record.blockHash)\n )\n throw new Error(\"invalid stored receipt position\");\n }\n for (const [id, operation] of Object.entries(state.reservations))\n if (\n !state.operations[operation] ||\n (!state.notes[id] &&\n !Object.values(state.credits).some(\n (record) => creditReservationKey(record.commitment) === id\n ) &&\n ![\"submitted\", \"uncertain\", \"reorged\"].includes(\n state.operations[operation]!.status\n ))\n )\n throw new Error(\"orphan input reservation\");\n}\n/** A stored encrypted blob and its CAS revision. No private state is exposed to adapters. */\nexport interface AtomicRecord {\n revision: number;\n data: Uint8Array;\n}\nexport interface AtomicRecordStore {\n read(key: string): Promise<AtomicRecord | undefined>;\n compareAndSwap(key: string, previousRevision: number, next: AtomicRecord): Promise<boolean>;\n}\nexport interface WalletRecordCodec {\n encode(value: WalletState, context: { key: string; revision: number }): Promise<Uint8Array>;\n decode(data: Uint8Array, context: { key: string; revision: number }): Promise<WalletState>;\n}\nexport class TransactionalWalletStore implements WalletStore {\n readonly persistent: boolean;\n readonly #records: AtomicRecordStore;\n readonly #codec: WalletRecordCodec;\n constructor(\n records: AtomicRecordStore,\n codec: WalletRecordCodec,\n options: { persistent: boolean }\n ) {\n this.#records = records;\n this.#codec = codec;\n this.persistent = options.persistent;\n }\n async readSnapshot(scope: WalletScope): Promise<WalletState> {\n const key = scopeKey(scope),\n record = await this.#records.read(key);\n if (!record) return initialState(scope);\n const state = await this.#codec.decode(record.data, { key, revision: record.revision });\n validateState(state, scope, record.revision);\n return state;\n }\n async transaction<T>(scope: WalletScope, action: (draft: WalletState) => T): Promise<T> {\n if (action.constructor.name === \"AsyncFunction\")\n throw new Error(\"wallet transaction action must be synchronous\");\n const copied = { ...scope },\n key = scopeKey(copied);\n for (let attempt = 0; attempt < 100; attempt++) {\n const draft = await this.readSnapshot(copied),\n previous = draft.revision;\n const result = action(draft);\n if (result && typeof result === \"object\" && \"then\" in result) {\n Promise.resolve(result).catch(() => {});\n throw new Error(\"wallet transaction action must be synchronous\");\n }\n validateState(draft, copied, previous);\n if (!Number.isSafeInteger(previous + 1))\n throw new Error(\"wallet state revision exhausted\");\n draft.revision = previous + 1;\n const data = await this.#codec.encode(draft, { key, revision: draft.revision });\n if (\n await this.#records.compareAndSwap(key, previous, {\n revision: draft.revision,\n data,\n })\n )\n return result;\n }\n throw new Error(\"wallet transaction contention limit exceeded\");\n }\n toJSON() {\n return { walletStore: true, persistent: this.persistent };\n }\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n}\n/** Explicitly nonpersistent reference storage; data never leaves this process. */\nexport class MemoryAtomicRecords implements AtomicRecordStore {\n readonly #values = new Map<string, AtomicRecord>();\n async read(key: string): Promise<AtomicRecord | undefined> {\n const value = this.#values.get(key);\n return value ? { revision: value.revision, data: Uint8Array.from(value.data) } : undefined;\n }\n async compareAndSwap(\n key: string,\n previousRevision: number,\n next: AtomicRecord\n ): Promise<boolean> {\n if ((this.#values.get(key)?.revision ?? 0) !== previousRevision) return false;\n this.#values.set(key, { revision: next.revision, data: Uint8Array.from(next.data) });\n return true;\n }\n}\n","import { Signature, SigningKey, getBytes, concat, verifyTypedData } from \"ethers\";\nimport {\n computeWalletAuthorizationDigest,\n AuthorizedStatement,\n computeOwnerAddress,\n createSigningRequest,\n walletAuthorizationTypedData,\n type WalletAuthorizationProvider,\n} from \"@invisi-labs/core\";\nimport { WitnessBuilder, type TokenProtocol } from \"@invisi-labs/protocol\";\nimport type { Prover } from \"@invisi-labs/prover\";\nimport type {\n FundingAuthorizationVerifier,\n FundingSigner,\n FundingTypedData,\n OperationPlan,\n OperationRuntime,\n SavedOperation,\n TransactionProveOptions,\n} from \"./operation-types\";\nimport {\n authorizationRequest,\n fundingTypedData,\n publicProof,\n witnessFor,\n statement,\n} from \"./operation-protocol\";\nimport { sameStatement } from \"./proof-integrity\";\n\n/** Both managed and detached handles authorize the same frozen statement. */\nexport async function authorizeOperation(\n plan: OperationPlan,\n provider: WalletAuthorizationProvider\n) {\n if (provider.ownerAddress !== plan.scope.ownerAddress)\n throw new Error(\"wallet authorization capability mismatch\");\n const request = authorizationRequest(plan);\n const digest = computeWalletAuthorizationDigest(request);\n const signed = await provider.authorize(structuredClone(request));\n if (signed.ownerAddress !== plan.scope.ownerAddress || signed.digest !== digest)\n throw new Error(\"wallet authorization statement mismatch\");\n return signed;\n}\n\nexport async function proveOperation(\n protocol: TokenProtocol,\n plan: OperationPlan,\n authorization: AuthorizedStatement | undefined,\n prover: Prover,\n options: TransactionProveOptions\n) {\n if (Object.hasOwn(options, \"target\")) {\n throw new Error(\"prove accepts execution, not a backend target\");\n }\n const { execution = \"single\", ...proverOptions } = options;\n if (execution !== \"single\" && execution !== \"aggregate\") {\n throw new Error(\"execution must be single or aggregate\");\n }\n const frozen = statement(plan);\n if (execution === \"aggregate\" && (plan.kind !== \"transfer\" || plan.capacity !== 14)) {\n throw new Error(\"aggregate execution requires a 14-slot transfer\");\n }\n if (plan.kind === \"transfer\") {\n // Only the proof backend/key changes; public words and wallet authorization stay fixed.\n plan.statement = WitnessBuilder.statement(\n frozen.circuitName,\n frozen.expectedPublicInputs,\n execution === \"aggregate\" ? \"noir-recursive\" : \"evm\"\n );\n }\n const request = await witnessFor(protocol, plan, authorization);\n if (JSON.stringify({ ...request, witness: undefined }) !== JSON.stringify(plan.statement))\n throw new Error(\"prepared proof statement changed\");\n try {\n const proof = publicProof(await prover.prove(request, proverOptions));\n sameStatement(proof, plan.statement!);\n if (\n (await prover.verify(\n structuredClone(proof),\n structuredClone(plan.statement!),\n proverOptions\n )) !== true\n )\n throw new Error(\"proof verification failed\");\n return proof;\n } catch {\n options.signal?.throwIfAborted();\n throw new Error(\"operation proof generation or verification failed\");\n }\n}\n\nexport async function signOperationFunding(\n saved: SavedOperation,\n signer: FundingSigner,\n verifier?: FundingAuthorizationVerifier\n) {\n const payer = saved.plan.funding.payer!;\n if (signer.address.toLowerCase() !== payer.toLowerCase())\n throw new Error(\"funding signer is not the payer\");\n const typed = await fundingTypedData(saved);\n const signature = await signer.signTypedData(structuredClone(typed));\n return verifyFundingSignature(typed, payer, signature, verifier);\n}\n\n/** Export only typed commitments, never private note openings or authorization witnesses. */\nexport function walletSigningRequest(plan: OperationPlan) {\n return createSigningRequest(walletAuthorizationTypedData(authorizationRequest(plan)));\n}\n\n/** Recover the EOA key and build the existing private witness without receiving a private key. */\nexport async function acceptWalletSignature(plan: OperationPlan, signature: string) {\n const request = authorizationRequest(plan);\n const digest = computeWalletAuthorizationDigest(request);\n try {\n const signed = Signature.from(signature);\n const publicKey = getBytes(SigningKey.recoverPublicKey(digest, signed));\n const owner = await computeOwnerAddress(publicKey);\n if (owner.toLowerCase() !== plan.scope.ownerAddress.toLowerCase()) {\n throw new Error(\"wallet signature identity mismatch\");\n }\n return new AuthorizedStatement(plan.scope.ownerAddress, digest, {\n public_key_x: Array.from(publicKey.slice(1, 33)),\n public_key_y: Array.from(publicKey.slice(33)),\n signature: Array.from(getBytes(concat([signed.r, signed.s]))),\n });\n } catch {\n throw new Error(\"invalid wallet authorization signature\");\n }\n}\n\n/** The remote round trip may outlive the nonce or deadline selected during preparation. */\nexport async function fundingSigningRequest(\n saved: SavedOperation,\n runtime: Pick<OperationRuntime, \"reader\" | \"options\">\n) {\n const plan = saved.plan;\n if (plan.fundingMode !== \"signature\") {\n throw new Error(\"operation does not require a funding signature\");\n }\n if (plan.kind !== \"shield\" && !saved.proof) {\n throw new Error(\"proof must precede funding authorization\");\n }\n await runtime.options.protocol.validateDeployment(runtime.reader);\n const block = await runtime.reader.getBlock(await runtime.reader.getLatestBlockNumber());\n if (block.timestamp > plan.deadline || block.timestamp > (plan.funding.deadline ?? 0n)) {\n throw new Error(\"funding authorization expired\");\n }\n if (\n (await runtime.reader.getFundingNonce(plan.context, plan.funding.payer!, block)) !==\n plan.funding.sigNonce\n ) {\n throw new Error(\"funding nonce changed; prepare again\");\n }\n const request = createSigningRequest(await fundingTypedData(saved));\n if ((await runtime.reader.getBlock(block.number)).hash !== block.hash) {\n throw new Error(\"canonical funding block changed\");\n }\n return request;\n}\n\n/** Verify against reconstructed operation data, never caller-supplied typed data. */\nexport async function acceptFundingSignature(\n saved: SavedOperation,\n signature: string,\n runtime: Pick<OperationRuntime, \"reader\" | \"options\">\n) {\n if (!/^0x(?:[a-fA-F0-9]{2})+$/.test(signature)) {\n throw new Error(\"invalid EVM funding signature\");\n }\n const request = await fundingSigningRequest(saved, runtime);\n return verifyFundingSignature(\n request,\n saved.plan.funding.payer!,\n signature,\n runtime.options.fundingVerifier\n );\n}\n\nasync function verifyFundingSignature(\n request: FundingTypedData,\n payer: `0x${string}`,\n signature: string,\n verifier?: FundingAuthorizationVerifier\n) {\n if (!/^0x(?:[a-fA-F0-9]{2})+$/.test(signature)) {\n throw new Error(\"invalid EVM funding signature\");\n }\n const types = Object.fromEntries(\n Object.entries(request.types).map(([name, fields]) => [name, [...fields]])\n );\n let validEOA = false;\n try {\n validEOA =\n verifyTypedData(request.domain, types, request.message, signature).toLowerCase() ===\n payer.toLowerCase();\n if (validEOA) {\n // Normalize EIP-2098 and parity-style EOA signatures for Solidity SignatureChecker.\n signature = Signature.from(signature).serialized;\n }\n } catch {\n validEOA = false;\n }\n const valid = verifier\n ? await verifier.verifyTypedData({\n ...structuredClone(request),\n address: payer,\n signature: signature as `0x${string}`,\n })\n : validEOA;\n if (valid !== true) {\n throw new Error(\"invalid EVM funding signature\");\n }\n return signature as `0x${string}`;\n}\n","import type { ProofBundle, ProofStatement } from \"@invisi-labs/prover\";\nimport { getBytes } from \"ethers\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex } from \"@noble/hashes/utils\";\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) throw new Error(message);\n}\nexport function sameStatement(proof: ProofBundle, expected: ProofStatement): void {\n check(\n proof.formatVersion === 1 &&\n proof.bbVersion === \"6.0.0\" &&\n proof.circuitName === expected.circuitName &&\n proof.target === expected.target &&\n proof.artifactSha256 === expected.artifactSha256 &&\n proof.vkSha256 === expected.vkSha256,\n \"proof release/target mismatch\"\n );\n check(\n proof.publicInputs.length === expected.expectedPublicInputs.length &&\n proof.publicInputs.every((word, i) => word === expected.expectedPublicInputs[i]),\n \"proof public statement mismatch\"\n );\n check(\n /^0x(?:[a-fA-F0-9]{2})+$/.test(proof.proofHex) &&\n bytesToHex(sha256(getBytes(proof.proofHex))) === proof.proofSha256,\n \"proof integrity mismatch\"\n );\n}\n","import { normalizeFunding } from \"@invisi-labs/protocol\";\nimport type { OperationPlan } from \"./operation-types\";\nimport type { OperationStatus } from \"./state\";\nimport { inputFacts, requiresAuthorization } from \"./operation-protocol\";\nexport function operationPreview(plan: OperationPlan, status: OperationStatus) {\n const p = plan;\n const fee = p.params ?? p.shieldParams ?? p.credit?.creation ?? p.credit?.cancel;\n const funding = normalizeFunding(p.funding);\n return {\n id: p.id,\n kind: p.kind,\n status,\n context: { ...p.context },\n inputs: inputFacts(p).length,\n inputDetails: [\n ...p.inputs.map((input) => ({\n kind: \"notes\" as const,\n commitment: input.commitment,\n amount: input.note.amount,\n owner: input.note.ownerAddress,\n treeId: input.treeId,\n leafIndex: input.leafIndex,\n })),\n ...(p.credit?.inputs ?? []).map((input) => ({\n kind: \"credits\" as const,\n commitment: input.commitment,\n amount: input.state.note.amount,\n owner: input.state.note.ownerWalletIdentity,\n spender: input.state.note.spenderWalletIdentity,\n expiry: input.state.note.expiry,\n role: input.role,\n treeId: input.treeId,\n leafIndex: input.leafIndex,\n })),\n ],\n funding: {\n payer: funding.payer,\n amount: funding.amount,\n authorization: p.fundingMode,\n sigNonce: funding.sigNonce,\n deadline: funding.deadline,\n permit: { deadline: funding.permit.deadline },\n },\n creditOutputs: p.credit?.outputs.map((output) => ({\n commitment: output.commitment,\n amount: output.state.note.amount,\n expiry: output.state.note.expiry,\n owner: output.state.note.ownerWalletIdentity,\n spender: output.state.note.spenderWalletIdentity,\n ownerPayout: output.state.note.ownerPayout,\n spenderPayout: output.state.note.spenderPayout,\n })),\n outputs: p.outputs.map((output) => ({\n commitment: output.commitment,\n to: output.address,\n amount: output.amount,\n change: output.change,\n })),\n capacity: p.capacity,\n deadline: p.deadline,\n feeRecipient: fee?.feeRecipient,\n feeAmount: fee?.feeAmount ?? 0n,\n fundingAmount: p.funding.amount ?? 0n,\n fundingPayer: p.funding.payer,\n withdrawalAmount:\n p.params?.withdrawalAmount ??\n p.credit?.draw?.totalAmount ??\n (p.credit?.cancel\n ? p.credit.cancel.amount - (p.credit.cancel.feeAmount ?? 0n)\n : undefined) ??\n 0n,\n withdrawalAddress:\n p.params?.withdrawalAddress ?? p.credit?.draw?.spender ?? p.credit?.cancel?.owner,\n permissions: {\n walletAuthorization: requiresAuthorization(p),\n proof: p.kind !== \"shield\",\n fundingAuthorization: p.fundingMode === \"signature\",\n },\n };\n}\n","import { estimateGasReference } from \"../gas-estimation\";\nimport {\n authorizeOperation,\n proveOperation,\n signOperationFunding,\n walletSigningRequest,\n acceptWalletSignature,\n fundingSigningRequest,\n acceptFundingSignature,\n} from \"./operation-execution\";\nimport { operationPreview } from \"./operation-preview\";\nimport type { Hex } from \"@invisi-labs/protocol/contracts\";\n\nimport { MissingCapabilityError, type AuthorizedStatement } from \"@invisi-labs/core\";\nimport { normalizeFunding, type TransactionCall } from \"@invisi-labs/protocol\";\nimport type { ProofBundle, ProofStatement } from \"@invisi-labs/prover\";\nimport { sameStatement } from \"./proof-integrity\";\nimport { confirmOperation, reconcileOperation } from \"./operation-confirmation\";\nimport {\n encodeOperation,\n exportBroadcasterIntent,\n inputFacts,\n operationExpired,\n operationSources,\n publicProof,\n requiresAuthorization,\n statement,\n} from \"./operation-protocol\";\nimport type {\n OperationAggregateMember,\n OperationPlan,\n OperationRuntime,\n SavedOperation,\n TransactionProveOptions,\n} from \"./operation-types\";\nimport type { OperationRecord, OperationStatus } from \"./state\";\nimport { scopeKey } from \"./store\";\n\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) {\n throw new Error(message);\n }\n}\n\n/** Immutable operation handle. No private plan, witness, or transaction is logged implicitly. */\nexport class Operation {\n readonly #runtime: OperationRuntime;\n readonly #saved: SavedOperation;\n readonly #authorization: AuthorizedStatement | undefined;\n readonly status: OperationStatus;\n\n private constructor(\n runtime: OperationRuntime,\n saved: SavedOperation,\n status: OperationStatus,\n authorization?: AuthorizedStatement\n ) {\n this.#runtime = runtime;\n this.#saved = structuredClone(saved);\n this.status = status;\n this.#authorization = authorization;\n Object.freeze(this);\n }\n\n static async prepare(runtime: OperationRuntime, plan: OperationPlan): Promise<Operation> {\n const saved: SavedOperation = { plan: structuredClone(plan), generation: 0 };\n await runtime.store.transaction(runtime.scope, (state) => {\n check(!state.invalidated, \"wallet state requires canonical resync\");\n check(!state.operations[plan.id], \"operation already exists\");\n const facts = inputFacts(plan);\n for (const input of facts) {\n const record = state[input.kind][input.key];\n check(\n record &&\n record.spent === \"unspent\" &&\n !state.reservations[input.reservationKey],\n \"input unavailable or already reserved\"\n );\n }\n state.operations[plan.id] = {\n id: plan.id,\n status: \"prepared\",\n inputs: facts.map((input) => input.reservationKey),\n deadline: plan.deadline,\n payload: saved,\n };\n for (const input of facts) {\n state.reservations[input.reservationKey] = plan.id;\n }\n });\n return new Operation(runtime, saved, \"prepared\");\n }\n\n static async resume(runtime: OperationRuntime, id: string): Promise<Operation> {\n const result = await runtime.store.transaction(runtime.scope, (state) => {\n const record = state.operations[id];\n check(record, \"unknown operation\");\n const saved = record.payload as SavedOperation;\n check(\n saved?.plan?.version === 1 &&\n saved.plan.id === id &&\n Number.isSafeInteger(saved.generation) &&\n saved.generation >= 0 &&\n saved.generation < Number.MAX_SAFE_INTEGER,\n \"invalid operation payload\"\n );\n const context = runtime.options.protocol.context;\n const actual = saved.plan.context;\n check(\n scopeKey(saved.plan.scope) === scopeKey(runtime.scope) &&\n actual.chainId === context.chainId &&\n actual.protocolAddress.toLowerCase() ===\n context.protocolAddress.toLowerCase() &&\n actual.tokenAddress.toLowerCase() === context.tokenAddress.toLowerCase(),\n \"recovered operation scope/deployment context mismatch\"\n );\n if (saved.plan.kind !== \"shield\") {\n statement(saved.plan);\n }\n if (saved.proof) {\n sameStatement(saved.proof, saved.plan.statement!);\n }\n // Explicit recovery fences any former worker. Signing material is never restored from storage.\n saved.generation++;\n delete saved.claim;\n return new Operation(runtime, saved, record.status);\n });\n if (result.#saved.call) {\n const expected = await result.encode(result.#saved);\n check(\n expected.to === result.#saved.call.to &&\n expected.value === result.#saved.call.value &&\n expected.data === result.#saved.call.data,\n \"recovered transaction differs from frozen operation\"\n );\n }\n return result;\n }\n\n /** Public non-sendable intent for a firm quote before wallet authorization. */\n async exportBroadcasterIntent() {\n check(\n [\"prepared\", \"authorized\"].includes(this.status),\n \"quote intent requires a prepared operation\"\n );\n return exportBroadcasterIntent(this.#saved.plan);\n }\n broadcasterQuote() {\n return this.#saved.broadcasterQuote\n ? structuredClone(this.#saved.broadcasterQuote)\n : undefined;\n }\n async withBroadcaster(\n client: import(\"../broadcaster\").BroadcasterClient,\n options: import(\"../broadcaster-preparation\").WithBroadcasterOptions\n ): Promise<Operation> {\n check(this.status === \"prepared\", \"broadcaster must attach before signing\");\n const { prepareIntent, prepareBroadcasterPlan } =\n await import(\"../broadcaster-preparation\");\n const runtime = this.#runtime;\n const reprepare = (intent: import(\"../broadcaster-preparation\").PreparationIntent) =>\n prepareIntent(\n {\n options: runtime.options,\n scope: runtime.scope,\n reader: runtime.reader,\n readInventory: async () => {\n const state = await runtime.store.readSnapshot(runtime.scope);\n for (const [key, owner] of Object.entries(state.reservations))\n if (owner === this.id) delete state.reservations[key];\n return state;\n },\n complete: async (plan) => plan,\n },\n intent\n );\n const selected = await prepareBroadcasterPlan(this.#saved.plan, reprepare, client, options);\n const saved = await runtime.store.transaction(runtime.scope, (state) => {\n const record = state.operations[this.id];\n const old = record?.payload as SavedOperation;\n check(\n record?.status === \"prepared\" &&\n old?.generation === this.#saved.generation &&\n !old.claim &&\n !old.externalized,\n \"stale operation or active worker\"\n );\n check(!state.invalidated, \"wallet state requires canonical resync\");\n const nextPlan = { ...selected.plan, id: this.id };\n const facts = inputFacts(nextPlan);\n for (const fact of facts)\n check(\n state[fact.kind][fact.key]?.spent === \"unspent\" &&\n (!state.reservations[fact.reservationKey] ||\n state.reservations[fact.reservationKey] === this.id),\n \"input unavailable or already reserved\"\n );\n for (const [key, owner] of Object.entries(state.reservations))\n if (owner === this.id) delete state.reservations[key];\n for (const fact of facts) state.reservations[fact.reservationKey] = this.id;\n const next: SavedOperation = {\n plan: nextPlan,\n broadcasterQuote: selected.quote,\n generation: old.generation + 1,\n };\n record.payload = next;\n record.inputs = facts.map((fact) => fact.reservationKey);\n record.deadline = nextPlan.deadline;\n return structuredClone(next);\n });\n return new Operation(runtime, saved, \"prepared\");\n }\n get id(): string {\n return this.#saved.plan.id;\n }\n\n get kind(): OperationPlan[\"kind\"] {\n return this.#saved.plan.kind;\n }\n\n estimateGas() {\n return estimateGasReference(\n this.#saved.plan,\n this.#runtime.options.protocol,\n this.#runtime.options.gasBenchmarks\n );\n }\n preview() {\n return operationPreview(this.#saved.plan, this.status);\n }\n\n private current(record: OperationRecord | undefined): SavedOperation {\n check(record, \"unknown operation\");\n const saved = record.payload as SavedOperation;\n check(\n saved.generation === this.#saved.generation && !saved.claim,\n \"stale operation handle or active worker; recover the operation\"\n );\n return saved;\n }\n\n private async stage(\n stage: string,\n allowed: OperationStatus[],\n work: (\n saved: SavedOperation\n ) => Promise<{ status: OperationStatus; authorization?: AuthorizedStatement }>,\n signal?: AbortSignal\n ): Promise<Operation> {\n signal?.throwIfAborted();\n const { store, scope } = this.#runtime;\n const token = crypto.randomUUID();\n const saved = await store.transaction(scope, (state) => {\n check(!state.invalidated, \"wallet requires canonical resync\");\n const record = state.operations[this.id];\n const current = this.current(record);\n check(allowed.includes(record!.status), `invalid operation stage for ${stage}`);\n current.generation++;\n current.claim = { stage, token };\n return structuredClone(current);\n });\n try {\n const next = await work(saved);\n signal?.throwIfAborted();\n await store.transaction(scope, (state) => {\n check(!state.invalidated, \"wallet invalidated during operation\");\n const record = state.operations[this.id];\n const current = record?.payload as SavedOperation;\n check(\n record &&\n current?.generation === saved.generation &&\n current.claim?.token === token &&\n allowed.includes(record.status),\n \"stale operation worker after recovery\"\n );\n delete saved.claim;\n record.status = next.status;\n record.payload = structuredClone(saved);\n });\n return new Operation(\n this.#runtime,\n saved,\n next.status,\n next.authorization ?? this.#authorization\n );\n } catch (error) {\n await store.transaction(scope, (state) => {\n const current = state.operations[this.id]?.payload as SavedOperation | undefined;\n if (current?.claim?.token === token) {\n delete current.claim;\n }\n });\n throw error;\n }\n }\n\n private async signingCurrent(): Promise<void> {\n await this.#runtime.store.transaction(this.#runtime.scope, (state) => {\n check(!state.invalidated, \"wallet state requires canonical resync\");\n this.current(state.operations[this.id]);\n });\n }\n\n /** Public EIP-712 request; signing transport and key custody belong to the caller. */\n async exportWalletAuthorization(options: { signal?: AbortSignal } = {}) {\n options.signal?.throwIfAborted();\n await this.signingCurrent();\n check(\n requiresAuthorization(this.#saved.plan),\n \"operation does not require wallet authorization\"\n );\n check(\n [\"prepared\", \"authorized\"].includes(this.status),\n \"operation is not awaiting wallet authorization\"\n );\n return walletSigningRequest(this.#saved.plan);\n }\n\n /** Attach an external EOA signature, retaining its witness only at the private proving boundary. */\n async withWalletSignature(\n signature: string,\n options: { signal?: AbortSignal } = {}\n ): Promise<Operation> {\n options.signal?.throwIfAborted();\n await this.signingCurrent();\n check(\n requiresAuthorization(this.#saved.plan),\n \"operation does not require wallet authorization\"\n );\n check(\n [\"prepared\", \"authorized\"].includes(this.status),\n \"operation is not awaiting wallet authorization\"\n );\n const authorization = await acceptWalletSignature(this.#saved.plan, signature);\n return this.stage(\n \"wallet authorization\",\n [\"prepared\", \"authorized\"],\n async () => ({ status: \"authorized\", authorization }),\n options.signal\n );\n }\n\n /** Export only after proving when the funding authorization binds an actual proof hash. */\n async exportFundingAuthorization(options: { signal?: AbortSignal } = {}) {\n options.signal?.throwIfAborted();\n await this.signingCurrent();\n check(\n this.status === (this.kind === \"shield\" ? \"prepared\" : \"proved\"),\n \"operation is not awaiting funding authorization or proof\"\n );\n const request = await fundingSigningRequest(this.#saved, this.#runtime);\n options.signal?.throwIfAborted();\n await this.signingCurrent();\n return request;\n }\n\n /** Verify an external signature against this handle's own frozen operation. */\n async withFundingSignature(\n signature: string,\n options: { signal?: AbortSignal } = {}\n ): Promise<Operation> {\n options.signal?.throwIfAborted();\n await this.signingCurrent();\n check(\n this.status === (this.kind === \"shield\" ? \"prepared\" : \"proved\"),\n \"operation is not awaiting funding authorization or proof\"\n );\n const verified = await acceptFundingSignature(this.#saved, signature, this.#runtime);\n return this.stage(\n \"funding authorization\",\n this.kind === \"shield\" ? [\"prepared\"] : [\"proved\"],\n async (saved) => {\n saved.plan.funding.signature = verified;\n if (saved.plan.statement?.target !== \"noir-recursive\") {\n saved.call = await this.encode(saved);\n }\n return { status: \"ready\" };\n },\n options.signal\n );\n }\n\n async authorize(options: { signal?: AbortSignal } = {}): Promise<Operation> {\n check(\n requiresAuthorization(this.#saved.plan),\n \"operation does not require wallet authorization\"\n );\n const provider = this.#runtime.authorization();\n check(\n provider.ownerAddress === this.#runtime.scope.ownerAddress,\n \"wallet authorization capability mismatch\"\n );\n return this.stage(\n \"wallet authorization\",\n [\"prepared\", \"authorized\"],\n async (saved) => {\n const authorization = await authorizeOperation(saved.plan, provider);\n return { status: \"authorized\", authorization };\n },\n options.signal\n );\n }\n\n async prove(suppliedOptions: TransactionProveOptions = {}): Promise<Operation> {\n const options = { ...suppliedOptions };\n check(\n !this.#saved.broadcasterQuote || options.execution !== \"aggregate\",\n \"a broadcaster quote requires direct execution\"\n );\n const plan = this.#saved.plan;\n check(plan.kind !== \"shield\", \"shield requires no proof\");\n if (requiresAuthorization(plan)) {\n check(\n this.#authorization,\n \"local wallet authorization required; authorize again after recovery\"\n );\n }\n const prover = this.#runtime.options.prover;\n if (!prover) {\n throw new MissingCapabilityError(\"prover\");\n }\n return this.stage(\n \"proof\",\n requiresAuthorization(plan) ? [\"authorized\"] : [\"prepared\"],\n async (saved) => {\n const p = saved.plan;\n saved.proof = await proveOperation(\n this.#runtime.options.protocol,\n p,\n this.#authorization,\n prover,\n options\n );\n if (p.fundingMode === \"signature\") {\n return { status: \"proved\" };\n }\n if (p.statement?.target !== \"noir-recursive\") {\n saved.call = await this.encode(saved);\n }\n return { status: \"ready\" };\n },\n options.signal\n );\n }\n\n private encode(saved: SavedOperation): Promise<TransactionCall> {\n return encodeOperation(saved);\n }\n\n async authorizeFunding(options: { signal?: AbortSignal } = {}): Promise<Operation> {\n const p = this.#saved.plan;\n check(p.fundingMode === \"signature\", \"operation does not require a funding signature\");\n check(p.kind === \"shield\" || this.#saved.proof, \"proof must precede funding authorization\");\n const signer = this.#runtime.options.fundingSigner;\n if (!signer) {\n throw new MissingCapabilityError(\"EVM funding signer\");\n }\n check(\n signer.address.toLowerCase() === p.funding.payer!.toLowerCase(),\n \"funding signer is not the payer\"\n );\n return this.stage(\n \"funding authorization\",\n p.kind === \"shield\" ? [\"prepared\"] : [\"proved\"],\n async (saved) => {\n saved.plan.funding.signature = await signOperationFunding(\n saved,\n signer,\n this.#runtime.options.fundingVerifier\n );\n if (saved.plan.statement?.target !== \"noir-recursive\") {\n saved.call = await this.encode(saved);\n }\n return { status: \"ready\" };\n },\n options.signal\n );\n }\n\n /** Shield caller funding needs no wallet signing or proof; this step only encodes its frozen request. */\n async ready(): Promise<Operation> {\n check(\n this.kind === \"shield\" && this.#saved.plan.fundingMode === \"caller\",\n \"operation needs authorization or proof first\"\n );\n return this.stage(\"encoding\", [\"prepared\"], async (saved) => {\n saved.call = await this.encode(saved);\n return { status: \"ready\" };\n });\n }\n\n private async validateExport(signal?: AbortSignal): Promise<void> {\n signal?.throwIfAborted();\n const { reader, options: runtimeOptions } = this.#runtime;\n await runtimeOptions.protocol.validateDeployment(reader);\n const head = await reader.getBlock(await reader.getLatestBlockNumber());\n const plan = this.#saved.plan;\n check(!operationExpired(plan, head.timestamp), \"operation has expired\");\n if (plan.fundingMode === \"signature\") {\n check(head.timestamp <= (plan.funding.deadline ?? 0n), \"funding authorization expired\");\n check(\n (await reader.getFundingNonce(plan.context, plan.funding.payer!, head)) ===\n plan.funding.sigNonce,\n \"funding nonce changed; prepare again\"\n );\n }\n for (const source of operationSources(plan)) {\n check(\n await reader.isKnownRoot(plan.context, source.treeId, source.merkleRoot, head),\n \"source root is no longer accepted; prepare again\"\n );\n }\n const nullifiers = inputFacts(plan).map((input) => input.nullifier);\n if (nullifiers.length) {\n const spent = await reader.isSpent(plan.context, nullifiers, head);\n check(\n spent.length === nullifiers.length && spent.every((value) => value === false),\n \"input spent or invalid spent response\"\n );\n }\n signal?.throwIfAborted();\n }\n\n async exportTransaction(options: { signal?: AbortSignal } = {}): Promise<TransactionCall> {\n check(\n this.#saved.plan.statement?.target !== \"noir-recursive\",\n \"recursive operations must be exported as aggregate members\"\n );\n await this.validateExport(options.signal);\n const result = await this.#runtime.store.transaction(this.#runtime.scope, (state) => {\n options.signal?.throwIfAborted();\n const record = state.operations[this.id];\n const saved = this.current(record);\n check(record!.status === \"ready\" && saved.call, \"operation is not ready\");\n saved.externalized = true;\n return structuredClone(saved.call);\n });\n return result;\n }\n\n async exportAggregateMember(): Promise<OperationAggregateMember> {\n return this.#runtime.store.transaction(this.#runtime.scope, (state) => {\n const record = state.operations[this.id];\n const saved = this.current(record);\n const plan = saved.plan;\n check(\n [\"ready\", \"uncertain\"].includes(record!.status) &&\n plan.params &&\n saved.proof &&\n plan.statement?.target === \"noir-recursive\" &&\n plan.statement.circuitName === \"transact_user_slots14\",\n \"operation is not a ready recursive slots14 aggregate member\"\n );\n sameStatement(saved.proof, statement(plan));\n check(\n saved.proof.proofHex.length === 2 + 458 * 64,\n \"recursive member proof must have 458 fields\"\n );\n saved.externalized = true;\n return {\n bundle: publicProof(saved.proof),\n statement: structuredClone(plan.statement),\n context: { ...plan.context },\n request: {\n params: structuredClone(plan.params),\n deliveries: plan.outputs.map((output) => structuredClone(output.delivery)),\n funding: normalizeFunding(plan.funding),\n },\n };\n });\n }\n\n async abandon(): Promise<Operation> {\n const saved = await this.#runtime.store.transaction(this.#runtime.scope, (state) => {\n const record = state.operations[this.id];\n const current = this.current(record);\n check(\n !current.externalized,\n \"externalized or broadcast operation requires chain reconciliation\"\n );\n check(\n ![\"confirmed\", \"reorged\"].includes(record!.status),\n \"operation requires chain reconciliation\"\n );\n for (const id of record!.inputs) {\n if (state.reservations[id] === this.id) {\n delete state.reservations[id];\n }\n }\n record!.status = \"failed\";\n current.generation++;\n return structuredClone(current);\n });\n return new Operation(this.#runtime, saved, \"failed\");\n }\n\n /** Record an application-owned signed/broadcast transaction. This never sends or waits. */\n async trackTransaction(transactionHash: string): Promise<Operation> {\n check(/^0x[a-fA-F0-9]{64}$/.test(transactionHash), \"invalid transaction hash\");\n const saved = await this.#runtime.store.transaction(this.#runtime.scope, (state) => {\n check(!state.invalidated, \"wallet requires canonical resync\");\n const record = state.operations[this.id];\n const current = this.current(record);\n check(\n [\"ready\", \"uncertain\", \"submitted\"].includes(record!.status),\n \"operation is not ready\"\n );\n check(\n current.externalized,\n \"export the transaction or aggregate member before tracking\"\n );\n for (const input of record!.inputs) {\n check(state.reservations[input] === this.id, \"operation input reservation lost\");\n }\n current.generation++;\n current.externalized = true;\n record!.transactionHash = transactionHash as Hex;\n // A hash records an association, not proof that a transaction was broadcast or mined.\n record!.status = \"uncertain\";\n return structuredClone(current);\n });\n return new Operation(this.#runtime, saved, \"uncertain\");\n }\n\n async reconcile(\n options: { transactionHash?: Hex; signal?: AbortSignal } = {}\n ): Promise<Operation> {\n options.signal?.throwIfAborted();\n const state = await this.#runtime.store.readSnapshot(this.#runtime.scope);\n const record = state.operations[this.id];\n this.current(record);\n check(!state.invalidated, \"wallet requires canonical resync\");\n const hash = options.transactionHash ?? record!.transactionHash;\n let outcome: { status: OperationStatus; saved: SavedOperation } | undefined;\n if (hash) {\n outcome = await confirmOperation(\n this.#runtime,\n this.id,\n this.#saved.generation,\n hash,\n options.signal\n );\n }\n outcome ??= await reconcileOperation(\n this.#runtime,\n this.id,\n this.#saved.generation,\n options.signal\n );\n return new Operation(this.#runtime, outcome.saved, outcome.status);\n }\n\n toJSON() {\n return { id: this.id, kind: this.kind, status: this.status };\n }\n\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n}\n","import type { Hex } from \"@invisi-labs/protocol/contracts\";\nimport { readProtocolLogs } from \"./receipt-logs\";\n\nimport { computeCreditNullifier } from \"@invisi-labs/core\";\nimport type { CanonicalBlock, CanonicalReceipt } from \"@invisi-labs/protocol\";\nimport { matchesAggregateTransaction } from \"./aggregate-receipt\";\nimport { creditLeaf } from \"./credit-values\";\nimport { extractDeliveryCandidates } from \"./discovery\";\nimport { verifyMembership } from \"./membership\";\nimport { inputFacts, operationExpired } from \"./operation-protocol\";\nimport type { OperationRuntime, SavedOperation } from \"./operation-types\";\nimport { mergeReceiptRecords, mergeSpentObservation } from \"./receipts\";\nimport type { OperationStatus, StoredCredit, StoredNote, WalletState } from \"./state\";\n\nfunction check(ok: unknown, message: string): asserts ok {\n if (!ok) {\n throw new Error(message);\n }\n}\n\nasync function barrier(\n runtime: OperationRuntime,\n state: WalletState,\n block?: CanonicalBlock\n): Promise<void> {\n const checkpoints = [\n state.observedThrough,\n ...(block ? [{ number: block.number, hash: block.hash }] : []),\n ];\n for (const point of checkpoints) {\n if (point && (await runtime.reader.getBlock(point.number)).hash !== point.hash) {\n await runtime.store.transaction(runtime.scope, (draft) => {\n draft.invalidated = \"Canonical operation checkpoint changed; full resync required\";\n for (const record of [\n ...Object.values(draft.notes),\n ...Object.values(draft.credits),\n ]) {\n record.spent = \"unknown\";\n }\n for (const operation of Object.values(draft.operations)) {\n if (\n [\"failed\", \"expired\"].includes(operation.status) &&\n !(operation.payload as { externalized?: boolean } | undefined)?.externalized\n ) {\n continue;\n }\n operation.status = \"reorged\";\n for (const id of operation.inputs) {\n if (!draft.reservations[id]) {\n draft.reservations[id] = operation.id;\n }\n }\n }\n });\n throw new Error(\"canonical operation checkpoint changed; full resync required\");\n }\n }\n}\n\nfunction current(state: WalletState, id: string, generation: number) {\n check(!state.invalidated, \"wallet requires canonical resync\");\n const record = state.operations[id];\n const saved = record?.payload as SavedOperation;\n check(record && saved.generation === generation && !saved.claim, \"stale operation recovery\");\n return { record, saved };\n}\n\nfunction observe(state: WalletState, block: CanonicalBlock): void {\n if (state.observedThrough?.number === block.number) {\n check(state.observedThrough.hash === block.hash, \"operation checkpoint conflict\");\n }\n if (!state.observedThrough || state.observedThrough.number < block.number) {\n state.observedThrough = { number: block.number, hash: block.hash };\n }\n}\n\nexport async function confirmOperation(\n runtime: OperationRuntime,\n id: string,\n generation: number,\n hash: Hex,\n signal?: AbortSignal\n): Promise<{ status: OperationStatus; saved: SavedOperation } | undefined> {\n const { reader, store, scope, options } = runtime;\n const state = await store.readSnapshot(scope);\n const { saved } = current(state, id, generation);\n const plan = saved.plan;\n await options.protocol.validateDeployment(reader);\n await barrier(runtime, state);\n const receipt = await reader.getReceipt(hash);\n if (!receipt) {\n return undefined;\n }\n check(receipt.transactionHash === hash, \"receipt transaction identity mismatch\");\n await barrier(runtime, state, receipt.block);\n const transaction = await reader.getTransaction(hash);\n check(\n transaction && transaction.transactionHash === hash,\n \"confirmed transaction differs from the frozen operation\"\n );\n\n let matchesRequest: boolean;\n if (plan.statement?.target === \"noir-recursive\") {\n matchesRequest = matchesAggregateTransaction(saved, transaction);\n } else {\n matchesRequest =\n !!saved.call &&\n transaction.to.toLowerCase() === saved.call.to.toLowerCase() &&\n transaction.value === saved.call.value &&\n transaction.data.toLowerCase() === saved.call.data.toLowerCase();\n }\n check(matchesRequest, \"confirmed transaction differs from the frozen operation\");\n\n check(\n receipt.status === \"success\" || receipt.status === \"reverted\",\n \"receipt execution status is missing\"\n );\n // A reverted transaction does not revoke its public authorization.\n if (receipt.status === \"reverted\") {\n return undefined;\n }\n const candidates = extractDeliveryCandidates(\n readProtocolLogs(receipt, plan.context.protocolAddress),\n plan.context,\n receipt.block.number\n );\n const latest = await reader.getLatestBlockNumber();\n const height = [latest, receipt.block.number, state.observedThrough?.number ?? 0n].reduce(\n (a, b) => (a > b ? a : b)\n );\n const spentBlock = await reader.getBlock(height);\n check(spentBlock.number === height, \"spent-state canonical block mismatch\");\n const notes: StoredNote[] = [];\n for (const output of plan.outputs) {\n const candidate = candidates.find(\n (value) => value.role === \"funds\" && value.commitment === output.commitment\n );\n check(candidate, \"confirmed output is missing from canonical receipt\");\n if (!output.note || output.note.ownerAddress !== scope.ownerAddress) {\n continue;\n }\n const input = {\n treeId: candidate.treeId,\n leafIndex: candidate.leafIndex,\n commitment: candidate.commitment,\n };\n check(options.protocolRpc, \"membership provider required for confirmed owned output\");\n const proof = await options.protocolRpc!.getMembership(plan.context, input, receipt.block);\n await verifyMembership(reader, plan.context, receipt.block, input, proof);\n notes.push({\n ...input,\n note: structuredClone(output.note),\n blockNumber: receipt.block.number,\n blockHash: receipt.block.hash,\n transactionHash: hash,\n spent: \"unknown\",\n });\n }\n const credits: StoredCredit[] = [];\n for (const output of plan.credit?.outputs ?? []) {\n const n = output.state.note;\n for (const role of [\"owner\", \"spender\"] as const) {\n if (\n (role === \"owner\" ? n.ownerWalletIdentity : n.spenderWalletIdentity) !==\n scope.ownerAddress\n ) {\n continue;\n }\n const candidate = candidates.find(\n (value) => value.role === role && value.commitment === output.commitment\n );\n check(candidate, \"confirmed Credit output is missing from canonical receipt\");\n const input = {\n treeId: candidate.treeId,\n leafIndex: candidate.leafIndex,\n commitment: candidate.commitment,\n };\n check(options.protocolRpc, \"membership provider required for confirmed Credit\");\n const proof = await options.protocolRpc!.getMembership(\n plan.context,\n input,\n receipt.block\n );\n await verifyMembership(reader, plan.context, receipt.block, input, proof);\n const index = plan.credit?.draw?.remainderCommitments.indexOf(output.commitment);\n const parent = plan.credit?.topUp\n ? plan.credit.inputs[0]\n : index !== undefined && index >= 0\n ? plan.credit?.inputs[index]\n : undefined;\n const receivingKeySource =\n parent && state.credits[parent.commitment + \":\" + role]\n ? {\n kind: plan.credit?.topUp ? (\"top-up\" as const) : (\"draw\" as const),\n commitment: parent.commitment,\n }\n : undefined;\n credits.push({\n ...input,\n state: structuredClone(output.state),\n role,\n blockNumber: receipt.block.number,\n blockHash: receipt.block.hash,\n transactionHash: hash,\n spent: \"unknown\",\n ...(receivingKeySource ? { receivingKeySource } : {}),\n });\n }\n }\n if (credits.length) {\n const nullifiers = await Promise.all(\n credits.map(async (record) =>\n computeCreditNullifier(\n plan.context.chainId,\n record.state.note.creditSharedKey,\n await creditLeaf(record.state)\n )\n )\n );\n const values = await reader.isSpent(plan.context, nullifiers, spentBlock);\n check(\n values.length === credits.length && values.every((value) => typeof value === \"boolean\"),\n \"invalid Credit spent-state response\"\n );\n credits.forEach((record, i) => {\n record.spent = values[i] ? \"spent\" : \"unspent\";\n record.checkedThrough = { number: spentBlock.number, hash: spentBlock.hash };\n });\n }\n const facts = inputFacts(plan);\n const nfs = facts.map((input) => input.nullifier);\n const spent = nfs.length ? await reader.isSpent(plan.context, nfs, spentBlock) : [];\n check(\n spent.length === nfs.length && spent.every((value) => value === true),\n \"successful operation inputs are not consumed\"\n );\n // Complete recovered note openings determine their consumption markers without signing authority.\n const nullifier = options.wallet.exportNullifier();\n if (notes.length) {\n const values = await reader.isSpent(\n plan.context,\n await Promise.all(\n notes.map((note) =>\n nullifier!.compute(plan.context.chainId, note.commitment, note.note.nonce)\n )\n ),\n spentBlock\n );\n check(\n values.length === notes.length && values.every((value) => typeof value === \"boolean\"),\n \"invalid output spent-state response\"\n );\n notes.forEach((note, i) => {\n note.spent = values[i] ? \"spent\" : \"unspent\";\n note.checkedThrough = { number: spentBlock.number, hash: spentBlock.hash };\n });\n }\n signal?.throwIfAborted();\n await barrier(runtime, state, receipt.block);\n await barrier(runtime, state, spentBlock);\n return store.transaction(scope, (draft) => {\n signal?.throwIfAborted();\n const { record, saved: active } = current(draft, id, generation);\n for (const point of [draft.observedThrough]) {\n check(\n !point ||\n point.number < spentBlock.number ||\n (point.number === spentBlock.number && point.hash === spentBlock.hash),\n \"wallet advanced or changed during confirmation; retry\"\n );\n }\n mergeReceiptRecords(draft, {\n notes,\n credits,\n checkpoint: { number: receipt.block.number, hash: receipt.block.hash },\n });\n for (const fact of facts) {\n const input = draft[fact.kind][fact.key];\n if (input) {\n mergeSpentObservation(input, {\n spent: \"spent\",\n checkedThrough: { number: spentBlock.number, hash: spentBlock.hash },\n });\n }\n if (fact.kind === \"credits\" && input) {\n for (const other of Object.values(draft.credits)) {\n if (other.commitment === input.commitment) {\n mergeSpentObservation(other, {\n spent: \"spent\",\n checkedThrough: { number: spentBlock.number, hash: spentBlock.hash },\n });\n }\n }\n }\n if (draft.reservations[fact.reservationKey] === id) {\n delete draft.reservations[fact.reservationKey];\n }\n }\n observe(draft, spentBlock);\n record.status = \"confirmed\";\n record.transactionHash = hash;\n active.generation++;\n return { status: record.status, saved: structuredClone(active) };\n });\n}\n\nexport async function reconcileOperation(\n runtime: OperationRuntime,\n id: string,\n generation: number,\n signal?: AbortSignal\n): Promise<{ status: OperationStatus; saved: SavedOperation }> {\n const { reader, store, scope, options } = runtime;\n const state = await store.readSnapshot(scope);\n const { record, saved } = current(state, id, generation);\n const plan = saved.plan;\n await options.protocol.validateDeployment(reader);\n await barrier(runtime, state);\n const block = await reader.getBlock(await reader.getLatestBlockNumber());\n const facts = inputFacts(plan);\n const nfs = facts.map((input) => input.nullifier);\n const spent = nfs.length ? await reader.isSpent(plan.context, nfs, block) : [];\n check(\n spent.length === nfs.length && spent.every((value) => typeof value === \"boolean\"),\n \"invalid reconciliation spent-state response\"\n );\n const expired = operationExpired(plan, block.timestamp);\n // Funding grants can be renewed and an unknown root can reappear. Neither revokes the wallet proof.\n const impossible = spent.some((value) => value);\n signal?.throwIfAborted();\n await barrier(runtime, state, block);\n return store.transaction(scope, (draft) => {\n signal?.throwIfAborted();\n const { record: active, saved: next } = current(draft, id, generation);\n for (const point of [\n draft.observedThrough,\n ...facts.map((fact) => draft[fact.kind][fact.key]?.checkedThrough),\n ]) {\n check(\n !point ||\n point.number < block.number ||\n (point.number === block.number && point.hash === block.hash),\n \"wallet advanced or changed during reconciliation; retry\"\n );\n }\n if (expired || impossible) {\n active.status = expired ? \"expired\" : \"failed\";\n facts.forEach((fact, i) => {\n const input = draft[fact.kind][fact.key];\n if (input) {\n mergeSpentObservation(input, {\n spent: spent[i] ? \"spent\" : \"unspent\",\n checkedThrough: { number: block.number, hash: block.hash },\n });\n if (fact.kind === \"credits\") {\n for (const other of Object.values(draft.credits)) {\n if (other.commitment === input.commitment) {\n mergeSpentObservation(other, {\n spent: spent[i] ? \"spent\" : \"unspent\",\n checkedThrough: { number: block.number, hash: block.hash },\n });\n }\n }\n }\n }\n if (draft.reservations[fact.reservationKey] === id) {\n delete draft.reservations[fact.reservationKey];\n }\n });\n observe(draft, block);\n } else if (next.externalized || active.status === \"reorged\") {\n active.status = \"uncertain\";\n }\n next.generation++;\n return { status: active.status, saved: structuredClone(next) };\n });\n}\n","import type { Address } from \"@invisi-labs/protocol/contracts\";\nimport { Interface, type Result } from \"ethers\";\n\nimport { invisiProtocolAbi, type TransactRequest } from \"@invisi-labs/protocol/contracts\";\nimport { buildTransactCalldata, type TransactionCall } from \"@invisi-labs/protocol\";\nimport type { SavedOperation } from \"./operation-types\";\nconst aggregateAbi = invisiProtocolAbi.filter(\n (item) =>\n item.type === \"function\" &&\n item.name === \"transact\" &&\n item.inputs.length === 2 &&\n item.inputs[1]?.type === \"tuple[]\"\n);\n/** Match the whole frozen member, including funding nonce, signature and permit, in one successful aggregate. */\nexport function matchesAggregateTransaction(\n saved: SavedOperation,\n transaction: TransactionCall & { from: Address }\n): boolean {\n const plan = saved.plan;\n if (\n plan.statement?.target !== \"noir-recursive\" ||\n !plan.params ||\n !saved.externalized ||\n transaction.to.toLowerCase() !== plan.context.protocolAddress.toLowerCase() ||\n transaction.value !== 0n\n )\n return false;\n try {\n const decoded = new Interface(aggregateAbi).parseTransaction({ data: transaction.data })!,\n requests = (decoded.args[1] as Result[]).map((request) => {\n const member = request.toObject(true);\n member.params.sources = request.params.sources.map((source: Result) =>\n source.toObject(true)\n );\n member.params.nullifiers = request.params.nullifiers.toArray(true);\n member.params.outputCommitments = request.params.outputCommitments.toArray(true);\n member.deliveries = request.deliveries.map((delivery: Result) =>\n delivery.toObject(true)\n );\n member.funding.permit.v = Number(member.funding.permit.v);\n return {\n params: member.params,\n deliveries: member.deliveries,\n funding: member.funding,\n };\n }) as readonly TransactRequest[];\n if (\n decoded.name !== \"transact\" ||\n !Array.isArray(requests) ||\n ![4, 8, 12].includes(requests.length)\n )\n return false;\n const canonical = (request: TransactRequest) =>\n buildTransactCalldata({\n context: { ...plan.context, tokenAddress: request.params.token },\n proof: \"0x00\",\n params: request.params,\n deliveries: request.deliveries,\n funding: request.funding,\n caller: transaction.from,\n }).data.toLowerCase();\n const expected = buildTransactCalldata({\n context: plan.context,\n proof: \"0x00\",\n params: plan.params,\n deliveries: plan.outputs.map((output) => output.delivery),\n funding: plan.funding,\n caller: transaction.from,\n }).data.toLowerCase();\n return requests.filter((request) => canonical(request) === expected).length === 1;\n } catch {\n return false;\n }\n}\n","import type { Checkpoint, StoredCredit, StoredNote, WalletState } from \"./state\";\n\nexport interface ReceiptRecords {\n notes: readonly StoredNote[];\n credits: readonly StoredCredit[];\n checkpoint: Checkpoint;\n}\n\nfunction canonical(value: unknown): string {\n return JSON.stringify(value, (_, item) => {\n if (typeof item === \"bigint\") {\n return [\"bigint\", item.toString()];\n }\n if (item instanceof Uint8Array) {\n return Array.from(item);\n }\n if (item && typeof item === \"object\" && !Array.isArray(item)) {\n return Object.fromEntries(\n Object.keys(item)\n .sort()\n .map((key) => [key, item[key]])\n );\n }\n return item;\n });\n}\n\nfunction validateInheritance(state: WalletState, record: StoredCredit): boolean {\n const source = record.receivingKeySource;\n if (!source) return false;\n\n const parent = state.credits[source.commitment + \":\" + record.role];\n if (!parent) {\n throw new Error(\"Credit receiving inheritance has no authenticated parent\");\n }\n\n const previous = parent.state;\n const successor = record.state;\n const immutableFields = [\n \"chainId\",\n \"protocolAddress\",\n \"tokenAddress\",\n \"spenderWalletIdentity\",\n \"ownerWalletIdentity\",\n \"spenderPayout\",\n \"ownerPayout\",\n \"creditSharedKey\",\n ] as const;\n if (\n immutableFields.some((field) => previous.note[field] !== successor.note[field]) ||\n canonical(previous.ownerReceivingKeys) !== canonical(successor.ownerReceivingKeys) ||\n canonical(previous.spenderReceivingKeys) !== canonical(successor.spenderReceivingKeys)\n ) {\n throw new Error(\"Credit receiving inheritance changed immutable fields\");\n }\n\n if (source.kind === \"draw\") {\n if (\n successor.note.amount >= previous.note.amount ||\n successor.note.expiry !== previous.note.expiry\n ) {\n throw new Error(\"invalid Credit receiving inheritance\");\n }\n } else if (\n source.kind !== \"top-up\" ||\n successor.note.amount <= previous.note.amount ||\n successor.note.expiry < previous.note.expiry\n ) {\n throw new Error(\"invalid Credit receiving inheritance\");\n }\n return true;\n}\n\n/** Merge canonical spent observations without replacing a newer per-input checkpoint. */\nexport function mergeSpentObservation(\n previous: Pick<StoredNote, \"spent\" | \"checkedThrough\">,\n incoming: Pick<StoredNote, \"spent\" | \"checkedThrough\">\n): void {\n const next = incoming.checkedThrough;\n const old = previous.checkedThrough;\n if (!next || incoming.spent === \"unknown\") {\n return;\n }\n if (old && next.number < old.number) {\n return;\n }\n if (old && next.number === old.number && next.hash !== old.hash) {\n throw new Error(\"canonical spent checkpoint conflict requires resync\");\n }\n if (previous.spent === \"spent\" && incoming.spent !== \"spent\") {\n throw new Error(\"canonical spent observation conflict requires resync\");\n }\n previous.spent = incoming.spent;\n previous.checkedThrough = { ...next };\n}\n\n/** Atomic private inventory update; the caller must authenticate membership and block identity first. */\nexport function mergeReceiptRecords(state: WalletState, batch: ReceiptRecords): void {\n if (state.invalidated) {\n throw new Error(\"wallet inventory is invalidated\");\n }\n const checkpoint = { ...batch.checkpoint };\n for (const record of [...batch.notes, ...batch.credits]) {\n if (record.blockNumber > checkpoint.number) {\n throw new Error(\"receipt exceeds confirmed checkpoint\");\n }\n const atPosition = [...Object.values(state.notes), ...Object.values(state.credits)].filter(\n (existing) =>\n existing.treeId === record.treeId && existing.leafIndex === record.leafIndex\n );\n if (\n atPosition.some(\n (existing) =>\n existing.commitment !== record.commitment ||\n existing.blockHash !== record.blockHash\n )\n ) {\n throw new Error(\"canonical position conflict requires resync\");\n }\n if (\"note\" in record) {\n const previous = state.notes[record.commitment];\n if (previous) {\n if (canonical(previous.note) !== canonical(record.note)) {\n throw new Error(\"canonical note preimage conflict\");\n }\n mergeSpentObservation(previous, record);\n continue;\n }\n state.notes[record.commitment] = record;\n } else {\n const key = record.commitment + \":\" + record.role;\n const previous = state.credits[key];\n const inherited = validateInheritance(state, record);\n if (previous) {\n if (canonical(previous.state.note) !== canonical(record.state.note)) {\n throw new Error(\"canonical Credit preimage conflict\");\n }\n if (canonical(previous.state) !== canonical(record.state)) {\n if (!inherited) {\n if (previous.receivingKeySource) {\n mergeSpentObservation(previous, record);\n continue;\n }\n throw new Error(\"Credit receiving metadata conflict\");\n }\n previous.state = record.state;\n previous.receivingKeySource = record.receivingKeySource!;\n } else if (inherited) {\n previous.receivingKeySource = record.receivingKeySource!;\n }\n mergeSpentObservation(previous, record);\n continue;\n }\n state.credits[key] = record;\n }\n }\n}\n","import { configureRecipientInfrastructure } from \"../recipient-infrastructure\";\nimport { Wallet } from \"@invisi-labs/core\";\nimport { walletHistory, type HistoryOptions } from \"./history\";\nimport { prepareWithErrors } from \"../errors\";\nimport { copyGasBenchmarks } from \"../gas-estimation\";\nimport type { Hex } from \"@invisi-labs/protocol/contracts\";\nimport { getAddress, type TransactionRequest, type TransactionResponse } from \"ethers\";\n\nimport { MissingCapabilityError } from \"@invisi-labs/core\";\nimport type { Protocol, TransactionCall } from \"@invisi-labs/protocol\";\nimport { Operation } from \"./Operation\";\nimport type {\n CancelCreditPreparation,\n CreateCreditPreparation,\n DrawCreditPreparation,\n OperationPlan,\n OperationRuntime,\n ShieldPreparation,\n TopUpCreditPreparation,\n TransferPreparation,\n WalletSessionOptions,\n WalletSessionInfrastructure,\n} from \"./operation-types\";\nimport { TransactionPreparation } from \"./transaction-preparation\";\nimport { walletBalance, type WalletScope } from \"./state\";\nimport { scopeKey } from \"./store\";\nimport { refreshWallet, type RefreshOptions } from \"./refresh\";\nimport { WalletUpdater } from \"./WalletUpdater\";\n\n/** Native ethers transaction options; the exported business call and session chain remain fixed. */\nexport type SessionTransactionOptions = Omit<\n TransactionRequest,\n \"to\" | \"from\" | \"data\" | \"value\" | \"chainId\"\n>;\n\n/** Wallet state and operations, with infrastructure and permissions explicitly injected. */\nexport class WalletSession {\n readonly #options: WalletSessionInfrastructure;\n #updater: WalletUpdater | undefined;\n readonly #listeners = new Set<() => void>();\n readonly #sending = new Set<string>();\n #refreshQueue: Promise<unknown> = Promise.resolve();\n readonly scope: WalletScope;\n readonly protocol: Protocol;\n\n constructor(options: WalletSessionOptions) {\n if (\"addressLookup\" in options || \"addressResolver\" in options)\n throw new TypeError(\n \"Recipient lookup belongs to each EVM output; caller resolver injection is not supported\"\n );\n options = configureRecipientInfrastructure(options);\n if (\"ciphertextCodecs\" in options || \"envelopeVersion\" in options) {\n throw new Error(\n \"SDK envelope versions are fixed; encode application payload bytes externally\"\n );\n }\n const store = options.store;\n this.#options = {\n ...options,\n ...(store\n ? {\n store: {\n persistent: store.persistent,\n readSnapshot: (scope) => store.readSnapshot(scope),\n transaction: async (scope, action) => {\n const result = await store.transaction(scope, action);\n if (scopeKey(scope) === scopeKey(this.scope)) {\n for (const listener of [...this.#listeners]) {\n try {\n listener();\n } catch {\n // UI observers must not turn a committed write into a failure.\n }\n }\n }\n return result;\n },\n },\n }\n : {}),\n ...(options.gasBenchmarks\n ? { gasBenchmarks: copyGasBenchmarks(options.gasBenchmarks) }\n : {}),\n };\n this.protocol = options.protocol;\n this.scope = Object.freeze({\n namespace: options.namespace ?? \"default\",\n ...options.protocol.context,\n ownerAddress: options.wallet.ownerAddress,\n });\n scopeKey(this.scope);\n Object.freeze(this);\n }\n\n async sendTransaction(\n call: TransactionCall,\n options?: SessionTransactionOptions\n ): Promise<TransactionResponse>;\n async sendTransaction(\n operation: Operation,\n options?: SessionTransactionOptions\n ): Promise<TransactionResponse>;\n /** Delegate sending to ethers; managed operations additionally retain the resulting hash. */\n async sendTransaction(\n input: TransactionCall | Operation,\n options: SessionTransactionOptions = {}\n ): Promise<TransactionResponse> {\n const signer = this.#options.signer;\n if (!signer) throw new MissingCapabilityError(\"ethers signer\");\n const operation = input instanceof Operation ? input : undefined;\n if (operation && this.#sending.has(operation.id))\n throw new Error(\"operation is already being sent by this session\");\n if (operation) this.#sending.add(operation.id);\n // Copy options and plain calldata before the first asynchronous provider check.\n const overrides = { ...options };\n const plain = operation ? undefined : { ...(input as TransactionCall) };\n try {\n if (!signer.provider) throw new MissingCapabilityError(\"connected ethers signer\");\n if ((await signer.provider.getNetwork()).chainId !== this.protocol.context.chainId) {\n throw new Error(\"signer-provider session chain mismatch\");\n }\n if (operation) {\n if (!this.#options.store) throw new MissingCapabilityError(\"wallet store\");\n const state = await this.#options.store.readSnapshot(this.scope);\n if (!state.operations[operation.id])\n throw new Error(\"operation does not belong to this wallet session\");\n }\n const call = operation ? await operation.exportTransaction() : plain!;\n const transaction = await signer.sendTransaction({\n ...overrides,\n to: call.to,\n data: call.data,\n value: call.value,\n chainId: this.protocol.context.chainId,\n });\n if (operation) {\n try {\n await operation.trackTransaction(transaction.hash);\n } catch (cause) {\n throw new Error(\n `Transaction ${transaction.hash} was sent but its operation association could not be saved; resume and reconcile this hash`,\n { cause }\n );\n }\n }\n return transaction;\n } finally {\n if (operation) this.#sending.delete(operation.id);\n }\n }\n\n private runtime(tokenAddress: `0x${string}`): OperationRuntime {\n const options = this.#options;\n if (!options.store) {\n throw new MissingCapabilityError(\"wallet store\");\n }\n if (!options.chainReader) {\n throw new MissingCapabilityError(\"chain reader\");\n }\n return {\n options: { ...options, protocol: options.protocol.forToken(tokenAddress) },\n scope: this.scope,\n store: options.store,\n reader: options.chainReader,\n authorization: () => {\n if (options.authorization) return options.authorization;\n if (options.wallet instanceof Wallet) return options.wallet.exportAuthorization();\n throw new MissingCapabilityError(\"wallet authorization\");\n },\n };\n }\n\n private updater(): WalletUpdater {\n if (this.#updater) return this.#updater;\n const options = this.#options;\n if (!options.store || !options.chainReader || !options.protocolRpc)\n throw new MissingCapabilityError(\"wallet store, chain reader and Protocol RPC\");\n const viewing =\n options.viewing ??\n (options.wallet instanceof Wallet ? options.wallet.getViewer() : undefined);\n if (!viewing) throw new MissingCapabilityError(\"viewing\");\n const receivingAddress = options.wallet.getReceivingAddress();\n const receivingKeys =\n receivingAddress.kind === \"long\" ? receivingAddress.getReceivingKeys() : undefined;\n this.#updater = new WalletUpdater({\n protocol: options.protocol,\n scope: this.scope,\n store: options.store,\n reader: options.chainReader,\n viewing,\n\n protocolRpc: options.protocolRpc,\n ...(receivingKeys ? { receivingKeys } : {}),\n });\n return this.#updater;\n }\n\n /** Local session commits only. Host applications own cross-tab/store subscriptions. */\n subscribe(listener: () => void): () => void {\n this.#listeners.add(listener);\n return () => {\n this.#listeners.delete(listener);\n };\n }\n\n /** Detached history for wallet UI; construction records do not imply chain success. */\n async getHistory(options: HistoryOptions = {}) {\n const tokenAddress = options.tokenAddress\n ? (getAddress(options.tokenAddress) as Hex)\n : undefined;\n const store = this.#options.store;\n if (!store) throw new MissingCapabilityError(\"wallet store\");\n return walletHistory(\n await store.readSnapshot(this.scope),\n tokenAddress ? { tokenAddress } : {}\n );\n }\n\n async balance(tokenAddress: `0x${string}`) {\n const store = this.#options.store;\n if (!store) {\n throw new MissingCapabilityError(\"wallet store\");\n }\n return walletBalance(await store.readSnapshot(this.scope), getAddress(tokenAddress) as Hex);\n }\n\n /** Pull explicitly selected indexed pages; no chain scanning or public tree reconstruction. */\n async refresh(options: RefreshOptions) {\n const provider = this.#options.protocolRpc;\n const reader = this.#options.chainReader;\n if (!reader) throw new MissingCapabilityError(\"chain reader\");\n if (!provider) throw new MissingCapabilityError(\"Protocol RPC\");\n const updater = this.updater();\n const request = {\n ...options,\n ...(options.detectionKey ? { detectionKey: options.detectionKey.slice() } : {}),\n };\n const task = this.#refreshQueue.then(async () => {\n const result = await refreshWallet(\n {\n provider,\n reader,\n context: this.protocol.context,\n fromBlock: this.protocol.deployment.protocol.fromBlock,\n apply: (batch, settings) => updater.applyUpdates(batch, settings),\n },\n request\n );\n // Advance discovery only after every requested page succeeds. Reconciliation may\n // observe newer blocks without enumerating any incoming transactions.\n await this.#options.store!.transaction(this.scope, (state) => {\n request.signal?.throwIfAborted();\n if (state.invalidated) throw new Error(\"wallet requires canonical resync\");\n const previous = state.discoveryThrough;\n const start = previous\n ? previous.number + 1n\n : this.protocol.deployment.protocol.fromBlock;\n if (\n request.fromBlock <= start &&\n (!previous || result.block.number >= previous.number)\n ) {\n state.discoveryThrough = {\n number: result.block.number,\n hash: result.block.hash,\n };\n }\n });\n return result;\n });\n this.#refreshQueue = task.catch(() => {});\n return task;\n }\n\n private preparation(tokenAddress: Hex): TransactionPreparation<Operation> {\n const runtime = this.runtime(tokenAddress);\n return new TransactionPreparation({\n options: runtime.options,\n scope: runtime.scope,\n reader: runtime.reader,\n readInventory: () => runtime.store.readSnapshot(runtime.scope),\n complete: (plan) => Operation.prepare(runtime, plan),\n });\n }\n async prepareTransfer(options: TransferPreparation): Promise<Operation> {\n return prepareWithErrors(\"prepareTransfer\", async () => {\n return this.preparation(options.tokenAddress).prepareTransfer(options);\n });\n }\n async prepareShield(options: ShieldPreparation): Promise<Operation> {\n return prepareWithErrors(\"prepareShield\", async () => {\n return this.preparation(options.tokenAddress).prepareShield(options);\n });\n }\n async prepareCreateCredit(options: CreateCreditPreparation): Promise<Operation> {\n return prepareWithErrors(\"prepareCreateCredit\", async () => {\n return this.preparation(options.tokenAddress).prepareCreateCredit(options);\n });\n }\n async prepareDrawCredit(options: DrawCreditPreparation): Promise<Operation> {\n return prepareWithErrors(\"prepareDrawCredit\", async () => {\n return this.preparation(options.tokenAddress).prepareDrawCredit(options);\n });\n }\n async prepareTopUpCredit(options: TopUpCreditPreparation): Promise<Operation> {\n return prepareWithErrors(\"prepareTopUpCredit\", async () => {\n return this.preparation(options.tokenAddress).prepareTopUpCredit(options);\n });\n }\n async prepareCancelCredit(options: CancelCreditPreparation): Promise<Operation> {\n return prepareWithErrors(\"prepareCancelCredit\", async () => {\n return this.preparation(options.tokenAddress).prepareCancelCredit(options);\n });\n }\n async resume(operationId: string): Promise<Operation> {\n const store = this.#options.store;\n if (!store) throw new MissingCapabilityError(\"wallet store\");\n const state = await store.readSnapshot(this.scope);\n const saved = state.operations[operationId]?.payload as\n { plan?: OperationPlan } | undefined;\n if (!saved?.plan) throw new Error(\"operation not found\");\n return Operation.resume(this.runtime(saved.plan.context.tokenAddress), operationId);\n }\n\n toJSON() {\n return { walletSession: true, ownerAddress: this.scope.ownerAddress };\n }\n\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n}\n","import type { Hex } from \"@invisi-labs/protocol/contracts\";\nimport { operationPreview } from \"./operation-preview\";\nimport type { SavedOperation } from \"./operation-types\";\nimport type { WalletState, SpentState, ReceiptPosition, Checkpoint } from \"./state\";\n\n/** Private application data. Never send this view to public analytics. */\nexport interface OutgoingHistoryEntry extends Omit<ReturnType<typeof operationPreview>, \"outputs\"> {\n preparedAt: { number: bigint; hash: Hex; timestamp: bigint };\n transactionHash?: Hex;\n outputs: {\n to: string;\n amount: bigint;\n change: boolean;\n commitment: Hex;\n payload: Uint8Array;\n }[];\n}\n\nexport interface IncomingHistoryEntry extends ReceiptPosition {\n tokenAddress: Hex;\n amount: bigint;\n payload: Uint8Array;\n spent: SpentState;\n}\n\nexport interface WalletHistory {\n revision: number;\n checkedThrough: Checkpoint | null;\n invalidated: boolean;\n /** Local construction records; not proof of a mined payment or funding identity. */\n outgoing: OutgoingHistoryEntry[];\n /** Authenticated incoming funds outputs, including already consumed ones. */\n incoming: IncomingHistoryEntry[];\n}\n\nexport interface HistoryOptions {\n tokenAddress?: Hex;\n}\n\n/** Project stable business fields, never serialized proof witnesses or private authorizations. */\nexport function walletHistory(state: WalletState, options: HistoryOptions = {}): WalletHistory {\n const token = options.tokenAddress?.toLowerCase();\n const outgoing: OutgoingHistoryEntry[] = [];\n for (const record of Object.values(state.operations)) {\n const saved = record.payload as SavedOperation | undefined;\n if (!saved?.plan || (token && saved.plan.context.tokenAddress.toLowerCase() !== token)) {\n continue;\n }\n const plan = saved.plan;\n outgoing.push({\n ...operationPreview(plan, record.status),\n preparedAt: { ...plan.preparedAt },\n ...(record.transactionHash ? { transactionHash: record.transactionHash } : {}),\n outputs: plan.outputs.map((output) => ({\n to: output.address,\n amount: output.amount,\n change: output.change,\n commitment: output.commitment,\n payload: Uint8Array.from(output.note?.payload ?? []),\n })),\n });\n }\n outgoing.sort((a, b) =>\n a.preparedAt.number === b.preparedAt.number\n ? a.id.localeCompare(b.id)\n : a.preparedAt.number > b.preparedAt.number\n ? -1\n : 1\n );\n const incoming: IncomingHistoryEntry[] = [];\n for (const record of Object.values(state.notes)) {\n const tokenAddress = `0x${record.note.tokenAddress.toString(16).padStart(40, \"0\")}` as Hex;\n if (token && tokenAddress !== token) continue;\n incoming.push({\n commitment: record.commitment,\n treeId: record.treeId,\n leafIndex: record.leafIndex,\n blockNumber: record.blockNumber,\n blockHash: record.blockHash,\n ...(record.transactionHash ? { transactionHash: record.transactionHash } : {}),\n tokenAddress,\n amount: record.note.amount,\n payload: Uint8Array.from(record.note.payload ?? []),\n spent: record.spent,\n });\n }\n incoming.sort((a, b) =>\n a.blockNumber === b.blockNumber\n ? a.commitment.localeCompare(b.commitment)\n : a.blockNumber > b.blockNumber\n ? -1\n : 1\n );\n return structuredClone({\n revision: state.revision,\n checkedThrough: state.discoveryThrough ?? null,\n invalidated: !!state.invalidated,\n outgoing,\n incoming,\n });\n}\n","import { MAX_UPDATE_BLOCKS } from \"@invisi-labs/rpc\";\nimport type {\n CanonicalBlock,\n ChainReader,\n DeploymentContext,\n ProtocolDataProvider,\n} from \"@invisi-labs/protocol\";\nimport type { ApplyPageOptions, CandidatePage } from \"./WalletUpdater\";\nimport type { BalanceSnapshot } from \"./state\";\n\nexport interface RefreshResult {\n block: CanonicalBlock;\n notes: number;\n credits: number;\n balances: BalanceSnapshot[];\n}\n\nexport interface RefreshOptions {\n /** Explicit history range; retain the returned block to request the next page later. */\n fromBlock: bigint;\n /** Defaults to the Protocol RPC's indexed head, independently checked against Chain RPC. */\n toBlock?: bigint;\n /** Explicit permission to delegate detection; never provide a viewing or spending key. */\n detectionKey?: Uint8Array;\n /** Defaults to MAX_UPDATE_BLOCKS (10000 blocks) per service request. Reduce this on high-volume deployments. */\n pageSize?: number;\n signal?: AbortSignal;\n /** Rebuild private inventory from these pages while retaining uncertain operations. */\n reset?: boolean;\n}\n\nexport async function refreshWallet(\n runtime: {\n provider: ProtocolDataProvider;\n reader: Pick<ChainReader, \"getBlock\">;\n context: DeploymentContext;\n fromBlock: bigint;\n apply(batch: CandidatePage, options: ApplyPageOptions): Promise<RefreshResult>;\n },\n options: RefreshOptions\n): Promise<RefreshResult> {\n const { signal } = options;\n try {\n signal?.throwIfAborted();\n if (typeof options.fromBlock !== \"bigint\" || options.fromBlock < runtime.fromBlock)\n throw new Error(\"refresh range precedes deployment\");\n const pageSize = options.pageSize ?? MAX_UPDATE_BLOCKS;\n if (!Number.isInteger(pageSize) || pageSize < 1 || pageSize > MAX_UPDATE_BLOCKS)\n throw new Error(`refresh page size must be 1..${MAX_UPDATE_BLOCKS}`);\n const status = await runtime.provider.getStatus(runtime.context, {\n ...(signal ? { signal } : {}),\n });\n if (!status.indexedHead) throw new Error(\"Protocol RPC has not indexed any blocks\");\n const toBlock = options.toBlock ?? status.indexedHead.number;\n if (\n typeof toBlock !== \"bigint\" ||\n toBlock < options.fromBlock ||\n toBlock > status.indexedHead.number\n )\n throw new Error(\"refresh range is outside indexed history\");\n const target = await runtime.reader.getBlock(toBlock);\n if (target.number !== toBlock)\n throw new Error(\"Chain RPC returned the wrong refresh anchor\");\n let result: RefreshResult | undefined;\n let notes = 0;\n let credits = 0;\n for (let from = options.fromBlock; from <= toBlock; from += BigInt(pageSize)) {\n signal?.throwIfAborted();\n const end = from + BigInt(pageSize) - 1n;\n const page = await runtime.provider.getUpdates(runtime.context, {\n fromBlock: from,\n toBlock: end < toBlock ? end : toBlock,\n ...(options.detectionKey ? { detectionKey: options.detectionKey } : {}),\n ...(signal ? { signal } : {}),\n });\n if (page.block.number !== (end < toBlock ? end : toBlock))\n throw new Error(\"Protocol RPC returned the wrong page anchor\");\n signal?.throwIfAborted();\n // Empty candidates are not proof of an unchanged spent set (for example,\n // a full payout has no outputs). Retain one final state refresh when all\n // pages are empty; previous applications already observed this target.\n if (\n page.transactionHashes.length === 0 &&\n (result || from + BigInt(pageSize) <= toBlock)\n )\n continue;\n const firstApplication = result === undefined;\n result = await runtime.apply(\n {\n context: runtime.context,\n transactionHashes: page.transactionHashes,\n block: target,\n },\n {\n ...(signal ? { signal } : {}),\n ...(firstApplication && options.reset ? { reset: true } : {}),\n }\n );\n notes += result.notes;\n credits += result.credits;\n }\n return { ...result!, notes, credits };\n } finally {\n // The caller retains its own key; only this request's copied key is cleared.\n options.detectionKey?.fill(0);\n }\n}\n","import { NullifierCapability } from \"@invisi-labs/core\";\nimport type { Hex } from \"@invisi-labs/protocol/contracts\";\nimport type { CanonicalBlock, ProtocolDataProvider } from \"@invisi-labs/protocol\";\nimport { decryptCandidates, type DeliveryEventLog } from \"./discovery\";\nimport {\n CanonicalConflict,\n CreditMetadataMismatch,\n InventoryProcessor,\n type InventoryOptions,\n} from \"./inventory\";\nimport { mergeReceiptRecords, mergeSpentObservation } from \"./receipts\";\nimport { verifyMembership } from \"./membership\";\nimport type { RefreshResult } from \"./refresh\";\nimport { readProtocolLogs } from \"./receipt-logs\";\nimport { walletBalances, type StoredCredit, type StoredNote } from \"./state\";\n\n/** Internal candidate references from Protocol RPC; never a claim of complete wallet history. */\nexport interface CandidatePage {\n context: { chainId: bigint; protocolAddress: Hex };\n block: CanonicalBlock;\n transactionHashes: readonly Hex[];\n}\nexport interface ApplyPageOptions {\n signal?: AbortSignal;\n /** Rebuild private inventory from supplied history after a reorg; preserves uncertain operations. */\n reset?: boolean;\n}\nconst check: (value: unknown, message: string) => asserts value = (value, message) => {\n if (!value) throw new Error(message);\n};\nconst position = (treeId: bigint, leafIndex: number) => `${treeId}:${leafIndex}`;\n\n/** Authenticates indexed candidates before updating private wallet state. */\nexport class WalletUpdater extends InventoryProcessor {\n readonly #options: InventoryOptions & { protocolRpc: ProtocolDataProvider };\n\n constructor(options: InventoryOptions & { protocolRpc: ProtocolDataProvider }) {\n super(options);\n this.#options = { ...options };\n check(\n options.viewing.ownerAddress === options.scope.ownerAddress,\n \"viewing capability wallet mismatch\"\n );\n }\n\n applyUpdates(batch: CandidatePage, options: ApplyPageOptions = {}): Promise<RefreshResult> {\n return this.run(structuredClone(batch), { ...options });\n }\n\n private async run(batch: CandidatePage, options: ApplyPageOptions): Promise<RefreshResult> {\n const { reader, protocol, scope, store, viewing } = this.#options;\n const nullifier = NullifierCapability.fromIdentity(scope.ownerAddress);\n const { signal, reset } = options;\n signal?.throwIfAborted();\n const context = protocol.context;\n check(\n batch.context.chainId === context.chainId &&\n batch.context.protocolAddress.toLowerCase() ===\n context.protocolAddress.toLowerCase(),\n \"update deployment context mismatch\"\n );\n check(\n batch.block.number >= protocol.deployment.protocol.fromBlock,\n \"update precedes deployment\"\n );\n await protocol.validateDeployment(reader);\n const base = await store.readSnapshot(scope);\n check(reset || !base.invalidated, \"wallet state is invalidated; rebuild required\");\n try {\n if (!reset) {\n for (const cursor of [base.observedThrough]) {\n if (!cursor) continue;\n if ((await reader.getBlock(cursor.number)).hash !== cursor.hash)\n throw new CanonicalConflict(\"Canonical history changed after a reorg\");\n check(\n cursor.number <= batch.block.number,\n \"update target precedes wallet checkpoint\"\n );\n }\n } else {\n base.notes = {};\n base.credits = {};\n }\n const block = await reader.getBlock(batch.block.number);\n check(\n block.hash === batch.block.hash && block.number === batch.block.number,\n \"update target block is not canonical\"\n );\n const receipts = [];\n for (const hash of new Set(batch.transactionHashes)) {\n signal?.throwIfAborted();\n check(/^0x[0-9a-fA-F]{64}$/.test(hash), \"invalid candidate transaction hash\");\n const receipt = await reader.getReceipt(hash);\n check(\n receipt &&\n receipt.status === \"success\" &&\n receipt.transactionHash.toLowerCase() === hash.toLowerCase(),\n \"invalid or unsuccessful candidate receipt\"\n );\n check(\n receipt.block.number >= protocol.deployment.protocol.fromBlock &&\n receipt.block.number <= block.number,\n \"candidate receipt outside update range\"\n );\n if ((await reader.getBlock(receipt.block.number)).hash !== receipt.block.hash)\n throw new CanonicalConflict(\"Candidate receipt disagrees with canonical chain\");\n receipts.push(receipt);\n }\n const logs = receipts.flatMap((receipt) =>\n readProtocolLogs(receipt, context.protocolAddress)\n );\n logs.sort((a, b) =>\n a.blockNumber! < b.blockNumber!\n ? -1\n : a.blockNumber! > b.blockNumber!\n ? 1\n : a.logIndex! - b.logIndex!\n );\n // Positions come from independently obtained canonical receipts, not service metadata.\n const leaves = new Map<string, bigint>();\n for (const event of logs) {\n if (event.eventName !== \"CommitmentsInserted\" && event.eventName !== \"BatchOutputs\")\n continue;\n const { treeId, startLeafIndex, commitments } = event.args as {\n treeId: bigint;\n startLeafIndex: bigint;\n commitments: Hex[];\n };\n for (const [i, commitment] of commitments.entries()) {\n const key = position(treeId, Number(startLeafIndex) + i);\n check(\n !leaves.has(key) || leaves.get(key) === BigInt(commitment),\n \"conflicting canonical insertion\"\n );\n leaves.set(key, BigInt(commitment));\n }\n }\n const getLeaf = (tree: bigint, index: number) => {\n const leaf = leaves.get(position(tree, index));\n check(leaf !== undefined, \"missing canonical insertion\");\n return leaf;\n };\n const decrypted = await decryptCandidates(logs, {\n context,\n viewing,\n\n confirmedThrough: block.number,\n });\n const notes: StoredNote[] = decrypted.notes.map((record) => ({\n ...record,\n spent: \"unknown\",\n }));\n const incoming: StoredCredit[] = decrypted.credits.map((record) => ({\n ...record,\n spent: \"unknown\",\n }));\n const recovered = await this.recoverCredits(base, incoming, logs, { getLeaf });\n const creditsByKey = new Map(\n incoming.map((record) => [record.commitment + \":\" + record.role, record])\n );\n for (const record of recovered)\n creditsByKey.set(record.commitment + \":\" + record.role, record);\n const credits = [...creditsByKey.values()]\n .filter((record) => {\n try {\n this.checkSnapshotKeys(record);\n return true;\n } catch (error) {\n if (error instanceof CreditMetadataMismatch) return false;\n throw error;\n }\n })\n .sort((a, b) =>\n a.blockNumber < b.blockNumber\n ? -1\n : a.blockNumber > b.blockNumber\n ? 1\n : a.treeId < b.treeId\n ? -1\n : a.treeId > b.treeId\n ? 1\n : a.leafIndex - b.leafIndex\n );\n for (const record of [...notes, ...credits]) {\n signal?.throwIfAborted();\n const proof = await this.#options.protocolRpc.getMembership(context, record, block);\n const tokenAddress =\n \"note\" in record ? record.note.tokenAddress : record.state.note.tokenAddress;\n await verifyMembership(\n reader,\n {\n ...context,\n tokenAddress: `0x${tokenAddress.toString(16).padStart(40, \"0\")}`,\n },\n block,\n record,\n proof\n );\n }\n const allNotes = {\n ...base.notes,\n ...Object.fromEntries(notes.map((record) => [record.commitment, record])),\n };\n const allCredits = {\n ...base.credits,\n ...Object.fromEntries(\n credits.map((record) => [record.commitment + \":\" + record.role, record])\n ),\n };\n const observations: Array<{ kind: \"notes\" | \"credits\"; id: string; nullifier: Hex }> =\n [];\n for (const [id, record] of Object.entries(allNotes))\n observations.push({\n kind: \"notes\",\n id,\n nullifier: await nullifier.compute(\n scope.chainId,\n record.commitment,\n record.note.nonce\n ),\n });\n for (const [id, record] of Object.entries(allCredits))\n observations.push({\n kind: \"credits\",\n id,\n nullifier: await this.creditNullifier(record.state),\n });\n const spent = observations.length\n ? await reader.isSpent(\n context,\n observations.map((item) => item.nullifier),\n block\n )\n : [];\n check(\n spent.length === observations.length &&\n spent.every((value) => typeof value === \"boolean\"),\n \"invalid spent-state response\"\n );\n signal?.throwIfAborted();\n if ((await reader.getBlock(block.number)).hash !== block.hash)\n throw new CanonicalConflict(\"Canonical block changed during update\");\n await store.transaction(scope, (draft) => {\n signal?.throwIfAborted();\n check(draft.revision === base.revision, \"wallet changed during update; retry\");\n if (reset) {\n this.reorgOperations(draft);\n draft.notes = {};\n draft.credits = {};\n delete draft.observedThrough;\n delete draft.discoveryThrough;\n delete draft.invalidated;\n }\n mergeReceiptRecords(draft, { notes, credits, checkpoint: block });\n observations.forEach((item, index) => {\n const record = draft[item.kind][item.id];\n if (record) {\n mergeSpentObservation(record, {\n spent: spent[index] ? \"spent\" : \"unspent\",\n checkedThrough: { number: block.number, hash: block.hash },\n });\n }\n });\n // Candidate processing cannot establish complete or FMD scan coverage.\n draft.observedThrough = { number: block.number, hash: block.hash };\n });\n return {\n block,\n notes: notes.length,\n credits: credits.length,\n balances: walletBalances(await store.readSnapshot(scope)),\n };\n } catch (error) {\n if (error instanceof CanonicalConflict) await this.invalidate();\n throw error;\n }\n }\n}\n","import type { Hex } from \"@invisi-labs/protocol/contracts\";\n\nimport {\n computeCreditCommitment,\n computeCreditNullifier,\n computeCreditSharedKeyHash,\n recoverCreditRemainder,\n type CreditDeliveryState,\n type ReceivingKeys,\n type ViewingCapability,\n} from \"@invisi-labs/core\";\nimport type { Protocol, ChainReader } from \"@invisi-labs/protocol\";\nimport type { DeliveryEventLog, DiscoveredCredit } from \"./discovery\";\nimport type { StoredCredit, WalletScope, WalletState, WalletStore } from \"./state\";\n\nexport class CanonicalConflict extends Error {}\n\nexport class CreditMetadataMismatch extends Error {}\n\nfunction check(value: unknown, message: string): asserts value {\n if (!value) {\n throw new Error(message);\n }\n}\n\nconst clone = <T>(value: T): T => structuredClone(value);\n\nconst hex = (value: bigint): Hex => `0x${value.toString(16).padStart(64, \"0\")}`;\n\nexport interface InventoryOptions {\n protocol: Protocol;\n scope: WalletScope;\n store: WalletStore;\n reader: ChainReader;\n viewing: Pick<ViewingCapability, \"ownerAddress\" | \"decryptNote\" | \"decryptCredit\">;\n receivingKeys?: ReceivingKeys;\n}\n\n/** Authenticated private inventory handling for indexed candidate ingestion. */\nexport abstract class InventoryProcessor {\n readonly #options: InventoryOptions;\n\n constructor(options: InventoryOptions) {\n this.#options = { ...options, scope: Object.freeze({ ...options.scope }) };\n }\n\n protected reorgOperations(state: WalletState): void {\n for (const operation of Object.values(state.operations)) {\n if (\n [\"failed\", \"expired\"].includes(operation.status) &&\n !(operation.payload as { externalized?: boolean } | undefined)?.externalized\n ) {\n continue;\n }\n operation.status = \"reorged\";\n for (const id of operation.inputs) {\n if (!state.reservations[id]) {\n state.reservations[id] = operation.id;\n }\n }\n }\n }\n\n protected async invalidate(): Promise<void> {\n const { store, scope } = this.#options;\n await store.transaction(scope, (state) => {\n state.invalidated = \"Canonical history changed; rebuild inventory from canonical data\";\n for (const record of [...Object.values(state.notes), ...Object.values(state.credits)]) {\n record.spent = \"unknown\";\n }\n this.reorgOperations(state);\n });\n }\n\n protected checkSnapshotKeys(record: DiscoveredCredit | StoredCredit): void {\n const expected = this.#options.receivingKeys;\n const keys =\n record.role === \"owner\"\n ? record.state.ownerReceivingKeys\n : record.state.spenderReceivingKeys;\n if (\n expected &&\n !keys.viewingPublicKey.every((byte, i) => byte === expected.viewingPublicKey[i])\n ) {\n throw new CreditMetadataMismatch(\"Credit receiving key snapshot mismatch\");\n }\n const clue = expected?.clueKey;\n if (clue && !keys.clueKey.every((byte, i) => byte === clue[i])) {\n throw new CreditMetadataMismatch(\"Credit clue key snapshot mismatch\");\n }\n }\n\n protected async creditNullifier(state: CreditDeliveryState): Promise<Hex> {\n const n = state.note;\n return computeCreditNullifier(\n n.chainId,\n n.creditSharedKey,\n await computeCreditCommitment(\n n.chainId,\n n.spenderWalletIdentity,\n n.ownerWalletIdentity,\n n.spenderPayout,\n n.ownerPayout,\n n.tokenAddress,\n n.amount,\n n.nonce,\n n.expiry,\n await computeCreditSharedKeyHash(n.creditSharedKey),\n n\n )\n );\n }\n\n protected async recoverCredits(\n base: WalletState,\n found: readonly StoredCredit[],\n logs: readonly DeliveryEventLog[],\n snapshot: { getLeaf(treeId: bigint, leafIndex: number): bigint | Promise<bigint> }\n ): Promise<StoredCredit[]> {\n const known = new Map<string, StoredCredit>();\n const byNullifier = new Map<Hex, Set<string>>();\n const cachedNullifiers = new Map<Hex, Hex>();\n const recovered: StoredCredit[] = [];\n const foundByKey = new Map(\n found.map((record) => [record.commitment + \":\" + record.role, record])\n );\n const remember = async (record: StoredCredit) => {\n const key = record.commitment + \":\" + record.role;\n let nullifier = cachedNullifiers.get(record.commitment);\n if (!nullifier) {\n nullifier = await this.creditNullifier(record.state);\n cachedNullifiers.set(record.commitment, nullifier);\n }\n known.set(key, record);\n let members = byNullifier.get(nullifier);\n if (!members) {\n members = new Set();\n byNullifier.set(nullifier, members);\n }\n members.add(key);\n };\n const matching = (nullifier: Hex) =>\n [...(byNullifier.get(nullifier) ?? [])].map((key) => known.get(key)!);\n for (const record of Object.values(base.credits)) {\n await remember(record);\n }\n for (const record of found) {\n try {\n this.checkSnapshotKeys(record);\n await remember({ ...record, spent: \"unknown\" });\n } catch (error) {\n if (!(error instanceof CreditMetadataMismatch)) {\n throw error;\n }\n }\n }\n const context = {\n chainId: this.#options.scope.chainId,\n protocolAddress: BigInt(this.#options.scope.protocolAddress),\n };\n for (const event of logs) {\n if (event.eventName === \"CreditDraw\") {\n const block = await this.#options.reader.getBlock(event.blockNumber!);\n if (block.hash !== event.blockHash)\n throw new CanonicalConflict(\"draw block changed during Credit recovery\");\n const args = event.args!;\n const params = args.params as {\n nullifiers: readonly Hex[];\n remainderCommitments: readonly Hex[];\n recoveryAmounts: readonly Hex[];\n expiries: readonly bigint[];\n };\n const indices = args.remainderLeafIndices as readonly number[];\n check(\n Array.isArray(params.nullifiers) &&\n params.nullifiers.length === params.remainderCommitments.length &&\n params.nullifiers.length === params.recoveryAmounts.length &&\n params.nullifiers.length === params.expiries.length &&\n params.nullifiers.length === indices.length,\n \"invalid draw recovery slots\"\n );\n for (const [index, nullifier] of params.nullifiers.entries()) {\n for (const previous of matching(nullifier)) {\n check(\n previous.state.note.expiry === params.expiries[index],\n \"draw recovery expiry mismatch\"\n );\n const remainder = await recoverCreditRemainder(\n context,\n previous.state.note,\n {\n timestamp: block.timestamp,\n creditNullifier: nullifier,\n remainderCommitment: params.remainderCommitments[index]!,\n recoveryAmount: BigInt(params.recoveryAmounts[index]!),\n }\n );\n if (!remainder) {\n continue;\n }\n // Financial recovery alone cannot establish uncommitted child metadata.\n const child = foundByKey.get(\n params.remainderCommitments[index]! + \":\" + previous.role\n );\n const payload = child?.state.note.payload;\n const record: StoredCredit = {\n commitment: params.remainderCommitments[index]!,\n treeId: BigInt(args.outputTreeId as bigint),\n leafIndex: Number(indices[index]),\n blockNumber: event.blockNumber!,\n blockHash: event.blockHash!,\n transactionHash: event.transactionHash!,\n role: previous.role,\n state: {\n ...clone(previous.state),\n note: {\n ...remainder,\n ...(payload === undefined ? {} : { payload: clone(payload) }),\n },\n },\n receivingKeySource: { kind: \"draw\", commitment: previous.commitment },\n spent: \"unknown\",\n };\n check(\n (await snapshot.getLeaf(record.treeId, record.leafIndex)) ===\n BigInt(record.commitment),\n \"draw recovery canonical leaf mismatch\"\n );\n this.checkSnapshotKeys(record);\n await remember(record);\n recovered.push(record);\n }\n }\n } else if (event.eventName === \"CreditToppedUp\") {\n const params = event.args!.params as {\n creditNullifier: Hex;\n creation: { creditCommitment: Hex };\n };\n for (const previous of matching(params.creditNullifier)) {\n const child = foundByKey.get(\n params.creation.creditCommitment + \":\" + previous.role\n );\n if (!child) {\n continue;\n }\n const old = previous.state.note;\n const next = child.state.note;\n if (\n [\n \"chainId\",\n \"protocolAddress\",\n \"tokenAddress\",\n \"spenderWalletIdentity\",\n \"ownerWalletIdentity\",\n \"spenderPayout\",\n \"ownerPayout\",\n \"creditSharedKey\",\n ].some(\n (field) =>\n old[field as keyof typeof old] !== next[field as keyof typeof next]\n ) ||\n next.amount <= old.amount ||\n next.expiry < old.expiry\n ) {\n continue;\n }\n const repaired: StoredCredit = {\n ...clone(child),\n state: {\n note: clone(next),\n ownerReceivingKeys: clone(previous.state.ownerReceivingKeys),\n spenderReceivingKeys: clone(previous.state.spenderReceivingKeys),\n },\n receivingKeySource: { kind: \"top-up\", commitment: previous.commitment },\n };\n this.checkSnapshotKeys(repaired);\n await remember(repaired);\n recovered.push(repaired);\n }\n }\n }\n return recovered;\n }\n}\n","import type { WalletState } from \"./state\";\nimport type { WalletRecordCodec } from \"./store\";\n// Tagged nodes avoid collisions between application strings/objects and BigInt encodings.\nfunction encode(value: unknown): unknown {\n if (typeof value === \"bigint\") return [\"bigint\", value.toString()];\n if (value instanceof Uint8Array) return [\"bytes\", Array.from(value)];\n if (Array.isArray(value)) return [\"array\", value.map(encode)];\n if (value && typeof value === \"object\")\n return [\"object\", Object.entries(value).map(([key, item]) => [key, encode(item)])];\n if (value === undefined) return [\"undefined\"];\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n (typeof value === \"number\" && Number.isFinite(value))\n )\n return [\"value\", value];\n throw new Error(\"unsupported wallet record value\");\n}\nfunction decode(node: unknown): unknown {\n if (!Array.isArray(node)) throw new Error(\"invalid wallet record encoding\");\n const [type, value] = node;\n if (type === \"bigint\" && typeof value === \"string\" && /^-?(0|[1-9][0-9]*)$/.test(value))\n return BigInt(value);\n if (\n type === \"bytes\" &&\n Array.isArray(value) &&\n value.every((n) => Number.isInteger(n) && n >= 0 && n < 256)\n )\n return Uint8Array.from(value);\n if (type === \"array\" && Array.isArray(value)) return value.map(decode);\n if (type === \"object\" && Array.isArray(value))\n return Object.fromEntries(\n value.map((pair) => {\n if (!Array.isArray(pair) || pair.length !== 2 || typeof pair[0] !== \"string\")\n throw new Error(\"invalid object record\");\n return [pair[0], decode(pair[1])];\n })\n );\n if (type === \"undefined\" && node.length === 1) return undefined;\n if (\n type === \"value\" &&\n (value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n (typeof value === \"number\" && Number.isFinite(value)))\n )\n return value;\n throw new Error(\"invalid wallet record node\");\n}\nexport function serializeState(state: WalletState): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(encode(state)));\n}\nexport function deserializeState(data: Uint8Array): WalletState {\n return decode(\n JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(data))\n ) as WalletState;\n}\n/** Only for explicitly nonpersistent reference storage. Persistent adapters require a caller-selected codec. */\nexport class MemoryRecordCodec implements WalletRecordCodec {\n async encode(state: WalletState) {\n return serializeState(state);\n }\n async decode(data: Uint8Array) {\n return deserializeState(data);\n }\n}\n","export * from \"./codec\";\nexport * from \"./DisclosureVerifier\";\nexport * from \"./receipts\";\nexport * from \"./reservations\";\nexport * from \"./state\";\nexport * from \"./store\";\nimport { MemoryRecordCodec } from \"./codec\";\nimport { MemoryAtomicRecords, TransactionalWalletStore } from \"./store\";\n/** Explicit ephemeral state for demos and applications that choose memory-only operation. */\nexport class MemoryWalletStore extends TransactionalWalletStore {\n constructor() {\n super(new MemoryAtomicRecords(), new MemoryRecordCodec(), { persistent: false });\n }\n}\n\nexport * from \"./Operation\";\nexport type {\n CancelCreditPreparation,\n CoinSelector,\n CreateCreditPreparation,\n DrawCreditPreparation,\n FundingAuthorizationVerifier,\n FundingSigner,\n FundingSource,\n FundingTypedData,\n OperationAggregateMember,\n ShieldPreparation,\n TopUpCreditPreparation,\n TransferPreparation,\n TransactionExecution,\n TransactionProveOptions,\n WalletSessionOptions,\n} from \"./operation-types\";\nexport * from \"./WalletSession\";\n\nexport type { RefreshOptions, RefreshResult } from \"./refresh\";\n\nexport type {\n WalletHistory,\n HistoryOptions,\n OutgoingHistoryEntry,\n IncomingHistoryEntry,\n} from \"./history\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACE;AAAA,IACE,eAAiB;AAAA,IACjB,IAAM;AAAA,IACN,YAAc;AAAA,MACZ,SAAW;AAAA,MACX,iBAAmB;AAAA,MACnB,iBAAmB;AAAA,MACnB,cAAgB;AAAA,IAClB;AAAA,IACA,QAAU;AAAA,MACR,gBAAkB;AAAA,MAClB,YAAc;AAAA,MACd,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,cAAgB;AAAA,QACd,sBAAwB;AAAA,QACxB,iBAAmB;AAAA,QACnB,yBAA2B;AAAA,QAC3B,sBAAwB;AAAA,QACxB,oBAAsB;AAAA,QACtB,iBAAmB;AAAA,MACrB;AAAA,MACA,WAAa;AAAA,QACX,UAAY;AAAA,QACZ,cAAgB;AAAA,QAChB,MAAQ;AAAA,QACR,YAAc;AAAA,QACd,eAAiB;AAAA,QACjB,OAAS;AAAA,MACX;AAAA,MACA,eAAiB;AAAA,MACjB,kBAAoB;AAAA,QAClB,uCAAyC;AAAA,UACvC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,iCAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,uCAAyC;AAAA,UACvC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,iCAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,wCAA0C;AAAA,UACxC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,kCAAkC;AAAA,UAChC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,wCAA0C;AAAA,UACxC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,kCAAkC;AAAA,UAChC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,kCAAoC;AAAA,UAClC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,mCAAmC;AAAA,UACjC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,kCAAoC;AAAA,UAClC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,mCAAmC;AAAA,UACjC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,mCAAqC;AAAA,UACnC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oCAAoC;AAAA,UAClC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,yBAAyB;AAAA,UACvB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oCAAsC;AAAA,UACpC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,8BAA8B;AAAA,UAC5B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,qCAAuC;AAAA,UACrC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAA+B;AAAA,UAC7B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,qCAAuC;AAAA,UACrC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAA+B;AAAA,UAC7B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,sCAAwC;AAAA,UACtC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,gCAAgC;AAAA,UAC9B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,yBAAyB;AAAA,UACvB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,yBAAyB;AAAA,UACvB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,iCAAmC;AAAA,UACjC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,2BAA6B;AAAA,UAC3B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oBAAsB;AAAA,UACpB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,sBAAwB;AAAA,UACtB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,YAAc;AAAA,UACZ,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oBAAsB;AAAA,UACpB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,sBAAwB;AAAA,UACtB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,sBAAwB;AAAA,UACtB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,iBAAmB;AAAA,UACjB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oBAAsB;AAAA,UACpB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,WAAa;AAAA,UACX,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,eAAiB;AAAA,UACf,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,uBAAyB;AAAA,UACvB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,gBAAkB;AAAA,UAChB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,WAAa;AAAA,UACX,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAgB;AAAA,MACd;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,eAAiB;AAAA,IACjB,IAAM;AAAA,IACN,YAAc;AAAA,MACZ,SAAW;AAAA,MACX,iBAAmB;AAAA,MACnB,iBAAmB;AAAA,MACnB,cAAgB;AAAA,IAClB;AAAA,IACA,QAAU;AAAA,MACR,gBAAkB;AAAA,MAClB,YAAc;AAAA,MACd,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAgB;AAAA,MACd;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,QACX,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,QACX,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,QACX,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,eAAiB;AAAA,IACjB,IAAM;AAAA,IACN,YAAc;AAAA,MACZ,SAAW;AAAA,MACX,iBAAmB;AAAA,MACnB,iBAAmB;AAAA,MACnB,cAAgB;AAAA,IAClB;AAAA,IACA,QAAU;AAAA,MACR,gBAAkB;AAAA,MAClB,YAAc;AAAA,MACd,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,cAAgB;AAAA,QACd,sBAAwB;AAAA,QACxB,iBAAmB;AAAA,QACnB,yBAA2B;AAAA,QAC3B,sBAAwB;AAAA,QACxB,oBAAsB;AAAA,QACtB,iBAAmB;AAAA,MACrB;AAAA,MACA,WAAa;AAAA,QACX,UAAY;AAAA,QACZ,cAAgB;AAAA,QAChB,MAAQ;AAAA,QACR,YAAc;AAAA,QACd,eAAiB;AAAA,QACjB,OAAS;AAAA,MACX;AAAA,MACA,eAAiB;AAAA,MACjB,kBAAoB;AAAA,QAClB,uCAAyC;AAAA,UACvC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,iCAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,uCAAyC;AAAA,UACvC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,iCAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,wCAA0C;AAAA,UACxC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,kCAAkC;AAAA,UAChC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,wCAA0C;AAAA,UACxC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,kCAAkC;AAAA,UAChC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,kCAAoC;AAAA,UAClC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,mCAAmC;AAAA,UACjC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,kCAAoC;AAAA,UAClC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,mCAAmC;AAAA,UACjC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,mCAAqC;AAAA,UACnC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oCAAoC;AAAA,UAClC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,yBAAyB;AAAA,UACvB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oCAAsC;AAAA,UACpC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,8BAA8B;AAAA,UAC5B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,qCAAuC;AAAA,UACrC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAA+B;AAAA,UAC7B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,qCAAuC;AAAA,UACrC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAA+B;AAAA,UAC7B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,sCAAwC;AAAA,UACtC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,gCAAgC;AAAA,UAC9B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,yBAAyB;AAAA,UACvB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,+BAAiC;AAAA,UAC/B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,yBAAyB;AAAA,UACvB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,iCAAmC;AAAA,UACjC,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,2BAA6B;AAAA,UAC3B,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oBAAsB;AAAA,UACpB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,sBAAwB;AAAA,UACtB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,YAAc;AAAA,UACZ,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oBAAsB;AAAA,UACpB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,sBAAwB;AAAA,UACtB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,sBAAwB;AAAA,UACtB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,iBAAmB;AAAA,UACjB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,oBAAsB;AAAA,UACpB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,WAAa;AAAA,UACX,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,eAAiB;AAAA,UACf,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,uBAAyB;AAAA,UACvB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,gBAAkB;AAAA,UAChB,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,QACA,WAAa;AAAA,UACX,SAAW;AAAA,UACX,iBAAmB;AAAA,QACrB;AAAA,MACF;AAAA,MACA,aAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAgB;AAAA,MACd;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,IAAM;AAAA,QACN,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,QAAU;AAAA,UACV,UAAY;AAAA,UACZ,YAAc;AAAA,UACd,aAAe;AAAA,UACf,aAAe;AAAA,UACf,cAAgB;AAAA,UAChB,eAAiB;AAAA,UACjB,kBAAoB;AAAA,UACpB,SAAW;AAAA,UACX,QAAU;AAAA,UACV,eAAiB;AAAA,QACnB;AAAA,QACA,SAAW;AAAA,UACT,aAAe;AAAA,UACf,QAAU;AAAA,UACV,gBAAkB;AAAA,UAClB,UAAY;AAAA,QACd;AAAA,QACA,SAAW;AAAA,UACT;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,UACA;AAAA,YACE,SAAW;AAAA,YACX,iBAAmB;AAAA,YACnB,aAAe;AAAA,YACf,WAAa;AAAA,YACb,eAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC9jDA,IAAM,OAAO;AACb,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,IAAM,YAA4C;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAGO,SAAS,kBAAkB,UAAiE;AAC/F,QAAM,OAAO,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAC1C,aAAW,KAAK,MAAM;AAClB,QACI,EAAE,kBAAkB,KACpB,CAAC,EAAE,MACH,CAAC,QAAQ,KAAK,EAAE,WAAW,OAAO,KAClC,CAAC,QAAQ,KAAK,EAAE,WAAW,eAAe,KAC1C,CAAC,QAAQ,KAAK,EAAE,WAAW,YAAY,KACvC,CAAC,EAAE,WAAW,mBACd,CAAC,KAAK,KAAK,EAAE,WAAW,eAAe,KACvC,EAAE,OAAO,aAAa,UACtB,CAAC,kBAAkB,KAAK,EAAE,OAAO,cAAc,KAC/C,CAAC,EAAE,OAAO,cACV,CAAC,MAAM,QAAQ,EAAE,OAAO,WAAW,KACnC,CAAC,EAAE,OAAO,YAAY,MAAM,CAAC,eAAe,OAAO,eAAe,QAAQ,KAC1E,CAAC,EAAE,aAAa;AAEhB,YAAM,IAAI,MAAM,+BAA+B;AACnD,QACI,EAAE,OAAO,gBACT,CAAC;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,EAAE,MAAM,CAAC,QAAQ;AACb,YAAM,IAAK,EAAE,OAAO,aAAoD,GAAG;AAC3E,aAAO,OAAO,MAAM,YAAY,kBAAkB,KAAK,CAAC;AAAA,IAC5D,CAAC;AAED,YAAM,IAAI,MAAM,sCAAsC;AAC1D,QACI,EAAE,OAAO,kBAAkB,WAC1B,CAAC,QAAQ,KAAK,EAAE,OAAO,aAAa,KAAK,OAAO,EAAE,OAAO,aAAa,KAAK;AAE5E,YAAM,IAAI,MAAM,mCAAmC;AACvD,QACI,EAAE,OAAO,oBACT,CAAC,OAAO,OAAO,EAAE,OAAO,gBAAgB,EAAE;AAAA,MACtC,CAAC,MAAM,QAAQ,KAAK,EAAE,OAAO,KAAK,KAAK,KAAK,EAAE,eAAe;AAAA,IACjE;AAEA,YAAM,IAAI,MAAM,oCAAoC;AACxD,QACI,EAAE,OAAO,cACR,CAAC,CAAC,YAAY,gBAAgB,QAAQ,cAAc,OAAO,EAAE,MAAM,CAAC,QAAQ;AACzE,YAAM,IAAK,EAAE,OAAO,UAAiD,GAAG;AACxE,aAAO,OAAO,MAAM,YAAY,EAAE,SAAS;AAAA,IAC/C,CAAC,KACG,CAAC,OAAO,cAAc,EAAE,OAAO,UAAU,aAAa,KACtD,EAAE,OAAO,UAAU,gBAAgB;AAEvC,YAAM,IAAI,MAAM,6BAA6B;AACjD,eAAW,KAAK,EAAE,cAAc;AAC5B,UACI,CAAC,EAAE,MACH,CAAC,EAAE,QAAQ,UACX,CAAC,CAAC,QAAQ,UAAU,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,KACzD,OAAO,EAAE,MAAM,WAAW;AAE1B,cAAM,IAAI,MAAM,mCAAmC;AACvD,iBAAW,OAAO,WAAW;AACzB,cAAM,QAAQ,EAAE,MAAM,GAAG;AACzB,YACI,CAAC,CAAC,QAAQ,UAAU,WAAW,QAAQ,EAAE,SAAS,GAAG,MACpD,CAAC,OAAO,cAAc,KAAK,KAAK,OAAO,KAAK,IAAI;AAEjD,gBAAM,IAAI,MAAM,6BAA6B;AAAA,MACrD;AACA,UACI,EAAE,YACD,CAAC,CAAC,EAAE,QAAQ,gBAAgB,EAAE,QAAQ,QAAQ,EAAE;AAAA,QAAM,CAACA,UACpD,kBAAkB,KAAKA,KAAI;AAAA,MAC/B,KACI,CAAC,EAAE,QAAQ,eACX,CAAC,EAAE,QAAQ;AAEf,cAAM,IAAI,MAAM,wCAAwC;AAC5D,YAAM,SAAS,oBAAI,IAAY;AAC/B,iBAAW,UAAU,EAAE,SAAS;AAC5B,YACI,OAAO,OAAO,YAAY,YAC1B,CAAC,QAAQ,KAAK,OAAO,OAAO,KAC5B,OAAO,OAAO,OAAO,KAAK,MAC1B,CAAC,KAAK,KAAK,OAAO,eAAe,KACjC,CAAC,KAAK,KAAK,OAAO,SAAS,KAC3B,CAAC,QAAQ,KAAK,OAAO,WAAW,KAChC,CAAC,OAAO,cAAc,OAAO,aAAa,KAC1C,OAAO,gBAAgB,KACvB,OAAO,IAAI,OAAO,gBAAgB,YAAY,CAAC;AAE/C,gBAAM,IAAI,MAAM,+BAA+B;AACnD,eAAO,IAAI,OAAO,gBAAgB,YAAY,CAAC;AAAA,MACnD;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AAEO,SAAS,oBAAoB,OAAuC;AACvE,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,OAAM,IAAI,MAAM,+BAA+B;AAC1E,MAAI;AACA,WAAO,kBAAkB,KAA8B;AAAA,EAC3D,QAAQ;AACJ,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AACJ;AACA,IAAM,kBAAkB,oBAAoB,sBAAiB;AAE7D,SAAS,eAAe,GAA2B,GAA2B;AAC1E,SACI,EAAE,YAAY,EAAE,WAChB,EAAE,gBAAgB,YAAY,MAAM,EAAE,gBAAgB,YAAY,KAClE,EAAE,aAAa,YAAY,MAAM,EAAE,aAAa,YAAY,KAC5D,EAAE,iBAAiB,YAAY,MAAM,EAAE,iBAAiB,YAAY;AAE5E;AACA,SAAS,YAAY,GAA+B,GAA+B;AAC/E,SAAO,MAAM,OACP,MAAM,OACN,MAAM,QACF,EAAE,gBAAgB,EAAE,eACpB,EAAE,WAAW,EAAE,UACf,EAAE,eAAe,YAAY,MAAM,EAAE,eAAe,YAAY,KAChE,EAAE,SAAS,YAAY,MAAM,EAAE,SAAS,YAAY;AAClE;AAGO,SAAS,qBACZ,MACA,UACA,UACoB;AACpB,QAAM,SAAS,KAAK;AACpB,QAAM,aAAa,QAAQ,cAAc,KAAK,QAAQ,IAAI,CAAC,QAAQ,IAAI,QAAQ;AAC/E,QAAM,UAA8B;AAAA,IAChC,YAAY;AAAA,MACR,SAAS,KAAK,QAAQ,QAAQ,SAAS;AAAA,MACvC,iBAAiB,KAAK,QAAQ;AAAA,MAC9B,iBAAiB,SAAS,2BAA2B;AAAA,MACrD,cAAc,KAAK,QAAQ;AAAA,IAC/B;AAAA,IACA,OAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK,WAAW,UAAU;AAAA,MAClC,UAAU,KAAK,YAAY;AAAA,MAC3B,YAAY,KAAK,OAAO;AAAA,MACxB,aAAa,KAAK,QAAQ;AAAA,MAC1B,aAAa,iBAAiB,IAAI,EAAE;AAAA,MACpC,cAAc,QAAQ,OAAO,UAAU;AAAA,MACvC,eAAe,QAAQ,QAAQ,UAAU;AAAA,MACzC,kBACI,QAAQ,MAAM,qBAAqB,OAAO,CAACA,UAAS,OAAOA,KAAI,MAAM,EAAE,EAAE,UACzE;AAAA,MACJ,SAAS,KAAK;AAAA,MACd,SAAS,KAAK,QAAQ,QAAQ,YAAY,QAAQ;AAAA,MAClD,eAAe,WAAW;AAAA,QACtB,CAAC,KAAK,MAAM,OAAO,EAAE,WAAW,SAAS,KAAK,KAAK,EAAE,KAAK,SAAS,KAAK;AAAA,QACxE;AAAA,MACJ;AAAA,IACJ;AAAA,IACA,SAAS,KAAK,YACR;AAAA,MACI,aAAa,KAAK,UAAU;AAAA,MAC5B,QAAQ,KAAK,UAAU;AAAA,MACvB,gBAAgB,KAAK,UAAU;AAAA,MAC/B,UAAU,KAAK,UAAU;AAAA,IAC7B,IACA;AAAA,EACV;AACA,QAAM,OAAO,EAAE,QAAQ,aAAsB,QAAQ;AACrD,MAAI,QAAQ,MAAM,WAAW;AACzB,WAAO,EAAE,GAAG,MAAM,WAAW,OAAO,QAAQ,wBAAwB;AACxE,QAAM,cAAc,YAAY,iBAAiB;AAAA,IAAO,CAAC,MACrD,eAAe,EAAE,YAAY,QAAQ,UAAU;AAAA,EACnD;AACA,MAAI,CAAC,QAAQ,WAAW,mBAAmB,CAAC,WAAW;AACnD,WAAO,EAAE,GAAG,MAAM,WAAW,OAAO,QAAQ,yBAAyB;AACzE,QAAM,QAAQ,WAAW;AAAA,IAAQ,CAAC,YAC9B,QAAQ,aACH;AAAA,MACG,CAAC,MACG,UAAU,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,QAAQ,MAAM,GAAG,CAAC,KAC5D,YAAY,EAAE,SAAS,QAAQ,OAAO;AAAA,IAC9C,EACC,IAAI,CAAC,iBAAiB,EAAE,SAAS,YAAY,EAAE;AAAA,EACxD;AACA,QAAM,OAAO,CAAC,gBAA6D;AACvE,UAAM,QAAQ,OAAO,YAAY,QAAQ,MAAM;AAC/C,YACK,YAAY,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,QAAQ,MAC/E;AAAA,EAER;AACA,QAAM;AAAA,IAAK,CAAC,GAAG,MACX,KAAK,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IAClC,KACA,KAAK,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,IACtC,IACA,EAAE,YAAY,GAAG,cAAc,EAAE,YAAY,EAAE;AAAA,EAC3D;AACA,MAAI,MAAM,QAAQ;AACd,UAAM,EAAE,SAAS,YAAY,IAAI,MAAM,CAAC;AACxC,UAAM,MAAM,YAAY,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,OAAO,CAAC;AACtE,UAAM,QAAQ,OAAO,IAAI,MAAM;AAC/B,WAAO;AAAA,MACH,GAAG;AAAA,MACH,WAAW;AAAA,MACX,WAAW,IAAI,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,EAAE,IAAI,QAAQ,MAAM;AAAA,MACvE,OAAO;AAAA,QACH,KAAK,IAAI,OAAO,CAAC,GAAG,MAAO,IAAI,IAAI,IAAI,CAAE;AAAA,QACzC,KAAK,IAAI,OAAO,CAAC,GAAG,MAAO,IAAI,IAAI,IAAI,CAAE;AAAA,QACzC,MAAM;AAAA,MACV;AAAA,MACA,SAAS,IAAI;AAAA,MACb,WAAW,QAAQ;AAAA,MACnB,eAAe,YAAY;AAAA,MAC3B,UAAU,gBAAgB,QAAQ,MAAM;AAAA,IAC5C;AAAA,EACJ;AACA,SAAO,EAAE,GAAG,MAAM,WAAW,OAAO,QAAQ,oBAAoB;AACpE;AAQO,SAAS,iBACZ,SACA,WAA2C,iBAC/B;AACZ,MAAI,QAAQ,MAAM,WAAW,kBAAkB;AAC3C,UAAM,IAAI;AAAA,MACN;AAAA,IACJ;AAAA,EACJ;AACA,QAAM,eAAe,SAAS,QAAQ,CAAC,YAAY,QAAQ,YAAY;AACvE,QAAM,WAAW,aAAa;AAAA,IAC1B,CAAC,gBACG,YAAY,MAAM,SAAS,QAAQ,MAAM,QACzC,YAAY,MAAM,WAAW,QAAQ,MAAM,UAC3C,YAAY,YAAY,SAAS,QAAQ,OAAO;AAAA,EACxD;AACA,QAAM,QAAQ,SAAS;AAAA,IAAO,CAAC,gBAC3B,UAAU,MAAM,CAAC,QAAQ,YAAY,MAAM,GAAG,MAAM,QAAQ,MAAM,GAAG,CAAC;AAAA,EAC1E;AACA,MAAI,MAAM,QAAQ;AACd,UAAM,QAAQ,MAAM,IAAI,CAAC,MAAM;AAC3B,YAAM,QAAQ,OAAO,EAAE,QAAQ,MAAM;AACrC,cAAQ,EAAE,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,QAAQ,MAAM;AAAA,IACtF,CAAC;AACD,WAAO,EAAE,UAAU,MAAM,OAAO,CAAC,KAAK,MAAO,IAAI,MAAM,IAAI,GAAI,EAAE;AAAA,EACrE;AACA,MACI,CAAC,iBAAiB,eAAe,iBAAiB,eAAe,EAAE;AAAA,IAC/D,QAAQ,MAAM;AAAA,EAClB,KACA,CAAC,SAAS;AAEV,UAAM,IAAI,MAAM,wEAAwE;AAC5F,QAAM,aAAa,SAAS,SACtB,WACA,aAAa;AAAA,IACT,CAAC,gBACG,YAAY,MAAM,SAAS,QAAQ,MAAM,QACzC,YAAY,MAAM,WAAW,QAAQ,MAAM;AAAA,EACnD;AACN,MAAI,CAAC,WAAW,OAAQ,OAAM,IAAI,MAAM,qDAAqD;AAG7F,QAAM,aAAa;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,CAAC,SAAS,SAAS,CAAC,UAAU,IAAI,CAAC;AAAA,EAC3C;AAGA,QAAM,SAAS,oBAAI,IAAyC;AAC5D,aAAW,aAAa,YAAY;AAChC,UAAM,MAAM,KAAK,UAAU;AAAA,MACvB,UAAU,IAAI,CAAC,MAAM,UAAU,MAAM,CAAC,CAAC;AAAA,MACvC,UAAU,SAAS;AAAA,MACnB,UAAU,SAAS;AAAA,MACnB,UAAU,SAAS,eAAe,YAAY;AAAA,MAC9C,UAAU,SAAS,SAAS,YAAY;AAAA,IAC5C,CAAC;AACD,UAAM,WAAW,OAAO,IAAI,GAAG;AAC/B,WAAO;AAAA,MACH;AAAA,MACA,WACM,EAAE,GAAG,WAAW,SAAS,CAAC,GAAG,SAAS,SAAS,GAAG,UAAU,OAAO,EAAE,IACrE;AAAA,IACV;AAAA,EACJ;AACA,QAAM,YAAY,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB;AACxD,QAAI,YAAY;AAChB,QAAI,cAAc;AAClB,eAAW,OAAO,YAAY;AAC1B,YAAMC,WAAU,OAAO,QAAQ,MAAM,GAA8B,CAAW,IAAI;AAClF,YAAM,WACF,OAAO,YAAY,MAAM,GAA8B,CAAW,IAAI;AAC1E,UAAIA,WAAU,cAAc,YAAY,UAAU;AAC9C,oBAAYA;AACZ,sBAAc;AAAA,MAClB;AAAA,IACJ;AACA,QAAI,MAAM,YAAY,QAAQ;AAAA,MAC1B,CAAC,KAAK,WAAY,OAAO,OAAO,OAAO,IAAI,MAAM,OAAO,OAAO,OAAO,IAAI;AAAA,MAC1E;AAAA,IACJ;AACA,WAAO,MAAM,YAAY,cAAc,MAAM;AAG7C,QAAI,QAAQ,MAAM,YAAY,eAAe,YAAY,MAAM,YAAY;AACvE,aAAO;AACX,QAAI,QAAQ,MAAM,UAAU,CAAC,YAAY,MAAM,OAAQ,QAAO;AAC9D,WAAO;AAAA,EACX,CAAC;AACD,SAAO,EAAE,UAAU,UAAU,OAAO,CAAC,KAAK,QAAS,MAAM,MAAM,MAAM,GAAI,EAAE;AAC/E;AAEO,SAAS,qBACZ,MACA,UACA,UACY;AACZ,QAAMC,aAAY,qBAAqB,MAAM,UAAU,QAAQ;AAC/D,MAAIA,WAAU,UAAW,QAAO,EAAE,UAAUA,WAAU,SAAS;AAG/D,SAAO,iBAAiBA,WAAU,OAAO;AAC7C;;;AC5cA,SAAS,yBAAyB;AAClC,SAAS,iBAA8B;AAEvC,IAAM,oBAAoB,IAAI,UAAU,iBAAiB;AAGlD,SAAS,oBAAoB,KAAkD;AAClF,QAAM,UAAU,kBAAkB,SAAS,GAAG;AAC9C,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,gCAAgC;AAC9D,QAAM,UAAU,kBAAkB,eAAe,QAAQ,UAAU,QAAQ,IAAI;AAC/E,MACI,QAAQ,KAAK,YAAY,MAAM,IAAI,KAAK,YAAY,KACpD,QAAQ,OAAO,WAAW,IAAI,OAAO,UACrC,QAAQ,OAAO;AAAA,IACX,CAAC,OAAOC,WAAU,MAAM,YAAY,MAAM,IAAI,OAAOA,MAAK,EAAG,YAAY;AAAA,EAC7E;AAEA,UAAM,IAAI,MAAM,qCAAqC;AACzD,QAAM,OAAO,QAAQ,KAAK,SAAS,IAAI;AAEvC,aAAW,OAAO;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAAG;AACC,UAAM,SAAS,QAAQ,KAAK,SAAS,GAAG;AACxC,QAAI,OAAQ,MAAK,GAAG,IAAI,OAAO,QAAQ,IAAI;AAAA,EAC/C;AACA,aAAW,OAAO,CAAC,WAAW,YAAY,GAAG;AACzC,UAAM,SAAS,QAAQ,KAAK,SAAS,GAAG;AACxC,QAAI,OAAQ,MAAK,GAAG,IAAI,OAAO,IAAI,CAAC,UAAU,MAAM,SAAS,IAAI,CAAC;AAAA,EACtE;AACA,QAAM,SAAS,QAAQ,KAAK,SAAS,QAAQ;AAC7C,MAAI,QAAQ;AACR,UAAM,SAAU,OAAO,SAAS,UAAU,KAA4B;AACtE,UAAM,SAAS,OAAO,SAAS,UAAU,IAAI,KAAK,OAAO,WAAW,KAAK;AACzE,eAAW,OAAO,CAAC,cAAc,wBAAwB,YAAY,iBAAiB,GAAG;AACrF,YAAM,SAAS,OAAO,SAAS,GAAG;AAClC,UAAI,OAAQ,QAAO,GAAG,IAAI,OAAO,QAAQ,IAAI;AAAA,IACjD;AACA,UAAM,UAAU,OAAO,SAAS,SAAS;AACzC,QAAI,QAAS,QAAO,UAAU,QAAQ,IAAI,CAAC,UAAU,MAAM,SAAS,IAAI,CAAC;AAAA,EAC7E;AACA,SAAO,EAAE,WAAW,QAAQ,MAAM,KAAK;AAC3C;;;ACzCO,SAAS,iBACZ,SACA,iBACkB;AAClB,MACI,QAAQ,WAAW,aACnB,CAAC,sBAAsB,KAAK,QAAQ,eAAe,KACnD,OAAO,QAAQ,MAAM,WAAW,YAChC,QAAQ,MAAM,SAAS,MACvB,CAAC,sBAAsB,KAAK,QAAQ,MAAM,IAAI;AAE9C,UAAM,IAAI,MAAM,oCAAoC;AACxD,QAAM,OAAO,oBAAI,IAAY;AAC7B,SAAO,QAAQ,KACV,OAAO,CAAC,QAAQ,IAAI,QAAQ,YAAY,MAAM,gBAAgB,YAAY,CAAC,EAC3E,IAAI,CAAC,QAAQ;AACV,QACI,IAAI,gBAAgB,YAAY,MAAM,QAAQ,gBAAgB,YAAY,KAC1E,CAAC,OAAO,cAAc,IAAI,QAAQ,KAClC,IAAI,WAAW,KACf,KAAK,IAAI,IAAI,QAAQ;AAErB,YAAM,IAAI,MAAM,wCAAwC;AAC5D,SAAK,IAAI,IAAI,QAAQ;AACrB,UAAM,UAAU,oBAAoB,GAAG;AACvC,WAAO;AAAA,MACH,SAAS,IAAI;AAAA,MACb,WAAW,QAAQ;AAAA,MACnB,MAAM,QAAQ;AAAA,MACd,aAAa,QAAQ,MAAM;AAAA,MAC3B,WAAW,QAAQ,MAAM;AAAA,MACzB,iBAAiB,QAAQ,gBAAgB,YAAY;AAAA,MACrD,UAAU,IAAI;AAAA,MACd,SAAS;AAAA,IACb;AAAA,EACJ,CAAC,EACA,KAAK,CAAC,GAAG,MAAM,EAAE,WAAY,EAAE,QAAS;AACjD;;;AC3CA,SAAS,4BAA4B;AAErC,SAAS,iBAAiB;AAE1B;AAAA,EACI;AAAA,EACA;AAAA,OAIG;AACP,SAAS,+BAA+B;AA4BxC,IAAM,SAAS,oBAAI,IAAI;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AACD,SAAS,MAAM,IAAa,SAA6B;AACrD,MAAI,CAAC,GAAI,OAAM,IAAI,MAAM,OAAO;AACpC;AACA,SAAS,OAAO,OAAyC;AACrD,QAAM,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG,sBAAsB;AACzF,SAAO;AACX;AACA,SAAS,MAAM,OAA2B;AACtC,QAAM,MAAM,QAAQ,KAAK,GAAG,qBAAqB;AACjD;AAAA,IACI,MAAM,KAAK,EAAE,QAAQ,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,MAAM,OAAO;AAAA,IACxE;AAAA,EACJ;AACA,SAAO;AACX;AACA,SAAS,QAAQ,OAAwB;AACrC;AAAA,IACI,OAAO,UAAU,YAAa,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK;AAAA,IACrF;AAAA,EACJ;AACA,QAAM,IAAI,OAAO,KAAK;AACtB,QAAM,KAAK,IAAI,wBAAwB;AACvC,SAAO;AACX;AACA,SAAS,MAAM,OAAwB;AACnC,QAAM,IAAI,QAAQ,KAAK;AACvB,QAAM,IAAI,QAAQ,0BAA0B;AAC5C,SAAO,OAAO,CAAC;AACnB;AACA,SAAS,KAAK,OAAqB;AAC/B,QAAM,OAAO,UAAU,YAAY,sBAAsB,KAAK,KAAK,GAAG,oBAAoB;AAC1F,SAAO,MAAM,YAAY;AAC7B;AACA,SAAS,aAAa,SAAiC;AACnD,QAAM,QAAQ,WAAW,MAAM,QAAQ,UAAU,MAAM,KAAK,yBAAyB;AACrF;AAAA,IACI,UAAU,QAAQ,eAAe,KAAK,OAAO,QAAQ,eAAe,MAAM;AAAA,IAC1E;AAAA,EACJ;AACJ;AACA,IAAM,WAAW,CAAC,MAAc,OAAe,GAAG,IAAI,IAAI,EAAE;AAKrD,SAAS,0BACZ,MACA,SACA,kBACmB;AACnB,eAAa,OAAO;AACpB,QAAM,oBAAoB,IAAI,0BAA0B;AACxD,QAAM,WAAW,KAAK;AAAA,IAClB,CAAC,QACG,IAAI,QAAQ,YAAY,MAAM,QAAQ,gBAAgB,YAAY,KAClE,OAAO,IAAI,IAAI,SAAS;AAAA,EAChC;AACA,QAAM,aAAa,oBAAI,IAAiB;AACxC,QAAM,WAAW,CAAC,QAA0B;AACxC,UAAM,CAAC,IAAI,SAAS,uCAAuC;AAC3D;AAAA,MACI,OAAO,IAAI,gBAAgB,YACvB,IAAI,eAAe,MACnB,IAAI,eAAe;AAAA,MACvB;AAAA,IACJ;AACA,UAAM,OAAO,cAAc,IAAI,QAAQ,KAAK,IAAI,YAAa,GAAG,sBAAsB;AACtF,WAAO;AAAA,MACH,aAAa,IAAI;AAAA,MACjB,WAAW,KAAK,IAAI,SAAS;AAAA,MAC7B,iBAAiB,KAAK,IAAI,eAAe;AAAA,IAC7C;AAAA,EACJ;AACA,QAAM,eAAe,CAAC,KAAuB,MAAc,OACvD,GAAG,KAAK,IAAI,eAAe,CAAC,IAAI,SAAS,MAAM,EAAE,CAAC;AACtD,aAAW,OAAO,UAAU;AACxB,aAAS,GAAG;AACZ,QAAI,IAAI,cAAc,yBAAyB,IAAI,cAAc,eAAgB;AACjF,UAAM,IAAI,OAAO,IAAI,IAAI,GACrB,OAAO,QAAQ,EAAE,MAAM,GACvB,QAAQ,MAAM,EAAE,cAAc,GAC9B,SAAS,MAAM,EAAE,WAAW;AAChC,UAAM,OAAO,MAAM,OAAO,MAAM,KAAK,wBAAwB;AAC7D,UAAM,QAAQ,OAAO,UAAU,OAAO,iCAAiC;AACvE,eAAW,CAAC,GAAG,IAAI,KAAK,OAAO,QAAQ,GAAG;AACtC,YAAM,MAAM,aAAa,KAAK,MAAM,QAAQ,CAAC,GACzC,QAAQ,KAAK,IAAI,GACjB,WAAW,WAAW,IAAI,GAAG;AACjC,YAAM,CAAC,YAAY,aAAa,OAAO,8BAA8B;AACrE,iBAAW,IAAI,KAAK,KAAK;AAAA,IAC7B;AAAA,EACJ;AACA,QAAM,UAAU,oBAAI,IAA+B;AACnD,QAAM,MAAM,CACR,KACA,MACA,IACA,YACA,MACA,MACA,QAAiB,IAAI,MAAM,SACtB,IAAI,MAAM,QACL,SACL,IAAI,MAAM,QAA2D,UAAU,UACnF;AACD,UAAM,OAAO,MAAM,OAAO,MAAM,KAAK,qBAAqB;AAC1D,UAAM,WAAW,WAAW,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;AAC3D,UAAM,UAAU,8CAA8C;AAC9D,QAAI,eAAe;AACf,YAAM,KAAK,UAAU,MAAM,UAAU,8CAA8C;AACvF,UAAM,WAAW,wBAAwB,MAAe,EAAE,YAAY,SAAS,QAAQ,CAAC;AACxF;AAAA,MACI,OAAO,UAAU,YAAY,UAAU,KAAK,KAAK,OAAO,KAAK,MAAM;AAAA,MACnE;AAAA,IACJ;AACA,UAAM,QAAQ;AAAA,MACV,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,GAAG,SAAS,GAAG;AAAA,IACnB;AACA,UAAM,MAAM,GAAG,aAAa,KAAK,MAAM,EAAE,CAAC,IAAI,IAAI,IAC9C,WAAW,QAAQ,IAAI,GAAG;AAC9B;AAAA,MACI,CAAC,YACI,SAAS,aAAa,YAAY,MAAM,MAAM,YAAY,KACvD,SAAS,SAAS,eAAe,SAAS,cAC1C,SAAS,SAAS,SAAS,SAAS,QACpC,SAAS,cAAc,MAAM;AAAA,MACrC;AAAA,IACJ;AACA,YAAQ,IAAI,KAAK,KAAK;AAAA,EAC1B;AACA,QAAM,WAAW,CACb,KACA,GACA,WACC;AACD,UAAM,OAAO,QAAQ,EAAE,YAAY,GAC/B,SAAS,MAAM,EAAE,WAAW,GAC5B,KAAK,MAAM,EAAE,UAAU;AAC3B,UAAM,SAAS,KAAK,OAAO,gBAAgB,GACvC,YAAY,OAAO,MAAM,MAAM;AACnC;AAAA,MACI,GAAG,WAAW,KAAK,OAAO,YAAY,YAAY,IAAI;AAAA,MACtD;AAAA,IACJ;AACA,QAAI,KAAK,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,OAAO,kBAAkB,SAAS,GAAG,CAAC,CAAC;AACxE,QAAI,KAAK,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,OAAO,kBAAkB,WAAW,GAAG,CAAC,CAAC;AAC1E,QAAI,UAAW,KAAI,KAAK,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,QAAQ,SAAS,GAAG,CAAC,CAAC;AAAA,QACjE,yBAAwB,GAAG,CAAC,GAAY,EAAE,OAAO,KAAK,CAAC;AAAA,EAChE;AACA,aAAW,OAAO,UAAU;AACxB,UAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAI,IAAI,cAAc,UAAU;AAC5B,YAAM,KAAK,MAAM,EAAE,UAAU,GACzB,OAAO,QAAQ,EAAE,MAAM,GACvB,QAAQ,MAAM,EAAE,cAAc;AAClC,YAAM,QAAQ,GAAG,UAAU,OAAO,8BAA8B;AAChE,SAAG,QAAQ,CAAC,GAAG,MAAM,IAAI,KAAK,MAAM,QAAQ,GAAG,QAAW,SAAS,CAAC,CAAC;AAAA,IACzE,WAAW,IAAI,cAAc,cAAc,IAAI,cAAc,qBAAqB;AAC9E,YAAM,KAAK,MAAM,EAAE,iBAAiB,GAChC,KAAK,MAAM,EAAE,UAAU,GACvB,SAAS,MAAM,EAAE,WAAW,GAC5B,OAAO,QAAQ,EAAE,YAAY;AACjC;AAAA,QACI,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,OAAO;AAAA,QAChD;AAAA,MACJ;AACA,SAAG,QAAQ,CAAC,GAAG,MAAM,IAAI,KAAK,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;AAAA,IAC5E,WAAW,IAAI,cAAc,gBAAgB;AACzC,YAAM,SAAS,MAAM,EAAE,MAAM;AAC7B,YAAM,KAAK,MAAM,EAAE,WAAW,GAC1B,OAAO,QAAQ,EAAE,MAAM,GACvB,QAAQ,MAAM,EAAE,cAAc,GAC9B,SAAS,EAAE;AACf;AAAA,QACI,OAAO,WAAW,YAAY,0BAA0B,KAAK,MAAM;AAAA,QACnE;AAAA,MACJ;AACA,YAAM,OAAO,WAAW,GAAG,QAAQ,4BAA4B;AAC/D,YAAM,QAAQ,GAAG,UAAU,OAAO,6BAA6B;AAC/D,UAAI,SAAS;AACb,SAAG,QAAQ,CAAC,GAAG,MAAM;AACjB,cAAM,SAAS,KAAK,OAAO,QAAQ,kCAAkC;AACrE,cAAM,SAAS,OAAO,SAAS,OAAO,MAAM,QAAQ,SAAS,CAAC,GAAG,EAAE;AACnE,kBAAU;AACV;AAAA,UACI,UAAU,wBACN,SAAS,SAAS,KAAK,WAAW,IAAI,IAAI,QAAQ,OAAO;AAAA,UAC7D;AAAA,QACJ;AACA,cAAM,aAAa,KAAK,OAAO,MAAM,QAAQ,SAAS,SAAS,CAAC,CAAC;AACjE,kBAAU,SAAS;AACnB,cAAM,OAAO,WAAW,IAAI,OAAO,KAAK,OAAO,MAAM,QAAQ,SAAS,GAAG,CAAC;AAC1E,YAAI,WAAW,EAAG,WAAU;AAC5B,YAAI,KAAK,MAAM,QAAQ,GAAG,GAAG,SAAS,EAAE,YAAY,KAAK,GAAG,OAAO,CAAC,CAAC;AAAA,MACzE,CAAC;AACD,YAAM,WAAW,OAAO,QAAQ,gCAAgC;AAAA,IACpE,WAAW,IAAI,cAAc,gBAAiB,UAAS,KAAK,GAAG,CAAC;AAAA,aACvD,IAAI,cAAc;AACvB,eAAS,KAAK,GAAG,OAAO,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;AAAA,aAC7C,IAAI,cAAc,cAAc;AACrC,YAAM,IAAI,OAAO,EAAE,MAAM,GACrB,KAAK,MAAM,EAAE,oBAAoB,GACjC,KAAK,MAAM,EAAE,UAAU,GACvB,SAAS,MAAM,EAAE,oBAAoB,GACrC,OAAO,QAAQ,EAAE,YAAY;AACjC;AAAA,QACI,GAAG,WAAW,IAAI,GAAG,UAAU,OAAO,WAAW,GAAG;AAAA,QACpD;AAAA,MACJ;AACA,SAAG,QAAQ,CAAC,GAAG,MAAM;AACjB,YAAI,OAAO,KAAK,CAAC,CAAC,MAAM,IAAI;AACxB,gBAAM,QAAQ,OAAO,CAAC,CAAC,MAAM,IAAI,uCAAuC;AACxE,kCAAwB,GAAG,IAAI,CAAC,GAAY,EAAE,OAAO,KAAK,CAAC;AAC3D,kCAAwB,GAAG,IAAI,IAAI,CAAC,GAAY,EAAE,OAAO,KAAK,CAAC;AAAA,QACnE,OAAO;AACH,cAAI,KAAK,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AACtD,cAAI,KAAK,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,GAAG,WAAW,GAAG,IAAI,IAAI,CAAC,CAAC;AAAA,QAChE;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AACA,SAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC/B;AASA,eAAsB,kBAClB,MACA,SAKiE;AACjE,eAAa,QAAQ,OAAO;AAC5B,gBAAc,iBAAiB,aAAa,QAAQ,QAAQ,YAAY,EAAE,SAAS,CAAC;AACpF;AAAA,IACI,CAAC,KAAK;AAAA,MACF,CAAC,QACG,IAAI,QAAQ,YAAY,MAAM,QAAQ,QAAQ,gBAAgB,YAAY,KAC1E,IAAI;AAAA,IACZ;AAAA,IACA;AAAA,EACJ;AACA,QAAM,aAAa,0BAA0B,MAAM,QAAQ,SAAS,QAAQ,gBAAgB;AAC5F,QAAM,YAAY,oBAAI,IAA+B;AACrD,QAAM,SAAS,oBAAI,IAA+B;AAClD,aAAW,aAAa,YAAY;AAChC,UAAM,MAAM,SAAS,UAAU,QAAQ,UAAU,SAAS;AAC1D,UAAM,WAAW,UAAU,IAAI,GAAG;AAClC;AAAA,MACI,CAAC,YACI,SAAS,eAAe,UAAU,cAC/B,SAAS,cAAc,UAAU,aACjC,SAAS,oBAAoB,UAAU,mBACvC,SAAS,aAAa,YAAY,MAAM,UAAU,aAAa,YAAY;AAAA,MACnF;AAAA,IACJ;AACA,cAAU,IAAI,KAAK,SAAS;AAC5B,WAAO,IAAI,GAAG,GAAG,IAAI,UAAU,IAAI,IAAI,SAAS;AAAA,EACpD;AACA,QAAM,QAA0B,CAAC;AACjC,QAAM,UAA8B,CAAC;AACrC,aAAW,aAAa,OAAO,OAAO,GAAG;AACrC,UAAM,EAAE,UAAU,MAAM,GAAG,aAAa,IAAI;AAC5C,UAAM,UAAU;AAAA,MACZ,SAAS,QAAQ,QAAQ;AAAA,MACzB,iBAAiB,OAAO,QAAQ,QAAQ,eAAe;AAAA,MACvD,cAAc,OAAO,UAAU,YAAY;AAAA,MAC3C,kBAAkB,UAAU;AAAA,IAChC;AAEA,QAAI;AACA,UAAI,SAAS,SAAS;AAClB,YAAI,SAAS,eAAe,KAAM;AAClC,cAAM,OAAO,MAAM,QAAQ,QAAQ,YAAY,SAAS,YAAY,OAAO;AAC3E,cAAM,KAAK,EAAE,GAAG,cAAc,KAAK,CAAC;AAAA,MACxC,OAAO;AACH,cAAM,QAAQ,MAAM,QAAQ,QAAQ,cAAc,SAAS,YAAY;AAAA,UACnE,GAAG;AAAA,UACH;AAAA,QACJ,CAAC;AACD,gBAAQ,KAAK,EAAE,GAAG,cAAc,MAAM,MAAM,CAAC;AAAA,MACjD;AAAA,IACJ,QAAQ;AAAA,IAER;AAAA,EACJ;AACA,SAAO,EAAE,OAAO,QAAQ;AAC5B;;;ACpTA,SAASC,OAAM,OAAgB,SAAgC;AAC3D,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,OAAO;AACvC;AAEA,SAAS,UAAU,OAAiD;AAChE,EAAAA,OAAM,sBAAsB,KAAK,MAAM,eAAe,GAAG,qCAAqC;AAC9F,EAAAA;AAAA,IACI,OAAO,MAAM,WAAW,YAAY,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM;AAAA,IAC9E;AAAA,EACJ;AACA,EAAAA;AAAA,IACI,OAAO,cAAc,MAAM,SAAS,KAAK,MAAM,aAAa,KAAK,MAAM,YAAY;AAAA,IACnF;AAAA,EACJ;AACA,EAAAA,OAAM,CAAC,SAAS,SAAS,SAAS,EAAE,SAAS,MAAM,IAAI,GAAG,mCAAmC;AAC7F,SAAO;AAAA,IACH,iBAAiB,MAAM,gBAAgB,YAAY;AAAA,IACnD,QAAQ,MAAM;AAAA,IACd,WAAW,MAAM;AAAA,IACjB,MAAM,MAAM;AAAA,EAChB;AACJ;AAKO,IAAM,qBAAN,MAAyB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YACI,SAGF;AACE,UAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,IAAAA;AAAA,MACI,OAAO,cAAc,aAAa,KAAK,iBAAiB;AAAA,MACxD;AAAA,IACJ;AACA,SAAK,YAAY,QAAQ;AACzB,SAAK,UACD,cAAc,UAAU,IAAI,kBAAkB,QAAQ,QAAQ,IAAI,QAAQ;AAC9E,SAAK,iBAAiB,OAAO,aAAa;AAC1C,WAAO,OAAO,IAAI;AAAA,EACtB;AAAA,EAEA,MAAc,QAAQ,OAAkD;AACpE,UAAM,KAAK,UAAU,mBAAmB,KAAK,OAAO;AACpD,UAAMC,aAAY,MAAM,KAAK,QAAQ,SAAS,MAAM,MAAM;AAC1D,IAAAD;AAAA,MACIC,WAAU,WAAW,MAAM,UACvBA,WAAU,KAAK,YAAY,MAAM,MAAM,KAAK,YAAY;AAAA,MAC5D;AAAA,IACJ;AACA,UAAM,OAAO,MAAM,KAAK,QAAQ,qBAAqB;AACrD,IAAAD;AAAA,MACI,QAAQ,MAAM,UAAU,OAAO,MAAM,SAAS,MAAM,KAAK;AAAA,MACzD;AAAA,IACJ;AACA,IAAAA;AAAA,MACK,MAAM,KAAK,QAAQ,WAAW,MAAO,KAAK,UAAU,QAAQ;AAAA,MAC7D;AAAA,IACJ;AACA,WAAO,OAAO,MAAM,SAAS;AAAA,EACjC;AAAA;AAAA,EAGA,MAAM,WAAW,OAAyD;AACtE,UAAM,WAAW,UAAU,KAAK;AAChC,UAAM,KAAK,UAAU,mBAAmB,KAAK,OAAO;AACpD,UAAM,WAAW,MAAM,KAAK,QAAQ,WAAW,SAAS,eAAe;AACvE,IAAAA,OAAM,UAAU,+CAA+C;AAC/D,UAAM,UAAU,gBAAgB,QAAQ;AACxC,IAAAA,OAAM,QAAQ,WAAW,WAAW,sDAAsD;AAC1F,IAAAA;AAAA,MACI,QAAQ,gBAAgB,YAAY,MAAM,SAAS;AAAA,MACnD;AAAA,IACJ;AACA,IAAAA;AAAA,MACI,OAAO,QAAQ,MAAM,WAAW,YAC5B,QAAQ,MAAM,UAAU,MACxB,sBAAsB,KAAK,QAAQ,MAAM,IAAI;AAAA,MACjD;AAAA,IACJ;AACA,UAAM,EAAE,QAAQ,IAAI,KAAK;AACzB,UAAM,OAAO,iBAAiB,SAAS,QAAQ,eAAe;AAC9D,UAAM,aAAa,0BAA0B,MAAM,SAAS,QAAQ,MAAM,MAAM,EAAE;AAAA,MAC9E,CAACE,eACGA,WAAU,WAAW,SAAS,UAC9BA,WAAU,cAAc,SAAS,aACjCA,WAAU,SAAS,SAAS,QAC5BA,WAAU,aAAa,YAAY,MAAM,QAAQ,aAAa,YAAY;AAAA,IAClF;AACA,IAAAF;AAAA,MACI,WAAW,WAAW;AAAA,MACtB;AAAA,IACJ;AACA,UAAM,YAAY,WAAW,CAAC;AAC9B,UAAM,gBAAgB,MAAM,KAAK,QAAQ,QAAQ,KAAK;AACtD,WAAO,OAAO,OAAO;AAAA,MACjB,WAAW,OAAO,OAAO,QAAQ;AAAA,MACjC,OAAO,OAAO,OAAO,EAAE,GAAG,QAAQ,MAAM,CAAC;AAAA,MACzC;AAAA,MACA,QAAQ,OAAO,OAAO;AAAA,QAClB,SAAS,QAAQ;AAAA,QACjB,iBAAiB,OAAO,QAAQ,eAAe;AAAA,QAC/C,cAAc,OAAO,QAAQ,YAAY;AAAA,QACzC,kBAAkB,UAAU;AAAA,QAC5B,MAAM,SAAS;AAAA,QACf,YAAY,UAAU,SAAS;AAAA,MACnC,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,OAAO,YAAwB,OAAyD;AAC1F,UAAM,WAAW,MAAM,KAAK,WAAW,KAAK;AAC5C,UAAM,SAAS,MAAM,WAAW,OAAO,SAAS,MAAM;AACtD,UAAM,gBAAgB,MAAM,KAAK,QAAQ,SAAS,KAAK;AACvD,WAAO,OAAO,OAAO;AAAA,MACjB,QAAQ,OAAO,OAAO,MAAM;AAAA,MAC5B,OAAO,SAAS;AAAA,MAChB;AAAA,MACA,QAAQ,OAAO,OAAO;AAAA,QAClB,GAAG,SAAS;AAAA,QACZ,YAAY,SAAS,OAAO;AAAA,MAChC,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEA,SAAS;AACL,WAAO,EAAE,oBAAoB,MAAM,eAAe,KAAK,eAAe,SAAS,EAAE;AAAA,EACrF;AAAA,EAEA,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAI;AACzC,WAAO,KAAK,OAAO;AAAA,EACvB;AACJ;;;ACpLA,SAAS,eAAe,oCAAoC;AAC5D,SAAS,cAAc;AACvB,SAAS,YAAY,mBAAmB;AAGjC,SAAS,SAAS,OAA4B;AACjD,MACI,OAAO,MAAM,cAAc,YAC3B,CAAC,MAAM,UAAU,UACjB,MAAM,UAAU,SAAS;AAEzB,UAAM,IAAI,MAAM,0BAA0B;AAC9C,MAAI,OAAO,MAAM,YAAY,YAAY,MAAM,UAAU,MAAM,MAAM,WAAW,MAAM;AAClF,UAAM,IAAI,MAAM,qBAAqB;AACzC,aAAWG,YAAW,CAAC,MAAM,eAAe;AACxC,QAAI,CAAC,sBAAsB,KAAKA,QAAO,KAAK,OAAOA,QAAO,MAAM;AAC5D,YAAM,IAAI,MAAM,0BAA0B;AAClD,MACI,CAAC,sBAAsB,KAAK,MAAM,YAAY,KAC9C,OAAO,MAAM,YAAY,KAAK,MAC9B,OAAO,MAAM,YAAY,KAAK,MAAM;AAEpC,UAAM,IAAI,MAAM,sBAAsB;AAC1C,SAAO;AAAA,IACH;AAAA,MACI;AAAA,QACI,2BACI,KAAK,UAAU;AAAA,UACX,MAAM;AAAA,UACN,MAAM,QAAQ,SAAS;AAAA,UACvB,MAAM,gBAAgB,YAAY;AAAA,UAClC,MAAM,aAAa,YAAY;AAAA,QACnC,CAAC;AAAA,MACT;AAAA,IACJ;AAAA,EACJ;AACJ;AACO,SAAS,aAAa,OAAiC;AAC1D,WAAS,KAAK;AACd,SAAO;AAAA,IACH,eAAe;AAAA,IACf,OAAO,EAAE,GAAG,MAAM;AAAA,IAClB,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,IACV,cAAc,CAAC;AAAA,IACf,YAAY,CAAC;AAAA,EACjB;AACJ;AACO,SAAS,cAAc,OAAoB,OAAoB,UAAwB;AAC1F,MACI,CAAC,SACD,MAAM,kBAAkB,KACxB,SAAS,MAAM,KAAK,MAAM,SAAS,KAAK,KACxC,MAAM,aAAa;AAEnB,UAAM,IAAI,MAAM,6CAA6C;AACjE,MAAI,CAAC,OAAO,cAAc,QAAQ,KAAK,WAAW;AAC9C,UAAM,IAAI,MAAM,+BAA+B;AACnD,aAAW,SAAS,CAAC,MAAM,OAAO,MAAM,SAAS,MAAM,cAAc,MAAM,UAAU;AACjF,QAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAC1D,YAAM,IAAI,MAAM,8BAA8B;AACtD,aAAW,UAAU,OAAO,OAAO,MAAM,KAAK,GAAG;AAC7C,QACI,OAAO,OAAO,KAAK,iBAAiB,YACpC,OAAO,KAAK,gBAAgB,MAC5B,OAAO,KAAK,gBAAgB,MAAM,QAClC,OAAO,KAAK,YAAY,MAAM,WAC9B,OAAO,KAAK,oBAAoB,OAAO,MAAM,eAAe,KAC5D,OAAO,KAAK,aAAa,YAAY,MAAM,MAAM,aAAa,YAAY,KAC1E,OAAO,OAAO,KAAK,WAAW,YAC9B,OAAO,KAAK,UAAU,MACtB,OAAO,KAAK,UAAU,MAAM;AAE5B,YAAM,IAAI,MAAM,uCAAuC;AAC3D,QAAI,CAAC,CAAC,WAAW,WAAW,OAAO,EAAE,SAAS,OAAO,KAAK;AACtD,YAAM,IAAI,MAAM,qBAAqB;AAAA,EAC7C;AACA,aAAW,UAAU,OAAO,OAAO,MAAM,OAAO,GAAG;AAC/C,UAAM,OAAO,6BAA6B,OAAO,KAAK,EAAE;AACxD,QACI,KAAK,YAAY,MAAM,WACvB,KAAK,oBAAoB,OAAO,MAAM,eAAe,KACrD,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,OAAO,IAAI,MACzC,OAAO,SAAS,UACX,KAAK,sBACL,KAAK,uBACT,YAAY,MAAM,MAAM,aAAa,YAAY,KACnD,CAAC,CAAC,WAAW,WAAW,OAAO,EAAE,SAAS,OAAO,KAAK;AAEtD,YAAM,IAAI,MAAM,uCAAuC;AAAA,EAC/D;AACA,aAAW,UAAU,CAAC,GAAG,OAAO,OAAO,MAAM,KAAK,GAAG,GAAG,OAAO,OAAO,MAAM,OAAO,CAAC,GAAG;AACnF,QACI,CAAC,sBAAsB,KAAK,OAAO,UAAU,KAC7C,OAAO,OAAO,UAAU,KAAK,MAC7B,OAAO,OAAO,UAAU,KAAK,iBAC7B,OAAO,OAAO,WAAW,YACzB,OAAO,SAAS,MAChB,OAAO,UAAU,MAAM,OACvB,CAAC,OAAO,UAAU,OAAO,SAAS,KAClC,OAAO,YAAY,KACnB,OAAO,aAAa,SACpB,OAAO,OAAO,gBAAgB,YAC9B,OAAO,cAAc,MACrB,CAAC,sBAAsB,KAAK,OAAO,SAAS;AAE5C,YAAM,IAAI,MAAM,iCAAiC;AAAA,EACzD;AACA,aAAW,CAAC,IAAI,SAAS,KAAK,OAAO,QAAQ,MAAM,YAAY;AAC3D,QACI,CAAC,MAAM,WAAW,SAAS,KAC1B,CAAC,MAAM,MAAM,EAAE,KACZ,CAAC,OAAO,OAAO,MAAM,OAAO,EAAE;AAAA,MAC1B,CAAC,WAAW,qBAAqB,OAAO,UAAU,MAAM;AAAA,IAC5D,KACA,CAAC,CAAC,aAAa,aAAa,SAAS,EAAE;AAAA,MACnC,MAAM,WAAW,SAAS,EAAG;AAAA,IACjC;AAEJ,YAAM,IAAI,MAAM,0BAA0B;AACtD;AAcO,IAAM,2BAAN,MAAsD;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACT,YACI,SACA,OACA,SACF;AACE,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,aAAa,QAAQ;AAAA,EAC9B;AAAA,EACA,MAAM,aAAa,OAA0C;AACzD,UAAM,MAAM,SAAS,KAAK,GACtB,SAAS,MAAM,KAAK,SAAS,KAAK,GAAG;AACzC,QAAI,CAAC,OAAQ,QAAO,aAAa,KAAK;AACtC,UAAM,QAAQ,MAAM,KAAK,OAAO,OAAO,OAAO,MAAM,EAAE,KAAK,UAAU,OAAO,SAAS,CAAC;AACtF,kBAAc,OAAO,OAAO,OAAO,QAAQ;AAC3C,WAAO;AAAA,EACX;AAAA,EACA,MAAM,YAAe,OAAoB,QAA+C;AACpF,QAAI,OAAO,YAAY,SAAS;AAC5B,YAAM,IAAI,MAAM,+CAA+C;AACnE,UAAM,SAAS,EAAE,GAAG,MAAM,GACtB,MAAM,SAAS,MAAM;AACzB,aAAS,UAAU,GAAG,UAAU,KAAK,WAAW;AAC5C,YAAM,QAAQ,MAAM,KAAK,aAAa,MAAM,GACxC,WAAW,MAAM;AACrB,YAAM,SAAS,OAAO,KAAK;AAC3B,UAAI,UAAU,OAAO,WAAW,YAAY,UAAU,QAAQ;AAC1D,gBAAQ,QAAQ,MAAM,EAAE,MAAM,MAAM;AAAA,QAAC,CAAC;AACtC,cAAM,IAAI,MAAM,+CAA+C;AAAA,MACnE;AACA,oBAAc,OAAO,QAAQ,QAAQ;AACrC,UAAI,CAAC,OAAO,cAAc,WAAW,CAAC;AAClC,cAAM,IAAI,MAAM,iCAAiC;AACrD,YAAM,WAAW,WAAW;AAC5B,YAAM,OAAO,MAAM,KAAK,OAAO,OAAO,OAAO,EAAE,KAAK,UAAU,MAAM,SAAS,CAAC;AAC9E,UACI,MAAM,KAAK,SAAS,eAAe,KAAK,UAAU;AAAA,QAC9C,UAAU,MAAM;AAAA,QAChB;AAAA,MACJ,CAAC;AAED,eAAO;AAAA,IACf;AACA,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAClE;AAAA,EACA,SAAS;AACL,WAAO,EAAE,aAAa,MAAM,YAAY,KAAK,WAAW;AAAA,EAC5D;AAAA,EACA,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAI;AACzC,WAAO,KAAK,OAAO;AAAA,EACvB;AACJ;AAEO,IAAM,sBAAN,MAAuD;AAAA,EACjD,UAAU,oBAAI,IAA0B;AAAA,EACjD,MAAM,KAAK,KAAgD;AACvD,UAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAClC,WAAO,QAAQ,EAAE,UAAU,MAAM,UAAU,MAAM,WAAW,KAAK,MAAM,IAAI,EAAE,IAAI;AAAA,EACrF;AAAA,EACA,MAAM,eACF,KACA,kBACA,MACgB;AAChB,SAAK,KAAK,QAAQ,IAAI,GAAG,GAAG,YAAY,OAAO,iBAAkB,QAAO;AACxE,SAAK,QAAQ,IAAI,KAAK,EAAE,UAAU,KAAK,UAAU,MAAM,WAAW,KAAK,KAAK,IAAI,EAAE,CAAC;AACnF,WAAO;AAAA,EACX;AACJ;;;AC/MA,SAAS,WAAW,YAAY,YAAAC,WAAU,QAAQ,uBAAuB;AACzE;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEG;AACP,SAAS,sBAA0C;;;ACRnD,SAAS,gBAAgB;AACzB,SAAS,UAAAC,eAAc;AACvB,SAAS,cAAAC,mBAAkB;AAC3B,SAASC,OAAM,IAAa,SAA6B;AACrD,MAAI,CAAC,GAAI,OAAM,IAAI,MAAM,OAAO;AACpC;AACO,SAAS,cAAc,OAAoB,UAAgC;AAC9E,EAAAA;AAAA,IACI,MAAM,kBAAkB,KACpB,MAAM,cAAc,WACpB,MAAM,gBAAgB,SAAS,eAC/B,MAAM,WAAW,SAAS,UAC1B,MAAM,mBAAmB,SAAS,kBAClC,MAAM,aAAa,SAAS;AAAA,IAChC;AAAA,EACJ;AACA,EAAAA;AAAA,IACI,MAAM,aAAa,WAAW,SAAS,qBAAqB,UACxD,MAAM,aAAa,MAAM,CAACC,OAAM,MAAMA,UAAS,SAAS,qBAAqB,CAAC,CAAC;AAAA,IACnF;AAAA,EACJ;AACA,EAAAD;AAAA,IACI,0BAA0B,KAAK,MAAM,QAAQ,KACzCD,YAAWD,QAAO,SAAS,MAAM,QAAQ,CAAC,CAAC,MAAM,MAAM;AAAA,IAC3D;AAAA,EACJ;AACJ;;;ADGA,eAAsB,mBAClB,MACA,UACF;AACE,MAAI,SAAS,iBAAiB,KAAK,MAAM;AACrC,UAAM,IAAI,MAAM,0CAA0C;AAC9D,QAAM,UAAU,qBAAqB,IAAI;AACzC,QAAM,SAAS,iCAAiC,OAAO;AACvD,QAAM,SAAS,MAAM,SAAS,UAAU,gBAAgB,OAAO,CAAC;AAChE,MAAI,OAAO,iBAAiB,KAAK,MAAM,gBAAgB,OAAO,WAAW;AACrE,UAAM,IAAI,MAAM,yCAAyC;AAC7D,SAAO;AACX;AAEA,eAAsB,eAClB,UACA,MACA,eACA,QACA,SACF;AACE,MAAI,OAAO,OAAO,SAAS,QAAQ,GAAG;AAClC,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACnE;AACA,QAAM,EAAE,YAAY,UAAU,GAAG,cAAc,IAAI;AACnD,MAAI,cAAc,YAAY,cAAc,aAAa;AACrD,UAAM,IAAI,MAAM,uCAAuC;AAAA,EAC3D;AACA,QAAM,SAAS,UAAU,IAAI;AAC7B,MAAI,cAAc,gBAAgB,KAAK,SAAS,cAAc,KAAK,aAAa,KAAK;AACjF,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACrE;AACA,MAAI,KAAK,SAAS,YAAY;AAE1B,SAAK,YAAY,eAAe;AAAA,MAC5B,OAAO;AAAA,MACP,OAAO;AAAA,MACP,cAAc,cAAc,mBAAmB;AAAA,IACnD;AAAA,EACJ;AACA,QAAM,UAAU,MAAM,WAAW,UAAU,MAAM,aAAa;AAC9D,MAAI,KAAK,UAAU,EAAE,GAAG,SAAS,SAAS,OAAU,CAAC,MAAM,KAAK,UAAU,KAAK,SAAS;AACpF,UAAM,IAAI,MAAM,kCAAkC;AACtD,MAAI;AACA,UAAM,QAAQ,YAAY,MAAM,OAAO,MAAM,SAAS,aAAa,CAAC;AACpE,kBAAc,OAAO,KAAK,SAAU;AACpC,QACK,MAAM,OAAO;AAAA,MACV,gBAAgB,KAAK;AAAA,MACrB,gBAAgB,KAAK,SAAU;AAAA,MAC/B;AAAA,IACJ,MAAO;AAEP,YAAM,IAAI,MAAM,2BAA2B;AAC/C,WAAO;AAAA,EACX,QAAQ;AACJ,YAAQ,QAAQ,eAAe;AAC/B,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACvE;AACJ;AAEA,eAAsB,qBAClB,OACA,QACA,UACF;AACE,QAAM,QAAQ,MAAM,KAAK,QAAQ;AACjC,MAAI,OAAO,QAAQ,YAAY,MAAM,MAAM,YAAY;AACnD,UAAM,IAAI,MAAM,iCAAiC;AACrD,QAAM,QAAQ,MAAM,iBAAiB,KAAK;AAC1C,QAAM,YAAY,MAAM,OAAO,cAAc,gBAAgB,KAAK,CAAC;AACnE,SAAO,uBAAuB,OAAO,OAAO,WAAW,QAAQ;AACnE;AAGO,SAAS,qBAAqB,MAAqB;AACtD,SAAO,qBAAqB,6BAA6B,qBAAqB,IAAI,CAAC,CAAC;AACxF;AAGA,eAAsB,sBAAsB,MAAqB,WAAmB;AAChF,QAAM,UAAU,qBAAqB,IAAI;AACzC,QAAM,SAAS,iCAAiC,OAAO;AACvD,MAAI;AACA,UAAM,SAAS,UAAU,KAAK,SAAS;AACvC,UAAM,YAAYI,UAAS,WAAW,iBAAiB,QAAQ,MAAM,CAAC;AACtE,UAAM,QAAQ,MAAM,oBAAoB,SAAS;AACjD,QAAI,MAAM,YAAY,MAAM,KAAK,MAAM,aAAa,YAAY,GAAG;AAC/D,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACxD;AACA,WAAO,IAAI,oBAAoB,KAAK,MAAM,cAAc,QAAQ;AAAA,MAC5D,cAAc,MAAM,KAAK,UAAU,MAAM,GAAG,EAAE,CAAC;AAAA,MAC/C,cAAc,MAAM,KAAK,UAAU,MAAM,EAAE,CAAC;AAAA,MAC5C,WAAW,MAAM,KAAKA,UAAS,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAAA,IAChE,CAAC;AAAA,EACL,QAAQ;AACJ,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC5D;AACJ;AAGA,eAAsB,sBAClB,OACA,SACF;AACE,QAAM,OAAO,MAAM;AACnB,MAAI,KAAK,gBAAgB,aAAa;AAClC,UAAM,IAAI,MAAM,gDAAgD;AAAA,EACpE;AACA,MAAI,KAAK,SAAS,YAAY,CAAC,MAAM,OAAO;AACxC,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC9D;AACA,QAAM,QAAQ,QAAQ,SAAS,mBAAmB,QAAQ,MAAM;AAChE,QAAM,QAAQ,MAAM,QAAQ,OAAO,SAAS,MAAM,QAAQ,OAAO,qBAAqB,CAAC;AACvF,MAAI,MAAM,YAAY,KAAK,YAAY,MAAM,aAAa,KAAK,QAAQ,YAAY,KAAK;AACpF,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AACA,MACK,MAAM,QAAQ,OAAO,gBAAgB,KAAK,SAAS,KAAK,QAAQ,OAAQ,KAAK,MAC9E,KAAK,QAAQ,UACf;AACE,UAAM,IAAI,MAAM,sCAAsC;AAAA,EAC1D;AACA,QAAM,UAAU,qBAAqB,MAAM,iBAAiB,KAAK,CAAC;AAClE,OAAK,MAAM,QAAQ,OAAO,SAAS,MAAM,MAAM,GAAG,SAAS,MAAM,MAAM;AACnE,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACrD;AACA,SAAO;AACX;AAGA,eAAsB,uBAClB,OACA,WACA,SACF;AACE,MAAI,CAAC,0BAA0B,KAAK,SAAS,GAAG;AAC5C,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AACA,QAAM,UAAU,MAAM,sBAAsB,OAAO,OAAO;AAC1D,SAAO;AAAA,IACH;AAAA,IACA,MAAM,KAAK,QAAQ;AAAA,IACnB;AAAA,IACA,QAAQ,QAAQ;AAAA,EACpB;AACJ;AAEA,eAAe,uBACX,SACA,OACA,WACA,UACF;AACE,MAAI,CAAC,0BAA0B,KAAK,SAAS,GAAG;AAC5C,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AACA,QAAM,QAAQ,OAAO;AAAA,IACjB,OAAO,QAAQ,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,EAC7E;AACA,MAAI,WAAW;AACf,MAAI;AACA,eACI,gBAAgB,QAAQ,QAAQ,OAAO,QAAQ,SAAS,SAAS,EAAE,YAAY,MAC/E,MAAM,YAAY;AACtB,QAAI,UAAU;AAEV,kBAAY,UAAU,KAAK,SAAS,EAAE;AAAA,IAC1C;AAAA,EACJ,QAAQ;AACJ,eAAW;AAAA,EACf;AACA,QAAM,QAAQ,WACR,MAAM,SAAS,gBAAgB;AAAA,IAC3B,GAAG,gBAAgB,OAAO;AAAA,IAC1B,SAAS;AAAA,IACT;AAAA,EACJ,CAAC,IACD;AACN,MAAI,UAAU,MAAM;AAChB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACnD;AACA,SAAO;AACX;;;AErNA,SAAS,wBAAwB;AAI1B,SAAS,iBAAiB,MAAqB,QAAyB;AAC3E,QAAM,IAAI;AACV,QAAM,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,YAAY,EAAE,QAAQ;AAC1E,QAAM,UAAU,iBAAiB,EAAE,OAAO;AAC1C,SAAO;AAAA,IACH,IAAI,EAAE;AAAA,IACN,MAAM,EAAE;AAAA,IACR;AAAA,IACA,SAAS,EAAE,GAAG,EAAE,QAAQ;AAAA,IACxB,QAAQ,WAAW,CAAC,EAAE;AAAA,IACtB,cAAc;AAAA,MACV,GAAG,EAAE,OAAO,IAAI,CAAC,WAAW;AAAA,QACxB,MAAM;AAAA,QACN,YAAY,MAAM;AAAA,QAClB,QAAQ,MAAM,KAAK;AAAA,QACnB,OAAO,MAAM,KAAK;AAAA,QAClB,QAAQ,MAAM;AAAA,QACd,WAAW,MAAM;AAAA,MACrB,EAAE;AAAA,MACF,IAAI,EAAE,QAAQ,UAAU,CAAC,GAAG,IAAI,CAAC,WAAW;AAAA,QACxC,MAAM;AAAA,QACN,YAAY,MAAM;AAAA,QAClB,QAAQ,MAAM,MAAM,KAAK;AAAA,QACzB,OAAO,MAAM,MAAM,KAAK;AAAA,QACxB,SAAS,MAAM,MAAM,KAAK;AAAA,QAC1B,QAAQ,MAAM,MAAM,KAAK;AAAA,QACzB,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,QACd,WAAW,MAAM;AAAA,MACrB,EAAE;AAAA,IACN;AAAA,IACA,SAAS;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,eAAe,EAAE;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,QAAQ,EAAE,UAAU,QAAQ,OAAO,SAAS;AAAA,IAChD;AAAA,IACA,eAAe,EAAE,QAAQ,QAAQ,IAAI,CAAC,YAAY;AAAA,MAC9C,YAAY,OAAO;AAAA,MACnB,QAAQ,OAAO,MAAM,KAAK;AAAA,MAC1B,QAAQ,OAAO,MAAM,KAAK;AAAA,MAC1B,OAAO,OAAO,MAAM,KAAK;AAAA,MACzB,SAAS,OAAO,MAAM,KAAK;AAAA,MAC3B,aAAa,OAAO,MAAM,KAAK;AAAA,MAC/B,eAAe,OAAO,MAAM,KAAK;AAAA,IACrC,EAAE;AAAA,IACF,SAAS,EAAE,QAAQ,IAAI,CAAC,YAAY;AAAA,MAChC,YAAY,OAAO;AAAA,MACnB,IAAI,OAAO;AAAA,MACX,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,IACnB,EAAE;AAAA,IACF,UAAU,EAAE;AAAA,IACZ,UAAU,EAAE;AAAA,IACZ,cAAc,KAAK;AAAA,IACnB,WAAW,KAAK,aAAa;AAAA,IAC7B,eAAe,EAAE,QAAQ,UAAU;AAAA,IACnC,cAAc,EAAE,QAAQ;AAAA,IACxB,kBACI,EAAE,QAAQ,oBACV,EAAE,QAAQ,MAAM,gBACf,EAAE,QAAQ,SACL,EAAE,OAAO,OAAO,UAAU,EAAE,OAAO,OAAO,aAAa,MACvD,WACN;AAAA,IACJ,mBACI,EAAE,QAAQ,qBAAqB,EAAE,QAAQ,MAAM,WAAW,EAAE,QAAQ,QAAQ;AAAA,IAChF,aAAa;AAAA,MACT,qBAAqB,sBAAsB,CAAC;AAAA,MAC5C,OAAO,EAAE,SAAS;AAAA,MAClB,sBAAsB,EAAE,gBAAgB;AAAA,IAC5C;AAAA,EACJ;AACJ;;;AClEA,SAAS,8BAAwD;AACjE,SAAS,oBAAAC,yBAA8C;;;ACXvD,SAAS,8BAA8B;;;ACFvC,SAAS,aAAAC,kBAA8B;AAEvC,SAAS,qBAAAC,0BAA+C;AACxD,SAAS,6BAAmD;AAE5D,IAAM,eAAeA,mBAAkB;AAAA,EACnC,CAAC,SACG,KAAK,SAAS,cACd,KAAK,SAAS,cACd,KAAK,OAAO,WAAW,KACvB,KAAK,OAAO,CAAC,GAAG,SAAS;AACjC;AAEO,SAAS,4BACZ,OACA,aACO;AACP,QAAM,OAAO,MAAM;AACnB,MACI,KAAK,WAAW,WAAW,oBAC3B,CAAC,KAAK,UACN,CAAC,MAAM,gBACP,YAAY,GAAG,YAAY,MAAM,KAAK,QAAQ,gBAAgB,YAAY,KAC1E,YAAY,UAAU;AAEtB,WAAO;AACX,MAAI;AACA,UAAM,UAAU,IAAID,WAAU,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,KAAK,CAAC,GACnF,WAAY,QAAQ,KAAK,CAAC,EAAe,IAAI,CAAC,YAAY;AACtD,YAAM,SAAS,QAAQ,SAAS,IAAI;AACpC,aAAO,OAAO,UAAU,QAAQ,OAAO,QAAQ;AAAA,QAAI,CAAC,WAChD,OAAO,SAAS,IAAI;AAAA,MACxB;AACA,aAAO,OAAO,aAAa,QAAQ,OAAO,WAAW,QAAQ,IAAI;AACjE,aAAO,OAAO,oBAAoB,QAAQ,OAAO,kBAAkB,QAAQ,IAAI;AAC/E,aAAO,aAAa,QAAQ,WAAW;AAAA,QAAI,CAAC,aACxC,SAAS,SAAS,IAAI;AAAA,MAC1B;AACA,aAAO,QAAQ,OAAO,IAAI,OAAO,OAAO,QAAQ,OAAO,CAAC;AACxD,aAAO;AAAA,QACH,QAAQ,OAAO;AAAA,QACf,YAAY,OAAO;AAAA,QACnB,SAAS,OAAO;AAAA,MACpB;AAAA,IACJ,CAAC;AACL,QACI,QAAQ,SAAS,cACjB,CAAC,MAAM,QAAQ,QAAQ,KACvB,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,SAAS,SAAS,MAAM;AAEpC,aAAO;AACX,UAAME,aAAY,CAAC,YACf,sBAAsB;AAAA,MAClB,SAAS,EAAE,GAAG,KAAK,SAAS,cAAc,QAAQ,OAAO,MAAM;AAAA,MAC/D,OAAO;AAAA,MACP,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,MACpB,SAAS,QAAQ;AAAA,MACjB,QAAQ,YAAY;AAAA,IACxB,CAAC,EAAE,KAAK,YAAY;AACxB,UAAM,WAAW,sBAAsB;AAAA,MACnC,SAAS,KAAK;AAAA,MACd,OAAO;AAAA,MACP,QAAQ,KAAK;AAAA,MACb,YAAY,KAAK,QAAQ,IAAI,CAAC,WAAW,OAAO,QAAQ;AAAA,MACxD,SAAS,KAAK;AAAA,MACd,QAAQ,YAAY;AAAA,IACxB,CAAC,EAAE,KAAK,YAAY;AACpB,WAAO,SAAS,OAAO,CAAC,YAAYA,WAAU,OAAO,MAAM,QAAQ,EAAE,WAAW;AAAA,EACpF,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;;;ACjEA,SAAS,UAAU,OAAwB;AACvC,SAAO,KAAK,UAAU,OAAO,CAAC,GAAG,SAAS;AACtC,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO,CAAC,UAAU,KAAK,SAAS,CAAC;AAAA,IACrC;AACA,QAAI,gBAAgB,YAAY;AAC5B,aAAO,MAAM,KAAK,IAAI;AAAA,IAC1B;AACA,QAAI,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC1D,aAAO,OAAO;AAAA,QACV,OAAO,KAAK,IAAI,EACX,KAAK,EACL,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;AAAA,MACtC;AAAA,IACJ;AACA,WAAO;AAAA,EACX,CAAC;AACL;AAEA,SAAS,oBAAoB,OAAoB,QAA+B;AAC5E,QAAM,SAAS,OAAO;AACtB,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,SAAS,MAAM,QAAQ,OAAO,aAAa,MAAM,OAAO,IAAI;AAClE,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC9E;AAEA,QAAM,WAAW,OAAO;AACxB,QAAM,YAAY,OAAO;AACzB,QAAM,kBAAkB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA,MACI,gBAAgB,KAAK,CAAC,UAAU,SAAS,KAAK,KAAK,MAAM,UAAU,KAAK,KAAK,CAAC,KAC9E,UAAU,SAAS,kBAAkB,MAAM,UAAU,UAAU,kBAAkB,KACjF,UAAU,SAAS,oBAAoB,MAAM,UAAU,UAAU,oBAAoB,GACvF;AACE,UAAM,IAAI,MAAM,uDAAuD;AAAA,EAC3E;AAEA,MAAI,OAAO,SAAS,QAAQ;AACxB,QACI,UAAU,KAAK,UAAU,SAAS,KAAK,UACvC,UAAU,KAAK,WAAW,SAAS,KAAK,QAC1C;AACE,YAAM,IAAI,MAAM,sCAAsC;AAAA,IAC1D;AAAA,EACJ,WACI,OAAO,SAAS,YAChB,UAAU,KAAK,UAAU,SAAS,KAAK,UACvC,UAAU,KAAK,SAAS,SAAS,KAAK,QACxC;AACE,UAAM,IAAI,MAAM,sCAAsC;AAAA,EAC1D;AACA,SAAO;AACX;AAGO,SAAS,sBACZ,UACA,UACI;AACJ,QAAM,OAAO,SAAS;AACtB,QAAM,MAAM,SAAS;AACrB,MAAI,CAAC,QAAQ,SAAS,UAAU,WAAW;AACvC;AAAA,EACJ;AACA,MAAI,OAAO,KAAK,SAAS,IAAI,QAAQ;AACjC;AAAA,EACJ;AACA,MAAI,OAAO,KAAK,WAAW,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM;AAC7D,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACzE;AACA,MAAI,SAAS,UAAU,WAAW,SAAS,UAAU,SAAS;AAC1D,UAAM,IAAI,MAAM,sDAAsD;AAAA,EAC1E;AACA,WAAS,QAAQ,SAAS;AAC1B,WAAS,iBAAiB,EAAE,GAAG,KAAK;AACxC;AAGO,SAAS,oBAAoB,OAAoB,OAA6B;AACjF,MAAI,MAAM,aAAa;AACnB,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACrD;AACA,QAAM,aAAa,EAAE,GAAG,MAAM,WAAW;AACzC,aAAW,UAAU,CAAC,GAAG,MAAM,OAAO,GAAG,MAAM,OAAO,GAAG;AACrD,QAAI,OAAO,cAAc,WAAW,QAAQ;AACxC,YAAM,IAAI,MAAM,sCAAsC;AAAA,IAC1D;AACA,UAAM,aAAa,CAAC,GAAG,OAAO,OAAO,MAAM,KAAK,GAAG,GAAG,OAAO,OAAO,MAAM,OAAO,CAAC,EAAE;AAAA,MAChF,CAAC,aACG,SAAS,WAAW,OAAO,UAAU,SAAS,cAAc,OAAO;AAAA,IAC3E;AACA,QACI,WAAW;AAAA,MACP,CAAC,aACG,SAAS,eAAe,OAAO,cAC/B,SAAS,cAAc,OAAO;AAAA,IACtC,GACF;AACE,YAAM,IAAI,MAAM,6CAA6C;AAAA,IACjE;AACA,QAAI,UAAU,QAAQ;AAClB,YAAM,WAAW,MAAM,MAAM,OAAO,UAAU;AAC9C,UAAI,UAAU;AACV,YAAI,UAAU,SAAS,IAAI,MAAM,UAAU,OAAO,IAAI,GAAG;AACrD,gBAAM,IAAI,MAAM,kCAAkC;AAAA,QACtD;AACA,8BAAsB,UAAU,MAAM;AACtC;AAAA,MACJ;AACA,YAAM,MAAM,OAAO,UAAU,IAAI;AAAA,IACrC,OAAO;AACH,YAAM,MAAM,OAAO,aAAa,MAAM,OAAO;AAC7C,YAAM,WAAW,MAAM,QAAQ,GAAG;AAClC,YAAM,YAAY,oBAAoB,OAAO,MAAM;AACnD,UAAI,UAAU;AACV,YAAI,UAAU,SAAS,MAAM,IAAI,MAAM,UAAU,OAAO,MAAM,IAAI,GAAG;AACjE,gBAAM,IAAI,MAAM,oCAAoC;AAAA,QACxD;AACA,YAAI,UAAU,SAAS,KAAK,MAAM,UAAU,OAAO,KAAK,GAAG;AACvD,cAAI,CAAC,WAAW;AACZ,gBAAI,SAAS,oBAAoB;AAC7B,oCAAsB,UAAU,MAAM;AACtC;AAAA,YACJ;AACA,kBAAM,IAAI,MAAM,oCAAoC;AAAA,UACxD;AACA,mBAAS,QAAQ,OAAO;AACxB,mBAAS,qBAAqB,OAAO;AAAA,QACzC,WAAW,WAAW;AAClB,mBAAS,qBAAqB,OAAO;AAAA,QACzC;AACA,8BAAsB,UAAU,MAAM;AACtC;AAAA,MACJ;AACA,YAAM,QAAQ,GAAG,IAAI;AAAA,IACzB;AAAA,EACJ;AACJ;;;AF9IA,SAASC,OAAM,IAAa,SAA6B;AACrD,MAAI,CAAC,IAAI;AACL,UAAM,IAAI,MAAM,OAAO;AAAA,EAC3B;AACJ;AAEA,eAAe,QACX,SACA,OACA,OACa;AACb,QAAM,cAAc;AAAA,IAChB,MAAM;AAAA,IACN,GAAI,QAAQ,CAAC,EAAE,QAAQ,MAAM,QAAQ,MAAM,MAAM,KAAK,CAAC,IAAI,CAAC;AAAA,EAChE;AACA,aAAW,SAAS,aAAa;AAC7B,QAAI,UAAU,MAAM,QAAQ,OAAO,SAAS,MAAM,MAAM,GAAG,SAAS,MAAM,MAAM;AAC5E,YAAM,QAAQ,MAAM,YAAY,QAAQ,OAAO,CAAC,UAAU;AACtD,cAAM,cAAc;AACpB,mBAAW,UAAU;AAAA,UACjB,GAAG,OAAO,OAAO,MAAM,KAAK;AAAA,UAC5B,GAAG,OAAO,OAAO,MAAM,OAAO;AAAA,QAClC,GAAG;AACC,iBAAO,QAAQ;AAAA,QACnB;AACA,mBAAW,aAAa,OAAO,OAAO,MAAM,UAAU,GAAG;AACrD,cACI,CAAC,UAAU,SAAS,EAAE,SAAS,UAAU,MAAM,KAC/C,CAAE,UAAU,SAAoD,cAClE;AACE;AAAA,UACJ;AACA,oBAAU,SAAS;AACnB,qBAAW,MAAM,UAAU,QAAQ;AAC/B,gBAAI,CAAC,MAAM,aAAa,EAAE,GAAG;AACzB,oBAAM,aAAa,EAAE,IAAI,UAAU;AAAA,YACvC;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,CAAC;AACD,YAAM,IAAI,MAAM,8DAA8D;AAAA,IAClF;AAAA,EACJ;AACJ;AAEA,SAAS,QAAQ,OAAoB,IAAY,YAAoB;AACjE,EAAAA,OAAM,CAAC,MAAM,aAAa,kCAAkC;AAC5D,QAAM,SAAS,MAAM,WAAW,EAAE;AAClC,QAAM,QAAQ,QAAQ;AACtB,EAAAA,OAAM,UAAU,MAAM,eAAe,cAAc,CAAC,MAAM,OAAO,0BAA0B;AAC3F,SAAO,EAAE,QAAQ,MAAM;AAC3B;AAEA,SAAS,QAAQ,OAAoB,OAA6B;AAC9D,MAAI,MAAM,iBAAiB,WAAW,MAAM,QAAQ;AAChD,IAAAA,OAAM,MAAM,gBAAgB,SAAS,MAAM,MAAM,+BAA+B;AAAA,EACpF;AACA,MAAI,CAAC,MAAM,mBAAmB,MAAM,gBAAgB,SAAS,MAAM,QAAQ;AACvE,UAAM,kBAAkB,EAAE,QAAQ,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,EACrE;AACJ;AAEA,eAAsB,iBAClB,SACA,IACA,YACAC,OACA,QACuE;AACvE,QAAM,EAAE,QAAQ,OAAO,OAAO,QAAQ,IAAI;AAC1C,QAAM,QAAQ,MAAM,MAAM,aAAa,KAAK;AAC5C,QAAM,EAAE,MAAM,IAAI,QAAQ,OAAO,IAAI,UAAU;AAC/C,QAAM,OAAO,MAAM;AACnB,QAAM,QAAQ,SAAS,mBAAmB,MAAM;AAChD,QAAM,QAAQ,SAAS,KAAK;AAC5B,QAAM,UAAU,MAAM,OAAO,WAAWA,KAAI;AAC5C,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AACA,EAAAD,OAAM,QAAQ,oBAAoBC,OAAM,uCAAuC;AAC/E,QAAM,QAAQ,SAAS,OAAO,QAAQ,KAAK;AAC3C,QAAM,cAAc,MAAM,OAAO,eAAeA,KAAI;AACpD,EAAAD;AAAA,IACI,eAAe,YAAY,oBAAoBC;AAAA,IAC/C;AAAA,EACJ;AAEA,MAAI;AACJ,MAAI,KAAK,WAAW,WAAW,kBAAkB;AAC7C,qBAAiB,4BAA4B,OAAO,WAAW;AAAA,EACnE,OAAO;AACH,qBACI,CAAC,CAAC,MAAM,QACR,YAAY,GAAG,YAAY,MAAM,MAAM,KAAK,GAAG,YAAY,KAC3D,YAAY,UAAU,MAAM,KAAK,SACjC,YAAY,KAAK,YAAY,MAAM,MAAM,KAAK,KAAK,YAAY;AAAA,EACvE;AACA,EAAAD,OAAM,gBAAgB,yDAAyD;AAE/E,EAAAA;AAAA,IACI,QAAQ,WAAW,aAAa,QAAQ,WAAW;AAAA,IACnD;AAAA,EACJ;AAEA,MAAI,QAAQ,WAAW,YAAY;AAC/B,WAAO;AAAA,EACX;AACA,QAAM,aAAa;AAAA,IACf,iBAAiB,SAAS,KAAK,QAAQ,eAAe;AAAA,IACtD,KAAK;AAAA,IACL,QAAQ,MAAM;AAAA,EAClB;AACA,QAAM,SAAS,MAAM,OAAO,qBAAqB;AACjD,QAAM,SAAS,CAAC,QAAQ,QAAQ,MAAM,QAAQ,MAAM,iBAAiB,UAAU,EAAE,EAAE;AAAA,IAC/E,CAAC,GAAG,MAAO,IAAI,IAAI,IAAI;AAAA,EAC3B;AACA,QAAM,aAAa,MAAM,OAAO,SAAS,MAAM;AAC/C,EAAAA,OAAM,WAAW,WAAW,QAAQ,sCAAsC;AAC1E,QAAM,QAAsB,CAAC;AAC7B,aAAW,UAAU,KAAK,SAAS;AAC/B,UAAM,YAAY,WAAW;AAAA,MACzB,CAAC,UAAU,MAAM,SAAS,WAAW,MAAM,eAAe,OAAO;AAAA,IACrE;AACA,IAAAA,OAAM,WAAW,oDAAoD;AACrE,QAAI,CAAC,OAAO,QAAQ,OAAO,KAAK,iBAAiB,MAAM,cAAc;AACjE;AAAA,IACJ;AACA,UAAM,QAAQ;AAAA,MACV,QAAQ,UAAU;AAAA,MAClB,WAAW,UAAU;AAAA,MACrB,YAAY,UAAU;AAAA,IAC1B;AACA,IAAAA,OAAM,QAAQ,aAAa,yDAAyD;AACpF,UAAM,QAAQ,MAAM,QAAQ,YAAa,cAAc,KAAK,SAAS,OAAO,QAAQ,KAAK;AACzF,UAAM,iBAAiB,QAAQ,KAAK,SAAS,QAAQ,OAAO,OAAO,KAAK;AACxE,UAAM,KAAK;AAAA,MACP,GAAG;AAAA,MACH,MAAM,gBAAgB,OAAO,IAAI;AAAA,MACjC,aAAa,QAAQ,MAAM;AAAA,MAC3B,WAAW,QAAQ,MAAM;AAAA,MACzB,iBAAiBC;AAAA,MACjB,OAAO;AAAA,IACX,CAAC;AAAA,EACL;AACA,QAAM,UAA0B,CAAC;AACjC,aAAW,UAAU,KAAK,QAAQ,WAAW,CAAC,GAAG;AAC7C,UAAM,IAAI,OAAO,MAAM;AACvB,eAAW,QAAQ,CAAC,SAAS,SAAS,GAAY;AAC9C,WACK,SAAS,UAAU,EAAE,sBAAsB,EAAE,2BAC9C,MAAM,cACR;AACE;AAAA,MACJ;AACA,YAAM,YAAY,WAAW;AAAA,QACzB,CAAC,UAAU,MAAM,SAAS,QAAQ,MAAM,eAAe,OAAO;AAAA,MAClE;AACA,MAAAD,OAAM,WAAW,2DAA2D;AAC5E,YAAM,QAAQ;AAAA,QACV,QAAQ,UAAU;AAAA,QAClB,WAAW,UAAU;AAAA,QACrB,YAAY,UAAU;AAAA,MAC1B;AACA,MAAAA,OAAM,QAAQ,aAAa,mDAAmD;AAC9E,YAAM,QAAQ,MAAM,QAAQ,YAAa;AAAA,QACrC,KAAK;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,MACZ;AACA,YAAM,iBAAiB,QAAQ,KAAK,SAAS,QAAQ,OAAO,OAAO,KAAK;AACxE,YAAME,SAAQ,KAAK,QAAQ,MAAM,qBAAqB,QAAQ,OAAO,UAAU;AAC/E,YAAM,SAAS,KAAK,QAAQ,QACtB,KAAK,OAAO,OAAO,CAAC,IACpBA,WAAU,UAAaA,UAAS,IAC9B,KAAK,QAAQ,OAAOA,MAAK,IACzB;AACR,YAAM,qBACF,UAAU,MAAM,QAAQ,OAAO,aAAa,MAAM,IAAI,IAChD;AAAA,QACI,MAAM,KAAK,QAAQ,QAAS,WAAsB;AAAA,QAClD,YAAY,OAAO;AAAA,MACvB,IACA;AACV,cAAQ,KAAK;AAAA,QACT,GAAG;AAAA,QACH,OAAO,gBAAgB,OAAO,KAAK;AAAA,QACnC;AAAA,QACA,aAAa,QAAQ,MAAM;AAAA,QAC3B,WAAW,QAAQ,MAAM;AAAA,QACzB,iBAAiBD;AAAA,QACjB,OAAO;AAAA,QACP,GAAI,qBAAqB,EAAE,mBAAmB,IAAI,CAAC;AAAA,MACvD,CAAC;AAAA,IACL;AAAA,EACJ;AACA,MAAI,QAAQ,QAAQ;AAChB,UAAM,aAAa,MAAM,QAAQ;AAAA,MAC7B,QAAQ;AAAA,QAAI,OAAO,WACf;AAAA,UACI,KAAK,QAAQ;AAAA,UACb,OAAO,MAAM,KAAK;AAAA,UAClB,MAAM,WAAW,OAAO,KAAK;AAAA,QACjC;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,SAAS,MAAM,OAAO,QAAQ,KAAK,SAAS,YAAY,UAAU;AACxE,IAAAD;AAAA,MACI,OAAO,WAAW,QAAQ,UAAU,OAAO,MAAM,CAAC,UAAU,OAAO,UAAU,SAAS;AAAA,MACtF;AAAA,IACJ;AACA,YAAQ,QAAQ,CAAC,QAAQ,MAAM;AAC3B,aAAO,QAAQ,OAAO,CAAC,IAAI,UAAU;AACrC,aAAO,iBAAiB,EAAE,QAAQ,WAAW,QAAQ,MAAM,WAAW,KAAK;AAAA,IAC/E,CAAC;AAAA,EACL;AACA,QAAM,QAAQ,WAAW,IAAI;AAC7B,QAAM,MAAM,MAAM,IAAI,CAAC,UAAU,MAAM,SAAS;AAChD,QAAM,QAAQ,IAAI,SAAS,MAAM,OAAO,QAAQ,KAAK,SAAS,KAAK,UAAU,IAAI,CAAC;AAClF,EAAAA;AAAA,IACI,MAAM,WAAW,IAAI,UAAU,MAAM,MAAM,CAAC,UAAU,UAAU,IAAI;AAAA,IACpE;AAAA,EACJ;AAEA,QAAM,YAAY,QAAQ,OAAO,gBAAgB;AACjD,MAAI,MAAM,QAAQ;AACd,UAAM,SAAS,MAAM,OAAO;AAAA,MACxB,KAAK;AAAA,MACL,MAAM,QAAQ;AAAA,QACV,MAAM;AAAA,UAAI,CAAC,SACP,UAAW,QAAQ,KAAK,QAAQ,SAAS,KAAK,YAAY,KAAK,KAAK,KAAK;AAAA,QAC7E;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AACA,IAAAA;AAAA,MACI,OAAO,WAAW,MAAM,UAAU,OAAO,MAAM,CAAC,UAAU,OAAO,UAAU,SAAS;AAAA,MACpF;AAAA,IACJ;AACA,UAAM,QAAQ,CAAC,MAAM,MAAM;AACvB,WAAK,QAAQ,OAAO,CAAC,IAAI,UAAU;AACnC,WAAK,iBAAiB,EAAE,QAAQ,WAAW,QAAQ,MAAM,WAAW,KAAK;AAAA,IAC7E,CAAC;AAAA,EACL;AACA,UAAQ,eAAe;AACvB,QAAM,QAAQ,SAAS,OAAO,QAAQ,KAAK;AAC3C,QAAM,QAAQ,SAAS,OAAO,UAAU;AACxC,SAAO,MAAM,YAAY,OAAO,CAAC,UAAU;AACvC,YAAQ,eAAe;AACvB,UAAM,EAAE,QAAQ,OAAO,OAAO,IAAI,QAAQ,OAAO,IAAI,UAAU;AAC/D,eAAW,SAAS,CAAC,MAAM,eAAe,GAAG;AACzC,MAAAA;AAAA,QACI,CAAC,SACG,MAAM,SAAS,WAAW,UACzB,MAAM,WAAW,WAAW,UAAU,MAAM,SAAS,WAAW;AAAA,QACrE;AAAA,MACJ;AAAA,IACJ;AACA,wBAAoB,OAAO;AAAA,MACvB;AAAA,MACA;AAAA,MACA,YAAY,EAAE,QAAQ,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK;AAAA,IACzE,CAAC;AACD,eAAW,QAAQ,OAAO;AACtB,YAAM,QAAQ,MAAM,KAAK,IAAI,EAAE,KAAK,GAAG;AACvC,UAAI,OAAO;AACP,8BAAsB,OAAO;AAAA,UACzB,OAAO;AAAA,UACP,gBAAgB,EAAE,QAAQ,WAAW,QAAQ,MAAM,WAAW,KAAK;AAAA,QACvE,CAAC;AAAA,MACL;AACA,UAAI,KAAK,SAAS,aAAa,OAAO;AAClC,mBAAW,SAAS,OAAO,OAAO,MAAM,OAAO,GAAG;AAC9C,cAAI,MAAM,eAAe,MAAM,YAAY;AACvC,kCAAsB,OAAO;AAAA,cACzB,OAAO;AAAA,cACP,gBAAgB,EAAE,QAAQ,WAAW,QAAQ,MAAM,WAAW,KAAK;AAAA,YACvE,CAAC;AAAA,UACL;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,MAAM,aAAa,KAAK,cAAc,MAAM,IAAI;AAChD,eAAO,MAAM,aAAa,KAAK,cAAc;AAAA,MACjD;AAAA,IACJ;AACA,YAAQ,OAAO,UAAU;AACzB,WAAO,SAAS;AAChB,WAAO,kBAAkBC;AACzB,WAAO;AACP,WAAO,EAAE,QAAQ,OAAO,QAAQ,OAAO,gBAAgB,MAAM,EAAE;AAAA,EACnE,CAAC;AACL;AAEA,eAAsB,mBAClB,SACA,IACA,YACA,QAC2D;AAC3D,QAAM,EAAE,QAAQ,OAAO,OAAO,QAAQ,IAAI;AAC1C,QAAM,QAAQ,MAAM,MAAM,aAAa,KAAK;AAC5C,QAAM,EAAE,QAAQ,MAAM,IAAI,QAAQ,OAAO,IAAI,UAAU;AACvD,QAAM,OAAO,MAAM;AACnB,QAAM,QAAQ,SAAS,mBAAmB,MAAM;AAChD,QAAM,QAAQ,SAAS,KAAK;AAC5B,QAAM,QAAQ,MAAM,OAAO,SAAS,MAAM,OAAO,qBAAqB,CAAC;AACvE,QAAM,QAAQ,WAAW,IAAI;AAC7B,QAAM,MAAM,MAAM,IAAI,CAAC,UAAU,MAAM,SAAS;AAChD,QAAM,QAAQ,IAAI,SAAS,MAAM,OAAO,QAAQ,KAAK,SAAS,KAAK,KAAK,IAAI,CAAC;AAC7E,EAAAD;AAAA,IACI,MAAM,WAAW,IAAI,UAAU,MAAM,MAAM,CAAC,UAAU,OAAO,UAAU,SAAS;AAAA,IAChF;AAAA,EACJ;AACA,QAAM,UAAU,iBAAiB,MAAM,MAAM,SAAS;AAEtD,QAAM,aAAa,MAAM,KAAK,CAAC,UAAU,KAAK;AAC9C,UAAQ,eAAe;AACvB,QAAM,QAAQ,SAAS,OAAO,KAAK;AACnC,SAAO,MAAM,YAAY,OAAO,CAAC,UAAU;AACvC,YAAQ,eAAe;AACvB,UAAM,EAAE,QAAQ,QAAQ,OAAO,KAAK,IAAI,QAAQ,OAAO,IAAI,UAAU;AACrE,eAAW,SAAS;AAAA,MAChB,MAAM;AAAA,MACN,GAAG,MAAM,IAAI,CAAC,SAAS,MAAM,KAAK,IAAI,EAAE,KAAK,GAAG,GAAG,cAAc;AAAA,IACrE,GAAG;AACC,MAAAA;AAAA,QACI,CAAC,SACG,MAAM,SAAS,MAAM,UACpB,MAAM,WAAW,MAAM,UAAU,MAAM,SAAS,MAAM;AAAA,QAC3D;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,WAAW,YAAY;AACvB,aAAO,SAAS,UAAU,YAAY;AACtC,YAAM,QAAQ,CAAC,MAAM,MAAM;AACvB,cAAM,QAAQ,MAAM,KAAK,IAAI,EAAE,KAAK,GAAG;AACvC,YAAI,OAAO;AACP,gCAAsB,OAAO;AAAA,YACzB,OAAO,MAAM,CAAC,IAAI,UAAU;AAAA,YAC5B,gBAAgB,EAAE,QAAQ,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,UAC7D,CAAC;AACD,cAAI,KAAK,SAAS,WAAW;AACzB,uBAAW,SAAS,OAAO,OAAO,MAAM,OAAO,GAAG;AAC9C,kBAAI,MAAM,eAAe,MAAM,YAAY;AACvC,sCAAsB,OAAO;AAAA,kBACzB,OAAO,MAAM,CAAC,IAAI,UAAU;AAAA,kBAC5B,gBAAgB,EAAE,QAAQ,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,gBAC7D,CAAC;AAAA,cACL;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,MAAM,aAAa,KAAK,cAAc,MAAM,IAAI;AAChD,iBAAO,MAAM,aAAa,KAAK,cAAc;AAAA,QACjD;AAAA,MACJ,CAAC;AACD,cAAQ,OAAO,KAAK;AAAA,IACxB,WAAW,KAAK,gBAAgB,OAAO,WAAW,WAAW;AACzD,aAAO,SAAS;AAAA,IACpB;AACA,SAAK;AACL,WAAO,EAAE,QAAQ,OAAO,QAAQ,OAAO,gBAAgB,IAAI,EAAE;AAAA,EACjE,CAAC;AACL;;;ADlVA,SAASG,OAAM,IAAa,SAA6B;AACrD,MAAI,CAAC,IAAI;AACL,UAAM,IAAI,MAAM,OAAO;AAAA,EAC3B;AACJ;AAGO,IAAM,YAAN,MAAM,WAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAED,YACJ,SACA,OACA,QACA,eACF;AACE,SAAK,WAAW;AAChB,SAAK,SAAS,gBAAgB,KAAK;AACnC,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,WAAO,OAAO,IAAI;AAAA,EACtB;AAAA,EAEA,aAAa,QAAQ,SAA2B,MAAyC;AACrF,UAAM,QAAwB,EAAE,MAAM,gBAAgB,IAAI,GAAG,YAAY,EAAE;AAC3E,UAAM,QAAQ,MAAM,YAAY,QAAQ,OAAO,CAAC,UAAU;AACtD,MAAAA,OAAM,CAAC,MAAM,aAAa,wCAAwC;AAClE,MAAAA,OAAM,CAAC,MAAM,WAAW,KAAK,EAAE,GAAG,0BAA0B;AAC5D,YAAM,QAAQ,WAAW,IAAI;AAC7B,iBAAW,SAAS,OAAO;AACvB,cAAM,SAAS,MAAM,MAAM,IAAI,EAAE,MAAM,GAAG;AAC1C,QAAAA;AAAA,UACI,UACI,OAAO,UAAU,aACjB,CAAC,MAAM,aAAa,MAAM,cAAc;AAAA,UAC5C;AAAA,QACJ;AAAA,MACJ;AACA,YAAM,WAAW,KAAK,EAAE,IAAI;AAAA,QACxB,IAAI,KAAK;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ,MAAM,IAAI,CAAC,UAAU,MAAM,cAAc;AAAA,QACjD,UAAU,KAAK;AAAA,QACf,SAAS;AAAA,MACb;AACA,iBAAW,SAAS,OAAO;AACvB,cAAM,aAAa,MAAM,cAAc,IAAI,KAAK;AAAA,MACpD;AAAA,IACJ,CAAC;AACD,WAAO,IAAI,WAAU,SAAS,OAAO,UAAU;AAAA,EACnD;AAAA,EAEA,aAAa,OAAO,SAA2B,IAAgC;AAC3E,UAAM,SAAS,MAAM,QAAQ,MAAM,YAAY,QAAQ,OAAO,CAAC,UAAU;AACrE,YAAM,SAAS,MAAM,WAAW,EAAE;AAClC,MAAAA,OAAM,QAAQ,mBAAmB;AACjC,YAAM,QAAQ,OAAO;AACrB,MAAAA;AAAA,QACI,OAAO,MAAM,YAAY,KACrB,MAAM,KAAK,OAAO,MAClB,OAAO,cAAc,MAAM,UAAU,KACrC,MAAM,cAAc,KACpB,MAAM,aAAa,OAAO;AAAA,QAC9B;AAAA,MACJ;AACA,YAAM,UAAU,QAAQ,QAAQ,SAAS;AACzC,YAAM,SAAS,MAAM,KAAK;AAC1B,MAAAA;AAAA,QACI,SAAS,MAAM,KAAK,KAAK,MAAM,SAAS,QAAQ,KAAK,KACjD,OAAO,YAAY,QAAQ,WAC3B,OAAO,gBAAgB,YAAY,MAC/B,QAAQ,gBAAgB,YAAY,KACxC,OAAO,aAAa,YAAY,MAAM,QAAQ,aAAa,YAAY;AAAA,QAC3E;AAAA,MACJ;AACA,UAAI,MAAM,KAAK,SAAS,UAAU;AAC9B,kBAAU,MAAM,IAAI;AAAA,MACxB;AACA,UAAI,MAAM,OAAO;AACb,sBAAc,MAAM,OAAO,MAAM,KAAK,SAAU;AAAA,MACpD;AAEA,YAAM;AACN,aAAO,MAAM;AACb,aAAO,IAAI,WAAU,SAAS,OAAO,OAAO,MAAM;AAAA,IACtD,CAAC;AACD,QAAI,OAAO,OAAO,MAAM;AACpB,YAAM,WAAW,MAAM,OAAO,OAAO,OAAO,MAAM;AAClD,MAAAA;AAAA,QACI,SAAS,OAAO,OAAO,OAAO,KAAK,MAC/B,SAAS,UAAU,OAAO,OAAO,KAAK,SACtC,SAAS,SAAS,OAAO,OAAO,KAAK;AAAA,QACzC;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA,EAGA,MAAM,0BAA0B;AAC5B,IAAAA;AAAA,MACI,CAAC,YAAY,YAAY,EAAE,SAAS,KAAK,MAAM;AAAA,MAC/C;AAAA,IACJ;AACA,WAAO,wBAAwB,KAAK,OAAO,IAAI;AAAA,EACnD;AAAA,EACA,mBAAmB;AACf,WAAO,KAAK,OAAO,mBACb,gBAAgB,KAAK,OAAO,gBAAgB,IAC5C;AAAA,EACV;AAAA,EACA,MAAM,gBACF,QACA,SACkB;AAClB,IAAAA,OAAM,KAAK,WAAW,YAAY,wCAAwC;AAC1E,UAAM,EAAE,eAAe,uBAAuB,IAC1C,MAAM,OAAO,uCAA4B;AAC7C,UAAM,UAAU,KAAK;AACrB,UAAM,YAAY,CAAC,WACf;AAAA,MACI;AAAA,QACI,SAAS,QAAQ;AAAA,QACjB,OAAO,QAAQ;AAAA,QACf,QAAQ,QAAQ;AAAA,QAChB,eAAe,YAAY;AACvB,gBAAM,QAAQ,MAAM,QAAQ,MAAM,aAAa,QAAQ,KAAK;AAC5D,qBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,YAAY;AACxD,gBAAI,UAAU,KAAK,GAAI,QAAO,MAAM,aAAa,GAAG;AACxD,iBAAO;AAAA,QACX;AAAA,QACA,UAAU,OAAO,SAAS;AAAA,MAC9B;AAAA,MACA;AAAA,IACJ;AACJ,UAAM,WAAW,MAAM,uBAAuB,KAAK,OAAO,MAAM,WAAW,QAAQ,OAAO;AAC1F,UAAM,QAAQ,MAAM,QAAQ,MAAM,YAAY,QAAQ,OAAO,CAAC,UAAU;AACpE,YAAM,SAAS,MAAM,WAAW,KAAK,EAAE;AACvC,YAAM,MAAM,QAAQ;AACpB,MAAAA;AAAA,QACI,QAAQ,WAAW,cACf,KAAK,eAAe,KAAK,OAAO,cAChC,CAAC,IAAI,SACL,CAAC,IAAI;AAAA,QACT;AAAA,MACJ;AACA,MAAAA,OAAM,CAAC,MAAM,aAAa,wCAAwC;AAClE,YAAM,WAAW,EAAE,GAAG,SAAS,MAAM,IAAI,KAAK,GAAG;AACjD,YAAM,QAAQ,WAAW,QAAQ;AACjC,iBAAW,QAAQ;AACf,QAAAA;AAAA,UACI,MAAM,KAAK,IAAI,EAAE,KAAK,GAAG,GAAG,UAAU,cACjC,CAAC,MAAM,aAAa,KAAK,cAAc,KACpC,MAAM,aAAa,KAAK,cAAc,MAAM,KAAK;AAAA,UACzD;AAAA,QACJ;AACJ,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,YAAY;AACxD,YAAI,UAAU,KAAK,GAAI,QAAO,MAAM,aAAa,GAAG;AACxD,iBAAW,QAAQ,MAAO,OAAM,aAAa,KAAK,cAAc,IAAI,KAAK;AACzE,YAAM,OAAuB;AAAA,QACzB,MAAM;AAAA,QACN,kBAAkB,SAAS;AAAA,QAC3B,YAAY,IAAI,aAAa;AAAA,MACjC;AACA,aAAO,UAAU;AACjB,aAAO,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc;AACvD,aAAO,WAAW,SAAS;AAC3B,aAAO,gBAAgB,IAAI;AAAA,IAC/B,CAAC;AACD,WAAO,IAAI,WAAU,SAAS,OAAO,UAAU;AAAA,EACnD;AAAA,EACA,IAAI,KAAa;AACb,WAAO,KAAK,OAAO,KAAK;AAAA,EAC5B;AAAA,EAEA,IAAI,OAA8B;AAC9B,WAAO,KAAK,OAAO,KAAK;AAAA,EAC5B;AAAA,EAEA,cAAc;AACV,WAAO;AAAA,MACH,KAAK,OAAO;AAAA,MACZ,KAAK,SAAS,QAAQ;AAAA,MACtB,KAAK,SAAS,QAAQ;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,UAAU;AACN,WAAO,iBAAiB,KAAK,OAAO,MAAM,KAAK,MAAM;AAAA,EACzD;AAAA,EAEQ,QAAQ,QAAqD;AACjE,IAAAA,OAAM,QAAQ,mBAAmB;AACjC,UAAM,QAAQ,OAAO;AACrB,IAAAA;AAAA,MACI,MAAM,eAAe,KAAK,OAAO,cAAc,CAAC,MAAM;AAAA,MACtD;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAc,MACV,OACA,SACA,MAGA,QACkB;AAClB,YAAQ,eAAe;AACvB,UAAM,EAAE,OAAO,MAAM,IAAI,KAAK;AAC9B,UAAM,QAAQ,OAAO,WAAW;AAChC,UAAM,QAAQ,MAAM,MAAM,YAAY,OAAO,CAAC,UAAU;AACpD,MAAAA,OAAM,CAAC,MAAM,aAAa,kCAAkC;AAC5D,YAAM,SAAS,MAAM,WAAW,KAAK,EAAE;AACvC,YAAMC,WAAU,KAAK,QAAQ,MAAM;AACnC,MAAAD,OAAM,QAAQ,SAAS,OAAQ,MAAM,GAAG,+BAA+B,KAAK,EAAE;AAC9E,MAAAC,SAAQ;AACR,MAAAA,SAAQ,QAAQ,EAAE,OAAO,MAAM;AAC/B,aAAO,gBAAgBA,QAAO;AAAA,IAClC,CAAC;AACD,QAAI;AACA,YAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,cAAQ,eAAe;AACvB,YAAM,MAAM,YAAY,OAAO,CAAC,UAAU;AACtC,QAAAD,OAAM,CAAC,MAAM,aAAa,qCAAqC;AAC/D,cAAM,SAAS,MAAM,WAAW,KAAK,EAAE;AACvC,cAAMC,WAAU,QAAQ;AACxB,QAAAD;AAAA,UACI,UACIC,UAAS,eAAe,MAAM,cAC9BA,SAAQ,OAAO,UAAU,SACzB,QAAQ,SAAS,OAAO,MAAM;AAAA,UAClC;AAAA,QACJ;AACA,eAAO,MAAM;AACb,eAAO,SAAS,KAAK;AACrB,eAAO,UAAU,gBAAgB,KAAK;AAAA,MAC1C,CAAC;AACD,aAAO,IAAI;AAAA,QACP,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,QACL,KAAK,iBAAiB,KAAK;AAAA,MAC/B;AAAA,IACJ,SAAS,OAAO;AACZ,YAAM,MAAM,YAAY,OAAO,CAAC,UAAU;AACtC,cAAMA,WAAU,MAAM,WAAW,KAAK,EAAE,GAAG;AAC3C,YAAIA,UAAS,OAAO,UAAU,OAAO;AACjC,iBAAOA,SAAQ;AAAA,QACnB;AAAA,MACJ,CAAC;AACD,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAc,iBAAgC;AAC1C,UAAM,KAAK,SAAS,MAAM,YAAY,KAAK,SAAS,OAAO,CAAC,UAAU;AAClE,MAAAD,OAAM,CAAC,MAAM,aAAa,wCAAwC;AAClE,WAAK,QAAQ,MAAM,WAAW,KAAK,EAAE,CAAC;AAAA,IAC1C,CAAC;AAAA,EACL;AAAA;AAAA,EAGA,MAAM,0BAA0B,UAAoC,CAAC,GAAG;AACpE,YAAQ,QAAQ,eAAe;AAC/B,UAAM,KAAK,eAAe;AAC1B,IAAAA;AAAA,MACI,sBAAsB,KAAK,OAAO,IAAI;AAAA,MACtC;AAAA,IACJ;AACA,IAAAA;AAAA,MACI,CAAC,YAAY,YAAY,EAAE,SAAS,KAAK,MAAM;AAAA,MAC/C;AAAA,IACJ;AACA,WAAO,qBAAqB,KAAK,OAAO,IAAI;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,oBACF,WACA,UAAoC,CAAC,GACnB;AAClB,YAAQ,QAAQ,eAAe;AAC/B,UAAM,KAAK,eAAe;AAC1B,IAAAA;AAAA,MACI,sBAAsB,KAAK,OAAO,IAAI;AAAA,MACtC;AAAA,IACJ;AACA,IAAAA;AAAA,MACI,CAAC,YAAY,YAAY,EAAE,SAAS,KAAK,MAAM;AAAA,MAC/C;AAAA,IACJ;AACA,UAAM,gBAAgB,MAAM,sBAAsB,KAAK,OAAO,MAAM,SAAS;AAC7E,WAAO,KAAK;AAAA,MACR;AAAA,MACA,CAAC,YAAY,YAAY;AAAA,MACzB,aAAa,EAAE,QAAQ,cAAc,cAAc;AAAA,MACnD,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA;AAAA,EAGA,MAAM,2BAA2B,UAAoC,CAAC,GAAG;AACrE,YAAQ,QAAQ,eAAe;AAC/B,UAAM,KAAK,eAAe;AAC1B,IAAAA;AAAA,MACI,KAAK,YAAY,KAAK,SAAS,WAAW,aAAa;AAAA,MACvD;AAAA,IACJ;AACA,UAAM,UAAU,MAAM,sBAAsB,KAAK,QAAQ,KAAK,QAAQ;AACtE,YAAQ,QAAQ,eAAe;AAC/B,UAAM,KAAK,eAAe;AAC1B,WAAO;AAAA,EACX;AAAA;AAAA,EAGA,MAAM,qBACF,WACA,UAAoC,CAAC,GACnB;AAClB,YAAQ,QAAQ,eAAe;AAC/B,UAAM,KAAK,eAAe;AAC1B,IAAAA;AAAA,MACI,KAAK,YAAY,KAAK,SAAS,WAAW,aAAa;AAAA,MACvD;AAAA,IACJ;AACA,UAAM,WAAW,MAAM,uBAAuB,KAAK,QAAQ,WAAW,KAAK,QAAQ;AACnF,WAAO,KAAK;AAAA,MACR;AAAA,MACA,KAAK,SAAS,WAAW,CAAC,UAAU,IAAI,CAAC,QAAQ;AAAA,MACjD,OAAO,UAAU;AACb,cAAM,KAAK,QAAQ,YAAY;AAC/B,YAAI,MAAM,KAAK,WAAW,WAAW,kBAAkB;AACnD,gBAAM,OAAO,MAAM,KAAK,OAAO,KAAK;AAAA,QACxC;AACA,eAAO,EAAE,QAAQ,QAAQ;AAAA,MAC7B;AAAA,MACA,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA,EAEA,MAAM,UAAU,UAAoC,CAAC,GAAuB;AACxE,IAAAA;AAAA,MACI,sBAAsB,KAAK,OAAO,IAAI;AAAA,MACtC;AAAA,IACJ;AACA,UAAM,WAAW,KAAK,SAAS,cAAc;AAC7C,IAAAA;AAAA,MACI,SAAS,iBAAiB,KAAK,SAAS,MAAM;AAAA,MAC9C;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,MACR;AAAA,MACA,CAAC,YAAY,YAAY;AAAA,MACzB,OAAO,UAAU;AACb,cAAM,gBAAgB,MAAM,mBAAmB,MAAM,MAAM,QAAQ;AACnE,eAAO,EAAE,QAAQ,cAAc,cAAc;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA,EAEA,MAAM,MAAM,kBAA2C,CAAC,GAAuB;AAC3E,UAAM,UAAU,EAAE,GAAG,gBAAgB;AACrC,IAAAA;AAAA,MACI,CAAC,KAAK,OAAO,oBAAoB,QAAQ,cAAc;AAAA,MACvD;AAAA,IACJ;AACA,UAAM,OAAO,KAAK,OAAO;AACzB,IAAAA,OAAM,KAAK,SAAS,UAAU,0BAA0B;AACxD,QAAI,sBAAsB,IAAI,GAAG;AAC7B,MAAAA;AAAA,QACI,KAAK;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,SAAS,KAAK,SAAS,QAAQ;AACrC,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,uBAAuB,QAAQ;AAAA,IAC7C;AACA,WAAO,KAAK;AAAA,MACR;AAAA,MACA,sBAAsB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU;AAAA,MAC1D,OAAO,UAAU;AACb,cAAM,IAAI,MAAM;AAChB,cAAM,QAAQ,MAAM;AAAA,UAChB,KAAK,SAAS,QAAQ;AAAA,UACtB;AAAA,UACA,KAAK;AAAA,UACL;AAAA,UACA;AAAA,QACJ;AACA,YAAI,EAAE,gBAAgB,aAAa;AAC/B,iBAAO,EAAE,QAAQ,SAAS;AAAA,QAC9B;AACA,YAAI,EAAE,WAAW,WAAW,kBAAkB;AAC1C,gBAAM,OAAO,MAAM,KAAK,OAAO,KAAK;AAAA,QACxC;AACA,eAAO,EAAE,QAAQ,QAAQ;AAAA,MAC7B;AAAA,MACA,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA,EAEQ,OAAO,OAAiD;AAC5D,WAAO,gBAAgB,KAAK;AAAA,EAChC;AAAA,EAEA,MAAM,iBAAiB,UAAoC,CAAC,GAAuB;AAC/E,UAAM,IAAI,KAAK,OAAO;AACtB,IAAAA,OAAM,EAAE,gBAAgB,aAAa,gDAAgD;AACrF,IAAAA,OAAM,EAAE,SAAS,YAAY,KAAK,OAAO,OAAO,0CAA0C;AAC1F,UAAM,SAAS,KAAK,SAAS,QAAQ;AACrC,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,uBAAuB,oBAAoB;AAAA,IACzD;AACA,IAAAA;AAAA,MACI,OAAO,QAAQ,YAAY,MAAM,EAAE,QAAQ,MAAO,YAAY;AAAA,MAC9D;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,MACR;AAAA,MACA,EAAE,SAAS,WAAW,CAAC,UAAU,IAAI,CAAC,QAAQ;AAAA,MAC9C,OAAO,UAAU;AACb,cAAM,KAAK,QAAQ,YAAY,MAAM;AAAA,UACjC;AAAA,UACA;AAAA,UACA,KAAK,SAAS,QAAQ;AAAA,QAC1B;AACA,YAAI,MAAM,KAAK,WAAW,WAAW,kBAAkB;AACnD,gBAAM,OAAO,MAAM,KAAK,OAAO,KAAK;AAAA,QACxC;AACA,eAAO,EAAE,QAAQ,QAAQ;AAAA,MAC7B;AAAA,MACA,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA;AAAA,EAGA,MAAM,QAA4B;AAC9B,IAAAA;AAAA,MACI,KAAK,SAAS,YAAY,KAAK,OAAO,KAAK,gBAAgB;AAAA,MAC3D;AAAA,IACJ;AACA,WAAO,KAAK,MAAM,YAAY,CAAC,UAAU,GAAG,OAAO,UAAU;AACzD,YAAM,OAAO,MAAM,KAAK,OAAO,KAAK;AACpC,aAAO,EAAE,QAAQ,QAAQ;AAAA,IAC7B,CAAC;AAAA,EACL;AAAA,EAEA,MAAc,eAAe,QAAqC;AAC9D,YAAQ,eAAe;AACvB,UAAM,EAAE,QAAQ,SAAS,eAAe,IAAI,KAAK;AACjD,UAAM,eAAe,SAAS,mBAAmB,MAAM;AACvD,UAAM,OAAO,MAAM,OAAO,SAAS,MAAM,OAAO,qBAAqB,CAAC;AACtE,UAAM,OAAO,KAAK,OAAO;AACzB,IAAAA,OAAM,CAAC,iBAAiB,MAAM,KAAK,SAAS,GAAG,uBAAuB;AACtE,QAAI,KAAK,gBAAgB,aAAa;AAClC,MAAAA,OAAM,KAAK,cAAc,KAAK,QAAQ,YAAY,KAAK,+BAA+B;AACtF,MAAAA;AAAA,QACK,MAAM,OAAO,gBAAgB,KAAK,SAAS,KAAK,QAAQ,OAAQ,IAAI,MACjE,KAAK,QAAQ;AAAA,QACjB;AAAA,MACJ;AAAA,IACJ;AACA,eAAW,UAAU,iBAAiB,IAAI,GAAG;AACzC,MAAAA;AAAA,QACI,MAAM,OAAO,YAAY,KAAK,SAAS,OAAO,QAAQ,OAAO,YAAY,IAAI;AAAA,QAC7E;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,aAAa,WAAW,IAAI,EAAE,IAAI,CAAC,UAAU,MAAM,SAAS;AAClE,QAAI,WAAW,QAAQ;AACnB,YAAM,QAAQ,MAAM,OAAO,QAAQ,KAAK,SAAS,YAAY,IAAI;AACjE,MAAAA;AAAA,QACI,MAAM,WAAW,WAAW,UAAU,MAAM,MAAM,CAAC,UAAU,UAAU,KAAK;AAAA,QAC5E;AAAA,MACJ;AAAA,IACJ;AACA,YAAQ,eAAe;AAAA,EAC3B;AAAA,EAEA,MAAM,kBAAkB,UAAoC,CAAC,GAA6B;AACtF,IAAAA;AAAA,MACI,KAAK,OAAO,KAAK,WAAW,WAAW;AAAA,MACvC;AAAA,IACJ;AACA,UAAM,KAAK,eAAe,QAAQ,MAAM;AACxC,UAAM,SAAS,MAAM,KAAK,SAAS,MAAM,YAAY,KAAK,SAAS,OAAO,CAAC,UAAU;AACjF,cAAQ,QAAQ,eAAe;AAC/B,YAAM,SAAS,MAAM,WAAW,KAAK,EAAE;AACvC,YAAM,QAAQ,KAAK,QAAQ,MAAM;AACjC,MAAAA,OAAM,OAAQ,WAAW,WAAW,MAAM,MAAM,wBAAwB;AACxE,YAAM,eAAe;AACrB,aAAO,gBAAgB,MAAM,IAAI;AAAA,IACrC,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,wBAA2D;AAC7D,WAAO,KAAK,SAAS,MAAM,YAAY,KAAK,SAAS,OAAO,CAAC,UAAU;AACnE,YAAM,SAAS,MAAM,WAAW,KAAK,EAAE;AACvC,YAAM,QAAQ,KAAK,QAAQ,MAAM;AACjC,YAAM,OAAO,MAAM;AACnB,MAAAA;AAAA,QACI,CAAC,SAAS,WAAW,EAAE,SAAS,OAAQ,MAAM,KAC1C,KAAK,UACL,MAAM,SACN,KAAK,WAAW,WAAW,oBAC3B,KAAK,UAAU,gBAAgB;AAAA,QACnC;AAAA,MACJ;AACA,oBAAc,MAAM,OAAO,UAAU,IAAI,CAAC;AAC1C,MAAAA;AAAA,QACI,MAAM,MAAM,SAAS,WAAW,IAAI,MAAM;AAAA,QAC1C;AAAA,MACJ;AACA,YAAM,eAAe;AACrB,aAAO;AAAA,QACH,QAAQ,YAAY,MAAM,KAAK;AAAA,QAC/B,WAAW,gBAAgB,KAAK,SAAS;AAAA,QACzC,SAAS,EAAE,GAAG,KAAK,QAAQ;AAAA,QAC3B,SAAS;AAAA,UACL,QAAQ,gBAAgB,KAAK,MAAM;AAAA,UACnC,YAAY,KAAK,QAAQ,IAAI,CAAC,WAAW,gBAAgB,OAAO,QAAQ,CAAC;AAAA,UACzE,SAASE,kBAAiB,KAAK,OAAO;AAAA,QAC1C;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,UAA8B;AAChC,UAAM,QAAQ,MAAM,KAAK,SAAS,MAAM,YAAY,KAAK,SAAS,OAAO,CAAC,UAAU;AAChF,YAAM,SAAS,MAAM,WAAW,KAAK,EAAE;AACvC,YAAMD,WAAU,KAAK,QAAQ,MAAM;AACnC,MAAAD;AAAA,QACI,CAACC,SAAQ;AAAA,QACT;AAAA,MACJ;AACA,MAAAD;AAAA,QACI,CAAC,CAAC,aAAa,SAAS,EAAE,SAAS,OAAQ,MAAM;AAAA,QACjD;AAAA,MACJ;AACA,iBAAW,MAAM,OAAQ,QAAQ;AAC7B,YAAI,MAAM,aAAa,EAAE,MAAM,KAAK,IAAI;AACpC,iBAAO,MAAM,aAAa,EAAE;AAAA,QAChC;AAAA,MACJ;AACA,aAAQ,SAAS;AACjB,MAAAC,SAAQ;AACR,aAAO,gBAAgBA,QAAO;AAAA,IAClC,CAAC;AACD,WAAO,IAAI,WAAU,KAAK,UAAU,OAAO,QAAQ;AAAA,EACvD;AAAA;AAAA,EAGA,MAAM,iBAAiB,iBAA6C;AAChE,IAAAD,OAAM,sBAAsB,KAAK,eAAe,GAAG,0BAA0B;AAC7E,UAAM,QAAQ,MAAM,KAAK,SAAS,MAAM,YAAY,KAAK,SAAS,OAAO,CAAC,UAAU;AAChF,MAAAA,OAAM,CAAC,MAAM,aAAa,kCAAkC;AAC5D,YAAM,SAAS,MAAM,WAAW,KAAK,EAAE;AACvC,YAAMC,WAAU,KAAK,QAAQ,MAAM;AACnC,MAAAD;AAAA,QACI,CAAC,SAAS,aAAa,WAAW,EAAE,SAAS,OAAQ,MAAM;AAAA,QAC3D;AAAA,MACJ;AACA,MAAAA;AAAA,QACIC,SAAQ;AAAA,QACR;AAAA,MACJ;AACA,iBAAW,SAAS,OAAQ,QAAQ;AAChC,QAAAD,OAAM,MAAM,aAAa,KAAK,MAAM,KAAK,IAAI,kCAAkC;AAAA,MACnF;AACA,MAAAC,SAAQ;AACR,MAAAA,SAAQ,eAAe;AACvB,aAAQ,kBAAkB;AAE1B,aAAQ,SAAS;AACjB,aAAO,gBAAgBA,QAAO;AAAA,IAClC,CAAC;AACD,WAAO,IAAI,WAAU,KAAK,UAAU,OAAO,WAAW;AAAA,EAC1D;AAAA,EAEA,MAAM,UACF,UAA2D,CAAC,GAC1C;AAClB,YAAQ,QAAQ,eAAe;AAC/B,UAAM,QAAQ,MAAM,KAAK,SAAS,MAAM,aAAa,KAAK,SAAS,KAAK;AACxE,UAAM,SAAS,MAAM,WAAW,KAAK,EAAE;AACvC,SAAK,QAAQ,MAAM;AACnB,IAAAD,OAAM,CAAC,MAAM,aAAa,kCAAkC;AAC5D,UAAMG,QAAO,QAAQ,mBAAmB,OAAQ;AAChD,QAAI;AACJ,QAAIA,OAAM;AACN,gBAAU,MAAM;AAAA,QACZ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,OAAO;AAAA,QACZA;AAAA,QACA,QAAQ;AAAA,MACZ;AAAA,IACJ;AACA,gBAAY,MAAM;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,OAAO;AAAA,MACZ,QAAQ;AAAA,IACZ;AACA,WAAO,IAAI,WAAU,KAAK,UAAU,QAAQ,OAAO,QAAQ,MAAM;AAAA,EACrE;AAAA,EAEA,SAAS;AACL,WAAO,EAAE,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO;AAAA,EAC/D;AAAA,EAEA,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAI;AACzC,WAAO,KAAK,OAAO;AAAA,EACvB;AACJ;;;AIlpBA,SAAS,cAAc;;;ACuChB,SAAS,cAAc,OAAoB,UAA0B,CAAC,GAAkB;AAC3F,QAAM,QAAQ,QAAQ,cAAc,YAAY;AAChD,QAAM,WAAmC,CAAC;AAC1C,aAAW,UAAU,OAAO,OAAO,MAAM,UAAU,GAAG;AAClD,UAAM,QAAQ,OAAO;AACrB,QAAI,CAAC,OAAO,QAAS,SAAS,MAAM,KAAK,QAAQ,aAAa,YAAY,MAAM,OAAQ;AACpF;AAAA,IACJ;AACA,UAAM,OAAO,MAAM;AACnB,aAAS,KAAK;AAAA,MACV,GAAG,iBAAiB,MAAM,OAAO,MAAM;AAAA,MACvC,YAAY,EAAE,GAAG,KAAK,WAAW;AAAA,MACjC,GAAI,OAAO,kBAAkB,EAAE,iBAAiB,OAAO,gBAAgB,IAAI,CAAC;AAAA,MAC5E,SAAS,KAAK,QAAQ,IAAI,CAAC,YAAY;AAAA,QACnC,IAAI,OAAO;AAAA,QACX,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,QACf,YAAY,OAAO;AAAA,QACnB,SAAS,WAAW,KAAK,OAAO,MAAM,WAAW,CAAC,CAAC;AAAA,MACvD,EAAE;AAAA,IACN,CAAC;AAAA,EACL;AACA,WAAS;AAAA,IAAK,CAAC,GAAG,MACd,EAAE,WAAW,WAAW,EAAE,WAAW,SAC/B,EAAE,GAAG,cAAc,EAAE,EAAE,IACvB,EAAE,WAAW,SAAS,EAAE,WAAW,SACjC,KACA;AAAA,EACZ;AACA,QAAM,WAAmC,CAAC;AAC1C,aAAW,UAAU,OAAO,OAAO,MAAM,KAAK,GAAG;AAC7C,UAAM,eAAe,KAAK,OAAO,KAAK,aAAa,SAAS,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACjF,QAAI,SAAS,iBAAiB,MAAO;AACrC,aAAS,KAAK;AAAA,MACV,YAAY,OAAO;AAAA,MACnB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,GAAI,OAAO,kBAAkB,EAAE,iBAAiB,OAAO,gBAAgB,IAAI,CAAC;AAAA,MAC5E;AAAA,MACA,QAAQ,OAAO,KAAK;AAAA,MACpB,SAAS,WAAW,KAAK,OAAO,KAAK,WAAW,CAAC,CAAC;AAAA,MAClD,OAAO,OAAO;AAAA,IAClB,CAAC;AAAA,EACL;AACA,WAAS;AAAA,IAAK,CAAC,GAAG,MACd,EAAE,gBAAgB,EAAE,cACd,EAAE,WAAW,cAAc,EAAE,UAAU,IACvC,EAAE,cAAc,EAAE,cAChB,KACA;AAAA,EACZ;AACA,SAAO,gBAAgB;AAAA,IACnB,UAAU,MAAM;AAAA,IAChB,gBAAgB,MAAM,oBAAoB;AAAA,IAC1C,aAAa,CAAC,CAAC,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,EACJ,CAAC;AACL;;;AD9FA,SAAS,kBAAqE;AAE9E,SAAS,0BAAAC,+BAA8B;;;AERvC,SAAS,yBAAyB;AA+BlC,eAAsB,cAClB,SAOA,SACsB;AACtB,QAAM,EAAE,OAAO,IAAI;AACnB,MAAI;AACA,YAAQ,eAAe;AACvB,QAAI,OAAO,QAAQ,cAAc,YAAY,QAAQ,YAAY,QAAQ;AACrE,YAAM,IAAI,MAAM,mCAAmC;AACvD,UAAM,WAAW,QAAQ,YAAY;AACrC,QAAI,CAAC,OAAO,UAAU,QAAQ,KAAK,WAAW,KAAK,WAAW;AAC1D,YAAM,IAAI,MAAM,gCAAgC,iBAAiB,EAAE;AACvE,UAAM,SAAS,MAAM,QAAQ,SAAS,UAAU,QAAQ,SAAS;AAAA,MAC7D,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,IAC/B,CAAC;AACD,QAAI,CAAC,OAAO,YAAa,OAAM,IAAI,MAAM,yCAAyC;AAClF,UAAM,UAAU,QAAQ,WAAW,OAAO,YAAY;AACtD,QACI,OAAO,YAAY,YACnB,UAAU,QAAQ,aAClB,UAAU,OAAO,YAAY;AAE7B,YAAM,IAAI,MAAM,0CAA0C;AAC9D,UAAM,SAAS,MAAM,QAAQ,OAAO,SAAS,OAAO;AACpD,QAAI,OAAO,WAAW;AAClB,YAAM,IAAI,MAAM,6CAA6C;AACjE,QAAI;AACJ,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,aAAS,OAAO,QAAQ,WAAW,QAAQ,SAAS,QAAQ,OAAO,QAAQ,GAAG;AAC1E,cAAQ,eAAe;AACvB,YAAM,MAAM,OAAO,OAAO,QAAQ,IAAI;AACtC,YAAM,OAAO,MAAM,QAAQ,SAAS,WAAW,QAAQ,SAAS;AAAA,QAC5D,WAAW;AAAA,QACX,SAAS,MAAM,UAAU,MAAM;AAAA,QAC/B,GAAI,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;AAAA,QACrE,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC/B,CAAC;AACD,UAAI,KAAK,MAAM,YAAY,MAAM,UAAU,MAAM;AAC7C,cAAM,IAAI,MAAM,6CAA6C;AACjE,cAAQ,eAAe;AAIvB,UACI,KAAK,kBAAkB,WAAW,MACjC,UAAU,OAAO,OAAO,QAAQ,KAAK;AAEtC;AACJ,YAAM,mBAAmB,WAAW;AACpC,eAAS,MAAM,QAAQ;AAAA,QACnB;AAAA,UACI,SAAS,QAAQ;AAAA,UACjB,mBAAmB,KAAK;AAAA,UACxB,OAAO;AAAA,QACX;AAAA,QACA;AAAA,UACI,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,UAC3B,GAAI,oBAAoB,QAAQ,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;AAAA,QAC/D;AAAA,MACJ;AACA,eAAS,OAAO;AAChB,iBAAW,OAAO;AAAA,IACtB;AACA,WAAO,EAAE,GAAG,QAAS,OAAO,QAAQ;AAAA,EACxC,UAAE;AAEE,YAAQ,cAAc,KAAK,CAAC;AAAA,EAChC;AACJ;;;AC1GA,SAAS,2BAA2B;;;ACEpC;AAAA,EACI;AAAA,EACA,0BAAAC;AAAA,EACA;AAAA,EACA;AAAA,OAIG;AAKA,IAAM,oBAAN,cAAgC,MAAM;AAAC;AAEvC,IAAM,yBAAN,cAAqC,MAAM;AAAC;AAEnD,SAASC,OAAM,OAAgB,SAAgC;AAC3D,MAAI,CAAC,OAAO;AACR,UAAM,IAAI,MAAM,OAAO;AAAA,EAC3B;AACJ;AAEA,IAAM,QAAQ,CAAI,UAAgB,gBAAgB,KAAK;AAchD,IAAe,qBAAf,MAAkC;AAAA,EAC5B;AAAA,EAET,YAAY,SAA2B;AACnC,SAAK,WAAW,EAAE,GAAG,SAAS,OAAO,OAAO,OAAO,EAAE,GAAG,QAAQ,MAAM,CAAC,EAAE;AAAA,EAC7E;AAAA,EAEU,gBAAgB,OAA0B;AAChD,eAAW,aAAa,OAAO,OAAO,MAAM,UAAU,GAAG;AACrD,UACI,CAAC,UAAU,SAAS,EAAE,SAAS,UAAU,MAAM,KAC/C,CAAE,UAAU,SAAoD,cAClE;AACE;AAAA,MACJ;AACA,gBAAU,SAAS;AACnB,iBAAW,MAAM,UAAU,QAAQ;AAC/B,YAAI,CAAC,MAAM,aAAa,EAAE,GAAG;AACzB,gBAAM,aAAa,EAAE,IAAI,UAAU;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAgB,aAA4B;AACxC,UAAM,EAAE,OAAO,MAAM,IAAI,KAAK;AAC9B,UAAM,MAAM,YAAY,OAAO,CAAC,UAAU;AACtC,YAAM,cAAc;AACpB,iBAAW,UAAU,CAAC,GAAG,OAAO,OAAO,MAAM,KAAK,GAAG,GAAG,OAAO,OAAO,MAAM,OAAO,CAAC,GAAG;AACnF,eAAO,QAAQ;AAAA,MACnB;AACA,WAAK,gBAAgB,KAAK;AAAA,IAC9B,CAAC;AAAA,EACL;AAAA,EAEU,kBAAkB,QAA+C;AACvE,UAAM,WAAW,KAAK,SAAS;AAC/B,UAAM,OACF,OAAO,SAAS,UACV,OAAO,MAAM,qBACb,OAAO,MAAM;AACvB,QACI,YACA,CAAC,KAAK,iBAAiB,MAAM,CAAC,MAAM,MAAM,SAAS,SAAS,iBAAiB,CAAC,CAAC,GACjF;AACE,YAAM,IAAI,uBAAuB,wCAAwC;AAAA,IAC7E;AACA,UAAM,OAAO,UAAU;AACvB,QAAI,QAAQ,CAAC,KAAK,QAAQ,MAAM,CAAC,MAAM,MAAM,SAAS,KAAK,CAAC,CAAC,GAAG;AAC5D,YAAM,IAAI,uBAAuB,mCAAmC;AAAA,IACxE;AAAA,EACJ;AAAA,EAEA,MAAgB,gBAAgB,OAA0C;AACtE,UAAM,IAAI,MAAM;AAChB,WAAOC;AAAA,MACH,EAAE;AAAA,MACF,EAAE;AAAA,MACF,MAAM;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,MAAM,2BAA2B,EAAE,eAAe;AAAA,QAClD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAgB,eACZ,MACA,OACA,MACA,UACuB;AACvB,UAAM,QAAQ,oBAAI,IAA0B;AAC5C,UAAM,cAAc,oBAAI,IAAsB;AAC9C,UAAM,mBAAmB,oBAAI,IAAc;AAC3C,UAAM,YAA4B,CAAC;AACnC,UAAM,aAAa,IAAI;AAAA,MACnB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,aAAa,MAAM,OAAO,MAAM,MAAM,CAAC;AAAA,IACzE;AACA,UAAM,WAAW,OAAO,WAAyB;AAC7C,YAAM,MAAM,OAAO,aAAa,MAAM,OAAO;AAC7C,UAAI,YAAY,iBAAiB,IAAI,OAAO,UAAU;AACtD,UAAI,CAAC,WAAW;AACZ,oBAAY,MAAM,KAAK,gBAAgB,OAAO,KAAK;AACnD,yBAAiB,IAAI,OAAO,YAAY,SAAS;AAAA,MACrD;AACA,YAAM,IAAI,KAAK,MAAM;AACrB,UAAI,UAAU,YAAY,IAAI,SAAS;AACvC,UAAI,CAAC,SAAS;AACV,kBAAU,oBAAI,IAAI;AAClB,oBAAY,IAAI,WAAW,OAAO;AAAA,MACtC;AACA,cAAQ,IAAI,GAAG;AAAA,IACnB;AACA,UAAM,WAAW,CAAC,cACd,CAAC,GAAI,YAAY,IAAI,SAAS,KAAK,CAAC,CAAE,EAAE,IAAI,CAAC,QAAQ,MAAM,IAAI,GAAG,CAAE;AACxE,eAAW,UAAU,OAAO,OAAO,KAAK,OAAO,GAAG;AAC9C,YAAM,SAAS,MAAM;AAAA,IACzB;AACA,eAAW,UAAU,OAAO;AACxB,UAAI;AACA,aAAK,kBAAkB,MAAM;AAC7B,cAAM,SAAS,EAAE,GAAG,QAAQ,OAAO,UAAU,CAAC;AAAA,MAClD,SAAS,OAAO;AACZ,YAAI,EAAE,iBAAiB,yBAAyB;AAC5C,gBAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,UAAU;AAAA,MACZ,SAAS,KAAK,SAAS,MAAM;AAAA,MAC7B,iBAAiB,OAAO,KAAK,SAAS,MAAM,eAAe;AAAA,IAC/D;AACA,eAAW,SAAS,MAAM;AACtB,UAAI,MAAM,cAAc,cAAc;AAClC,cAAM,QAAQ,MAAM,KAAK,SAAS,OAAO,SAAS,MAAM,WAAY;AACpE,YAAI,MAAM,SAAS,MAAM;AACrB,gBAAM,IAAI,kBAAkB,2CAA2C;AAC3E,cAAM,OAAO,MAAM;AACnB,cAAM,SAAS,KAAK;AAMpB,cAAM,UAAU,KAAK;AACrB,QAAAC;AAAA,UACI,MAAM,QAAQ,OAAO,UAAU,KAC3B,OAAO,WAAW,WAAW,OAAO,qBAAqB,UACzD,OAAO,WAAW,WAAW,OAAO,gBAAgB,UACpD,OAAO,WAAW,WAAW,OAAO,SAAS,UAC7C,OAAO,WAAW,WAAW,QAAQ;AAAA,UACzC;AAAA,QACJ;AACA,mBAAW,CAACC,QAAO,SAAS,KAAK,OAAO,WAAW,QAAQ,GAAG;AAC1D,qBAAW,YAAY,SAAS,SAAS,GAAG;AACxC,YAAAD;AAAA,cACI,SAAS,MAAM,KAAK,WAAW,OAAO,SAASC,MAAK;AAAA,cACpD;AAAA,YACJ;AACA,kBAAM,YAAY,MAAM;AAAA,cACpB;AAAA,cACA,SAAS,MAAM;AAAA,cACf;AAAA,gBACI,WAAW,MAAM;AAAA,gBACjB,iBAAiB;AAAA,gBACjB,qBAAqB,OAAO,qBAAqBA,MAAK;AAAA,gBACtD,gBAAgB,OAAO,OAAO,gBAAgBA,MAAK,CAAE;AAAA,cACzD;AAAA,YACJ;AACA,gBAAI,CAAC,WAAW;AACZ;AAAA,YACJ;AAEA,kBAAM,QAAQ,WAAW;AAAA,cACrB,OAAO,qBAAqBA,MAAK,IAAK,MAAM,SAAS;AAAA,YACzD;AACA,kBAAM,UAAU,OAAO,MAAM,KAAK;AAClC,kBAAM,SAAuB;AAAA,cACzB,YAAY,OAAO,qBAAqBA,MAAK;AAAA,cAC7C,QAAQ,OAAO,KAAK,YAAsB;AAAA,cAC1C,WAAW,OAAO,QAAQA,MAAK,CAAC;AAAA,cAChC,aAAa,MAAM;AAAA,cACnB,WAAW,MAAM;AAAA,cACjB,iBAAiB,MAAM;AAAA,cACvB,MAAM,SAAS;AAAA,cACf,OAAO;AAAA,gBACH,GAAG,MAAM,SAAS,KAAK;AAAA,gBACvB,MAAM;AAAA,kBACF,GAAG;AAAA,kBACH,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,MAAM,OAAO,EAAE;AAAA,gBAC/D;AAAA,cACJ;AAAA,cACA,oBAAoB,EAAE,MAAM,QAAQ,YAAY,SAAS,WAAW;AAAA,cACpE,OAAO;AAAA,YACX;AACA,YAAAD;AAAA,cACK,MAAM,SAAS,QAAQ,OAAO,QAAQ,OAAO,SAAS,MACnD,OAAO,OAAO,UAAU;AAAA,cAC5B;AAAA,YACJ;AACA,iBAAK,kBAAkB,MAAM;AAC7B,kBAAM,SAAS,MAAM;AACrB,sBAAU,KAAK,MAAM;AAAA,UACzB;AAAA,QACJ;AAAA,MACJ,WAAW,MAAM,cAAc,kBAAkB;AAC7C,cAAM,SAAS,MAAM,KAAM;AAI3B,mBAAW,YAAY,SAAS,OAAO,eAAe,GAAG;AACrD,gBAAM,QAAQ,WAAW;AAAA,YACrB,OAAO,SAAS,mBAAmB,MAAM,SAAS;AAAA,UACtD;AACA,cAAI,CAAC,OAAO;AACR;AAAA,UACJ;AACA,gBAAM,MAAM,SAAS,MAAM;AAC3B,gBAAM,OAAO,MAAM,MAAM;AACzB,cACI;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,EAAE;AAAA,YACE,CAAC,UACG,IAAI,KAAyB,MAAM,KAAK,KAA0B;AAAA,UAC1E,KACA,KAAK,UAAU,IAAI,UACnB,KAAK,SAAS,IAAI,QACpB;AACE;AAAA,UACJ;AACA,gBAAM,WAAyB;AAAA,YAC3B,GAAG,MAAM,KAAK;AAAA,YACd,OAAO;AAAA,cACH,MAAM,MAAM,IAAI;AAAA,cAChB,oBAAoB,MAAM,SAAS,MAAM,kBAAkB;AAAA,cAC3D,sBAAsB,MAAM,SAAS,MAAM,oBAAoB;AAAA,YACnE;AAAA,YACA,oBAAoB,EAAE,MAAM,UAAU,YAAY,SAAS,WAAW;AAAA,UAC1E;AACA,eAAK,kBAAkB,QAAQ;AAC/B,gBAAM,SAAS,QAAQ;AACvB,oBAAU,KAAK,QAAQ;AAAA,QAC3B;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;;;ADhQA,IAAME,SAA4D,CAAC,OAAO,YAAY;AAClF,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,OAAO;AACvC;AACA,IAAMC,YAAW,CAAC,QAAgB,cAAsB,GAAG,MAAM,IAAI,SAAS;AAGvE,IAAM,gBAAN,cAA4B,mBAAmB;AAAA,EACzC;AAAA,EAET,YAAY,SAAmE;AAC3E,UAAM,OAAO;AACb,SAAK,WAAW,EAAE,GAAG,QAAQ;AAC7B,IAAAD;AAAA,MACI,QAAQ,QAAQ,iBAAiB,QAAQ,MAAM;AAAA,MAC/C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,aAAa,OAAsB,UAA4B,CAAC,GAA2B;AACvF,WAAO,KAAK,IAAI,gBAAgB,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC;AAAA,EAC1D;AAAA,EAEA,MAAc,IAAI,OAAsB,SAAmD;AACvF,UAAM,EAAE,QAAQ,UAAU,OAAO,OAAO,QAAQ,IAAI,KAAK;AACzD,UAAM,YAAY,oBAAoB,aAAa,MAAM,YAAY;AACrE,UAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,YAAQ,eAAe;AACvB,UAAM,UAAU,SAAS;AACzB,IAAAA;AAAA,MACI,MAAM,QAAQ,YAAY,QAAQ,WAC9B,MAAM,QAAQ,gBAAgB,YAAY,MACtC,QAAQ,gBAAgB,YAAY;AAAA,MAC5C;AAAA,IACJ;AACA,IAAAA;AAAA,MACI,MAAM,MAAM,UAAU,SAAS,WAAW,SAAS;AAAA,MACnD;AAAA,IACJ;AACA,UAAM,SAAS,mBAAmB,MAAM;AACxC,UAAM,OAAO,MAAM,MAAM,aAAa,KAAK;AAC3C,IAAAA,OAAM,SAAS,CAAC,KAAK,aAAa,+CAA+C;AACjF,QAAI;AACA,UAAI,CAAC,OAAO;AACR,mBAAW,UAAU,CAAC,KAAK,eAAe,GAAG;AACzC,cAAI,CAAC,OAAQ;AACb,eAAK,MAAM,OAAO,SAAS,OAAO,MAAM,GAAG,SAAS,OAAO;AACvD,kBAAM,IAAI,kBAAkB,yCAAyC;AACzE,UAAAA;AAAA,YACI,OAAO,UAAU,MAAM,MAAM;AAAA,YAC7B;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,OAAO;AACH,aAAK,QAAQ,CAAC;AACd,aAAK,UAAU,CAAC;AAAA,MACpB;AACA,YAAM,QAAQ,MAAM,OAAO,SAAS,MAAM,MAAM,MAAM;AACtD,MAAAA;AAAA,QACI,MAAM,SAAS,MAAM,MAAM,QAAQ,MAAM,WAAW,MAAM,MAAM;AAAA,QAChE;AAAA,MACJ;AACA,YAAM,WAAW,CAAC;AAClB,iBAAWE,SAAQ,IAAI,IAAI,MAAM,iBAAiB,GAAG;AACjD,gBAAQ,eAAe;AACvB,QAAAF,OAAM,sBAAsB,KAAKE,KAAI,GAAG,oCAAoC;AAC5E,cAAM,UAAU,MAAM,OAAO,WAAWA,KAAI;AAC5C,QAAAF;AAAA,UACI,WACI,QAAQ,WAAW,aACnB,QAAQ,gBAAgB,YAAY,MAAME,MAAK,YAAY;AAAA,UAC/D;AAAA,QACJ;AACA,QAAAF;AAAA,UACI,QAAQ,MAAM,UAAU,SAAS,WAAW,SAAS,aACjD,QAAQ,MAAM,UAAU,MAAM;AAAA,UAClC;AAAA,QACJ;AACA,aAAK,MAAM,OAAO,SAAS,QAAQ,MAAM,MAAM,GAAG,SAAS,QAAQ,MAAM;AACrE,gBAAM,IAAI,kBAAkB,kDAAkD;AAClF,iBAAS,KAAK,OAAO;AAAA,MACzB;AACA,YAAM,OAAO,SAAS;AAAA,QAAQ,CAAC,YAC3B,iBAAiB,SAAS,QAAQ,eAAe;AAAA,MACrD;AACA,WAAK;AAAA,QAAK,CAAC,GAAG,MACV,EAAE,cAAe,EAAE,cACb,KACA,EAAE,cAAe,EAAE,cACjB,IACA,EAAE,WAAY,EAAE;AAAA,MAC5B;AAEA,YAAM,SAAS,oBAAI,IAAoB;AACvC,iBAAW,SAAS,MAAM;AACtB,YAAI,MAAM,cAAc,yBAAyB,MAAM,cAAc;AACjE;AACJ,cAAM,EAAE,QAAQ,gBAAgB,YAAY,IAAI,MAAM;AAKtD,mBAAW,CAAC,GAAG,UAAU,KAAK,YAAY,QAAQ,GAAG;AACjD,gBAAM,MAAMC,UAAS,QAAQ,OAAO,cAAc,IAAI,CAAC;AACvD,UAAAD;AAAA,YACI,CAAC,OAAO,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,MAAM,OAAO,UAAU;AAAA,YACzD;AAAA,UACJ;AACA,iBAAO,IAAI,KAAK,OAAO,UAAU,CAAC;AAAA,QACtC;AAAA,MACJ;AACA,YAAM,UAAU,CAAC,MAAcG,WAAkB;AAC7C,cAAM,OAAO,OAAO,IAAIF,UAAS,MAAME,MAAK,CAAC;AAC7C,QAAAH,OAAM,SAAS,QAAW,6BAA6B;AACvD,eAAO;AAAA,MACX;AACA,YAAM,YAAY,MAAM,kBAAkB,MAAM;AAAA,QAC5C;AAAA,QACA;AAAA,QAEA,kBAAkB,MAAM;AAAA,MAC5B,CAAC;AACD,YAAM,QAAsB,UAAU,MAAM,IAAI,CAAC,YAAY;AAAA,QACzD,GAAG;AAAA,QACH,OAAO;AAAA,MACX,EAAE;AACF,YAAM,WAA2B,UAAU,QAAQ,IAAI,CAAC,YAAY;AAAA,QAChE,GAAG;AAAA,QACH,OAAO;AAAA,MACX,EAAE;AACF,YAAM,YAAY,MAAM,KAAK,eAAe,MAAM,UAAU,MAAM,EAAE,QAAQ,CAAC;AAC7E,YAAM,eAAe,IAAI;AAAA,QACrB,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,aAAa,MAAM,OAAO,MAAM,MAAM,CAAC;AAAA,MAC5E;AACA,iBAAW,UAAU;AACjB,qBAAa,IAAI,OAAO,aAAa,MAAM,OAAO,MAAM,MAAM;AAClE,YAAM,UAAU,CAAC,GAAG,aAAa,OAAO,CAAC,EACpC,OAAO,CAAC,WAAW;AAChB,YAAI;AACA,eAAK,kBAAkB,MAAM;AAC7B,iBAAO;AAAA,QACX,SAAS,OAAO;AACZ,cAAI,iBAAiB,uBAAwB,QAAO;AACpD,gBAAM;AAAA,QACV;AAAA,MACJ,CAAC,EACA;AAAA,QAAK,CAAC,GAAG,MACN,EAAE,cAAc,EAAE,cACZ,KACA,EAAE,cAAc,EAAE,cAChB,IACA,EAAE,SAAS,EAAE,SACX,KACA,EAAE,SAAS,EAAE,SACX,IACA,EAAE,YAAY,EAAE;AAAA,MAChC;AACJ,iBAAW,UAAU,CAAC,GAAG,OAAO,GAAG,OAAO,GAAG;AACzC,gBAAQ,eAAe;AACvB,cAAM,QAAQ,MAAM,KAAK,SAAS,YAAY,cAAc,SAAS,QAAQ,KAAK;AAClF,cAAM,eACF,UAAU,SAAS,OAAO,KAAK,eAAe,OAAO,MAAM,KAAK;AACpE,cAAM;AAAA,UACF;AAAA,UACA;AAAA,YACI,GAAG;AAAA,YACH,cAAc,KAAK,aAAa,SAAS,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AAAA,UAClE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AACA,YAAM,WAAW;AAAA,QACb,GAAG,KAAK;AAAA,QACR,GAAG,OAAO,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,YAAY,MAAM,CAAC,CAAC;AAAA,MAC5E;AACA,YAAM,aAAa;AAAA,QACf,GAAG,KAAK;AAAA,QACR,GAAG,OAAO;AAAA,UACN,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,aAAa,MAAM,OAAO,MAAM,MAAM,CAAC;AAAA,QAC3E;AAAA,MACJ;AACA,YAAM,eACF,CAAC;AACL,iBAAW,CAAC,IAAI,MAAM,KAAK,OAAO,QAAQ,QAAQ;AAC9C,qBAAa,KAAK;AAAA,UACd,MAAM;AAAA,UACN;AAAA,UACA,WAAW,MAAM,UAAU;AAAA,YACvB,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO,KAAK;AAAA,UAChB;AAAA,QACJ,CAAC;AACL,iBAAW,CAAC,IAAI,MAAM,KAAK,OAAO,QAAQ,UAAU;AAChD,qBAAa,KAAK;AAAA,UACd,MAAM;AAAA,UACN;AAAA,UACA,WAAW,MAAM,KAAK,gBAAgB,OAAO,KAAK;AAAA,QACtD,CAAC;AACL,YAAM,QAAQ,aAAa,SACrB,MAAM,OAAO;AAAA,QACT;AAAA,QACA,aAAa,IAAI,CAAC,SAAS,KAAK,SAAS;AAAA,QACzC;AAAA,MACJ,IACA,CAAC;AACP,MAAAA;AAAA,QACI,MAAM,WAAW,aAAa,UAC1B,MAAM,MAAM,CAAC,UAAU,OAAO,UAAU,SAAS;AAAA,QACrD;AAAA,MACJ;AACA,cAAQ,eAAe;AACvB,WAAK,MAAM,OAAO,SAAS,MAAM,MAAM,GAAG,SAAS,MAAM;AACrD,cAAM,IAAI,kBAAkB,uCAAuC;AACvE,YAAM,MAAM,YAAY,OAAO,CAAC,UAAU;AACtC,gBAAQ,eAAe;AACvB,QAAAA,OAAM,MAAM,aAAa,KAAK,UAAU,qCAAqC;AAC7E,YAAI,OAAO;AACP,eAAK,gBAAgB,KAAK;AAC1B,gBAAM,QAAQ,CAAC;AACf,gBAAM,UAAU,CAAC;AACjB,iBAAO,MAAM;AACb,iBAAO,MAAM;AACb,iBAAO,MAAM;AAAA,QACjB;AACA,4BAAoB,OAAO,EAAE,OAAO,SAAS,YAAY,MAAM,CAAC;AAChE,qBAAa,QAAQ,CAAC,MAAMG,WAAU;AAClC,gBAAM,SAAS,MAAM,KAAK,IAAI,EAAE,KAAK,EAAE;AACvC,cAAI,QAAQ;AACR,kCAAsB,QAAQ;AAAA,cAC1B,OAAO,MAAMA,MAAK,IAAI,UAAU;AAAA,cAChC,gBAAgB,EAAE,QAAQ,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,YAC7D,CAAC;AAAA,UACL;AAAA,QACJ,CAAC;AAED,cAAM,kBAAkB,EAAE,QAAQ,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,MACrE,CAAC;AACD,aAAO;AAAA,QACH;AAAA,QACA,OAAO,MAAM;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,UAAU,eAAe,MAAM,MAAM,aAAa,KAAK,CAAC;AAAA,MAC5D;AAAA,IACJ,SAAS,OAAO;AACZ,UAAI,iBAAiB,kBAAmB,OAAM,KAAK,WAAW;AAC9D,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;;;AHjPO,IAAM,gBAAN,MAAoB;AAAA,EACd;AAAA,EACT;AAAA,EACS,aAAa,oBAAI,IAAgB;AAAA,EACjC,WAAW,oBAAI,IAAY;AAAA,EACpC,gBAAkC,QAAQ,QAAQ;AAAA,EACzC;AAAA,EACA;AAAA,EAET,YAAY,SAA+B;AACvC,QAAI,mBAAmB,WAAW,qBAAqB;AACnD,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AACJ,cAAU,iCAAiC,OAAO;AAClD,QAAI,sBAAsB,WAAW,qBAAqB,SAAS;AAC/D,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,QAAQ,QAAQ;AACtB,SAAK,WAAW;AAAA,MACZ,GAAG;AAAA,MACH,GAAI,QACE;AAAA,QACI,OAAO;AAAA,UACH,YAAY,MAAM;AAAA,UAClB,cAAc,CAAC,UAAU,MAAM,aAAa,KAAK;AAAA,UACjD,aAAa,OAAO,OAAO,WAAW;AAClC,kBAAM,SAAS,MAAM,MAAM,YAAY,OAAO,MAAM;AACpD,gBAAI,SAAS,KAAK,MAAM,SAAS,KAAK,KAAK,GAAG;AAC1C,yBAAW,YAAY,CAAC,GAAG,KAAK,UAAU,GAAG;AACzC,oBAAI;AACA,2BAAS;AAAA,gBACb,QAAQ;AAAA,gBAER;AAAA,cACJ;AAAA,YACJ;AACA,mBAAO;AAAA,UACX;AAAA,QACJ;AAAA,MACJ,IACA,CAAC;AAAA,MACP,GAAI,QAAQ,gBACN,EAAE,eAAe,kBAAkB,QAAQ,aAAa,EAAE,IAC1D,CAAC;AAAA,IACX;AACA,SAAK,WAAW,QAAQ;AACxB,SAAK,QAAQ,OAAO,OAAO;AAAA,MACvB,WAAW,QAAQ,aAAa;AAAA,MAChC,GAAG,QAAQ,SAAS;AAAA,MACpB,cAAc,QAAQ,OAAO;AAAA,IACjC,CAAC;AACD,aAAS,KAAK,KAAK;AACnB,WAAO,OAAO,IAAI;AAAA,EACtB;AAAA;AAAA,EAWA,MAAM,gBACF,OACA,UAAqC,CAAC,GACV;AAC5B,UAAM,SAAS,KAAK,SAAS;AAC7B,QAAI,CAAC,OAAQ,OAAM,IAAIC,wBAAuB,eAAe;AAC7D,UAAM,YAAY,iBAAiB,YAAY,QAAQ;AACvD,QAAI,aAAa,KAAK,SAAS,IAAI,UAAU,EAAE;AAC3C,YAAM,IAAI,MAAM,iDAAiD;AACrE,QAAI,UAAW,MAAK,SAAS,IAAI,UAAU,EAAE;AAE7C,UAAM,YAAY,EAAE,GAAG,QAAQ;AAC/B,UAAM,QAAQ,YAAY,SAAY,EAAE,GAAI,MAA0B;AACtE,QAAI;AACA,UAAI,CAAC,OAAO,SAAU,OAAM,IAAIA,wBAAuB,yBAAyB;AAChF,WAAK,MAAM,OAAO,SAAS,WAAW,GAAG,YAAY,KAAK,SAAS,QAAQ,SAAS;AAChF,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC5D;AACA,UAAI,WAAW;AACX,YAAI,CAAC,KAAK,SAAS,MAAO,OAAM,IAAIA,wBAAuB,cAAc;AACzE,cAAM,QAAQ,MAAM,KAAK,SAAS,MAAM,aAAa,KAAK,KAAK;AAC/D,YAAI,CAAC,MAAM,WAAW,UAAU,EAAE;AAC9B,gBAAM,IAAI,MAAM,kDAAkD;AAAA,MAC1E;AACA,YAAM,OAAO,YAAY,MAAM,UAAU,kBAAkB,IAAI;AAC/D,YAAM,cAAc,MAAM,OAAO,gBAAgB;AAAA,QAC7C,GAAG;AAAA,QACH,IAAI,KAAK;AAAA,QACT,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,SAAS,KAAK,SAAS,QAAQ;AAAA,MACnC,CAAC;AACD,UAAI,WAAW;AACX,YAAI;AACA,gBAAM,UAAU,iBAAiB,YAAY,IAAI;AAAA,QACrD,SAAS,OAAO;AACZ,gBAAM,IAAI;AAAA,YACN,eAAe,YAAY,IAAI;AAAA,YAC/B,EAAE,MAAM;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,IACX,UAAE;AACE,UAAI,UAAW,MAAK,SAAS,OAAO,UAAU,EAAE;AAAA,IACpD;AAAA,EACJ;AAAA,EAEQ,QAAQ,cAA+C;AAC3D,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,QAAQ,OAAO;AAChB,YAAM,IAAIA,wBAAuB,cAAc;AAAA,IACnD;AACA,QAAI,CAAC,QAAQ,aAAa;AACtB,YAAM,IAAIA,wBAAuB,cAAc;AAAA,IACnD;AACA,WAAO;AAAA,MACH,SAAS,EAAE,GAAG,SAAS,UAAU,QAAQ,SAAS,SAAS,YAAY,EAAE;AAAA,MACzE,OAAO,KAAK;AAAA,MACZ,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,eAAe,MAAM;AACjB,YAAI,QAAQ,cAAe,QAAO,QAAQ;AAC1C,YAAI,QAAQ,kBAAkB,OAAQ,QAAO,QAAQ,OAAO,oBAAoB;AAChF,cAAM,IAAIA,wBAAuB,sBAAsB;AAAA,MAC3D;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,UAAyB;AAC7B,QAAI,KAAK,SAAU,QAAO,KAAK;AAC/B,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,QAAQ,SAAS,CAAC,QAAQ,eAAe,CAAC,QAAQ;AACnD,YAAM,IAAIA,wBAAuB,6CAA6C;AAClF,UAAM,UACF,QAAQ,YACP,QAAQ,kBAAkB,SAAS,QAAQ,OAAO,UAAU,IAAI;AACrE,QAAI,CAAC,QAAS,OAAM,IAAIA,wBAAuB,SAAS;AACxD,UAAM,mBAAmB,QAAQ,OAAO,oBAAoB;AAC5D,UAAM,gBACF,iBAAiB,SAAS,SAAS,iBAAiB,iBAAiB,IAAI;AAC7E,SAAK,WAAW,IAAI,cAAc;AAAA,MAC9B,UAAU,QAAQ;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB;AAAA,MAEA,aAAa,QAAQ;AAAA,MACrB,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,IAC7C,CAAC;AACD,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGA,UAAU,UAAkC;AACxC,SAAK,WAAW,IAAI,QAAQ;AAC5B,WAAO,MAAM;AACT,WAAK,WAAW,OAAO,QAAQ;AAAA,IACnC;AAAA,EACJ;AAAA;AAAA,EAGA,MAAM,WAAW,UAA0B,CAAC,GAAG;AAC3C,UAAM,eAAe,QAAQ,eACtB,WAAW,QAAQ,YAAY,IAChC;AACN,UAAM,QAAQ,KAAK,SAAS;AAC5B,QAAI,CAAC,MAAO,OAAM,IAAIA,wBAAuB,cAAc;AAC3D,WAAO;AAAA,MACH,MAAM,MAAM,aAAa,KAAK,KAAK;AAAA,MACnC,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,IACvC;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ,cAA6B;AACvC,UAAM,QAAQ,KAAK,SAAS;AAC5B,QAAI,CAAC,OAAO;AACR,YAAM,IAAIA,wBAAuB,cAAc;AAAA,IACnD;AACA,WAAO,cAAc,MAAM,MAAM,aAAa,KAAK,KAAK,GAAG,WAAW,YAAY,CAAQ;AAAA,EAC9F;AAAA;AAAA,EAGA,MAAM,QAAQ,SAAyB;AACnC,UAAM,WAAW,KAAK,SAAS;AAC/B,UAAM,SAAS,KAAK,SAAS;AAC7B,QAAI,CAAC,OAAQ,OAAM,IAAIA,wBAAuB,cAAc;AAC5D,QAAI,CAAC,SAAU,OAAM,IAAIA,wBAAuB,cAAc;AAC9D,UAAM,UAAU,KAAK,QAAQ;AAC7B,UAAM,UAAU;AAAA,MACZ,GAAG;AAAA,MACH,GAAI,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,MAAM,EAAE,IAAI,CAAC;AAAA,IACjF;AACA,UAAM,OAAO,KAAK,cAAc,KAAK,YAAY;AAC7C,YAAM,SAAS,MAAM;AAAA,QACjB;AAAA,UACI;AAAA,UACA;AAAA,UACA,SAAS,KAAK,SAAS;AAAA,UACvB,WAAW,KAAK,SAAS,WAAW,SAAS;AAAA,UAC7C,OAAO,CAAC,OAAO,aAAa,QAAQ,aAAa,OAAO,QAAQ;AAAA,QACpE;AAAA,QACA;AAAA,MACJ;AAGA,YAAM,KAAK,SAAS,MAAO,YAAY,KAAK,OAAO,CAAC,UAAU;AAC1D,gBAAQ,QAAQ,eAAe;AAC/B,YAAI,MAAM,YAAa,OAAM,IAAI,MAAM,kCAAkC;AACzE,cAAM,WAAW,MAAM;AACvB,cAAM,QAAQ,WACR,SAAS,SAAS,KAClB,KAAK,SAAS,WAAW,SAAS;AACxC,YACI,QAAQ,aAAa,UACpB,CAAC,YAAY,OAAO,MAAM,UAAU,SAAS,SAChD;AACE,gBAAM,mBAAmB;AAAA,YACrB,QAAQ,OAAO,MAAM;AAAA,YACrB,MAAM,OAAO,MAAM;AAAA,UACvB;AAAA,QACJ;AAAA,MACJ,CAAC;AACD,aAAO;AAAA,IACX,CAAC;AACD,SAAK,gBAAgB,KAAK,MAAM,MAAM;AAAA,IAAC,CAAC;AACxC,WAAO;AAAA,EACX;AAAA,EAEQ,YAAY,cAAsD;AACtE,UAAM,UAAU,KAAK,QAAQ,YAAY;AACzC,WAAO,IAAI,uBAAuB;AAAA,MAC9B,SAAS,QAAQ;AAAA,MACjB,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,eAAe,MAAM,QAAQ,MAAM,aAAa,QAAQ,KAAK;AAAA,MAC7D,UAAU,CAAC,SAAS,UAAU,QAAQ,SAAS,IAAI;AAAA,IACvD,CAAC;AAAA,EACL;AAAA,EACA,MAAM,gBAAgB,SAAkD;AACpE,WAAO,kBAAkB,mBAAmB,YAAY;AACpD,aAAO,KAAK,YAAY,QAAQ,YAAY,EAAE,gBAAgB,OAAO;AAAA,IACzE,CAAC;AAAA,EACL;AAAA,EACA,MAAM,cAAc,SAAgD;AAChE,WAAO,kBAAkB,iBAAiB,YAAY;AAClD,aAAO,KAAK,YAAY,QAAQ,YAAY,EAAE,cAAc,OAAO;AAAA,IACvE,CAAC;AAAA,EACL;AAAA,EACA,MAAM,oBAAoB,SAAsD;AAC5E,WAAO,kBAAkB,uBAAuB,YAAY;AACxD,aAAO,KAAK,YAAY,QAAQ,YAAY,EAAE,oBAAoB,OAAO;AAAA,IAC7E,CAAC;AAAA,EACL;AAAA,EACA,MAAM,kBAAkB,SAAoD;AACxE,WAAO,kBAAkB,qBAAqB,YAAY;AACtD,aAAO,KAAK,YAAY,QAAQ,YAAY,EAAE,kBAAkB,OAAO;AAAA,IAC3E,CAAC;AAAA,EACL;AAAA,EACA,MAAM,mBAAmB,SAAqD;AAC1E,WAAO,kBAAkB,sBAAsB,YAAY;AACvD,aAAO,KAAK,YAAY,QAAQ,YAAY,EAAE,mBAAmB,OAAO;AAAA,IAC5E,CAAC;AAAA,EACL;AAAA,EACA,MAAM,oBAAoB,SAAsD;AAC5E,WAAO,kBAAkB,uBAAuB,YAAY;AACxD,aAAO,KAAK,YAAY,QAAQ,YAAY,EAAE,oBAAoB,OAAO;AAAA,IAC7E,CAAC;AAAA,EACL;AAAA,EACA,MAAM,OAAO,aAAyC;AAClD,UAAM,QAAQ,KAAK,SAAS;AAC5B,QAAI,CAAC,MAAO,OAAM,IAAIA,wBAAuB,cAAc;AAC3D,UAAM,QAAQ,MAAM,MAAM,aAAa,KAAK,KAAK;AACjD,UAAM,QAAQ,MAAM,WAAW,WAAW,GAAG;AAE7C,QAAI,CAAC,OAAO,KAAM,OAAM,IAAI,MAAM,qBAAqB;AACvD,WAAO,UAAU,OAAO,KAAK,QAAQ,MAAM,KAAK,QAAQ,YAAY,GAAG,WAAW;AAAA,EACtF;AAAA,EAEA,SAAS;AACL,WAAO,EAAE,eAAe,MAAM,cAAc,KAAK,MAAM,aAAa;AAAA,EACxE;AAAA,EAEA,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAI;AACzC,WAAO,KAAK,OAAO;AAAA,EACvB;AACJ;;;AKvUA,SAAS,OAAO,OAAyB;AACrC,MAAI,OAAO,UAAU,SAAU,QAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AACjE,MAAI,iBAAiB,WAAY,QAAO,CAAC,SAAS,MAAM,KAAK,KAAK,CAAC;AACnE,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC;AAC5D,MAAI,SAAS,OAAO,UAAU;AAC1B,WAAO,CAAC,UAAU,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;AACrF,MAAI,UAAU,OAAW,QAAO,CAAC,WAAW;AAC5C,MACI,UAAU,QACV,OAAO,UAAU,YACjB,OAAO,UAAU,aAChB,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAEnD,WAAO,CAAC,SAAS,KAAK;AAC1B,QAAM,IAAI,MAAM,iCAAiC;AACrD;AACA,SAAS,OAAO,MAAwB;AACpC,MAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,OAAM,IAAI,MAAM,gCAAgC;AAC1E,QAAM,CAAC,MAAM,KAAK,IAAI;AACtB,MAAI,SAAS,YAAY,OAAO,UAAU,YAAY,sBAAsB,KAAK,KAAK;AAClF,WAAO,OAAO,KAAK;AACvB,MACI,SAAS,WACT,MAAM,QAAQ,KAAK,KACnB,MAAM,MAAM,CAAC,MAAM,OAAO,UAAU,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG;AAE3D,WAAO,WAAW,KAAK,KAAK;AAChC,MAAI,SAAS,WAAW,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,MAAM;AACrE,MAAI,SAAS,YAAY,MAAM,QAAQ,KAAK;AACxC,WAAO,OAAO;AAAA,MACV,MAAM,IAAI,CAAC,SAAS;AAChB,YAAI,CAAC,MAAM,QAAQ,IAAI,KAAK,KAAK,WAAW,KAAK,OAAO,KAAK,CAAC,MAAM;AAChE,gBAAM,IAAI,MAAM,uBAAuB;AAC3C,eAAO,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC;AAAA,MACpC,CAAC;AAAA,IACL;AACJ,MAAI,SAAS,eAAe,KAAK,WAAW,EAAG,QAAO;AACtD,MACI,SAAS,YACR,UAAU,QACP,OAAO,UAAU,YACjB,OAAO,UAAU,aAChB,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAEvD,WAAO;AACX,QAAM,IAAI,MAAM,4BAA4B;AAChD;AACO,SAAS,eAAe,OAAgC;AAC3D,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,OAAO,KAAK,CAAC,CAAC;AACjE;AACO,SAAS,iBAAiB,MAA+B;AAC5D,SAAO;AAAA,IACH,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;AAAA,EACrE;AACJ;AAEO,IAAM,oBAAN,MAAqD;AAAA,EACxD,MAAM,OAAO,OAAoB;AAC7B,WAAO,eAAe,KAAK;AAAA,EAC/B;AAAA,EACA,MAAM,OAAO,MAAkB;AAC3B,WAAO,iBAAiB,IAAI;AAAA,EAChC;AACJ;;;ACzDO,IAAM,oBAAN,cAAgC,yBAAyB;AAAA,EAC5D,cAAc;AACV,UAAM,IAAI,oBAAoB,GAAG,IAAI,kBAAkB,GAAG,EAAE,YAAY,MAAM,CAAC;AAAA,EACnF;AACJ;","names":["hash","current","reference","index","check","canonical","candidate","address","getBytes","sha256","bytesToHex","check","word","getBytes","normalizeFunding","Interface","invisiProtocolAbi","canonical","check","hash","index","check","current","normalizeFunding","hash","MissingCapabilityError","computeCreditNullifier","check","computeCreditNullifier","check","index","check","position","hash","index","MissingCapabilityError"]}
|