@dev.sail.money/sailor 0.0.2-21 → 0.0.2-23

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.
Files changed (105) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/index.cjs +2454 -2057
  3. package/packages/cli/dist/server.cjs +166 -156
  4. package/packages/sdk/dist/deployments.d.ts +14 -7
  5. package/packages/sdk/dist/deployments.d.ts.map +1 -1
  6. package/packages/sdk/dist/deployments.js +132 -141
  7. package/packages/sdk/dist/deployments.js.map +1 -1
  8. package/packages/sdk/dist/intelligence.d.ts +1 -1
  9. package/packages/sdk/dist/intelligence.js +1 -1
  10. package/packages/ui/dist/assets/{add-BzRDG6go.js → add-BcGCle88.js} +1 -1
  11. package/packages/ui/dist/assets/{all-wallets-C6juL2cm.js → all-wallets-8Jcfw5Qj.js} +1 -1
  12. package/packages/ui/dist/assets/{app-store-DSJ1ow5G.js → app-store-R1-af7b6.js} +1 -1
  13. package/packages/ui/dist/assets/{apple-CUEgIX9k.js → apple-Cxitz1aK.js} +1 -1
  14. package/packages/ui/dist/assets/{arrow-bottom-circle-C4CzuHiR.js → arrow-bottom-circle-BGQ9w6zi.js} +1 -1
  15. package/packages/ui/dist/assets/{arrow-bottom-BOhBj1Je.js → arrow-bottom-n-1aGCMa.js} +1 -1
  16. package/packages/ui/dist/assets/{arrow-left-BTD8zZ12.js → arrow-left-BngH26cQ.js} +1 -1
  17. package/packages/ui/dist/assets/{arrow-right-qcOukPwm.js → arrow-right-Bd1vyPNZ.js} +1 -1
  18. package/packages/ui/dist/assets/{arrow-top-C0f2945G.js → arrow-top-nst6Ttr2.js} +1 -1
  19. package/packages/ui/dist/assets/{bank-BSWzLP3R.js → bank-3aeQOng_.js} +1 -1
  20. package/packages/ui/dist/assets/{basic-DGTBsmnG.js → basic-Ds-ESc-H.js} +1 -1
  21. package/packages/ui/dist/assets/{browser-DJNepafc.js → browser-COcw6X9p.js} +1 -1
  22. package/packages/ui/dist/assets/{card-u08LJx43.js → card-B8clsijS.js} +1 -1
  23. package/packages/ui/dist/assets/{ccip-DcWZjG37.js → ccip-SgLYYQWq.js} +1 -1
  24. package/packages/ui/dist/assets/{checkmark-DVD-obDl.js → checkmark-CxpPWG40.js} +1 -1
  25. package/packages/ui/dist/assets/{checkmark-bold-CSXDqIAx.js → checkmark-bold-3THr8VIu.js} +1 -1
  26. package/packages/ui/dist/assets/{chevron-bottom-Be7f0gi2.js → chevron-bottom-HfWcF1bE.js} +1 -1
  27. package/packages/ui/dist/assets/{chevron-left-v8cgKRhQ.js → chevron-left-CkXbcOst.js} +1 -1
  28. package/packages/ui/dist/assets/{chevron-right-B0ux2X-3.js → chevron-right-Bt7ATlLQ.js} +1 -1
  29. package/packages/ui/dist/assets/{chevron-top-De-a8tmA.js → chevron-top-BZc4xycM.js} +1 -1
  30. package/packages/ui/dist/assets/{chrome-store-BIIIRGPA.js → chrome-store-IT1ftwJy.js} +1 -1
  31. package/packages/ui/dist/assets/{clock-8d5kvRPQ.js → clock-DpBvmJiH.js} +1 -1
  32. package/packages/ui/dist/assets/{close-BSSJkFv0.js → close-BoRwHijk.js} +1 -1
  33. package/packages/ui/dist/assets/{coinPlaceholder-CLJaQiUO.js → coinPlaceholder-Dba1nosr.js} +1 -1
  34. package/packages/ui/dist/assets/{compass-CR1zP0b-.js → compass-D4QnmoWi.js} +1 -1
  35. package/packages/ui/dist/assets/{copy-CGkuIFo6.js → copy-iBRvR2f1.js} +1 -1
  36. package/packages/ui/dist/assets/{core-ea860JM2.js → core-B0JxSbAV.js} +3 -3
  37. package/packages/ui/dist/assets/cursor-D3cYdnOt.js +3 -0
  38. package/packages/ui/dist/assets/{cursor-transparent-C8s5LY_P.js → cursor-transparent-Djp2Lulv.js} +1 -1
  39. package/packages/ui/dist/assets/{desktop-CQyixryE.js → desktop-DF6t43QS.js} +1 -1
  40. package/packages/ui/dist/assets/{disconnect-Ct0234l0.js → disconnect-BUeUrh3r.js} +1 -1
  41. package/packages/ui/dist/assets/{discord-haYPGMDl.js → discord-DWtvIwBI.js} +1 -1
  42. package/packages/ui/dist/assets/{etherscan-BTLrS1KK.js → etherscan-CrPMVPiO.js} +1 -1
  43. package/packages/ui/dist/assets/{events-wdo_D3Zy.js → events-DC84dMPF.js} +1 -1
  44. package/packages/ui/dist/assets/{exclamation-triangle-CMlYpOat.js → exclamation-triangle-9IcrwUru.js} +1 -1
  45. package/packages/ui/dist/assets/{extension-CNGBCbo8.js → extension-_qe-89Jo.js} +1 -1
  46. package/packages/ui/dist/assets/{external-link-DmYJSKcL.js → external-link-Bsar6cmv.js} +1 -1
  47. package/packages/ui/dist/assets/{facebook-F0iMVTem.js → facebook-CZnM2tIe.js} +1 -1
  48. package/packages/ui/dist/assets/{fallback-BqeFDEuW.js → fallback-BOfZ_bwu.js} +1 -1
  49. package/packages/ui/dist/assets/{farcaster-CYr9I6UA.js → farcaster-DyBlkt7c.js} +1 -1
  50. package/packages/ui/dist/assets/{filters-CxE97nqU.js → filters-DwCepBxH.js} +1 -1
  51. package/packages/ui/dist/assets/{github-CjRht-Wv.js → github-DgFcdJPt.js} +1 -1
  52. package/packages/ui/dist/assets/{google-3G0o4pR9.js → google-Csj-pWAm.js} +1 -1
  53. package/packages/ui/dist/assets/{help-circle-C5gNChqZ.js → help-circle-CF8XrZBx.js} +1 -1
  54. package/packages/ui/dist/assets/{id-C6_zK0Tb.js → id-YqFg_Hnr.js} +1 -1
  55. package/packages/ui/dist/assets/{image-DsU8Irlu.js → image-DvX7Dg9U.js} +1 -1
  56. package/packages/ui/dist/assets/{index-DQ44LBvq.js → index-3OLndEW6.js} +3 -3
  57. package/packages/ui/dist/assets/{index-CjvcQefO.js → index-BR_6qS4k.js} +1 -1
  58. package/packages/ui/dist/assets/{index-c8ZmMTds.js → index-BiN726SD.js} +1 -1
  59. package/packages/ui/dist/assets/index-DCnJ64lX.css +1 -0
  60. package/packages/ui/dist/assets/{index-Drc17uEc.js → index-Da0fOMbp.js} +1 -1
  61. package/packages/ui/dist/assets/{index-D1lgDFZV.js → index-DsS2DJdh.js} +1 -1
  62. package/packages/ui/dist/assets/index-yQSvDbVa.js +1775 -0
  63. package/packages/ui/dist/assets/{index.es-BhDQmlR4.js → index.es-BiIWW5o1.js} +4 -4
  64. package/packages/ui/dist/assets/{info-circle-CHV1idfy.js → info-circle-poBAGMBs.js} +1 -1
  65. package/packages/ui/dist/assets/{info-CAKKH6T2.js → info-zvmQXfcd.js} +1 -1
  66. package/packages/ui/dist/assets/{lightbulb-ew10LUMl.js → lightbulb-Dce_oD8K.js} +1 -1
  67. package/packages/ui/dist/assets/{mail-CACYeWXj.js → mail-dmvvhqN6.js} +1 -1
  68. package/packages/ui/dist/assets/{metamask-sdk-BUYu4RDE.js → metamask-sdk-BnCx3I3r.js} +1 -1
  69. package/packages/ui/dist/assets/{mobile-DX601q1y.js → mobile-B8JxvnR1.js} +1 -1
  70. package/packages/ui/dist/assets/{more-CQGeX45N.js → more-BwL7SLTo.js} +1 -1
  71. package/packages/ui/dist/assets/{network-placeholder-BQw8E4X-.js → network-placeholder-BGXRLaM_.js} +1 -1
  72. package/packages/ui/dist/assets/{nftPlaceholder-CifJ2CzA.js → nftPlaceholder-YKLlOwZU.js} +1 -1
  73. package/packages/ui/dist/assets/{off-B6oUArCZ.js → off-BdCZJUYq.js} +1 -1
  74. package/packages/ui/dist/assets/{parseSignature-DjWIdHkx.js → parseSignature-D9i4CKzP.js} +1 -1
  75. package/packages/ui/dist/assets/{play-store-Kq51oh3r.js → play-store-3UXzYs09.js} +1 -1
  76. package/packages/ui/dist/assets/{plus-BxZxVpff.js → plus-42VUC7wg.js} +1 -1
  77. package/packages/ui/dist/assets/{qr-code-CSBFpyhP.js → qr-code-W99JyxAx.js} +1 -1
  78. package/packages/ui/dist/assets/{recycle-horizontal-D0HyLkot.js → recycle-horizontal-B2t10e4m.js} +1 -1
  79. package/packages/ui/dist/assets/{refresh-BAQo228i.js → refresh-DEFqVlG3.js} +1 -1
  80. package/packages/ui/dist/assets/{reown-logo-DeUbwRp6.js → reown-logo-BpYt7vTo.js} +1 -1
  81. package/packages/ui/dist/assets/{search-C8Sd0Mpz.js → search-C38Hy_cf.js} +1 -1
  82. package/packages/ui/dist/assets/{secp256k1-BujG3JoP.js → secp256k1-IKD5pd64.js} +1 -1
  83. package/packages/ui/dist/assets/{send-B0JwUp6Q.js → send-gSwkftFg.js} +1 -1
  84. package/packages/ui/dist/assets/{swapHorizontal-B2k5yDqc.js → swapHorizontal-C1XbgPr5.js} +1 -1
  85. package/packages/ui/dist/assets/{swapHorizontalBold-yQqq0yPi.js → swapHorizontalBold-CtEf5r93.js} +1 -1
  86. package/packages/ui/dist/assets/{swapHorizontalMedium-NafYmdDj.js → swapHorizontalMedium-CHP_nvzn.js} +1 -1
  87. package/packages/ui/dist/assets/{swapHorizontalRoundedBold-BUn0GwEK.js → swapHorizontalRoundedBold-Crnco-Af.js} +1 -1
  88. package/packages/ui/dist/assets/{swapVertical-Be1m6suD.js → swapVertical-Ozkl0BQE.js} +1 -1
  89. package/packages/ui/dist/assets/{telegram-D-u7QHT5.js → telegram-BdfzLFDW.js} +1 -1
  90. package/packages/ui/dist/assets/{three-dots-B6Y4DFOR.js → three-dots-H2XRHPIG.js} +1 -1
  91. package/packages/ui/dist/assets/{twitch-DSy1rhWQ.js → twitch-DvbgB-BL.js} +1 -1
  92. package/packages/ui/dist/assets/{twitterIcon-tac1plSa.js → twitterIcon-BBsTYQzn.js} +1 -1
  93. package/packages/ui/dist/assets/{verify-6MylluBY.js → verify-3A_7IJxL.js} +1 -1
  94. package/packages/ui/dist/assets/{verify-filled-CZc0otb8.js → verify-filled-B4sP0yi_.js} +1 -1
  95. package/packages/ui/dist/assets/{w3m-modal-DbT03Pyz.js → w3m-modal-Bfua7kiP.js} +1 -1
  96. package/packages/ui/dist/assets/{wallet-473-ObZE.js → wallet-BbJ989Xh.js} +1 -1
  97. package/packages/ui/dist/assets/{wallet-placeholder-B9h3WvTk.js → wallet-placeholder-CQ2v8t-c.js} +1 -1
  98. package/packages/ui/dist/assets/{walletconnect-5GHIf5FR.js → walletconnect-BuShZt17.js} +1 -1
  99. package/packages/ui/dist/assets/{warning-circle-8A009Dx3.js → warning-circle-DMs8QNCr.js} +1 -1
  100. package/packages/ui/dist/assets/{x-B4jK8e8X.js → x-DzP75KD1.js} +1 -1
  101. package/packages/ui/dist/index.html +2 -2
  102. package/templates/default/AGENTS.md +3 -1
  103. package/packages/ui/dist/assets/cursor-DCRoxgSY.js +0 -3
  104. package/packages/ui/dist/assets/index-BCb0Nju4.js +0 -1775
  105. package/packages/ui/dist/assets/index-DDKDa0s2.css +0 -1
@@ -40463,178 +40463,148 @@ var REGISTER_PERMISSION_TYPEHASHES = {
40463
40463
  };
40464
40464
 
40465
40465
  // ../sdk/dist/deployments.js
40466
+ var CREATE2_KERNEL = "0x02ABC18B65A328de2e749F56ba79ACF2718a6659";
40467
+ var CREATE2_GOVERNANCE = "0x7A478118715791728BDE3bc7A4D7ECfdEB89C6EC";
40468
+ var CREATE2_TIMELOCK = "0xE48Ba8DB6d748adafD13155c3590f62e58a77f56";
40469
+ var CREATE2_SAFE_MODULE_ENABLER = "0x7897Cb53a4be4a2eaAf46D60573C4Fd83b33fE1F";
40470
+ var CREATE2_MANDATE_FACTORY = "0x14EDd6c2a56EfC0d71E215ab13094B9AF90543d2";
40471
+ var CREATE2_STANDARD_FEE_POLICY = "0xe7B5901b839cFFDEd9D4108A22712C8BfdA1D80D";
40472
+ var CREATE2_TREASURY = "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6";
40466
40473
  var sailDeployments = {
40467
- 84532: {
40468
- // SAIL-405 redeploy (2026-06-04, gitCommit 6d872e6): adds owner-gated
40469
- // setManager(newManager) to rotate the SMA's delegated signer (clears the
40470
- // permission set + bumps the nonce epoch). Genesis allowlist bootstrap +
40471
- // local CREATE2 proxy prediction carried over; allowlistBootstrapped=true,
40472
- // createAccount verified working, zero fees, onboarding live. Supersedes
40473
- // 0xcC50009115DAaBCB40513e03a1a0Cc2Fdf6Be558. Only `core` was redeployed;
40474
- // shared/standalone permission templates are NOT yet deployed against this
40475
- // kernel (run the templates targets + refill the template maps before clones).
40476
- chainId: 84532,
40477
- blockNumber: 42400417,
40478
- deployer: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40479
- governance: "0xEaD44bC6999E7b00b9b2E11c1660248DC2a30993",
40480
- timelock: "0x97B863e392C9859336788D5Ec454527d33C95B74",
40481
- kernel: "0xf1D0F4C9893612627409948BAa9d82a01a373799",
40482
- permissionFactory: "0xdfF6a2272F667cDf78Af4681b9c88A219998db95",
40483
- standardFeePolicy: "0x05570F7973b46Eb9Ed4518422891EFC26BD58b97",
40484
- safeModuleEnabler: "0xB2C2B52d94412e3472C9fb2B52186eA12a935869",
40485
- treasury: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40474
+ // ── Ethereum mainnet ─────────────────────────────────────────────────────────
40475
+ 1: {
40476
+ // CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33).
40477
+ // allowlistBootstrapped=true (genesis bootstrap), zero fees, 48h timelock.
40478
+ chainId: 1,
40479
+ blockNumber: 25280925,
40480
+ deployer: CREATE2_TREASURY,
40481
+ governance: CREATE2_GOVERNANCE,
40482
+ timelock: CREATE2_TIMELOCK,
40483
+ kernel: CREATE2_KERNEL,
40484
+ mandateFactory: CREATE2_MANDATE_FACTORY,
40485
+ standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
40486
+ safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
40487
+ treasury: CREATE2_TREASURY,
40486
40488
  maxPermissionFeeWei: 1000000000000000n,
40487
40489
  initialBaseFee: 0n,
40488
40490
  initialComplexityRate: 0n,
40489
40491
  dispatchModel: "selective",
40490
- // selective: verified on-chain DISPATCH_TYPEHASH 0xbe50c5391dcf9e08d11d2c30dbee822c14ad07af2ceb503c778d265801fb0e5c
40491
40492
  knownTemplates: [],
40492
40493
  standaloneTemplates: {}
40493
40494
  },
40495
+ // ── Base mainnet ─────────────────────────────────────────────────────────────
40494
40496
  8453: {
40495
- // SAIL-405 redeploy (2026-06-04, gitCommit 0ed0561): adds owner-gated
40496
- // setManager(newManager) to rotate the SMA's delegated signer (clears the
40497
- // permission set + bumps the nonce epoch). Genesis allowlist bootstrap +
40498
- // local CREATE2 proxy prediction carried over; allowlistBootstrapped=true,
40499
- // zero fees, onboarding live. Supersedes 0x20eff0DbE752e22655A6dAA5A94521FA06CDdE06.
40500
- // Only `core` was redeployed; shared/standalone permission templates are NOT yet
40501
- // deployed against this kernel (run the templates targets + refill the maps first).
40497
+ // CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33). Supersedes
40498
+ // 0x6319d3dfDDe3804ba93D65752b00c52bFb05a1ab (SAIL-405 redeploy).
40499
+ // allowlistBootstrapped=true, zero fees, 48h timelock.
40502
40500
  chainId: 8453,
40503
- blockNumber: 46898030,
40504
- deployer: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40505
- governance: "0x7E897D919872b1587577617ffFC42113679d0C50",
40506
- timelock: "0x8eC3Ca951E193C6E3713A70022454d7A1f083281",
40507
- kernel: "0x6319d3dfDDe3804ba93D65752b00c52bFb05a1ab",
40508
- permissionFactory: "0x7724EACd97C8601d5AC244Aadbf76ad87353Ff31",
40509
- standardFeePolicy: "0x65850a8D5050aeAade68289ff96c4F119a24B82e",
40510
- safeModuleEnabler: "0xC84EdE78f93291A1fab19F51c4c7e938AB302Edf",
40511
- treasury: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40501
+ blockNumber: 47115338,
40502
+ deployer: CREATE2_TREASURY,
40503
+ governance: CREATE2_GOVERNANCE,
40504
+ timelock: CREATE2_TIMELOCK,
40505
+ kernel: CREATE2_KERNEL,
40506
+ mandateFactory: CREATE2_MANDATE_FACTORY,
40507
+ standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
40508
+ safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
40509
+ treasury: CREATE2_TREASURY,
40512
40510
  maxPermissionFeeWei: 1000000000000000n,
40513
40511
  initialBaseFee: 0n,
40514
40512
  initialComplexityRate: 0n,
40515
40513
  dispatchModel: "selective",
40516
- // selective: verified on-chain DISPATCH_TYPEHASH 0xbe50c5391dcf9e08d11d2c30dbee822c14ad07af2ceb503c778d265801fb0e5c
40517
40514
  knownTemplates: [],
40518
40515
  standaloneTemplates: {}
40519
40516
  },
40517
+ // ── Arbitrum mainnet ─────────────────────────────────────────────────────────
40520
40518
  42161: {
40521
- // SAIL-405 redeploy (2026-06-04, gitCommit 0ed0561): adds owner-gated
40522
- // setManager(newManager) to rotate the SMA's delegated signer (clears the
40523
- // permission set + bumps the nonce epoch). Genesis allowlist bootstrap +
40524
- // local CREATE2 proxy prediction carried over; allowlistBootstrapped=true,
40525
- // zero fees, onboarding live. Supersedes 0x9AF32E0C395fb31f5cA28994351F8fAE3003e125.
40526
- // Bootstrap was sent as a standalone tx post-core-deploy; identical end state to Base.
40527
- // Only `core` was redeployed; shared/standalone permission templates are NOT yet
40528
- // deployed against this kernel (run the templates targets + refill the maps first).
40519
+ // CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33). Supersedes
40520
+ // 0x2716B12832DED0EF5688519c5Fe069EFc0374E02 (SAIL-405 redeploy).
40521
+ // allowlistBootstrapped=true, zero fees, 48h timelock.
40529
40522
  chainId: 42161,
40530
- blockNumber: 25244824,
40531
- deployer: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40532
- governance: "0xd6AbB7A1036ADc7958Abffec9Da03450c5a2Ec8e",
40533
- timelock: "0x114CB7110C780f7E3a6093AfE0B52463a569857C",
40534
- kernel: "0x2716B12832DED0EF5688519c5Fe069EFc0374E02",
40535
- permissionFactory: "0x23681A8A4C9819D8EaB37E46B858da6F3c85E683",
40536
- standardFeePolicy: "0xAdfB986D48480bC67a7cF3751d30599161632e0D",
40537
- safeModuleEnabler: "0xabe2a6D03F592BC602cA1dBDCD885ba2493274f9",
40538
- treasury: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40523
+ blockNumber: 471736462,
40524
+ deployer: CREATE2_TREASURY,
40525
+ governance: CREATE2_GOVERNANCE,
40526
+ timelock: CREATE2_TIMELOCK,
40527
+ kernel: CREATE2_KERNEL,
40528
+ mandateFactory: CREATE2_MANDATE_FACTORY,
40529
+ standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
40530
+ safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
40531
+ treasury: CREATE2_TREASURY,
40539
40532
  maxPermissionFeeWei: 1000000000000000n,
40540
40533
  initialBaseFee: 0n,
40541
40534
  initialComplexityRate: 0n,
40542
40535
  dispatchModel: "selective",
40543
- // selective: verified on-chain DISPATCH_TYPEHASH 0xbe50c5391dcf9e08d11d2c30dbee822c14ad07af2ceb503c778d265801fb0e5c
40544
40536
  knownTemplates: [],
40545
40537
  standaloneTemplates: {}
40546
40538
  },
40539
+ // ── Unichain mainnet ─────────────────────────────────────────────────────────
40547
40540
  130: {
40548
- // SAIL-406 deploy (2026-06-05, gitCommit 2c9e325): full protocol deploy on
40549
- // Unichain mainnet — core + the complete template suite (7 shared + 12
40550
- // standalone), all source-verified on uniscan.xyz. Genesis allowlist
40551
- // bootstrap (allowlistBootstrapped=true: Safe v1.4.1 factory, both
40552
- // singletons, SafeModuleEnabler, StandardFeePolicy, SafeProxy codehash
40553
- // 0xd7d408eb…fb4c), zero fees, onboarding live without the 48h timelock.
40554
- // First chain to ship permission templates against the kernel.
40541
+ // CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33). Supersedes
40542
+ // 0xD985029960a9B7C2E7E38e102C448b8b8539B156 (SAIL-406 deploy).
40543
+ // NOTE: knownTemplates and standaloneTemplates from SAIL-406 were deployed
40544
+ // against the old kernel 0xD985029... and are now invalid. They must be
40545
+ // redeployed against the new kernel 0x02ABC1... and re-populated here.
40555
40546
  chainId: 130,
40556
- blockNumber: 49897206,
40557
- deployer: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40558
- governance: "0xAb5C90ECfF2763f6f20f8E553E3b8778dD9C349A",
40559
- timelock: "0xd44FbBB37f01e235E0EE5386948F216d36D0CEf2",
40560
- kernel: "0xD985029960a9B7C2E7E38e102C448b8b8539B156",
40561
- permissionFactory: "0x8edDb62Aa49CeB837abf2653be2d93Ad9Fe6777D",
40562
- standardFeePolicy: "0x7bBA8BE3c01c972757aA4a230A00D58aB600A1F1",
40563
- safeModuleEnabler: "0xFE9227A9F2baf704060c604466df354a5A137b9B",
40564
- treasury: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40547
+ blockNumber: 50271704,
40548
+ deployer: CREATE2_TREASURY,
40549
+ governance: CREATE2_GOVERNANCE,
40550
+ timelock: CREATE2_TIMELOCK,
40551
+ kernel: CREATE2_KERNEL,
40552
+ mandateFactory: CREATE2_MANDATE_FACTORY,
40553
+ standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
40554
+ safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
40555
+ treasury: CREATE2_TREASURY,
40565
40556
  maxPermissionFeeWei: 1000000000000000n,
40566
40557
  initialBaseFee: 0n,
40567
40558
  initialComplexityRate: 0n,
40568
40559
  dispatchModel: "selective",
40569
- // selective: verified on-chain DISPATCH_TYPEHASH 0xbe50c5391dcf9e08d11d2c30dbee822c14ad07af2ceb503c778d265801fb0e5c
40570
- knownTemplates: [
40571
- {
40572
- address: "0xbD624eC67e2685872A60c0aF8F020727e20D096e",
40573
- kind: "SharedAMMLiquidityPermission",
40574
- chainId: 130,
40575
- label: "Shared AMM Liquidity",
40576
- description: "Bounded AMM liquidity provision/removal \u2014 enforces allowed pools and bounds."
40577
- },
40578
- {
40579
- address: "0x9d386605518FA81ff536b351ff055d26203229A9",
40580
- kind: "SharedApproveAndCallBatchPermission",
40581
- chainId: 130,
40582
- label: "Shared Approve-and-Call Batch",
40583
- description: "Bounded approve-then-call batch \u2014 enforces token, spender, and selector allowlists."
40584
- },
40585
- {
40586
- address: "0x948a9F9a6f2828E50f7e71bd569ba75A69da2BEb",
40587
- kind: "SharedBoundedBorrowPermission",
40588
- chainId: 130,
40589
- label: "Shared Bounded Borrow",
40590
- description: "Bounded borrow \u2014 enforces allowed markets and max borrow size."
40591
- },
40592
- {
40593
- address: "0xfD19fad56Ca3d6FaCd4279a2F84f09bef8967f6a",
40594
- kind: "SharedBoundedSwapPermission",
40595
- chainId: 130,
40596
- label: "Shared Uniswap V3 Swap",
40597
- description: "Bounded swap via Uniswap V3 \u2014 enforces allowed tokens, max trade size, and slippage."
40598
- },
40599
- {
40600
- address: "0x900cd03ee15e629bC4e94F6344d5529F4862071c",
40601
- kind: "SharedDeFiBundlePermission",
40602
- chainId: 130,
40603
- label: "Shared DeFi Bundle",
40604
- description: "Bounded multi-step DeFi bundle within a single permission."
40605
- },
40606
- {
40607
- address: "0x1dF90a2484bCF3c6Da2FB035aa0C9f523e77Cd62",
40608
- kind: "SharedPendlePermission",
40609
- chainId: 130,
40610
- label: "Shared Pendle",
40611
- description: "Bounded Pendle interactions \u2014 enforces allowed markets and bounds."
40612
- },
40613
- {
40614
- address: "0x851Ad196b7DC6c05eaf0B9420f2a72dc336D7739",
40615
- kind: "SharedTransferTargetPermission",
40616
- chainId: 130,
40617
- label: "Shared Transfer Target",
40618
- description: "Allows transfers only to a pre-approved target address."
40619
- }
40620
- ],
40621
- standaloneTemplates: {
40622
- // EIP-1167 clone LOGIC addresses — the `impl` argument to
40623
- // PermissionFactory.deployAndAttach(account, impl, salt, initData). A clone
40624
- // is created and configured per account via its initialize(...).
40625
- azuroPrediction: "0xd48cdBB25bF0A214dEffECac3c9431650834b046",
40626
- boundedApprove: "0xbF7089A905081054c9dA628707f2e1EF70A7F300",
40627
- boundedBorrow: "0x17D466309C7E0237960f68126Cc4A109D194ac28",
40628
- boundedDeposit: "0xf49E304EDf806AF46E8f17740e56C1CBFad5d264",
40629
- boundedLiFi: "0x6a0171013FeD6B2Eda16A4dd4DB33Fa34b7F3e3f",
40630
- boundedSwap: "0x06696F9dd4bD0994f55b075600627Dc6E54635c9",
40631
- boundedWithdraw: "0xE207CfC8c2204b15ee5fD22B79472929706c7E4b",
40632
- gmxPerp: "0xB1bb967aC11D61C0599c8458D9B950461db5D4E9",
40633
- gainsNetworkPerp: "0x1297673f71A9be02bc876Dbd0ceaB3c96D268bE3",
40634
- limitlessPrediction: "0x2bE4280d8816626e1dea4E94A83d9334A971AF90",
40635
- synthetixPerp: "0x711a70B16D013a9B96Bd6733F4b3097e5787f860",
40636
- transferTarget: "0x8428155b6b9eea4E78b9a52c2312752eD04Baf16"
40637
- }
40560
+ // Templates cleared: the SAIL-406 shared + standalone templates were deployed
40561
+ // against the old kernel (0xD985029...) and are invalid against the new one.
40562
+ // Re-populate after redeploying templates against 0x02ABC1...
40563
+ knownTemplates: [],
40564
+ standaloneTemplates: {}
40565
+ },
40566
+ // ── Base Sepolia (testnet) ───────────────────────────────────────────────────
40567
+ 84532: {
40568
+ // CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33). Supersedes
40569
+ // 0xf1D0F4C9893612627409948BAa9d82a01a373799 (SAIL-405 redeploy).
40570
+ // allowlistBootstrapped=true, zero fees, 48h timelock.
40571
+ chainId: 84532,
40572
+ blockNumber: 42625843,
40573
+ deployer: CREATE2_TREASURY,
40574
+ governance: CREATE2_GOVERNANCE,
40575
+ timelock: CREATE2_TIMELOCK,
40576
+ kernel: CREATE2_KERNEL,
40577
+ mandateFactory: CREATE2_MANDATE_FACTORY,
40578
+ standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
40579
+ safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
40580
+ treasury: CREATE2_TREASURY,
40581
+ maxPermissionFeeWei: 1000000000000000n,
40582
+ initialBaseFee: 0n,
40583
+ initialComplexityRate: 0n,
40584
+ dispatchModel: "selective",
40585
+ knownTemplates: [],
40586
+ standaloneTemplates: {}
40587
+ },
40588
+ // ── Eth Sepolia (testnet) ────────────────────────────────────────────────────
40589
+ 11155111: {
40590
+ // CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33).
40591
+ // allowlistBootstrapped=true, zero fees, 48h timelock.
40592
+ chainId: 11155111,
40593
+ blockNumber: 11023571,
40594
+ deployer: CREATE2_TREASURY,
40595
+ governance: CREATE2_GOVERNANCE,
40596
+ timelock: CREATE2_TIMELOCK,
40597
+ kernel: CREATE2_KERNEL,
40598
+ mandateFactory: CREATE2_MANDATE_FACTORY,
40599
+ standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
40600
+ safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
40601
+ treasury: CREATE2_TREASURY,
40602
+ maxPermissionFeeWei: 1000000000000000n,
40603
+ initialBaseFee: 0n,
40604
+ initialComplexityRate: 0n,
40605
+ dispatchModel: "selective",
40606
+ knownTemplates: [],
40607
+ standaloneTemplates: {}
40638
40608
  }
40639
40609
  };
40640
40610
  function getSailDeployment(chainId) {
@@ -49623,6 +49593,17 @@ function signerEntry(role, address, balanceByAddr) {
49623
49593
  status: balanceStatus(wei)
49624
49594
  };
49625
49595
  }
49596
+ function addManagerToList(existing, current, next) {
49597
+ const base = existing ?? (current ? [getAddress(current)] : []);
49598
+ const all = [...base, getAddress(next)];
49599
+ const seen = /* @__PURE__ */ new Set();
49600
+ return all.filter((a) => {
49601
+ const l = a.toLowerCase();
49602
+ if (seen.has(l)) return false;
49603
+ seen.add(l);
49604
+ return true;
49605
+ });
49606
+ }
49626
49607
  var OVERVIEW_TTL_MS = 1e4;
49627
49608
  function startServer(sailDir, { port = PORT } = {}) {
49628
49609
  const app = (0, import_express.default)();
@@ -49913,7 +49894,8 @@ function startServer(sailDir, { port = PORT } = {}) {
49913
49894
  try {
49914
49895
  const account = JSON.parse(import_node_fs2.default.readFileSync(at("account.json"), "utf-8"));
49915
49896
  if (account?.safe?.toLowerCase() === safe.toLowerCase()) {
49916
- import_node_fs2.default.writeFileSync(at("account.json"), `${JSON.stringify({ ...account, manager }, null, 2)}
49897
+ const managers = addManagerToList(account.managers, account.manager, manager);
49898
+ import_node_fs2.default.writeFileSync(at("account.json"), `${JSON.stringify({ ...account, manager, managers }, null, 2)}
49917
49899
  `);
49918
49900
  }
49919
49901
  } catch {
@@ -49923,7 +49905,9 @@ function startServer(sailDir, { port = PORT } = {}) {
49923
49905
  const list = JSON.parse(import_node_fs2.default.readFileSync(listPath, "utf-8"));
49924
49906
  const idx = list.findIndex((a) => a.safe?.toLowerCase() === safe.toLowerCase());
49925
49907
  if (idx !== -1) {
49926
- list[idx] = { ...list[idx], manager };
49908
+ const entry = list[idx];
49909
+ const managers = addManagerToList(entry.managers, entry.manager, manager);
49910
+ list[idx] = { ...entry, manager, managers };
49927
49911
  import_node_fs2.default.writeFileSync(listPath, `${JSON.stringify(list, null, 2)}
49928
49912
  `);
49929
49913
  }
@@ -49945,7 +49929,20 @@ function startServer(sailDir, { port = PORT } = {}) {
49945
49929
  res.status(500).json({ error: String(err) });
49946
49930
  }
49947
49931
  });
49948
- const isManagerKeyFile = (file) => file === "manager.json" || file.startsWith("manager-") && file.endsWith(".json");
49932
+ const isManagerKeyFile = (file) => file === "manager.json" || file.startsWith("manager-") && file.endsWith(".json") || file.startsWith("managers/") && file.endsWith(".json");
49933
+ const listManagerKeyFiles = () => {
49934
+ let files = [];
49935
+ try {
49936
+ files = import_node_fs2.default.readdirSync(at("keys"));
49937
+ } catch {
49938
+ files = [];
49939
+ }
49940
+ try {
49941
+ files.push(...import_node_fs2.default.readdirSync(at("keys/managers")).map((f) => `managers/${f}`));
49942
+ } catch {
49943
+ }
49944
+ return files;
49945
+ };
49949
49946
  const keystoreAddress = (file) => {
49950
49947
  try {
49951
49948
  const ks = JSON.parse(import_node_fs2.default.readFileSync(at(`keys/${file}`), "utf-8"));
@@ -49957,12 +49954,7 @@ function startServer(sailDir, { port = PORT } = {}) {
49957
49954
  };
49958
49955
  app.get("/api/signers", (_req, res) => {
49959
49956
  try {
49960
- let files = [];
49961
- try {
49962
- files = import_node_fs2.default.readdirSync(at("keys"));
49963
- } catch {
49964
- files = [];
49965
- }
49957
+ const files = listManagerKeyFiles();
49966
49958
  const activeSafe = readActiveSafe();
49967
49959
  let activeManager = null;
49968
49960
  try {
@@ -50002,12 +49994,7 @@ function startServer(sailDir, { port = PORT } = {}) {
50002
49994
  return;
50003
49995
  }
50004
49996
  try {
50005
- let files = [];
50006
- try {
50007
- files = import_node_fs2.default.readdirSync(at("keys"));
50008
- } catch {
50009
- files = [];
50010
- }
49997
+ const files = listManagerKeyFiles();
50011
49998
  const want = getAddress(address).toLowerCase();
50012
49999
  const match = files.find((file) => isManagerKeyFile(file) && keystoreAddress(file)?.toLowerCase() === want);
50013
50000
  if (!match) {
@@ -50640,8 +50627,9 @@ function startServer(sailDir, { port = PORT } = {}) {
50640
50627
  const [permissionSigner, manager, , sessionActive] = configs;
50641
50628
  const managerSet = Boolean(manager) && getAddress(manager) !== zeroAddress2;
50642
50629
  const managerAddr = managerSet ? getAddress(manager) : localSigner;
50630
+ const knownManagerAddrs = (account.managers ?? []).map((a) => getAddress(a));
50643
50631
  const signerAddrs = [
50644
- ...new Set([managerAddr, account.owner ? getAddress(account.owner) : null, ...localManagerAddrs].filter(Boolean))
50632
+ ...new Set([managerAddr, account.owner ? getAddress(account.owner) : null, ...localManagerAddrs, ...knownManagerAddrs].filter(Boolean))
50645
50633
  ];
50646
50634
  const balances = await Promise.all(signerAddrs.map((a) => client.getBalance({ address: a })));
50647
50635
  const balanceByAddr = new Map(signerAddrs.map((a, i) => [a.toLowerCase(), balances[i]]));
@@ -50667,6 +50655,17 @@ function startServer(sailDir, { port = PORT } = {}) {
50667
50655
  } else {
50668
50656
  managerEntry = { role: "manager", address: null, balanceWei: null, balanceEth: null, status: "unconfigured" };
50669
50657
  }
50658
+ if (knownManagerAddrs.length > 0) {
50659
+ const activeLower = (managerSet ? getAddress(manager) : account.manager ?? null)?.toLowerCase() ?? null;
50660
+ managerEntry.managers = knownManagerAddrs.map((a) => {
50661
+ const bal = balanceByAddr.get(a.toLowerCase());
50662
+ return {
50663
+ address: a,
50664
+ balanceEth: bal != null ? formatEther(bal) : null,
50665
+ isActive: a.toLowerCase() === activeLower
50666
+ };
50667
+ });
50668
+ }
50670
50669
  const signers = [managerEntry];
50671
50670
  for (const la of localManagerAddrs) {
50672
50671
  if (getAddress(la) !== (managerAddr ? getAddress(managerAddr) : null)) {
@@ -50695,6 +50694,17 @@ function startServer(sailDir, { port = PORT } = {}) {
50695
50694
  status: "local"
50696
50695
  }));
50697
50696
  }
50697
+ if (account.managers?.length > 0) {
50698
+ const onchainMgr = result.sma.manager;
50699
+ const activeLower = (onchainMgr && onchainMgr !== zeroAddress2 ? onchainMgr : account.manager ?? null)?.toLowerCase() ?? null;
50700
+ const managersPayload = account.managers.map((a) => ({
50701
+ address: getAddress(a),
50702
+ balanceEth: null,
50703
+ isActive: a.toLowerCase() === activeLower
50704
+ }));
50705
+ const mgrSigner = result.signers.find((s) => s.role === "manager");
50706
+ if (mgrSigner && !mgrSigner.managers) mgrSigner.managers = managersPayload;
50707
+ }
50698
50708
  return result;
50699
50709
  }
50700
50710
  const distDir = process.env.SAILOR_UI_DIST ?? import_node_path.default.join(import_node_path.default.dirname(_thisFile), "dist");
@@ -1,7 +1,14 @@
1
1
  import type { Address } from "viem";
2
2
  import type { DispatchModel } from "./capabilities.js";
3
- /** Chains with a bundled Sail Protocol deployment: Base, Base Sepolia, Arbitrum, Unichain. */
4
- export type SailChainId = 8453 | 84532 | 42161 | 130;
3
+ /**
4
+ * Chains with a bundled Sail Protocol deployment.
5
+ * Mainnets: Ethereum (1), Base (8453), Arbitrum (42161), Unichain (130).
6
+ * Testnets: Base Sepolia (84532), Eth Sepolia (11155111).
7
+ *
8
+ * All six chains were redeployed via CREATE2 (global salt, gitCommit 1199b33)
9
+ * so every core contract lands at the same address on every chain.
10
+ */
11
+ export type SailChainId = 1 | 8453 | 42161 | 130 | 84532 | 11155111;
5
12
  /** A pre-audited mandate template available on a chain. */
6
13
  export type KnownTemplate = {
7
14
  kind: string;
@@ -21,7 +28,7 @@ export type CloneTemplateParam = {
21
28
  * Rich, self-describing metadata for an EIP-1167 clone permission template — the
22
29
  * wizard-/tooling-facing companion to the bare `standaloneTemplates` address map.
23
30
  * `address` mirrors `standaloneTemplates[key]` (the clone LOGIC). A clone is created
24
- * per account via `PermissionFactory.deployAndAttach(account, address, salt,
31
+ * per account via `MandateFactory.deployAndAttach(account, address, salt,
25
32
  * initData)`, where `initData` ABI-encodes a call to `initialize(initParams…)`.
26
33
  */
27
34
  export type CloneTemplateInfo = {
@@ -46,7 +53,7 @@ export type SailDeployment = {
46
53
  governance: Address;
47
54
  timelock: Address;
48
55
  kernel: Address;
49
- permissionFactory: Address;
56
+ mandateFactory: Address;
50
57
  standardFeePolicy: Address;
51
58
  safeModuleEnabler: Address;
52
59
  treasury: Address;
@@ -57,15 +64,15 @@ export type SailDeployment = {
57
64
  * Dispatch model this kernel implements, as a static hint. Verified on-chain
58
65
  * against each kernel's DISPATCH_TYPEHASH. The SDK still prefers live detection
59
66
  * (detectKernelCapabilities) and uses this only as a fallback when the on-chain
60
- * read is unavailable. All three bundled chains (Base, Base Sepolia, Arbitrum)
61
- * run the "selective" model, verified on-chain against each kernel's DISPATCH_TYPEHASH.
67
+ * read is unavailable. All deployed chains run the "selective" model, verified
68
+ * on-chain against each kernel's DISPATCH_TYPEHASH.
62
69
  */
63
70
  dispatchModel?: DispatchModel;
64
71
  /** Pre-audited shared mandate templates available on this chain. */
65
72
  knownTemplates?: KnownTemplate[];
66
73
  /**
67
74
  * Standalone (EIP-1167 clone) permission template LOGIC addresses, keyed by a
68
- * short name. These are the `impl` argument to PermissionFactory.deployAndAttach.
75
+ * short name. These are the `impl` argument to MandateFactory.deployAndAttach.
69
76
  */
70
77
  standaloneTemplates?: Record<string, Address>;
71
78
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,8FAA8F;AAC9F,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;AAErD,2DAA2D;AAC3D,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,oEAAoE;IACpE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACtC,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,cAAc,CA4K/D,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAMjE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAiBlF"}
1
+ {"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEpE,2DAA2D;AAC3D,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,oEAAoE;IACpE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACtC,CAAC;AAoBF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,cAAc,CAwI/D,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAMjE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CA4BlF"}