@futdevpro/ccap 1.1.3503 → 1.1.3513
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/client-dist/{agent-instances.module-UYD2XYZE.js → agent-instances.module-T6EFJFPE.js} +2 -2
- package/client-dist/{ca.module-3CDQXCAY.js → ca.module-NCBI74FP.js} +2 -2
- package/client-dist/cc-usage-dashboard.component-Q3FBUIIR.js +2 -0
- package/client-dist/cc-usage-dashboard.component-Q3FBUIIR.js.map +7 -0
- package/client-dist/{cc.module-BFN6BZIN.js → cc.module-CIY6QMB5.js} +4 -4
- package/client-dist/{cc.module-BFN6BZIN.js.map → cc.module-CIY6QMB5.js.map} +3 -3
- package/client-dist/{chunk-EFNJA3BL.js → chunk-2DR4NRFY.js} +2 -2
- package/client-dist/{chunk-NOL3YONA.js → chunk-2ZI26XMZ.js} +2 -2
- package/client-dist/{chunk-IZEUWGJK.js → chunk-3N2JTN7N.js} +2 -2
- package/client-dist/{chunk-KRHX46JK.js → chunk-4UKDXJIX.js} +2 -2
- package/client-dist/{chunk-YMTP6F2C.js → chunk-5BYRCQ4G.js} +2 -2
- package/client-dist/{chunk-JU3RXVDX.js → chunk-66FQLE3Y.js} +2 -2
- package/client-dist/{chunk-E65UDGDD.js → chunk-6HZB6QSW.js} +2 -2
- package/client-dist/{chunk-5QAKXYWT.js → chunk-6RYNRTDZ.js} +2 -2
- package/client-dist/{chunk-Z3Y2VOXP.js → chunk-6UQHXR3E.js} +2 -2
- package/client-dist/{chunk-GIL5OROM.js → chunk-7IUV4ACY.js} +2 -2
- package/client-dist/{chunk-QAT6LVRB.js → chunk-A37XCJWY.js} +2 -2
- package/client-dist/{chunk-ZFOQPLZY.js → chunk-ASAT75IU.js} +2 -2
- package/client-dist/{chunk-4J5DWAPO.js → chunk-AWIEYMZV.js} +2 -2
- package/client-dist/{chunk-SPUD4EJ3.js → chunk-BR7XXFVN.js} +2 -2
- package/client-dist/{chunk-VFQYSWYJ.js → chunk-BWH3JLHB.js} +2 -2
- package/client-dist/{chunk-CZTIPDFA.js → chunk-DZFGKIFO.js} +2 -2
- package/client-dist/{chunk-XQESPKDR.js → chunk-E5QVIO4C.js} +2 -2
- package/client-dist/{chunk-C2XSLL34.js → chunk-EUEEHSUR.js} +2 -2
- package/client-dist/{chunk-MZ3YYQWQ.js → chunk-EVV5L3LF.js} +2 -2
- package/client-dist/{chunk-GIOHSC4G.js → chunk-F4BNEQYE.js} +2 -2
- package/client-dist/{chunk-7MDPIWHS.js → chunk-F4DZS3GH.js} +2 -2
- package/client-dist/{chunk-7QLE2HOD.js → chunk-FWVYBWXT.js} +2 -2
- package/client-dist/{chunk-EUOPIQ5M.js → chunk-FYMVJNXZ.js} +2 -2
- package/client-dist/{chunk-6D27TSZV.js → chunk-GDAWHJEQ.js} +2 -2
- package/client-dist/chunk-GTMPSTDI.js +3 -0
- package/client-dist/chunk-GTMPSTDI.js.map +7 -0
- package/client-dist/{chunk-FJ4AQ7DJ.js → chunk-H3QXSZIS.js} +2 -2
- package/client-dist/{chunk-27RTDRPJ.js → chunk-HZSNYOA4.js} +2 -2
- package/client-dist/{chunk-45RYB36M.js → chunk-I7TF6JIJ.js} +2 -2
- package/client-dist/{chunk-55LHNHV7.js → chunk-IFF2675Y.js} +2 -2
- package/client-dist/{chunk-RW5UDPYM.js → chunk-M6EVLEFQ.js} +2 -2
- package/client-dist/{chunk-WZGZ4B4R.js → chunk-MLGDSF43.js} +2 -2
- package/client-dist/{chunk-JZMWWTFG.js → chunk-MS2KQ2G4.js} +2 -2
- package/client-dist/{chunk-VRW33XBA.js → chunk-N4KTLLCR.js} +2 -2
- package/client-dist/{chunk-MFTEXAIX.js → chunk-N72DAUY2.js} +2 -2
- package/client-dist/{chunk-VNUSAOT6.js → chunk-NEYB4VGZ.js} +2 -2
- package/client-dist/{chunk-32WW5HVW.js → chunk-NIEBWTUO.js} +2 -2
- package/client-dist/{chunk-G67NI7SB.js → chunk-NQ33IXIS.js} +2 -2
- package/client-dist/{chunk-JV5HX5WS.js → chunk-OKZUEJZL.js} +2 -2
- package/client-dist/{chunk-ORUMPAIH.js → chunk-P5OOFVBC.js} +2 -2
- package/client-dist/{chunk-FTD33PGM.js → chunk-PR5JV6XX.js} +2 -2
- package/client-dist/{chunk-QP4ANIRB.js → chunk-PY7ZXKHG.js} +2 -2
- package/client-dist/{chunk-4VX4P4Q3.js → chunk-Q7ORWYDO.js} +2 -2
- package/client-dist/{chunk-TEX5KB4S.js → chunk-QIXXTQJJ.js} +2 -2
- package/client-dist/{chunk-JJGA6W5B.js → chunk-QKA6WOBV.js} +2 -2
- package/client-dist/{chunk-KOC4SVZ5.js → chunk-QP53M3ES.js} +2 -2
- package/client-dist/{chunk-BGZFNZ2C.js → chunk-QQ2C4ATW.js} +2 -2
- package/client-dist/{chunk-32QSFPDR.js → chunk-QXQWNRPL.js} +2 -2
- package/client-dist/{chunk-FIEFWNJ6.js → chunk-SNRZOR27.js} +2 -2
- package/client-dist/{chunk-QKJHPKSW.js → chunk-SXZ6SL34.js} +2 -2
- package/client-dist/{chunk-2UN7HPVU.js → chunk-UKVDEDDM.js} +2 -2
- package/client-dist/{chunk-OMWHFGY6.js → chunk-VTB3IOVV.js} +2 -2
- package/client-dist/{chunk-5APAM7YJ.js → chunk-WR6NSOQ2.js} +2 -2
- package/client-dist/{chunk-5APAM7YJ.js.map → chunk-WR6NSOQ2.js.map} +1 -1
- package/client-dist/{chunk-N7EJNOHR.js → chunk-WTIUHUMN.js} +2 -2
- package/client-dist/{chunk-7NW27ZEP.js → chunk-YWLPTL5I.js} +2 -2
- package/client-dist/{chunk-ADKAF2LM.js → chunk-YXBF6EUR.js} +2 -2
- package/client-dist/{chunk-OZ3TFPBG.js → chunk-YYUKX4AF.js} +2 -2
- package/client-dist/{chunk-QRLOYIIN.js → chunk-YZ27TRGU.js} +2 -2
- package/client-dist/{consultant.module-MXCBA6UI.js → consultant.module-RMGDKO7R.js} +2 -2
- package/client-dist/{crd.module-PGOP7A3H.js → crd.module-7WOWOPYH.js} +2 -2
- package/client-dist/{dashboard.module-YAWOK3X4.js → dashboard.module-UH6C2XJC.js} +2 -2
- package/client-dist/{do.module-YPKXT2VE.js → do.module-DITA42VY.js} +2 -2
- package/client-dist/{document-library.module-47UIYBBS.js → document-library.module-NDPVJJ3N.js} +2 -2
- package/client-dist/{embedding-eval.module-ZFEAXH6R.js → embedding-eval.module-JROZZ6QM.js} +2 -2
- package/client-dist/{embedding-registry.module-CX6ONIEM.js → embedding-registry.module-OYU7CQPU.js} +2 -2
- package/client-dist/{err.module-2WOMSH46.js → err.module-M7L4RF46.js} +2 -2
- package/client-dist/{feedback.module-KVOQQYW7.js → feedback.module-ZG272S6E.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-76HVPG4X.js → host-runtime-mcp.module-PVVACC4N.js} +2 -2
- package/client-dist/index.html +1 -1
- package/client-dist/{live-dev-pipeline.module-ZNMPF3BA.js → live-dev-pipeline.module-FKNKOKZ4.js} +2 -2
- package/client-dist/{logs.module-N37FMRF3.js → logs.module-MN6SDRMH.js} +2 -2
- package/client-dist/{main-CCBBKAON.js → main-NHPLEEM5.js} +3 -3
- package/client-dist/{master-control-remote-poc.module-N65RQBOH.js → master-control-remote-poc.module-A3XO6MIC.js} +2 -2
- package/client-dist/{mobile-app.module-SFHXH642.js → mobile-app.module-QADWA6MM.js} +2 -2
- package/client-dist/{model-registry.module-QHKLMBXO.js → model-registry.module-IRG2HWJO.js} +2 -2
- package/client-dist/{oc.module-JGV3IDGY.js → oc.module-52TKAH2Q.js} +2 -2
- package/client-dist/{orc.module-VZ5XW5KW.js → orc.module-HSTBXIQM.js} +2 -2
- package/client-dist/{project-management.module-DL4TUNDP.js → project-management.module-FL2RWRKY.js} +2 -2
- package/client-dist/project-source-routed.module-N76TUCOI.js +2 -0
- package/client-dist/{scheduler.module-Q3SJSC4T.js → scheduler.module-XYY22JMT.js} +2 -2
- package/client-dist/{session.module-U2IP5J2B.js → session.module-N2DJOIHD.js} +2 -2
- package/client-dist/{set.module-GTMFMOEB.js → set.module-XW5X3ZLY.js} +2 -2
- package/client-dist/{setup.module-4TXUKI27.js → setup.module-B4QMBFKV.js} +2 -2
- package/client-dist/{terminals.module-W3ZC3EEB.js → terminals.module-24K6SSFO.js} +2 -2
- package/client-dist/{voice-notes-poc.module-WV4DMW3S.js → voice-notes-poc.module-IW7VPFDD.js} +2 -2
- package/client-dist/{wfs.module-GIXOJHRJ.js → wfs.module-S2SMAT5Z.js} +2 -2
- package/package.json +1 -1
- package/client-dist/cc-usage-dashboard.component-MGVQCZUN.js +0 -2
- package/client-dist/cc-usage-dashboard.component-MGVQCZUN.js.map +0 -7
- package/client-dist/chunk-GWK7XTQP.js +0 -2
- package/client-dist/chunk-GWK7XTQP.js.map +0 -7
- package/client-dist/project-source-routed.module-G3PDOXVT.js +0 -2
- /package/client-dist/{agent-instances.module-UYD2XYZE.js.map → agent-instances.module-T6EFJFPE.js.map} +0 -0
- /package/client-dist/{ca.module-3CDQXCAY.js.map → ca.module-NCBI74FP.js.map} +0 -0
- /package/client-dist/{chunk-EFNJA3BL.js.map → chunk-2DR4NRFY.js.map} +0 -0
- /package/client-dist/{chunk-NOL3YONA.js.map → chunk-2ZI26XMZ.js.map} +0 -0
- /package/client-dist/{chunk-IZEUWGJK.js.map → chunk-3N2JTN7N.js.map} +0 -0
- /package/client-dist/{chunk-KRHX46JK.js.map → chunk-4UKDXJIX.js.map} +0 -0
- /package/client-dist/{chunk-YMTP6F2C.js.map → chunk-5BYRCQ4G.js.map} +0 -0
- /package/client-dist/{chunk-JU3RXVDX.js.map → chunk-66FQLE3Y.js.map} +0 -0
- /package/client-dist/{chunk-E65UDGDD.js.map → chunk-6HZB6QSW.js.map} +0 -0
- /package/client-dist/{chunk-5QAKXYWT.js.map → chunk-6RYNRTDZ.js.map} +0 -0
- /package/client-dist/{chunk-Z3Y2VOXP.js.map → chunk-6UQHXR3E.js.map} +0 -0
- /package/client-dist/{chunk-GIL5OROM.js.map → chunk-7IUV4ACY.js.map} +0 -0
- /package/client-dist/{chunk-QAT6LVRB.js.map → chunk-A37XCJWY.js.map} +0 -0
- /package/client-dist/{chunk-ZFOQPLZY.js.map → chunk-ASAT75IU.js.map} +0 -0
- /package/client-dist/{chunk-4J5DWAPO.js.map → chunk-AWIEYMZV.js.map} +0 -0
- /package/client-dist/{chunk-SPUD4EJ3.js.map → chunk-BR7XXFVN.js.map} +0 -0
- /package/client-dist/{chunk-VFQYSWYJ.js.map → chunk-BWH3JLHB.js.map} +0 -0
- /package/client-dist/{chunk-CZTIPDFA.js.map → chunk-DZFGKIFO.js.map} +0 -0
- /package/client-dist/{chunk-XQESPKDR.js.map → chunk-E5QVIO4C.js.map} +0 -0
- /package/client-dist/{chunk-C2XSLL34.js.map → chunk-EUEEHSUR.js.map} +0 -0
- /package/client-dist/{chunk-MZ3YYQWQ.js.map → chunk-EVV5L3LF.js.map} +0 -0
- /package/client-dist/{chunk-GIOHSC4G.js.map → chunk-F4BNEQYE.js.map} +0 -0
- /package/client-dist/{chunk-7MDPIWHS.js.map → chunk-F4DZS3GH.js.map} +0 -0
- /package/client-dist/{chunk-7QLE2HOD.js.map → chunk-FWVYBWXT.js.map} +0 -0
- /package/client-dist/{chunk-EUOPIQ5M.js.map → chunk-FYMVJNXZ.js.map} +0 -0
- /package/client-dist/{chunk-6D27TSZV.js.map → chunk-GDAWHJEQ.js.map} +0 -0
- /package/client-dist/{chunk-FJ4AQ7DJ.js.map → chunk-H3QXSZIS.js.map} +0 -0
- /package/client-dist/{chunk-27RTDRPJ.js.map → chunk-HZSNYOA4.js.map} +0 -0
- /package/client-dist/{chunk-45RYB36M.js.map → chunk-I7TF6JIJ.js.map} +0 -0
- /package/client-dist/{chunk-55LHNHV7.js.map → chunk-IFF2675Y.js.map} +0 -0
- /package/client-dist/{chunk-RW5UDPYM.js.map → chunk-M6EVLEFQ.js.map} +0 -0
- /package/client-dist/{chunk-WZGZ4B4R.js.map → chunk-MLGDSF43.js.map} +0 -0
- /package/client-dist/{chunk-JZMWWTFG.js.map → chunk-MS2KQ2G4.js.map} +0 -0
- /package/client-dist/{chunk-VRW33XBA.js.map → chunk-N4KTLLCR.js.map} +0 -0
- /package/client-dist/{chunk-MFTEXAIX.js.map → chunk-N72DAUY2.js.map} +0 -0
- /package/client-dist/{chunk-VNUSAOT6.js.map → chunk-NEYB4VGZ.js.map} +0 -0
- /package/client-dist/{chunk-32WW5HVW.js.map → chunk-NIEBWTUO.js.map} +0 -0
- /package/client-dist/{chunk-G67NI7SB.js.map → chunk-NQ33IXIS.js.map} +0 -0
- /package/client-dist/{chunk-JV5HX5WS.js.map → chunk-OKZUEJZL.js.map} +0 -0
- /package/client-dist/{chunk-ORUMPAIH.js.map → chunk-P5OOFVBC.js.map} +0 -0
- /package/client-dist/{chunk-FTD33PGM.js.map → chunk-PR5JV6XX.js.map} +0 -0
- /package/client-dist/{chunk-QP4ANIRB.js.map → chunk-PY7ZXKHG.js.map} +0 -0
- /package/client-dist/{chunk-4VX4P4Q3.js.map → chunk-Q7ORWYDO.js.map} +0 -0
- /package/client-dist/{chunk-TEX5KB4S.js.map → chunk-QIXXTQJJ.js.map} +0 -0
- /package/client-dist/{chunk-JJGA6W5B.js.map → chunk-QKA6WOBV.js.map} +0 -0
- /package/client-dist/{chunk-KOC4SVZ5.js.map → chunk-QP53M3ES.js.map} +0 -0
- /package/client-dist/{chunk-BGZFNZ2C.js.map → chunk-QQ2C4ATW.js.map} +0 -0
- /package/client-dist/{chunk-32QSFPDR.js.map → chunk-QXQWNRPL.js.map} +0 -0
- /package/client-dist/{chunk-FIEFWNJ6.js.map → chunk-SNRZOR27.js.map} +0 -0
- /package/client-dist/{chunk-QKJHPKSW.js.map → chunk-SXZ6SL34.js.map} +0 -0
- /package/client-dist/{chunk-2UN7HPVU.js.map → chunk-UKVDEDDM.js.map} +0 -0
- /package/client-dist/{chunk-OMWHFGY6.js.map → chunk-VTB3IOVV.js.map} +0 -0
- /package/client-dist/{chunk-N7EJNOHR.js.map → chunk-WTIUHUMN.js.map} +0 -0
- /package/client-dist/{chunk-7NW27ZEP.js.map → chunk-YWLPTL5I.js.map} +0 -0
- /package/client-dist/{chunk-ADKAF2LM.js.map → chunk-YXBF6EUR.js.map} +0 -0
- /package/client-dist/{chunk-OZ3TFPBG.js.map → chunk-YYUKX4AF.js.map} +0 -0
- /package/client-dist/{chunk-QRLOYIIN.js.map → chunk-YZ27TRGU.js.map} +0 -0
- /package/client-dist/{consultant.module-MXCBA6UI.js.map → consultant.module-RMGDKO7R.js.map} +0 -0
- /package/client-dist/{crd.module-PGOP7A3H.js.map → crd.module-7WOWOPYH.js.map} +0 -0
- /package/client-dist/{dashboard.module-YAWOK3X4.js.map → dashboard.module-UH6C2XJC.js.map} +0 -0
- /package/client-dist/{do.module-YPKXT2VE.js.map → do.module-DITA42VY.js.map} +0 -0
- /package/client-dist/{document-library.module-47UIYBBS.js.map → document-library.module-NDPVJJ3N.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-ZFEAXH6R.js.map → embedding-eval.module-JROZZ6QM.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-CX6ONIEM.js.map → embedding-registry.module-OYU7CQPU.js.map} +0 -0
- /package/client-dist/{err.module-2WOMSH46.js.map → err.module-M7L4RF46.js.map} +0 -0
- /package/client-dist/{feedback.module-KVOQQYW7.js.map → feedback.module-ZG272S6E.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-76HVPG4X.js.map → host-runtime-mcp.module-PVVACC4N.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-ZNMPF3BA.js.map → live-dev-pipeline.module-FKNKOKZ4.js.map} +0 -0
- /package/client-dist/{logs.module-N37FMRF3.js.map → logs.module-MN6SDRMH.js.map} +0 -0
- /package/client-dist/{main-CCBBKAON.js.map → main-NHPLEEM5.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-N65RQBOH.js.map → master-control-remote-poc.module-A3XO6MIC.js.map} +0 -0
- /package/client-dist/{mobile-app.module-SFHXH642.js.map → mobile-app.module-QADWA6MM.js.map} +0 -0
- /package/client-dist/{model-registry.module-QHKLMBXO.js.map → model-registry.module-IRG2HWJO.js.map} +0 -0
- /package/client-dist/{oc.module-JGV3IDGY.js.map → oc.module-52TKAH2Q.js.map} +0 -0
- /package/client-dist/{orc.module-VZ5XW5KW.js.map → orc.module-HSTBXIQM.js.map} +0 -0
- /package/client-dist/{project-management.module-DL4TUNDP.js.map → project-management.module-FL2RWRKY.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-G3PDOXVT.js.map → project-source-routed.module-N76TUCOI.js.map} +0 -0
- /package/client-dist/{scheduler.module-Q3SJSC4T.js.map → scheduler.module-XYY22JMT.js.map} +0 -0
- /package/client-dist/{session.module-U2IP5J2B.js.map → session.module-N2DJOIHD.js.map} +0 -0
- /package/client-dist/{set.module-GTMFMOEB.js.map → set.module-XW5X3ZLY.js.map} +0 -0
- /package/client-dist/{setup.module-4TXUKI27.js.map → setup.module-B4QMBFKV.js.map} +0 -0
- /package/client-dist/{terminals.module-W3ZC3EEB.js.map → terminals.module-24K6SSFO.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-WV4DMW3S.js.map → voice-notes-poc.module-IW7VPFDD.js.map} +0 -0
- /package/client-dist/{wfs.module-GIXOJHRJ.js.map → wfs.module-S2SMAT5Z.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["src/app/_modules/shared/_pipes/s-instance-display-name.pipe.ts", "src/app/_modules/external-sessions/_modules/claude-code/_collections/cc-account-usage-pacing.util.ts", "src/app/_modules/external-sessions/_modules/claude-code/_components/cc-usage-dashboard/cc-usage-dashboard.component.ts", "src/app/_modules/external-sessions/_modules/claude-code/_components/cc-usage-dashboard/cc-usage-dashboard.component.html"],
|
|
4
|
+
"sourcesContent": ["import { inject, Pipe, PipeTransform } from '@angular/core';\n\nimport {\n ExS_InstanceRegistry_DataService,\n} from '../../external-sessions/_services/exs-instance-registry.data-service';\n\n/**\n * REQ-SC-INSTANCE-REGISTRY-RENAME-001 (cycle 891): instance-id → user-given\n * displayName resolver pipe.\n *\n * A pipe a `ExS_InstanceRegistry_DataService.resolveDisplayName()` static-szerű\n * lookup-ját használja a `list_$` signal cache-ből; fallback az `instanceKey`\n * első 8 char-ja. A signal-cache change-detection automatikusan triggereli a\n * pipe re-evaluation-t (pure pipe a signal-stack semantics-ával: a registry\n * lista-frissülés újra felrendereli a label-t).\n *\n * Használat a template-ben:\n * {{ row.ccapId | sInstanceDisplayName }}\n *\n * SSOT: minden UI hely, ahol egy raw `ccapId` / `instanceKey` látható, cserélni\n * kell erre a pipe-ra.\n */\n@Pipe({ name: 'sInstanceDisplayName', standalone: true, pure: false })\nexport class S_InstanceDisplayName_Pipe implements PipeTransform {\n\n private readonly registry_DS: ExS_InstanceRegistry_DataService =\n inject(ExS_InstanceRegistry_DataService);\n\n transform(instanceKey: string | undefined | null): string {\n return this.registry_DS.resolveDisplayName(instanceKey);\n }\n}\n", "/**\n * CC Account usage pacing util (REQ-CC-USAGE-DASHBOARD-001 Slice 6 cycle 867).\n *\n * Pacing target compute: minden time-windowed utilization-hoz (five_hour /\n * seven_day / seven_day_opus / seven_day_sonnet) ki tudja számolni a\n * jelenlegi időponti pacing-target-et (`elapsed_sec * 100 / window_sec`),\n * és klasszifikálja, hogy a tényleges utilization above / on-pace / below\n * pacing-en van-e. Az `extra_usage` window NEM time-based, ehhez NEM\n * használható (a hívó döntse el melyik window-on alkalmazza).\n *\n * Pure-static, NEM service-injekt. A Slice 6 Dashboard view-frissítés és\n * a későbbi per-window usage-card komponens egyaránt ezt használja.\n */\nexport class CC_AccountUsagePacing_Util {\n\n /** Time-windowed windowType-ok másodpercekben. */\n static readonly WINDOW_SEC_BY_TYPE: Record<string, number> = {\n five_hour: 5 * 3600,\n seven_day: 7 * 24 * 3600,\n seven_day_opus: 7 * 24 * 3600,\n seven_day_sonnet: 7 * 24 * 3600,\n };\n\n /**\n * Pacing fraction (0..1): mennyi telt el a window-ból. NEM utilization-hez\n * köthető. Példa: ha a 5h window 2.5h-nál tart, pacing = 0.5.\n *\n * Compute: `windowStart = resetsAtMs - windowSec*1000`;\n * `elapsed = max(0, now - windowStart)`;\n * `pacing = clamp(elapsed / windowSec*1000, 0, 1)`.\n *\n * Visszaad null-t, ha NEM time-windowed type vagy NEM kalkulálható\n * (windowSec hiányzik a térképen, resetsAtMs negatív/0).\n */\n static computePacingFraction(params: {\n windowType: string;\n resetsAtMs: number | undefined;\n nowMs: number;\n }): number | null {\n const windowSec: number | undefined =\n CC_AccountUsagePacing_Util.WINDOW_SEC_BY_TYPE[params.windowType];\n if (windowSec === undefined) {\n return null;\n }\n if (!params.resetsAtMs || params.resetsAtMs <= 0) {\n return null;\n }\n const windowMs: number = windowSec * 1000;\n const windowStart: number = params.resetsAtMs - windowMs;\n const elapsed: number = Math.max(0, params.nowMs - windowStart);\n const pacing: number = elapsed / windowMs;\n if (pacing < 0) {\n return 0;\n }\n if (pacing > 1) {\n return 1;\n }\n return pacing;\n }\n\n /**\n * Pacing klasszifikáció: utilization vs pacing-target. Tolerancia (default\n * 0.10) belül 'on-pace'; alatta 'below' (egészséges, alulhasználat); fölötte\n * 'above' (gyors égetés).\n *\n * Visszaad null-t, ha bármelyik input hiányzik.\n */\n static classifyPacing(params: {\n utilization: number | undefined;\n pacingFraction: number | null;\n tolerance?: number;\n }): 'below' | 'on-pace' | 'above' | null {\n if (params.utilization == null || params.pacingFraction === null) {\n return null;\n }\n const tolerance: number = params.tolerance ?? 0.10;\n const diff: number = params.utilization - params.pacingFraction;\n if (diff > tolerance) {\n return 'above';\n }\n if (diff < -tolerance) {\n return 'below';\n }\n return 'on-pace';\n }\n\n /**\n * Tailwind text-color class a pacing-klasszifikáció alapján:\n * - 'below' → 'text-green-400' (alulhasználat, egészséges)\n * - 'on-pace' → 'text-yellow-300' (on-target, watch)\n * - 'above' → 'text-red-400' (gyors égetés, közeli rate-limit)\n * - null → 'text-neutral-500' (no-data fallback)\n */\n static colorClassForPacing(classification: 'below' | 'on-pace' | 'above' | null): string {\n if (classification === 'below') {\n return 'text-green-400';\n }\n if (classification === 'on-pace') {\n return 'text-yellow-300';\n }\n if (classification === 'above') {\n return 'text-red-400';\n }\n return 'text-neutral-500';\n }\n}\n", "import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, Signal, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { S_Modal_Component } from '../../../../../shared/_components/s-modal/s-modal.component';\nimport { S_InstanceDisplayName_Pipe } from '../../../../../shared/_pipes/s-instance-display-name.pipe';\nimport { ExS_InstanceRegistry_DataService } from '../../../../_services/exs-instance-registry.data-service';\nimport { CC_Account_DataService } from '../../_services/cc-account.data-service';\nimport { CC_Account_Response } from '../../_models/interfaces/cc-account/cc-account.interface';\nimport { CC_AccountUsageState_Response } from '../../_models/interfaces/cc-account/cc-account-usage-state.interface';\nimport { CC_AccountUsageEvent_Response } from '../../_models/interfaces/cc-account/cc-account-usage-event.interface';\nimport { CC_AccountUsagePacing_Util } from '../../_collections/cc-account-usage-pacing.util';\nimport { CC_AccountUsageView_Component } from '../cc-account-usage-view/cc-account-usage-view.component';\n\n/**\n * CC Account Usage Dashboard skeleton komponens (REQ-CC-USAGE-DASHBOARD-001\n * Slice 5 cycle 858).\n *\n * Standalone Angular komponens — listázza az ismert CC account-okat + a\n * cross-instance instance-mapping aggregate-et. A skeleton-szint:\n * loading state, error state, üres-lista placeholder, és minimum lista-\n * render. A részletes account-card + per-window usage-render a Slice\n * további szeleteiben (cycle 859+).\n *\n * Data-flow: ngOnInit → CC_Account_DataService.loadDashboardBootstrap\n * (Promise.all listAccounts + getInstanceMapping) → signal-update →\n * template re-render.\n *\n * Refresh-button: explicit user-action → POST /cc-account/refresh +\n * automatikus listAccounts re-fetch (data-service refreshAccounts hívás).\n */\n@Component({\n selector: 'app-cc-usage-dashboard',\n standalone: true,\n imports: [CommonModule, FormsModule, S_Modal_Component, CC_AccountUsageView_Component, S_InstanceDisplayName_Pipe],\n templateUrl: './cc-usage-dashboard.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-auto p-4' },\n})\n/** CC_UsageDashboard_Component class. */\nexport class CC_UsageDashboard_Component implements OnInit {\n\n readonly account_DS: CC_Account_DataService = inject(CC_Account_DataService);\n\n /**\n * REQ-SC-INSTANCE-REGISTRY-RENAME-001 (cycle 891): instance registry cache\n * a displayName-pipe forrásához. A pipe a `resolveDisplayName(ccapId)`-t\n * használja, ami a `list_$` signal-cache-ből olvas — ezért a Dashboard\n * ngOnInit-jében `loadList()` kell ha a cache még üres.\n */\n readonly instanceRegistry_DS: ExS_InstanceRegistry_DataService = inject(ExS_InstanceRegistry_DataService);\n\n /** Refresh-button folyamat-jelző (a data-service.isLoading_$ mellett külön ehhez). */\n readonly isRefreshing_$ = signal<boolean>(false);\n\n /** Globális 'Refresh all usage' folyamat-jelző (cycle 873). */\n readonly isRefreshingAllUsage_$ = signal<boolean>(false);\n\n /** Per-account refresh-usage folyamat-jelző Set (cycle 873). */\n readonly refreshingUsageKeys_$ = signal<Set<string>>(new Set<string>());\n\n /** Edit-email modal nyitva-jelző (cycle 877: shared S_Modal flow). */\n readonly editEmailModalOpen_$ = signal<boolean>(false);\n\n /** Edit-email modal — éppen szerkesztett accountKey (null = nincs nyitva). */\n readonly editEmailAccountKey_$ = signal<string | null>(null);\n\n /** Edit-email modal — input-mező live értéke (ngModel két-irányú binding). */\n readonly editEmailValue_$ = signal<string>('');\n\n /** Edit-email modal — save folyamat-jelző (a Save gomb spinner-jéhez). */\n readonly editEmailSaving_$ = signal<boolean>(false);\n\n /**\n * Cycle 879: melyik account history-panel-je van nyitva. A Set-tartalom\n * accountKey-eket tárol (több is nyitva lehet egyszerre).\n */\n readonly expandedHistoryKeys_$ = signal<Set<string>>(new Set<string>());\n\n /** Per-account history-loading folyamat-jelző (a fetch alatt). */\n readonly loadingHistoryKeys_$ = signal<Set<string>>(new Set<string>());\n\n\n /**\n * Computed: a cross-instance instance-mapping aggregate `{ instances }`\n * top-level array hossza. A template ezzel dönti el, hogy a \"no instances\"\n * placeholder vagy a lista renderel.\n */\n readonly instanceCount_$: Signal<number> = computed((): number => {\n const mapping = this.account_DS.instanceMapping_$();\n return mapping?.instances.length ?? 0;\n });\n\n ngOnInit(): void {\n // fire-and-forget: a Promise hibái a data-service.loadError_$ signal-ba\n // mennek, NEM throw-olnak — a template loadError_$-rel rendereli.\n void this.account_DS.loadDashboardBootstrap();\n // REQ-SC-INSTANCE-REGISTRY-RENAME-001 (cycle 891): a displayName-pipe a\n // registry-cache-ből olvas — ha még üres, töltsük be defenzíven.\n if (this.instanceRegistry_DS.list_$().length === 0) {\n void this.instanceRegistry_DS.loadList();\n }\n // REQ-CC-USAGE-DASHBOARD-001 Slice 6 second-half (cycle 871): real-time\n // socket subscription a `cc:account-usage-update` és `cc:account-list-update`\n // event-ekre. A subscription a service singleton élettartam alatt él\n // (root-providedIn), így nem teardown-oljuk a komponens destroy-jakor.\n this.account_DS.startLiveUpdates();\n }\n\n /** Refresh-button click — POST /refresh + auto listAccounts. */\n async handleRefresh(): Promise<void> {\n this.isRefreshing_$.set(true);\n try {\n await this.account_DS.refreshAccounts();\n } finally {\n this.isRefreshing_$.set(false);\n }\n }\n\n /** Per-account 'Refresh usage' gomb: aktív Anthropic /api/oauth/usage pull (cycle 873). */\n async handleRefreshUsage(accountKey: string): Promise<void> {\n this.refreshingUsageKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.add(accountKey);\n return next;\n });\n try {\n await this.account_DS.refreshAccountUsage(accountKey);\n } finally {\n this.refreshingUsageKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.delete(accountKey);\n return next;\n });\n }\n }\n\n /**\n * Globális 'Refresh all usage' gomb: minden identity-group primary accountKey-ére\n * usage-pull (cycle 873, refactor cycle 890 — group-szinten, NEM raw rekord-szinten,\n * mert a sibling-rekordok mind ugyanazt a credential-fájlt használnák).\n */\n async handleRefreshAllUsage(): Promise<void> {\n const keys: string[] = this.account_DS.identityGroups_$().map(\n (g): string => g.primary.accountKey,\n );\n if (keys.length === 0) {\n return;\n }\n this.isRefreshingAllUsage_$.set(true);\n try {\n await Promise.all(keys.map((k: string): Promise<unknown> => this.account_DS.refreshAccountUsage(k)));\n } finally {\n this.isRefreshingAllUsage_$.set(false);\n }\n }\n\n /** Reset countdown formázás — emberi olvasható ('2h 34m', '5d 1h', 'expired'). */\n formatResetCountdown(resetsAtMs: number | undefined): string {\n if (resetsAtMs == null || !isFinite(resetsAtMs) || resetsAtMs <= 0) {\n return '—';\n }\n const diffMs: number = resetsAtMs - Date.now();\n if (diffMs <= 0) {\n return 'expired';\n }\n const totalMinutes: number = Math.floor(diffMs / 60_000);\n const days: number = Math.floor(totalMinutes / (60 * 24));\n const hours: number = Math.floor((totalMinutes % (60 * 24)) / 60);\n const minutes: number = totalMinutes % 60;\n if (days > 0) {\n return `${days}d ${hours}h`;\n }\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n }\n return `${minutes}m`;\n }\n\n /** True ha az adott account kulcsra fut a per-account refresh-usage. */\n isRefreshingUsageOf(accountKey: string): boolean {\n return this.refreshingUsageKeys_$().has(accountKey);\n }\n\n /**\n * Manuális email-bind: megnyitja a shared S_Modal-t az aktuális email-lel\n * (vagy üres mezővel); a tényleges PATCH a Save-click-en történik\n * (`handleEditEmailSave`).\n */\n handleEditEmail(account: CC_Account_Response): void {\n this.editEmailAccountKey_$.set(account.accountKey);\n this.editEmailValue_$.set(account.email ?? '');\n this.editEmailModalOpen_$.set(true);\n }\n\n /** Edit-email modal Save-click: trim + PATCH + close (üres = clear). */\n async handleEditEmailSave(): Promise<void> {\n const accountKey: string | null = this.editEmailAccountKey_$();\n if (accountKey === null) {\n return;\n }\n const trimmed: string = this.editEmailValue_$().trim();\n this.editEmailSaving_$.set(true);\n try {\n await this.account_DS.renameAccount({\n accountKey: accountKey,\n email: trimmed === '' ? null : trimmed,\n });\n this.handleEditEmailClose();\n } finally {\n this.editEmailSaving_$.set(false);\n }\n }\n\n /** Edit-email modal Cancel / X / backdrop: state-cleanup. */\n handleEditEmailClose(): void {\n this.editEmailModalOpen_$.set(false);\n this.editEmailAccountKey_$.set(null);\n this.editEmailValue_$.set('');\n }\n\n /** True, ha az account-rekord rendelkezik email-lel. Template használja a \"Set email\" / \"Edit email\" gomb-szöveghez. */\n hasEmail(account: CC_Account_Response): boolean {\n return typeof account.email === 'string' && account.email !== '';\n }\n\n /**\n * History expand-toggle (cycle 879). Első expand-kor lazy-fetch-eli a\n * `/cc-account/:accountKey/usage-history` endpoint-ot; további toggle-ök\n * NEM re-fetchelnek (a felhasználó explicit Refresh-history gombbal kérheti).\n */\n async handleToggleHistory(accountKey: string): Promise<void> {\n const isOpen: boolean = this.expandedHistoryKeys_$().has(accountKey);\n if (isOpen) {\n // Bezárás: csak a Set-ből kivesszük; a cache marad.\n this.expandedHistoryKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.delete(accountKey);\n return next;\n });\n return;\n }\n // Nyitás: Set-be tesszük + lazy-load (csak ha még nincs cache-ben).\n this.expandedHistoryKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.add(accountKey);\n return next;\n });\n const cached: CC_AccountUsageEvent_Response[] | undefined =\n this.account_DS.usageHistoryMap_$().get(accountKey);\n if (cached === undefined) {\n await this.loadHistoryFor(accountKey);\n }\n }\n\n /** Explicit history-refresh (a panel-en belül 'Refresh history' gomb). */\n async handleRefreshHistory(accountKey: string): Promise<void> {\n await this.loadHistoryFor(accountKey);\n }\n\n\n /** Belső: history-fetch + per-account loading-set kezelés. */\n private async loadHistoryFor(accountKey: string): Promise<void> {\n this.loadingHistoryKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.add(accountKey);\n return next;\n });\n try {\n await this.account_DS.loadAccountUsageHistory({ accountKey: accountKey });\n } finally {\n this.loadingHistoryKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.delete(accountKey);\n return next;\n });\n }\n }\n\n /** True, ha a history-panel nyitva az adott accountKey-re. */\n isHistoryOpen(accountKey: string): boolean {\n return this.expandedHistoryKeys_$().has(accountKey);\n }\n\n /** True, ha éppen fut a history-fetch az adott accountKey-re. */\n isHistoryLoading(accountKey: string): boolean {\n return this.loadingHistoryKeys_$().has(accountKey);\n }\n\n /** History-eventek (descending observedAt) az adott accountKey-re a cache-ből. */\n historyItemsOf(accountKey: string): CC_AccountUsageEvent_Response[] {\n const items: CC_AccountUsageEvent_Response[] =\n this.account_DS.usageHistoryMap_$().get(accountKey) ?? [];\n // Defensive copy + descending observedAt sort (újabb felül).\n const copy: CC_AccountUsageEvent_Response[] = items.slice();\n copy.sort((a: CC_AccountUsageEvent_Response, b: CC_AccountUsageEvent_Response): number => {\n const ta: number = a.observedAt ? Date.parse(a.observedAt) : 0;\n const tb: number = b.observedAt ? Date.parse(b.observedAt) : 0;\n return tb - ta;\n });\n return copy;\n }\n\n /** History-event source-badge szín (stream / pull / unknown). */\n sourceBadgeClassOf(source: string | undefined): string {\n if (source === 'stream') {\n return 'bg-cyan-900/40 border-cyan-700 text-cyan-300';\n }\n if (source === 'pull') {\n return 'bg-emerald-900/40 border-emerald-700 text-emerald-300';\n }\n return 'bg-neutral-800 border-neutral-700 text-neutral-400';\n }\n\n /** ISO timestamp → emberi olvasható lokál-string ('2026-05-09 14:32:01'); null → '—'. */\n formatObservedAt(observedAt: string | undefined): string {\n if (observedAt == null || observedAt === '') {\n return '—';\n }\n const t: number = Date.parse(observedAt);\n if (!isFinite(t) || t <= 0) {\n return observedAt;\n }\n const d: Date = new Date(t);\n const yyyy: string = String(d.getFullYear());\n const mm: string = String(d.getMonth() + 1).padStart(2, '0');\n const dd: string = String(d.getDate()).padStart(2, '0');\n const hh: string = String(d.getHours()).padStart(2, '0');\n const mi: string = String(d.getMinutes()).padStart(2, '0');\n const ss: string = String(d.getSeconds()).padStart(2, '0');\n return `${yyyy}-${mm}-${dd} ${hh}:${mi}:${ss}`;\n }\n\n /**\n * Window-typeName → emberi label (template-render). Pure mapping.\n * Cycle 875: vizuális javítás — a snake_case helyett title-case + iconok.\n */\n windowLabelOf(windowType: string): string {\n switch (windowType) {\n case 'five_hour': return '5-hour session';\n case 'seven_day': return 'Weekly';\n case 'seven_day_opus': return 'Weekly · Opus';\n case 'seven_day_sonnet': return 'Weekly · Sonnet';\n case 'extra_usage': return 'Extra (pay-as-you-go)';\n default: return windowType;\n }\n }\n\n /**\n * Token-status badge color-class. Zöld: valid; sárga: scope-incomplete;\n * piros: expired/revoked; szürke: unknown.\n */\n tokenStatusBadgeClassOf(tokenStatus: string | undefined): string {\n if (tokenStatus === 'valid') {\n return 'bg-green-900/40 border-green-700 text-green-300';\n }\n if (tokenStatus === 'scope-incomplete') {\n return 'bg-amber-900/40 border-amber-700 text-amber-300';\n }\n if (tokenStatus === 'expired' || tokenStatus === 'revoked') {\n return 'bg-red-900/40 border-red-700 text-red-300';\n }\n return 'bg-neutral-800 border-neutral-700 text-neutral-400';\n }\n\n /**\n * Account avatar — a displayName első értelmes karaktere (vagy 'A' fallback).\n * Pure mapping; a HTML-template hash-szín-ezi a card-ikon háttérszínét.\n */\n avatarLetterOf(account: CC_Account_Response): string {\n const name: string = this.displayNameOf(account).trim();\n return name.length > 0 ? name.charAt(0).toUpperCase() : 'A';\n }\n\n /**\n * Avatar háttérszín stable hash-ből az accountKey alapján. 8 paletta-szín\n * — a card-ikon visszaadja az account vizuális identitását.\n */\n avatarBgClassOf(accountKey: string): string {\n const palette: string[] = [\n 'bg-emerald-700/60 text-emerald-200',\n 'bg-cyan-700/60 text-cyan-200',\n 'bg-indigo-700/60 text-indigo-200',\n 'bg-fuchsia-700/60 text-fuchsia-200',\n 'bg-amber-700/60 text-amber-200',\n 'bg-rose-700/60 text-rose-200',\n 'bg-teal-700/60 text-teal-200',\n 'bg-violet-700/60 text-violet-200',\n ];\n let hash: number = 0;\n for (let i: number = 0; i < accountKey.length; i++) {\n hash = (hash * 31 + accountKey.charCodeAt(i)) & 0x7fffffff;\n }\n return palette[hash % palette.length];\n }\n\n /**\n * Account primary display label (REQ-CC-USAGE-DASHBOARD-001 cycle 892):\n * **email-first** — ha az account-on be van állítva email, azt mutatjuk\n * elsődlegesen (user-readable, identity-szintű). Fallback:\n * 1. user-given `displayName` (kézi rename)\n * 2. `account-{first6-of-accountKey}` (auto-generated)\n *\n * Ez érinti az összes helyet ahol az account-ot listázzuk (Dashboard cards,\n * instance-mapping section, popover headerek).\n */\n displayNameOf(account: CC_Account_Response): string {\n if (typeof account.email === 'string' && account.email !== '') {\n return account.email;\n }\n if (account.displayName !== '') {\n return account.displayName;\n }\n return `account-${account.accountKey.slice(0, 6)}`;\n }\n\n /**\n * Template helper: per-instance items count → mappingéhez render-be ('N usage records').\n * Pure mapping a Slice 6 view részletesebb table-cell-jei előtt.\n */\n itemsCountOf(items: CC_AccountUsageState_Response[]): number {\n return items.length;\n }\n\n /**\n * Slice 6 first-step (cycle 865): latest five_hour utilization egy instance-en.\n * A `five_hour` windowType item utilization-jét adja vissza (0..1 fraction);\n * ha nincs ilyen item → null (template '—'-t renderel).\n */\n latestFiveHourUtilOf(items: CC_AccountUsageState_Response[]): number | null {\n for (const item of items) {\n if (item.windowType === 'five_hour' && typeof item.utilization === 'number') {\n return item.utilization;\n }\n }\n return null;\n }\n\n /**\n * Slice 6 first-step (cycle 865): legutoljára-látott account-kulcs egy instance-en.\n * Az `items` rendszerint egyetlen account-hoz tartozik (per-instance only egy active),\n * de defensive a legutóbbi observedAt szerint választ. Empty → null.\n */\n latestAccountKeyOf(items: CC_AccountUsageState_Response[]): string | null {\n if (items.length === 0) {\n return null;\n }\n let latest: CC_AccountUsageState_Response = items[0];\n for (const item of items) {\n const a: number = item.observedAt ? Date.parse(item.observedAt) : 0;\n const b: number = latest.observedAt ? Date.parse(latest.observedAt) : 0;\n if (a > b) {\n latest = item;\n }\n }\n return latest.accountKey;\n }\n\n /**\n * Account-display lookup accountKey alapján (Slice 6 cycle 865, identity-aware\n * REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 cycle 893):\n *\n * 1. **Identity-group sibling-aware**: a `identityGroups_$`-ban keresi a csoportot\n * ami a megadott accountKey-t primary-ként vagy sibling-ként tartalmazza, és\n * a group primary `displayNameOf`-ját adja vissza. Így ha egy instance egy\n * sibling (token-rotation duplikátum) accountKey-vel jelez usage-et, a UI\n * a logikai account email-jét/displayName-jét mutatja (NEM a sibling\n * raw-accountKey-jét).\n *\n * 2. Fallback: a régi `accounts_$`-cache lookup (raw rekord) + `displayNameOf`.\n *\n * 3. Végső fallback: `account-{first6}`.\n */\n displayNameByAccountKey(accountKey: string): string {\n // Identity-group sibling-aware lookup.\n for (const group of this.account_DS.identityGroups_$()) {\n if (group.primary.accountKey === accountKey\n || group.siblingAccountKeys.includes(accountKey)) {\n return this.displayNameOf(group.primary);\n }\n }\n // Fallback: raw cache.\n const found: CC_Account_Response | undefined = this.account_DS.accounts_$().find(\n (a): boolean => a.accountKey === accountKey,\n );\n if (found) {\n return this.displayNameOf(found);\n }\n return `account-${accountKey.slice(0, 6)}`;\n }\n\n /**\n * Slice 6 first-step (cycle 865): utilization fraction (0..1) → percent string '42%'.\n * NEM logika — pure mapping. null → '—' (no data).\n */\n formatUtilization(utilization: number | null): string {\n if (utilization === null) {\n return '—';\n }\n return `${Math.round(utilization * 100)}%`;\n }\n\n /**\n * Slice 6 second-step (cycle 866): utilization-küszöb-szín a Dashboard 5h\n * percent-jelzéséhez. Egyszerűbb threshold-alapú szín-jelzés (NEM időbeli-\n * adaptív). Megmarad mint fallback / null-data eset, ahol a pacing NEM\n * számolható (resetsAtMs hiányzik). Tartományok REQ-CC-RATE-001 amber/red.\n */\n utilizationColorClass(utilization: number | null): string {\n if (utilization === null || utilization < 0.5) {\n return 'text-green-400';\n }\n if (utilization < 0.85) {\n return 'text-yellow-300';\n }\n return 'text-red-400';\n }\n\n /**\n * Slice 6 fourth-step (cycle 868): pacing-target színkód a Dashboard 5h\n * utilization-jelzéséhez. A cycle 866 sima threshold-küszöb helyett\n * időbeli-adaptív: a window-elapsed alapján a user lássa, hogy a tényleges\n * utilization \"above pacing\" (gyors), \"on-pace\" vagy \"below pacing\"\n * (egészséges). A `CC_AccountUsagePacing_Util` static metódusait láncolja.\n *\n * Fallback `utilizationColorClass`-ra, ha pacing NEM számolható\n * (resetsAtMs hiányzik / extra_usage). Ezzel mindig van valami szín-jelzés.\n */\n pacingColorClassForFiveHour(items: CC_AccountUsageState_Response[]): string {\n let fiveHourItem: CC_AccountUsageState_Response | undefined;\n for (const item of items) {\n if (item.windowType === 'five_hour') {\n fiveHourItem = item;\n break;\n }\n }\n if (!fiveHourItem) {\n return 'text-neutral-500';\n }\n const pacingFraction: number | null = CC_AccountUsagePacing_Util.computePacingFraction({\n windowType: 'five_hour',\n resetsAtMs: fiveHourItem.resetsAtMs,\n nowMs: Date.now(),\n });\n if (pacingFraction === null) {\n // Fallback: time-bázis NEM számolható → sima threshold-color.\n const util: number | null = fiveHourItem.utilization ?? null;\n return this.utilizationColorClass(util);\n }\n const classification: 'below' | 'on-pace' | 'above' | null =\n CC_AccountUsagePacing_Util.classifyPacing({\n utilization: fiveHourItem.utilization,\n pacingFraction: pacingFraction,\n });\n return CC_AccountUsagePacing_Util.colorClassForPacing(classification);\n }\n}\n", "<!-- CC Account Usage Dashboard (REQ-CC-USAGE-DASHBOARD-001).\n Cycle 875 visual polish: avatar, status-badges, progress-bars, human window labels. -->\n\n<header class=\"flex items-start justify-between mb-6 pb-3 border-b border-neutral-700 gap-3\">\n <div class=\"min-w-0 flex-1\">\n <h1 class=\"text-xl font-bold text-neutral-100 flex items-center gap-2\">\n <svg class=\"w-5 h-5 text-neonCyan\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M9 19V6l3-3 3 3v13M5 21h14a2 2 0 002-2v-7l-7-7-7 7v7a2 2 0 002 2z\"/>\n </svg>\n CC Usage & Accounts\n </h1>\n <p class=\"text-xs text-neutral-500 mt-1\">\n Anthropic OAuth credentials · per-account 5-hour / weekly / opus / sonnet / extra usage windows\n ·\n <span class=\"text-neutral-400\">{{ account_DS.identityGroups_$().length }} account(s)</span>\n @if (account_DS.accounts_$().length !== account_DS.identityGroups_$().length) {\n <span class=\"text-neutral-500 text-[10px] ml-1\">({{ account_DS.accounts_$().length }} raw records merged by identity)</span>\n }\n ·\n <span class=\"text-neutral-400\">{{ instanceCount_$() }} instance mapping(s)</span>\n </p>\n </div>\n <div class=\"flex items-center gap-2 shrink-0\">\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded-md border border-neonDefault bg-neonDefault/15 text-neutral-100\n hover:bg-neonDefault/30 hover:border-neonDefault transition-colors\n disabled:opacity-40 disabled:cursor-not-allowed font-medium flex items-center gap-1.5\"\n [disabled]=\"isRefreshing_$() || account_DS.isLoading_$()\"\n (click)=\"handleRefresh()\"\n title=\"Re-scan local credential files (~/.claude/.credentials.json) and register newly discovered accounts.\"\n >\n <svg class=\"w-3.5 h-3.5\" [class.animate-spin]=\"isRefreshing_$()\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"/>\n </svg>\n {{ isRefreshing_$() ? 'Discovering…' : 'Refresh accounts' }}\n </button>\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded-md border border-neonCyan bg-neonCyan/15 text-neutral-100\n hover:bg-neonCyan/30 hover:border-neonCyan transition-colors\n disabled:opacity-40 disabled:cursor-not-allowed font-medium flex items-center gap-1.5\"\n [disabled]=\"isRefreshingAllUsage_$() || !account_DS.identityGroups_$().length\"\n (click)=\"handleRefreshAllUsage()\"\n title=\"Pull live usage data from Anthropic for every known account.\"\n >\n <svg class=\"w-3.5 h-3.5\" [class.animate-spin]=\"isRefreshingAllUsage_$()\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M13 10V3L4 14h7v7l9-11h-7z\"/>\n </svg>\n {{ isRefreshingAllUsage_$() ? 'Pulling all…' : 'Pull all usage' }}\n </button>\n </div>\n</header>\n\n@if (account_DS.isLoading_$()) {\n <div class=\"text-sm text-neutral-400 italic py-4\">\n Loading dashboard…\n </div>\n}\n\n@if (account_DS.loadError_$(); as err) {\n <div class=\"text-sm text-red-400 bg-red-950/30 border border-red-700 rounded p-3 mb-4\">\n <strong>Load error:</strong> {{ err }}\n </div>\n}\n\n<section class=\"mb-6\">\n <h2 class=\"text-xs font-semibold text-neutral-400 uppercase tracking-wider mb-3 flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z\"/>\n </svg>\n Known CC Accounts\n <span class=\"text-neutral-600 font-normal normal-case tracking-normal\">\n · {{ account_DS.identityGroups_$().length }}\n </span>\n </h2>\n\n @if (!account_DS.identityGroups_$().length && !account_DS.isLoading_$()) {\n <div class=\"rounded-lg border border-dashed border-neutral-700 bg-neutral-900/30 px-6 py-10 text-center\">\n <svg class=\"w-12 h-12 mx-auto text-neutral-600 mb-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\"/>\n </svg>\n <p class=\"text-sm text-neutral-300 font-medium mb-1\">No CC accounts discovered yet</p>\n <p class=\"text-xs text-neutral-500\">\n Run <code class=\"px-1.5 py-0.5 rounded bg-neutral-800 text-neonCyan font-mono\">claude /login</code>\n on this machine, then click <strong class=\"text-neutral-300\">Refresh accounts</strong>.\n </p>\n </div>\n }\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3\">\n @for (group of account_DS.identityGroups_$(); track group.identity) {\n @let account = group.primary;\n <div class=\"rounded-lg border border-neutral-800 hover:border-neutral-700 hover:shadow-md hover:shadow-black/30\n bg-gradient-to-br from-neutral-900/60 to-neutral-950/30 transition-all overflow-hidden flex flex-col\"\n [class.xl:col-span-2]=\"isHistoryOpen(account.accountKey)\"\n [class.xl:col-span-3]=\"false\">\n <!-- Header row: avatar + displayName + identity + status badges + refresh gomb -->\n <div class=\"flex items-start gap-2 py-2.5 px-3 border-b border-neutral-800/70\">\n <!-- Avatar (initial letter, hash-stable color) -->\n <div [class]=\"'shrink-0 w-8 h-8 rounded-md flex items-center justify-center text-sm font-bold ' + avatarBgClassOf(account.accountKey)\"\n [attr.aria-label]=\"'Avatar for ' + displayNameOf(account)\">\n {{ avatarLetterOf(account) }}\n </div>\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center gap-1.5 min-w-0\">\n <span class=\"text-sm text-neutral-100 font-semibold truncate\">\n {{ displayNameOf(account) }}\n </span>\n @if (account.tokenStatus) {\n <span [class]=\"'text-[9px] px-1.5 py-0.5 rounded-full border font-medium shrink-0 ' + tokenStatusBadgeClassOf(account.tokenStatus)\"\n [title]=\"'Token status: ' + account.tokenStatus\">\n {{ account.tokenStatus }}\n </span>\n }\n @if (account.planTier) {\n <span class=\"text-[9px] text-neutral-200 px-1.5 py-0.5 rounded-full border border-indigo-700 bg-indigo-900/30 font-medium shrink-0\">\n {{ account.planTier }}\n </span>\n }\n @if (group.siblingAccountKeys.length > 0) {\n <span class=\"text-[9px] px-1.5 py-0.5 rounded-full border border-amber-700 bg-amber-900/30 text-amber-300 font-medium shrink-0\"\n [title]=\"'Token-rotation duplicates merged into this card: ' + group.siblingAccountKeys.join(', ')\">\n +{{ group.siblingAccountKeys.length }} rotation\n </span>\n }\n </div>\n <div class=\"flex items-center gap-1.5 mt-0.5 min-w-0\">\n <!-- Cycle 892: a primary label most email-first (displayNameOf).\n A secondary sor csak akkor mutat extra-info-t, ha az NEM redundáns:\n - user-given displayName ha az nem az email és nem auto-fallback\n - vagy az identity (JWT-sub / legacy-hash) ha még email sincs. -->\n @if (account.email && account.displayName && account.displayName !== account.email && !account.displayName.startsWith('account-')) {\n <span class=\"text-[11px] text-neutral-400 truncate\" [title]=\"'User-given name'\">{{ account.displayName }}</span>\n } @else if (!account.email) {\n <span class=\"text-[11px] text-neutral-500 italic truncate\" [title]=\"'Identity (no email yet)'\">{{ group.identity }}</span>\n }\n <button\n type=\"button\"\n class=\"text-[9px] text-neutral-400 hover:text-neonCyan border border-neutral-700\n hover:border-neonCyan rounded px-1 py-0.5 transition-colors shrink-0\"\n (click)=\"handleEditEmail(account)\"\n [title]=\"hasEmail(account) ? 'Edit email' : 'Set email manually'\"\n >\n {{ hasEmail(account) ? '✏️ Edit' : '✏️ Set email' }}\n </button>\n </div>\n <div class=\"text-[10px] text-neutral-500 font-mono truncate mt-0.5\"\n [title]=\"'identity: ' + group.identity + ' · primary key: ' + account.accountKey + (account.organizationId ? ' · org: ' + account.organizationId : '')\">\n <span class=\"text-neutral-600\">id:</span> {{ group.identity }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"shrink-0 px-2 py-1 text-[11px] rounded-md border border-neonCyan bg-neonCyan/15 text-neutral-100\n hover:bg-neonCyan/30 transition-colors flex items-center gap-1\n disabled:opacity-40 disabled:cursor-not-allowed\"\n [disabled]=\"isRefreshingUsageOf(account.accountKey)\"\n (click)=\"handleRefreshUsage(account.accountKey)\"\n title=\"Pull live usage data from Anthropic for this account.\"\n >\n <svg class=\"w-3 h-3\" [class.animate-spin]=\"isRefreshingUsageOf(account.accountKey)\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"/>\n </svg>\n <span>{{ isRefreshingUsageOf(account.accountKey) ? '…' : 'Pull' }}</span>\n </button>\n </div>\n <!-- Shared CC Account Usage View (cycle 885): 5-row usage status + togglable SVG graph. -->\n <div class=\"px-3 py-2.5 border-b border-neutral-800/40 flex-1\">\n <app-cc-account-usage-view [accountKey]=\"account.accountKey\" />\n </div>\n\n <!-- History expand-toggle + lazy-loaded panel (cycle 879). -->\n <div class=\"px-3 py-2\">\n <button\n type=\"button\"\n class=\"text-[11px] text-neutral-400 hover:text-neonCyan flex items-center gap-1 transition-colors\"\n (click)=\"handleToggleHistory(account.accountKey)\"\n [title]=\"isHistoryOpen(account.accountKey) ? 'Hide usage history' : 'Show usage history'\"\n >\n <svg class=\"w-3 h-3 transition-transform\"\n [class.rotate-90]=\"isHistoryOpen(account.accountKey)\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M9 5l7 7-7 7\"/>\n </svg>\n {{ isHistoryOpen(account.accountKey) ? 'Hide' : 'Show' }} history\n @if (isHistoryLoading(account.accountKey)) {\n <span class=\"text-neutral-500 italic ml-1\">loading…</span>\n }\n </button>\n @if (isHistoryOpen(account.accountKey)) {\n <div class=\"mt-2 rounded-md border border-neutral-800 bg-neutral-950/40 p-2\">\n <div class=\"flex items-center justify-between mb-2\">\n <span class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">\n Usage event history\n <span class=\"text-neutral-600 normal-case tracking-normal ml-1\">\n · {{ historyItemsOf(account.accountKey).length }} event(s)\n </span>\n </span>\n <button\n type=\"button\"\n class=\"text-[10px] text-neutral-400 hover:text-neonCyan border border-neutral-700\n hover:border-neonCyan rounded px-1.5 py-0.5 transition-colors\n disabled:opacity-40 disabled:cursor-not-allowed\"\n [disabled]=\"isHistoryLoading(account.accountKey)\"\n (click)=\"handleRefreshHistory(account.accountKey)\"\n title=\"Re-fetch usage event history from server.\"\n >\n {{ isHistoryLoading(account.accountKey) ? '…' : 'Refresh history' }}\n </button>\n </div>\n @if (!historyItemsOf(account.accountKey).length && !isHistoryLoading(account.accountKey)) {\n <div class=\"text-[11px] text-neutral-500 italic px-2 py-3\">\n No history events recorded yet. Stream-driven events come from CC sessions when\n <code class=\"px-1 py-0.5 rounded bg-neutral-800 text-neutral-400 font-mono text-[10px]\">rate_limit_event</code>\n fires; pull-driven events come from periodic auto-pull or manual <strong>Pull</strong> clicks.\n </div>\n } @else {\n <div class=\"overflow-x-auto\">\n <table class=\"w-full text-[11px] text-left\">\n <thead class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">\n <tr>\n <th class=\"py-1 px-2 font-medium\">When</th>\n <th class=\"py-1 px-2 font-medium\">Window</th>\n <th class=\"py-1 px-2 font-medium\">Source</th>\n <th class=\"py-1 px-2 font-medium text-right\">Util</th>\n <th class=\"py-1 px-2 font-medium\">Status</th>\n <th class=\"py-1 px-2 font-medium\">Reset in</th>\n </tr>\n </thead>\n <tbody>\n @for (ev of historyItemsOf(account.accountKey); track $index) {\n <tr class=\"border-t border-neutral-800/60 hover:bg-neutral-900/40\">\n <td class=\"py-1 px-2 font-mono text-neutral-300\">\n {{ formatObservedAt(ev.observedAt) }}\n </td>\n <td class=\"py-1 px-2 text-neutral-300\">\n {{ windowLabelOf(ev.windowType) }}\n </td>\n <td class=\"py-1 px-2\">\n <span [class]=\"'text-[10px] px-1.5 py-0.5 rounded-full border ' + sourceBadgeClassOf(ev.source)\">\n {{ ev.source ?? '—' }}\n </span>\n </td>\n <td class=\"py-1 px-2 font-mono text-neutral-200 text-right\">\n {{ formatUtilization(ev.utilization ?? null) }}\n </td>\n <td class=\"py-1 px-2 text-neutral-400\">\n {{ ev.lastObservedStatus ?? '—' }}\n </td>\n <td class=\"py-1 px-2 font-mono text-neutral-500\">\n {{ formatResetCountdown(ev.resetsAtMs) }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n</section>\n\n<section>\n <h2 class=\"text-xs font-semibold text-neutral-400 uppercase tracking-wider mb-3 flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\"/>\n </svg>\n Instance ↔ Account Mapping\n <span class=\"text-neutral-600 font-normal normal-case tracking-normal\">\n · {{ instanceCount_$() }}\n </span>\n </h2>\n\n @if (!instanceCount_$() && !account_DS.isLoading_$()) {\n <div class=\"rounded-lg border border-dashed border-neutral-700 bg-neutral-900/30 px-4 py-6 text-center text-[11px] text-neutral-500\">\n No instance mappings yet. Mappings appear after the first\n <code class=\"px-1 py-0.5 rounded bg-neutral-800 text-neutral-400 font-mono text-[10px]\">rate_limit_event</code>\n on a session with a bound account, or after a manual\n <strong class=\"text-neutral-400\">Pull usage</strong>.\n </div>\n }\n\n @for (entry of account_DS.instanceMapping_$()?.instances ?? []; track entry.ccapId) {\n <div class=\"flex items-center gap-3 py-2.5 px-3 rounded-lg border border-neutral-800 mb-2\n hover:border-neutral-700 hover:bg-neutral-900/40 transition-all\">\n <!-- Instance icon (server-szerű) -->\n <div class=\"shrink-0 w-7 h-7 rounded-md bg-neutral-800 border border-neutral-700 flex items-center justify-center text-neutral-400\">\n <svg class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M5 12H3l9-9 9 9h-2M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7\"/>\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <!-- REQ-SC-INSTANCE-REGISTRY-RENAME-001 (cycle 891): instance displayName SSOT.\n Pipe lookup-pal a registry-cache-ből; fallback ccapId.slice(0,8). -->\n <div class=\"text-sm text-neutral-200 font-medium truncate\" [title]=\"entry.ccapId\">\n {{ entry.ccapId | sInstanceDisplayName }}\n </div>\n <div class=\"text-[11px] text-neutral-500 mt-0.5 flex items-center gap-1.5 flex-wrap\">\n @if (latestAccountKeyOf(entry.items); as ak) {\n <span class=\"text-neutral-300\">\n {{ displayNameByAccountKey(ak) }}\n </span>\n <span class=\"font-mono text-neutral-600 text-[10px]\">({{ ak.slice(0, 6) }}…)</span>\n <span class=\"text-neutral-700\">·</span>\n <span>5h: <strong [class]=\"pacingColorClassForFiveHour(entry.items)\">{{ formatUtilization(latestFiveHourUtilOf(entry.items)) }}</strong></span>\n <span class=\"text-neutral-700\">·</span>\n }\n <span class=\"text-neutral-600\">{{ itemsCountOf(entry.items) }} record(s)</span>\n </div>\n </div>\n </div>\n }\n</section>\n\n<!-- Edit-email modal (cycle 877: shared S_Modal flow no-native-browser-dialogs review-szabály miatt). -->\n<app-s-modal\n [isOpen]=\"editEmailModalOpen_$()\"\n title=\"Set CC account email\"\n maxWidth=\"sm\"\n (closed)=\"handleEditEmailClose()\"\n>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-xs text-neutral-400\">\n Enter the email address linked to this Claude account. Leave empty to clear.\n </p>\n <input\n type=\"email\"\n [ngModel]=\"editEmailValue_$()\"\n (ngModelChange)=\"editEmailValue_$.set($event)\"\n placeholder=\"user@example.com\"\n class=\"w-full px-3 py-2 rounded-md bg-neutral-900 border border-neutral-700 text-sm text-neutral-100\n placeholder-neutral-500 focus:outline-none focus:border-neonCyan\"\n autofocus\n />\n <div class=\"flex items-center justify-end gap-2 pt-2\">\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded-md border border-neutral-700 text-neutral-300\n hover:bg-neutral-800 transition-colors\"\n (click)=\"handleEditEmailClose()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded-md border border-neonCyan bg-neonCyan/15 text-neutral-100\n hover:bg-neonCyan/30 transition-colors disabled:opacity-40 disabled:cursor-not-allowed\"\n [disabled]=\"editEmailSaving_$()\"\n (click)=\"handleEditEmailSave()\"\n >\n {{ editEmailSaving_$() ? 'Saving…' : 'Save' }}\n </button>\n </div>\n </div>\n</app-s-modal>\n"],
|
|
5
|
+
"mappings": "ilBAuBA,IAAaA,IAA0B,IAAA,CAAjC,MAAOA,CAA0B,CAEpBC,YACfC,EAAOC,CAAgC,EAEzCC,UAAUC,EAAsC,CAC9C,OAAO,KAAKJ,YAAYK,mBAAmBD,CAAW,CACxD,4CAPWL,EAA0B,wDAA1BA,EAA0BO,KAAA,GAAAC,WAAA,EAAA,CAAA,SAA1BR,CAA0B,GAAA,ECVvC,IAAaS,GAA0B,IAAA,CAAjC,MAAOA,CAA0B,CAGrC,OAAgBC,mBAA6C,CAC3DC,UAAW,KACXC,UAAW,OACXC,eAAgB,OAChBC,iBAAkB,QAcpB,OAAOC,sBAAsBC,EAI5B,CACC,IAAMC,EACJR,EAA2BC,mBAAmBM,EAAOE,UAAU,EAIjE,GAHID,IAAcE,QAGd,CAACH,EAAOI,YAAcJ,EAAOI,YAAc,EAC7C,OAAO,KAET,IAAMC,EAAmBJ,EAAY,IAC/BK,EAAsBN,EAAOI,WAAaC,EAE1CE,EADkBC,KAAKC,IAAI,EAAGT,EAAOU,MAAQJ,CAAW,EAC7BD,EACjC,OAAIE,EAAS,EACJ,EAELA,EAAS,EACJ,EAEFA,CACT,CASA,OAAOI,eAAeX,EAIrB,CACC,GAAIA,EAAOY,aAAe,MAAQZ,EAAOa,iBAAmB,KAC1D,OAAO,KAET,IAAMC,EAAoBd,EAAOc,WAAa,GACxCC,EAAef,EAAOY,YAAcZ,EAAOa,eACjD,OAAIE,EAAOD,EACF,QAELC,EAAO,CAACD,EACH,QAEF,SACT,CASA,OAAOE,oBAAoBC,EAAoD,CAC7E,OAAIA,IAAmB,QACd,iBAELA,IAAmB,UACd,kBAELA,IAAmB,QACd,eAEF,kBACT,SA3FWxB,CAA0B,GAAA,kFEI/ByB,EAAA,EAAA,OAAA,CAAA,EAAgDC,EAAA,CAAA,EAAqEC,EAAA,kBAArEC,EAAA,EAAAC,EAAA,IAAAC,EAAAC,WAAAC,WAAA,EAAAC,OAAA,kCAAA,0BAyCtDR,EAAA,EAAA,MAAA,EAAA,EACEC,EAAA,EAAA,2BAAA,EACFC,EAAA,0BAIAF,EAAA,EAAA,MAAA,EAAA,EAAuF,EAAA,QAAA,EAC7EC,EAAA,EAAA,aAAA,EAAWC,EAAA,EAAUD,EAAA,CAAA,EAC/BC,EAAA,SAD+BC,EAAA,CAAA,EAAAC,EAAA,IAAAK,EAAA,GAAA,0BAiB7BT,EAAA,EAAA,MAAA,EAAA,MACEA,EAAA,EAAA,MAAA,EAAA,EACEU,EAAA,EAAA,OAAA,EAAA,EAEFR,EAAA,MACAF,EAAA,EAAA,IAAA,EAAA,EAAqDC,EAAA,EAAA,+BAAA,EAA6BC,EAAA,EAClFF,EAAA,EAAA,IAAA,EAAA,EACEC,EAAA,EAAA,OAAA,EAAID,EAAA,EAAA,OAAA,EAAA,EAA2EC,EAAA,EAAA,eAAA,EAAaC,EAAA,EAC5FD,EAAA,EAAA,+BAAA,EAA4BD,EAAA,GAAA,SAAA,EAAA,EAAiCC,EAAA,GAAA,kBAAA,EAAgBC,EAAA,EAASD,EAAA,GAAA,IAAA,EACxFC,EAAA,EAAI,6BAwBIF,EAAA,EAAA,OAAA,EAAA,EAEEC,EAAA,CAAA,EACFC,EAAA,6BAHMS,EAAA,qEAAAN,EAAAO,wBAAAC,EAAAC,WAAA,CAAA,EACAC,EAAA,QAAA,iBAAAF,EAAAC,WAAA,EACJX,EAAA,EAAAC,EAAA,IAAAS,EAAAC,YAAA,GAAA,6BAIFd,EAAA,EAAA,OAAA,EAAA,EACEC,EAAA,CAAA,EACFC,EAAA,uBADEC,EAAA,EAAAC,EAAA,IAAAS,EAAAG,SAAA,GAAA,6BAIFhB,EAAA,EAAA,OAAA,EAAA,EAEEC,EAAA,CAAA,EACFC,EAAA,4BAFMa,EAAA,QAAA,oDAAAE,EAAAC,mBAAAC,KAAA,IAAA,CAAA,EACJhB,EAAA,EAAAC,EAAA,KAAAa,EAAAC,mBAAAV,OAAA,YAAA,6BAUFR,EAAA,EAAA,OAAA,EAAA,EAAgFC,EAAA,CAAA,EAAyBC,EAAA,uBAArDa,EAAA,QAAA,iBAAA,EAA4BZ,EAAA,EAAAiB,EAAAP,EAAAQ,WAAA,6BAEhFrB,EAAA,EAAA,OAAA,EAAA,EAA+FC,EAAA,CAAA,EAAoBC,EAAA,4BAAxDa,EAAA,QAAA,yBAAA,EAAoCZ,EAAA,EAAAiB,EAAAH,EAAAK,QAAA,0BAsDjGtB,EAAA,EAAA,OAAA,EAAA,EAA2CC,EAAA,EAAA,eAAA,EAAQC,EAAA,0BAyBjDF,EAAA,EAAA,MAAA,EAAA,EACEC,EAAA,EAAA,mFAAA,EACAD,EAAA,EAAA,OAAA,EAAA,EAAwFC,EAAA,EAAA,kBAAA,EAAgBC,EAAA,EACxGD,EAAA,EAAA,oEAAA,EAAiED,EAAA,EAAA,QAAA,EAAQC,EAAA,EAAA,MAAA,EAAIC,EAAA,EAAUD,EAAA,EAAA,WAAA,EACzFC,EAAA,6BAgBQF,EAAA,EAAA,KAAA,EAAA,EAAmE,EAAA,KAAA,EAAA,EAE/DC,EAAA,CAAA,EACFC,EAAA,EACAF,EAAA,EAAA,KAAA,EAAA,EACEC,EAAA,CAAA,EACFC,EAAA,EACAF,EAAA,EAAA,KAAA,EAAA,EAAsB,EAAA,MAAA,EAElBC,EAAA,CAAA,EACFC,EAAA,EAAO,EAETF,EAAA,EAAA,KAAA,EAAA,EACEC,EAAA,CAAA,EACFC,EAAA,EACAF,EAAA,GAAA,KAAA,EAAA,EACEC,EAAA,EAAA,EACFC,EAAA,EACAF,EAAA,GAAA,KAAA,EAAA,EACEC,EAAA,EAAA,EACFC,EAAA,EAAK,uCAlBHC,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAAkB,iBAAAC,EAAAC,UAAA,EAAA,GAAA,EAGAtB,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAAqB,cAAAF,EAAAG,UAAA,EAAA,GAAA,EAGMxB,EAAA,CAAA,EAAAQ,EAAA,iDAAAN,EAAAuB,mBAAAJ,EAAAK,MAAA,CAAA,EACJ1B,EAAA,EAAAC,EAAA,KAAA0B,EAAAN,EAAAK,UAAA,MAAAC,IAAAC,OAAAD,EAAA,SAAA,GAAA,EAIF3B,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAA2B,mBAAAC,EAAAT,EAAAU,eAAA,MAAAD,IAAAF,OAAAE,EAAA,IAAA,EAAA,GAAA,EAGA9B,EAAA,CAAA,EAAAC,EAAA,KAAA+B,EAAAX,EAAAY,sBAAA,MAAAD,IAAAJ,OAAAI,EAAA,SAAA,GAAA,EAGAhC,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAAgC,qBAAAb,EAAAc,UAAA,EAAA,GAAA,6BAjCZtC,EAAA,EAAA,MAAA,EAAA,EAA6B,EAAA,QAAA,EAAA,EACiB,EAAA,QAAA,EAAA,EAC2B,EAAA,IAAA,EAC/D,EAAA,KAAA,EAAA,EACgCC,EAAA,EAAA,MAAA,EAAIC,EAAA,EACtCF,EAAA,EAAA,KAAA,EAAA,EAAkCC,EAAA,EAAA,QAAA,EAAMC,EAAA,EACxCF,EAAA,EAAA,KAAA,EAAA,EAAkCC,EAAA,EAAA,QAAA,EAAMC,EAAA,EACxCF,EAAA,GAAA,KAAA,EAAA,EAA6CC,EAAA,GAAA,MAAA,EAAIC,EAAA,EACjDF,EAAA,GAAA,KAAA,EAAA,EAAkCC,EAAA,GAAA,QAAA,EAAMC,EAAA,EACxCF,EAAA,GAAA,KAAA,EAAA,EAAkCC,EAAA,GAAA,UAAA,EAAQC,EAAA,EAAK,EAC5C,EAEPF,EAAA,GAAA,OAAA,EACEuC,EAAA,GAAAC,GAAA,GAAA,EAAA,KAAA,GAAAC,CAAA,EAwBFvC,EAAA,EAAQ,EACF,8BAzBJC,EAAA,EAAA,EAAAuC,EAAArC,EAAAsC,eAAA9B,EAAA+B,UAAA,CAAkC,sCAxC5C5C,EAAA,EAAA,MAAA,EAAA,EAA6E,EAAA,MAAA,EAAA,EACvB,EAAA,OAAA,EAAA,EAEhDC,EAAA,EAAA,uBAAA,EACAD,EAAA,EAAA,OAAA,EAAA,EACEC,EAAA,CAAA,EACFC,EAAA,EAAO,EAETF,EAAA,EAAA,SAAA,EAAA,EAME6C,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAAC,EAAA,EAAA,IAAAnC,EAAAoC,EAAA,CAAA,EAAA5C,EAAA2C,EAAA,EAAA,OAAAE,EAAS7C,EAAA8C,qBAAAtC,EAAA+B,UAAA,CAAwC,CAAA,CAAA,EAGjD3C,EAAA,CAAA,EACFC,EAAA,EAAS,EAEXkD,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,EAAA,EAA2F,EAAAC,GAAA,GAAA,EAAA,MAAA,EAAA,EAgD7FpD,EAAA,+BA/DQC,EAAA,CAAA,EAAAC,EAAA,SAAAC,EAAAsC,eAAA9B,EAAA+B,UAAA,EAAApC,OAAA,YAAA,EAQFL,EAAA,EAAAY,EAAA,WAAAV,EAAAkD,iBAAA1C,EAAA+B,UAAA,CAAA,EAIAzC,EAAA,EAAAC,EAAA,IAAAC,EAAAkD,iBAAA1C,EAAA+B,UAAA,EAAA,SAAA,kBAAA,GAAA,EAGJzC,EAAA,EAAAqD,EAAA,CAAAnD,EAAAsC,eAAA9B,EAAA+B,UAAA,EAAApC,QAAA,CAAAH,EAAAkD,iBAAA1C,EAAA+B,UAAA,EAAA,EAAA,CAAA,sCAzHRa,EAAA,CAAA,EACAzD,EAAA,EAAA,MAAA,EAAA,EAGmC,EAAA,MAAA,EAAA,EAE8C,EAAA,KAAA,EAI3EC,EAAA,CAAA,EACFC,EAAA,EACAF,EAAA,EAAA,MAAA,EAAA,EAA4B,EAAA,MAAA,EAAA,EACqB,EAAA,OAAA,EAAA,EAE3CC,EAAA,CAAA,EACFC,EAAA,EACAkD,EAAA,EAAAM,GAAA,EAAA,EAAA,OAAA,EAAA,EAA2B,GAAAC,GAAA,EAAA,EAAA,OAAA,EAAA,EAMH,GAAAC,GAAA,EAAA,EAAA,OAAA,EAAA,EAW1B1D,EAAA,EACAF,EAAA,GAAA,MAAA,EAAA,EAKEoD,EAAA,GAAAS,GAAA,EAAA,EAAA,OAAA,EAAA,EAAoI,GAAAC,GAAA,EAAA,EAAA,OAAA,EAAA,EAKpI9D,EAAA,GAAA,SAAA,EAAA,EAIE6C,EAAA,QAAA,UAAA,CAAAC,EAAAiB,CAAA,EAAA,IAAAlD,EAAAoC,EAAA,CAAA,EAAA5C,EAAA2C,EAAA,EAAA,OAAAE,EAAS7C,EAAA2D,gBAAAnD,CAAA,CAAwB,CAAA,CAAA,EAGjCZ,EAAA,EAAA,EACFC,EAAA,EAAS,EAEXF,EAAA,GAAA,MAAA,EAAA,EAC6J,GAAA,OAAA,EAAA,EAC5HC,EAAA,GAAA,KAAA,EAAGC,EAAA,EAAQD,EAAA,EAAA,EAC5CC,EAAA,EAAM,EAERF,EAAA,GAAA,SAAA,EAAA,EAME6C,EAAA,QAAA,UAAA,CAAAC,EAAAiB,CAAA,EAAA,IAAAlD,EAAAoC,EAAA,CAAA,EAAA5C,EAAA2C,EAAA,EAAA,OAAAE,EAAS7C,EAAA4D,mBAAApD,EAAA+B,UAAA,CAAsC,CAAA,CAAA,MAG/C5C,EAAA,GAAA,MAAA,EAAA,EACEU,EAAA,GAAA,OAAA,EAAA,EAEFR,EAAA,MACAF,EAAA,GAAA,MAAA,EAAMC,EAAA,EAAA,EAA4DC,EAAA,EAAO,EAClE,EAGXF,EAAA,GAAA,MAAA,EAAA,EACEU,EAAA,GAAA,4BAAA,EAAA,EACFR,EAAA,EAGAF,EAAA,GAAA,MAAA,EAAA,EAAuB,GAAA,SAAA,EAAA,EAInB6C,EAAA,QAAA,UAAA,CAAAC,EAAAiB,CAAA,EAAA,IAAAlD,EAAAoC,EAAA,CAAA,EAAA5C,EAAA2C,EAAA,EAAA,OAAAE,EAAS7C,EAAA6D,oBAAArD,EAAA+B,UAAA,CAAuC,CAAA,CAAA,MAGhD5C,EAAA,GAAA,MAAA,EAAA,EAGEU,EAAA,GAAA,OAAA,EAAA,EAEFR,EAAA,EACAD,EAAA,EAAA,EACAmD,EAAA,GAAAe,GAAA,EAAA,EAAA,OAAA,EAAA,EAGFjE,EAAA,EACAkD,EAAA,GAAAgB,GAAA,GAAA,EAAA,MAAA,EAAA,EAuEFlE,EAAA,EAAM,oCA3KRmE,EAAApD,EAAAqD,OAAA,EAGKnE,EAAA,EAAAoE,EAAA,gBAAAlE,EAAAmE,cAAAC,EAAA7B,UAAA,CAAA,EAAyD,gBAAA,EAAA,EAKrDzC,EAAA,CAAA,EAAAQ,EAAA,kFAAAN,EAAAqE,gBAAAD,EAAA7B,UAAA,CAAA,mDAEHzC,EAAA,EAAAC,EAAA,IAAAC,EAAAsE,eAAAF,CAAA,EAAA,GAAA,EAKItE,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAAuE,cAAAH,CAAA,EAAA,GAAA,EAEFtE,EAAA,EAAAqD,EAAAiB,EAAA3D,YAAA,EAAA,EAAA,EAMAX,EAAA,EAAAqD,EAAAiB,EAAAzD,SAAA,GAAA,EAAA,EAKAb,EAAA,EAAAqD,EAAAvC,EAAAC,mBAAAV,OAAA,EAAA,GAAA,EAAA,EAYAL,EAAA,CAAA,EAAAqD,EAAAiB,EAAAI,OAAAJ,EAAApD,aAAAoD,EAAApD,cAAAoD,EAAAI,OAAA,CAAAJ,EAAApD,YAAAyD,WAAA,UAAA,EAAA,GAAAL,EAAAI,MAAA,GAAA,EAAA,EAUE1E,EAAA,CAAA,EAAAY,EAAA,QAAAV,EAAA0E,SAAAN,CAAA,EAAA,aAAA,oBAAA,EAEAtE,EAAA,EAAAC,EAAA,IAAAC,EAAA0E,SAAAN,CAAA,EAAA,oBAAA,yBAAA,GAAA,EAICtE,EAAA,EAAAY,EAAA,QAAA,aAAAE,EAAAK,SAAA,sBAAAmD,EAAA7B,YAAA6B,EAAAO,eAAA,cAAAP,EAAAO,eAAA,GAAA,EACuC7E,EAAA,CAAA,EAAAC,EAAA,IAAAa,EAAAK,SAAA,GAAA,EAQ5CnB,EAAA,EAAAY,EAAA,WAAAV,EAAA4E,oBAAAR,EAAA7B,UAAA,CAAA,EAIqBzC,EAAA,EAAAoE,EAAA,eAAAlE,EAAA4E,oBAAAR,EAAA7B,UAAA,CAAA,EAIfzC,EAAA,CAAA,EAAAiB,EAAAf,EAAA4E,oBAAAR,EAAA7B,UAAA,EAAA,SAAA,MAAA,EAKmBzC,EAAA,CAAA,EAAAY,EAAA,aAAA0D,EAAA7B,UAAA,EASzBzC,EAAA,CAAA,EAAAY,EAAA,QAAAV,EAAAmE,cAAAC,EAAA7B,UAAA,EAAA,qBAAA,oBAAA,EAGKzC,EAAA,EAAAoE,EAAA,YAAAlE,EAAAmE,cAAAC,EAAA7B,UAAA,CAAA,EAKLzC,EAAA,CAAA,EAAAC,EAAA,IAAAC,EAAAmE,cAAAC,EAAA7B,UAAA,EAAA,OAAA,OAAA,WAAA,EACAzC,EAAA,EAAAqD,EAAAnD,EAAAkD,iBAAAkB,EAAA7B,UAAA,EAAA,GAAA,EAAA,EAIFzC,EAAA,EAAAqD,EAAAnD,EAAAmE,cAAAC,EAAA7B,UAAA,EAAA,GAAA,EAAA,0BA0FJ5C,EAAA,EAAA,MAAA,EAAA,EACEC,EAAA,EAAA,6DAAA,EACAD,EAAA,EAAA,OAAA,EAAA,EAAwFC,EAAA,EAAA,kBAAA,EAAgBC,EAAA,EACxGD,EAAA,EAAA,wDAAA,EACAD,EAAA,EAAA,SAAA,CAAA,EAAiCC,EAAA,EAAA,YAAA,EAAUC,EAAA,EAASD,EAAA,EAAA,IAAA,EACtDC,EAAA,6BAqBQF,EAAA,EAAA,OAAA,EAAA,EACEC,EAAA,CAAA,EACFC,EAAA,EACAF,EAAA,EAAA,OAAA,EAAA,EAAqDC,EAAA,CAAA,EAAuBC,EAAA,EAC5EF,EAAA,EAAA,OAAA,EAAA,EAA+BC,EAAA,EAAA,MAAA,EAACC,EAAA,EAChCF,EAAA,EAAA,MAAA,EAAMC,EAAA,EAAA,MAAA,EAAID,EAAA,EAAA,QAAA,EAA2DC,EAAA,CAAA,EAA0DC,EAAA,EAAS,EACxIF,EAAA,GAAA,OAAA,EAAA,EAA+BC,EAAA,GAAA,MAAA,EAACC,EAAA,sCAL9BC,EAAA,EAAAC,EAAA,IAAAC,EAAA6E,wBAAAC,CAAA,EAAA,GAAA,EAEmDhF,EAAA,CAAA,EAAAC,EAAA,IAAA+E,EAAAC,MAAA,EAAA,CAAA,EAAA,SAAA,EAEnCjF,EAAA,CAAA,EAAAQ,EAAAN,EAAAgF,4BAAAC,EAAAC,KAAA,CAAA,EAAmDpF,EAAA,EAAAiB,EAAAf,EAAA2B,kBAAA3B,EAAAmF,qBAAAF,EAAAC,KAAA,CAAA,CAAA,6BAtB7EvF,EAAA,EAAA,MAAA,EAAA,EAC6E,EAAA,MAAA,EAAA,MAGzEA,EAAA,EAAA,MAAA,EAAA,EACEU,EAAA,EAAA,OAAA,EAAA,EAEFR,EAAA,EAAM,MAERF,EAAA,EAAA,MAAA,EAAA,EAA4B,EAAA,MAAA,EAAA,EAIxBC,EAAA,CAAA,8BACFC,EAAA,EACAF,EAAA,EAAA,MAAA,EAAA,EACEoD,EAAA,EAAAqC,GAAA,GAAA,CAAA,EASAzF,EAAA,GAAA,OAAA,EAAA,EAA+BC,EAAA,EAAA,EAAyCC,EAAA,EAAO,EAC3E,EACF,kCAfuDC,EAAA,CAAA,EAAAY,EAAA,QAAAuE,EAAAI,MAAA,EACzDvF,EAAA,EAAAC,EAAA,IAAAuF,EAAA,EAAA,EAAAL,EAAAI,MAAA,EAAA,GAAA,EAGAvF,EAAA,CAAA,EAAAqD,GAAAoC,EAAAvF,EAAAwF,mBAAAP,EAAAC,KAAA,GAAA,EAAA,GAAAK,CAAA,EAS+BzF,EAAA,CAAA,EAAAC,EAAA,GAAAC,EAAAyF,aAAAR,EAAAC,KAAA,EAAA,YAAA,GD1RzC,IAAaQ,IAA2B,IAAA,CAAlC,MAAOA,CAA2B,CAE7BzF,WAAqC0F,EAAOC,CAAsB,EAQlEC,oBAAwDF,EAAOG,CAAgC,EAG/FC,eAAiBC,EAAgB,EAAK,EAGtCC,uBAAyBD,EAAgB,EAAK,EAG9CE,sBAAwBF,EAAoB,IAAIG,GAAa,EAG7DC,qBAAuBJ,EAAgB,EAAK,EAG5CK,sBAAwBL,EAAsB,IAAI,EAGlDM,iBAAmBN,EAAe,EAAE,EAGpCO,kBAAoBP,EAAgB,EAAK,EAMzCQ,sBAAwBR,EAAoB,IAAIG,GAAa,EAG7DM,qBAAuBT,EAAoB,IAAIG,GAAa,EAQ5DO,gBAAkCC,EAAS,IAClC,KAAK1G,WAAW2G,kBAAiB,GACjCC,UAAU1G,QAAU,CACrC,EAED2G,UAAQ,CAGD,KAAK7G,WAAW8G,uBAAsB,EAGvC,KAAKlB,oBAAoBmB,OAAM,EAAG7G,SAAW,GAC1C,KAAK0F,oBAAoBoB,SAAQ,EAMxC,KAAKhH,WAAWiH,iBAAgB,CAClC,CAGMC,eAAa,QAAAC,EAAA,sBACjB,KAAKrB,eAAesB,IAAI,EAAI,EAC5B,GAAI,CACF,MAAM,KAAKpH,WAAWqH,gBAAe,CACvC,QAAC,CACC,KAAKvB,eAAesB,IAAI,EAAK,CAC/B,CACF,GAGMzD,mBAAmBrB,EAAkB,QAAA6E,EAAA,sBACzC,KAAKlB,sBAAsBqB,OAAQF,GAAiC,CAClE,IAAMG,EAAoB,IAAIrB,IAAIkB,CAAG,EACrCG,OAAAA,EAAKC,IAAIlF,CAAU,EACZiF,CACT,CAAC,EACD,GAAI,CACF,MAAM,KAAKvH,WAAWyH,oBAAoBnF,CAAU,CACtD,QAAC,CACC,KAAK2D,sBAAsBqB,OAAQF,GAAiC,CAClE,IAAMG,EAAoB,IAAIrB,IAAIkB,CAAG,EACrCG,OAAAA,EAAKG,OAAOpF,CAAU,EACfiF,CACT,CAAC,CACH,CACF,GAOMI,uBAAqB,QAAAR,EAAA,sBACzB,IAAMS,EAAiB,KAAK5H,WAAW6H,iBAAgB,EAAGC,IACvDC,GAAcA,EAAE/D,QAAQ1B,UAAU,EAErC,GAAIsF,EAAK1H,SAAW,EAGpB,MAAK8F,uBAAuBoB,IAAI,EAAI,EACpC,GAAI,CACF,MAAMY,QAAQC,IAAIL,EAAKE,IAAKI,GAAgC,KAAKlI,WAAWyH,oBAAoBS,CAAC,CAAC,CAAC,CACrG,QAAC,CACC,KAAKlC,uBAAuBoB,IAAI,EAAK,CACvC,EACF,GAGArF,qBAAqBC,EAA8B,CACjD,GAAIA,GAAc,MAAQ,CAACmG,SAASnG,CAAU,GAAKA,GAAc,EAC/D,MAAO,SAET,IAAMoG,EAAiBpG,EAAaqG,KAAKC,IAAG,EAC5C,GAAIF,GAAU,EACZ,MAAO,UAET,IAAMG,EAAuBC,KAAKC,MAAML,EAAS,GAAM,EACjDM,EAAeF,KAAKC,MAAMF,GAAgB,GAAK,GAAG,EAClDI,EAAgBH,KAAKC,MAAOF,GAAgB,GAAK,IAAO,EAAE,EAC1DK,EAAkBL,EAAe,GACvC,OAAIG,EAAO,EACF,GAAGA,CAAI,KAAKC,CAAK,IAEtBA,EAAQ,EACH,GAAGA,CAAK,KAAKC,CAAO,IAEtB,GAAGA,CAAO,GACnB,CAGAjE,oBAAoBrC,EAAkB,CACpC,OAAO,KAAK2D,sBAAqB,EAAG4C,IAAIvG,CAAU,CACpD,CAOAoB,gBAAgBoF,EAA4B,CAC1C,KAAK1C,sBAAsBgB,IAAI0B,EAAQxG,UAAU,EACjD,KAAK+D,iBAAiBe,IAAI0B,EAAQvE,OAAS,EAAE,EAC7C,KAAK4B,qBAAqBiB,IAAI,EAAI,CACpC,CAGM2B,qBAAmB,QAAA5B,EAAA,sBACvB,IAAM7E,EAA4B,KAAK8D,sBAAqB,EAC5D,GAAI9D,IAAe,KACjB,OAEF,IAAM0G,EAAkB,KAAK3C,iBAAgB,EAAG4C,KAAI,EACpD,KAAK3C,kBAAkBc,IAAI,EAAI,EAC/B,GAAI,CACF,MAAM,KAAKpH,WAAWkJ,cAAc,CAClC5G,WAAYA,EACZiC,MAAOyE,IAAY,GAAK,KAAOA,EAChC,EACD,KAAKG,qBAAoB,CAC3B,QAAC,CACC,KAAK7C,kBAAkBc,IAAI,EAAK,CAClC,CACF,GAGA+B,sBAAoB,CAClB,KAAKhD,qBAAqBiB,IAAI,EAAK,EACnC,KAAKhB,sBAAsBgB,IAAI,IAAI,EACnC,KAAKf,iBAAiBe,IAAI,EAAE,CAC9B,CAGA3C,SAASqE,EAA4B,CACnC,OAAO,OAAOA,EAAQvE,OAAU,UAAYuE,EAAQvE,QAAU,EAChE,CAOMX,oBAAoBtB,EAAkB,QAAA6E,EAAA,sBAE1C,GADwB,KAAKZ,sBAAqB,EAAGsC,IAAIvG,CAAU,EACvD,CAEV,KAAKiE,sBAAsBe,OAAQF,GAAiC,CAClE,IAAMG,EAAoB,IAAIrB,IAAIkB,CAAG,EACrCG,OAAAA,EAAKG,OAAOpF,CAAU,EACfiF,CACT,CAAC,EACD,MACF,CAEA,KAAKhB,sBAAsBe,OAAQF,GAAiC,CAClE,IAAMG,EAAoB,IAAIrB,IAAIkB,CAAG,EACrCG,OAAAA,EAAKC,IAAIlF,CAAU,EACZiF,CACT,CAAC,EAEC,KAAKvH,WAAWoJ,kBAAiB,EAAGC,IAAI/G,CAAU,IACrCb,SACb,MAAM,KAAK6H,eAAehH,CAAU,EAExC,GAGMO,qBAAqBP,EAAkB,QAAA6E,EAAA,sBAC3C,MAAM,KAAKmC,eAAehH,CAAU,CACtC,GAIcgH,eAAehH,EAAkB,QAAA6E,EAAA,sBAC7C,KAAKX,qBAAqBc,OAAQF,GAAiC,CACjE,IAAMG,EAAoB,IAAIrB,IAAIkB,CAAG,EACrCG,OAAAA,EAAKC,IAAIlF,CAAU,EACZiF,CACT,CAAC,EACD,GAAI,CACF,MAAM,KAAKvH,WAAWuJ,wBAAwB,CAAEjH,WAAYA,CAAU,CAAE,CAC1E,QAAC,CACC,KAAKkE,qBAAqBc,OAAQF,GAAiC,CACjE,IAAMG,EAAoB,IAAIrB,IAAIkB,CAAG,EACrCG,OAAAA,EAAKG,OAAOpF,CAAU,EACfiF,CACT,CAAC,CACH,CACF,GAGArD,cAAc5B,EAAkB,CAC9B,OAAO,KAAKiE,sBAAqB,EAAGsC,IAAIvG,CAAU,CACpD,CAGAW,iBAAiBX,EAAkB,CACjC,OAAO,KAAKkE,qBAAoB,EAAGqC,IAAIvG,CAAU,CACnD,CAGAD,eAAeC,EAAkB,CAI/B,IAAMkH,GAFJ,KAAKxJ,WAAWoJ,kBAAiB,EAAGC,IAAI/G,CAAU,GAAK,CAAA,GAELwC,MAAK,EACzD0E,OAAAA,EAAKC,KAAK,CAACC,EAAkCC,IAA4C,CACvF,IAAMC,EAAaF,EAAEvI,WAAakH,KAAKwB,MAAMH,EAAEvI,UAAU,EAAI,EAE7D,OADmBwI,EAAExI,WAAakH,KAAKwB,MAAMF,EAAExI,UAAU,EAAI,GACjDyI,CACd,CAAC,EACMJ,CACT,CAGAlI,mBAAmBC,EAA0B,CAC3C,OAAIA,IAAW,SACN,+CAELA,IAAW,OACN,wDAEF,oDACT,CAGAN,iBAAiBE,EAA8B,CAC7C,GAAIA,GAAc,MAAQA,IAAe,GACvC,MAAO,SAET,IAAM2I,EAAYzB,KAAKwB,MAAM1I,CAAU,EACvC,GAAI,CAACgH,SAAS2B,CAAC,GAAKA,GAAK,EACvB,OAAO3I,EAET,IAAM4I,EAAU,IAAI1B,KAAKyB,CAAC,EACpBE,EAAeC,OAAOF,EAAEG,YAAW,CAAE,EACrCC,EAAaF,OAAOF,EAAEK,SAAQ,EAAK,CAAC,EAAEC,SAAS,EAAG,GAAG,EACrDC,EAAaL,OAAOF,EAAEQ,QAAO,CAAE,EAAEF,SAAS,EAAG,GAAG,EAChDG,EAAaP,OAAOF,EAAEU,SAAQ,CAAE,EAAEJ,SAAS,EAAG,GAAG,EACjDK,GAAaT,OAAOF,EAAEY,WAAU,CAAE,EAAEN,SAAS,EAAG,GAAG,EACnDO,GAAaX,OAAOF,EAAEc,WAAU,CAAE,EAAER,SAAS,EAAG,GAAG,EACzD,MAAO,GAAGL,CAAI,IAAIG,CAAE,IAAIG,CAAE,IAAIE,CAAE,IAAIE,EAAE,IAAIE,EAAE,EAC9C,CAMAxJ,cAAcC,EAAkB,CAC9B,OAAQA,EAAU,CAChB,IAAK,YAAa,MAAO,iBACzB,IAAK,YAAa,MAAO,SACzB,IAAK,iBAAkB,MAAO,mBAC9B,IAAK,mBAAoB,MAAO,qBAChC,IAAK,cAAe,MAAO,wBAC3B,QAAS,OAAOA,CAClB,CACF,CAMAf,wBAAwBE,EAA+B,CACrD,OAAIA,IAAgB,QACX,kDAELA,IAAgB,mBACX,kDAELA,IAAgB,WAAaA,IAAgB,UACxC,4CAEF,oDACT,CAMA6D,eAAeyE,EAA4B,CACzC,IAAMgC,EAAe,KAAKxG,cAAcwE,CAAO,EAAEG,KAAI,EACrD,OAAO6B,EAAK5K,OAAS,EAAI4K,EAAKC,OAAO,CAAC,EAAEC,YAAW,EAAK,GAC1D,CAMA5G,gBAAgB9B,EAAkB,CAChC,IAAM2I,EAAoB,CACxB,qCACA,+BACA,mCACA,qCACA,iCACA,+BACA,+BACA,kCAAkC,EAEhCC,EAAe,EACnB,QAASC,EAAY,EAAGA,EAAI7I,EAAWpC,OAAQiL,IAC7CD,EAAQA,EAAO,GAAK5I,EAAW8I,WAAWD,CAAC,EAAK,WAElD,OAAOF,EAAQC,EAAOD,EAAQ/K,MAAM,CACtC,CAYAoE,cAAcwE,EAA4B,CACxC,OAAI,OAAOA,EAAQvE,OAAU,UAAYuE,EAAQvE,QAAU,GAClDuE,EAAQvE,MAEbuE,EAAQ/H,cAAgB,GACnB+H,EAAQ/H,YAEV,WAAW+H,EAAQxG,WAAWwC,MAAM,EAAG,CAAC,CAAC,EAClD,CAMAU,aAAaP,EAAsC,CACjD,OAAOA,EAAM/E,MACf,CAOAgF,qBAAqBD,EAAsC,CACzD,QAAWoG,KAAQpG,EACjB,GAAIoG,EAAKhK,aAAe,aAAe,OAAOgK,EAAKzJ,aAAgB,SACjE,OAAOyJ,EAAKzJ,YAGhB,OAAO,IACT,CAOA2D,mBAAmBN,EAAsC,CACvD,GAAIA,EAAM/E,SAAW,EACnB,OAAO,KAET,IAAIoL,EAAwCrG,EAAM,CAAC,EACnD,QAAWoG,KAAQpG,EAAO,CACxB,IAAMyE,EAAY2B,EAAKlK,WAAakH,KAAKwB,MAAMwB,EAAKlK,UAAU,EAAI,EAC5DwI,EAAY2B,EAAOnK,WAAakH,KAAKwB,MAAMyB,EAAOnK,UAAU,EAAI,EAClEuI,EAAIC,IACN2B,EAASD,EAEb,CACA,OAAOC,EAAOhJ,UAChB,CAiBAsC,wBAAwBtC,EAAkB,CAExC,QAAWiJ,KAAS,KAAKvL,WAAW6H,iBAAgB,EAClD,GAAI0D,EAAMvH,QAAQ1B,aAAeA,GAC5BiJ,EAAM3K,mBAAmB4K,SAASlJ,CAAU,EAC/C,OAAO,KAAKgC,cAAciH,EAAMvH,OAAO,EAI3C,IAAMyH,EAAyC,KAAKzL,WAAWC,WAAU,EAAGyL,KACzEhC,GAAeA,EAAEpH,aAAeA,CAAU,EAE7C,OAAImJ,EACK,KAAKnH,cAAcmH,CAAK,EAE1B,WAAWnJ,EAAWwC,MAAM,EAAG,CAAC,CAAC,EAC1C,CAMApD,kBAAkBE,EAA0B,CAC1C,OAAIA,IAAgB,KACX,SAEF,GAAG4G,KAAKmD,MAAM/J,EAAc,GAAG,CAAC,GACzC,CAQAgK,sBAAsBhK,EAA0B,CAC9C,OAAIA,IAAgB,MAAQA,EAAc,GACjC,iBAELA,EAAc,IACT,kBAEF,cACT,CAYAmD,4BAA4BE,EAAsC,CAChE,IAAI4G,EACJ,QAAWR,KAAQpG,EACjB,GAAIoG,EAAKhK,aAAe,YAAa,CACnCwK,EAAeR,EACf,KACF,CAEF,GAAI,CAACQ,EACH,MAAO,mBAET,IAAMC,EAAgCC,EAA2BC,sBAAsB,CACrF3K,WAAY,YACZW,WAAY6J,EAAa7J,WACzBiK,MAAO5D,KAAKC,IAAG,EAChB,EACD,GAAIwD,IAAmB,KAAM,CAE3B,IAAMI,EAAsBL,EAAajK,aAAe,KACxD,OAAO,KAAKgK,sBAAsBM,CAAI,CACxC,CACA,IAAMC,EACJJ,EAA2BK,eAAe,CACxCxK,YAAaiK,EAAajK,YAC1BkK,eAAgBA,EACjB,EACH,OAAOC,EAA2BM,oBAAoBF,CAAc,CACtE,4CAngBW1G,EAA2B,2BAA3BA,EAA2B6G,UAAA,CAAA,CAAA,wBAAA,CAAA,EAAAC,UAAA,CAAA,EAAA,OAAA,WAAA,SAAA,UAAA,gBAAA,KAAA,EAAAC,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,GAAAC,KAAA,GAAAC,OAAA,CAAA,CAAA,EAAA,OAAA,cAAA,kBAAA,OAAA,OAAA,WAAA,qBAAA,OAAA,EAAA,CAAA,EAAA,UAAA,QAAA,EAAA,CAAA,EAAA,UAAA,YAAA,mBAAA,OAAA,eAAA,OAAA,EAAA,CAAA,OAAA,OAAA,SAAA,eAAA,UAAA,YAAA,cAAA,OAAA,EAAA,MAAA,MAAA,eAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,eAAA,IAAA,IAAA,mEAAA,EAAA,CAAA,EAAA,UAAA,mBAAA,MAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,mBAAA,cAAA,MAAA,EAAA,CAAA,EAAA,OAAA,eAAA,QAAA,UAAA,EAAA,CAAA,OAAA,SAAA,QAAA,uGAAA,EAAA,OAAA,SAAA,UAAA,aAAA,SAAA,qBAAA,oBAAA,mBAAA,0BAAA,2BAAA,oBAAA,sBAAA,8BAAA,cAAA,OAAA,eAAA,UAAA,EAAA,QAAA,UAAA,EAAA,CAAA,OAAA,OAAA,SAAA,eAAA,UAAA,YAAA,cAAA,OAAA,EAAA,QAAA,OAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,eAAA,IAAA,IAAA,6GAAA,EAAA,CAAA,OAAA,SAAA,QAAA,+DAAA,EAAA,OAAA,SAAA,UAAA,aAAA,SAAA,kBAAA,iBAAA,mBAAA,uBAAA,wBAAA,oBAAA,sBAAA,8BAAA,cAAA,OAAA,eAAA,UAAA,EAAA,QAAA,UAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,eAAA,IAAA,IAAA,4BAAA,EAAA,CAAA,EAAA,UAAA,mBAAA,SAAA,MAAA,EAAA,CAAA,EAAA,UAAA,eAAA,gBAAA,SAAA,iBAAA,UAAA,MAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,UAAA,gBAAA,mBAAA,YAAA,iBAAA,OAAA,OAAA,eAAA,OAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,eAAA,IAAA,IAAA,wQAAA,EAAA,CAAA,EAAA,mBAAA,cAAA,cAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,SAAA,gBAAA,qBAAA,oBAAA,OAAA,QAAA,aAAA,EAAA,CAAA,EAAA,OAAA,cAAA,iBAAA,iBAAA,OAAA,EAAA,CAAA,EAAA,aAAA,SAAA,qBAAA,2BAAA,kBAAA,wBAAA,oBAAA,sBAAA,oBAAA,iBAAA,kBAAA,OAAA,WAAA,EAAA,gBAAA,eAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,eAAA,IAAA,IAAA,wJAAA,EAAA,CAAA,EAAA,aAAA,SAAA,gBAAA,qBAAA,oBAAA,OAAA,OAAA,cAAA,cAAA,kBAAA,EAAA,CAAA,EAAA,OAAA,eAAA,QAAA,SAAA,OAAA,aAAA,SAAA,qBAAA,OAAA,2BAAA,0BAAA,gBAAA,EAAA,CAAA,QAAA,uBAAA,WAAA,KAAA,EAAA,SAAA,QAAA,EAAA,CAAA,EAAA,OAAA,WAAA,OAAA,EAAA,CAAA,EAAA,UAAA,kBAAA,EAAA,CAAA,OAAA,QAAA,cAAA,mBAAA,YAAA,GAAA,EAAA,SAAA,OAAA,OAAA,aAAA,iBAAA,SAAA,qBAAA,UAAA,mBAAA,0BAAA,qBAAA,wBAAA,EAAA,gBAAA,SAAA,EAAA,CAAA,EAAA,OAAA,eAAA,cAAA,QAAA,MAAA,EAAA,CAAA,OAAA,SAAA,EAAA,OAAA,SAAA,UAAA,aAAA,SAAA,qBAAA,mBAAA,uBAAA,oBAAA,EAAA,OAAA,EAAA,CAAA,OAAA,SAAA,EAAA,OAAA,SAAA,UAAA,aAAA,SAAA,kBAAA,iBAAA,mBAAA,uBAAA,oBAAA,sBAAA,8BAAA,EAAA,QAAA,UAAA,EAAA,CAAA,OAAA,OAAA,SAAA,eAAA,UAAA,YAAA,cAAA,OAAA,EAAA,OAAA,OAAA,UAAA,mBAAA,MAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,eAAA,MAAA,IAAA,qEAAA,EAAA,CAAA,EAAA,UAAA,mBAAA,cAAA,MAAA,EAAA,CAAA,EAAA,UAAA,kBAAA,EAAA,CAAA,EAAA,SAAA,SAAA,UAAA,iBAAA,gBAAA,WAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,aAAA,SAAA,qBAAA,2BAAA,kBAAA,wBAAA,oBAAA,sBAAA,oBAAA,iBAAA,kBAAA,OAAA,UAAA,EAAA,CAAA,EAAA,OAAA,cAAA,QAAA,SAAA,OAAA,WAAA,uBAAA,EAAA,CAAA,EAAA,SAAA,SAAA,EAAA,CAAA,EAAA,OAAA,eAAA,UAAA,SAAA,EAAA,CAAA,EAAA,UAAA,mBAAA,gBAAA,UAAA,EAAA,CAAA,EAAA,QAAA,OAAA,EAAA,CAAA,EAAA,aAAA,mBAAA,SAAA,SAAA,eAAA,SAAA,oBAAA,mBAAA,cAAA,UAAA,EAAA,CAAA,EAAA,aAAA,SAAA,SAAA,eAAA,SAAA,mBAAA,kBAAA,iBAAA,cAAA,WAAA,EAAA,OAAA,EAAA,CAAA,EAAA,OAAA,eAAA,UAAA,SAAA,SAAA,EAAA,CAAA,EAAA,cAAA,mBAAA,WAAA,EAAA,OAAA,EAAA,CAAA,EAAA,cAAA,mBAAA,SAAA,WAAA,EAAA,OAAA,EAAA,CAAA,OAAA,SAAA,EAAA,aAAA,mBAAA,sBAAA,SAAA,qBAAA,wBAAA,UAAA,OAAA,SAAA,oBAAA,WAAA,EAAA,QAAA,OAAA,EAAA,CAAA,EAAA,cAAA,mBAAA,YAAA,WAAA,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,OAAA,SAAA,QAAA,wDAAA,EAAA,WAAA,OAAA,OAAA,cAAA,aAAA,SAAA,kBAAA,iBAAA,mBAAA,uBAAA,oBAAA,OAAA,eAAA,QAAA,sBAAA,8BAAA,EAAA,QAAA,UAAA,EAAA,CAAA,OAAA,OAAA,SAAA,eAAA,UAAA,YAAA,cAAA,OAAA,EAAA,MAAA,KAAA,EAAA,CAAA,EAAA,OAAA,SAAA,WAAA,wBAAA,QAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,OAAA,MAAA,EAAA,CAAA,OAAA,SAAA,EAAA,cAAA,mBAAA,sBAAA,OAAA,eAAA,QAAA,oBAAA,EAAA,QAAA,OAAA,EAAA,CAAA,OAAA,OAAA,SAAA,eAAA,UAAA,YAAA,cAAA,OAAA,EAAA,MAAA,MAAA,sBAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,eAAA,IAAA,IAAA,cAAA,EAAA,CAAA,EAAA,mBAAA,SAAA,MAAA,EAAA,CAAA,EAAA,OAAA,aAAA,SAAA,qBAAA,oBAAA,KAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,OAAA,eAAA,kBAAA,MAAA,EAAA,CAAA,EAAA,cAAA,mBAAA,YAAA,gBAAA,EAAA,CAAA,EAAA,mBAAA,cAAA,kBAAA,MAAA,EAAA,CAAA,OAAA,SAAA,QAAA,4CAAA,EAAA,cAAA,mBAAA,sBAAA,SAAA,qBAAA,wBAAA,UAAA,SAAA,SAAA,oBAAA,sBAAA,8BAAA,EAAA,QAAA,UAAA,EAAA,CAAA,EAAA,cAAA,mBAAA,SAAA,OAAA,MAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,OAAA,SAAA,UAAA,iBAAA,mBAAA,YAAA,aAAA,EAAA,CAAA,EAAA,SAAA,cAAA,WAAA,EAAA,CAAA,EAAA,OAAA,OAAA,aAAA,EAAA,CAAA,EAAA,OAAA,OAAA,cAAA,YAAA,EAAA,CAAA,EAAA,WAAA,wBAAA,yBAAA,EAAA,CAAA,EAAA,OAAA,OAAA,YAAA,kBAAA,EAAA,CAAA,EAAA,OAAA,OAAA,kBAAA,EAAA,CAAA,EAAA,OAAA,MAAA,EAAA,CAAA,EAAA,OAAA,OAAA,YAAA,mBAAA,YAAA,EAAA,CAAA,EAAA,OAAA,OAAA,kBAAA,EAAA,CAAA,EAAA,OAAA,OAAA,YAAA,kBAAA,EAAA,CAAA,EAAA,WAAA,MAAA,MAAA,aAAA,iBAAA,SAAA,qBAAA,OAAA,eAAA,iBAAA,kBAAA,EAAA,CAAA,iBAAA,QAAA,kBAAA,QAAA,eAAA,IAAA,IAAA,yDAAA,EAAA,CAAA,EAAA,UAAA,mBAAA,cAAA,WAAA,EAAA,OAAA,EAAA,CAAA,EAAA,cAAA,mBAAA,SAAA,OAAA,eAAA,UAAA,WAAA,EAAA,CAAA,EAAA,YAAA,mBAAA,aAAA,EAAA,CAAA,EAAA,kBAAA,CAAA,EAAAC,SAAA,SAAAC,EAAA5M,EAAA,IAAA4M,EAAA,ICpCxCrN,EAAA,EAAA,SAAA,CAAA,EAA6F,EAAA,MAAA,CAAA,EAC/D,EAAA,KAAA,CAAA,MAExBA,EAAA,EAAA,MAAA,CAAA,EACEU,EAAA,EAAA,OAAA,CAAA,EAEFR,EAAA,EACAD,EAAA,EAAA,uBAAA,EACFC,EAAA,MACAF,EAAA,EAAA,IAAA,CAAA,EACEC,EAAA,EAAA,2GAAA,EAEAD,EAAA,EAAA,OAAA,CAAA,EAA+BC,EAAA,CAAA,EAAqDC,EAAA,EACpFkD,EAAA,GAAAkK,GAAA,EAAA,EAAA,OAAA,CAAA,EAGArN,EAAA,GAAA,QAAA,EACAD,EAAA,GAAA,OAAA,CAAA,EAA+BC,EAAA,EAAA,EAA2CC,EAAA,EAAO,EAC/E,EAENF,EAAA,GAAA,MAAA,CAAA,EAA8C,GAAA,SAAA,CAAA,EAO1C6C,EAAA,QAAA,UAAA,CAAA,OAASpC,EAAA+G,cAAA,CAAe,CAAA,MAGxBxH,EAAA,GAAA,MAAA,EAAA,EACEU,EAAA,GAAA,OAAA,EAAA,EAEFR,EAAA,EACAD,EAAA,EAAA,EACFC,EAAA,MACAF,EAAA,GAAA,SAAA,EAAA,EAME6C,EAAA,QAAA,UAAA,CAAA,OAASpC,EAAAwH,sBAAA,CAAuB,CAAA,MAGhCjI,EAAA,GAAA,MAAA,EAAA,EACEU,EAAA,GAAA,OAAA,EAAA,EAEFR,EAAA,EACAD,EAAA,EAAA,EACFC,EAAA,EAAS,EACL,EAGRkD,EAAA,GAAAmK,GAAA,EAAA,EAAA,MAAA,EAAA,EAAgC,GAAAC,GAAA,EAAA,EAAA,MAAA,EAAA,MAYhCxN,EAAA,GAAA,UAAA,EAAA,EAAsB,GAAA,KAAA,EAAA,MAElBA,EAAA,GAAA,MAAA,EAAA,EACEU,EAAA,GAAA,OAAA,EAAA,EAEFR,EAAA,EACAD,EAAA,GAAA,qBAAA,MACAD,EAAA,GAAA,OAAA,EAAA,EACEC,EAAA,EAAA,EACFC,EAAA,EAAO,EAGTkD,EAAA,GAAAqK,GAAA,GAAA,EAAA,MAAA,EAAA,EAcAzN,EAAA,GAAA,MAAA,EAAA,EACAuC,EAAA,GAAAmL,GAAA,GAAA,GAAA,MAAA,GAAAC,EAAA,EA+KAzN,EAAA,EAAM,EAGRF,EAAA,GAAA,SAAA,EAAS,GAAA,KAAA,EAAA,MAELA,EAAA,GAAA,MAAA,EAAA,EACEU,EAAA,GAAA,OAAA,EAAA,EAEFR,EAAA,EACAD,EAAA,GAAA,mCAAA,MACAD,EAAA,GAAA,OAAA,EAAA,EACEC,EAAA,EAAA,EACFC,EAAA,EAAO,EAGTkD,EAAA,GAAAwK,GAAA,EAAA,EAAA,MAAA,EAAA,EASArL,EAAA,GAAAsL,GAAA,GAAA,EAAA,MAAA,GAAAC,EAAA,EA+BF5N,EAAA,EAGAF,EAAA,GAAA,cAAA,EAAA,EAIE6C,EAAA,SAAA,UAAA,CAAA,OAAUpC,EAAAgJ,qBAAA,CAAsB,CAAA,EAEhCzJ,EAAA,GAAA,MAAA,EAAA,EAAiC,GAAA,IAAA,EAAA,EAE7BC,EAAA,GAAA,gFAAA,EACFC,EAAA,EACAF,EAAA,GAAA,QAAA,EAAA,EAGE6C,EAAA,gBAAA,SAAAkL,EAAA,CAAA,OAAiBtN,EAAAkG,iBAAAe,IAAAqG,CAAA,CAA4B,CAAA,EAH/C7N,EAAA,EASAF,EAAA,GAAA,MAAA,EAAA,EAAsD,GAAA,SAAA,EAAA,EAKlD6C,EAAA,QAAA,UAAA,CAAA,OAASpC,EAAAgJ,qBAAA,CAAsB,CAAA,EAE/BxJ,EAAA,GAAA,UAAA,EACFC,EAAA,EACAF,EAAA,GAAA,SAAA,EAAA,EAKE6C,EAAA,QAAA,UAAA,CAAA,OAASpC,EAAA4I,oBAAA,CAAqB,CAAA,EAE9BpJ,EAAA,EAAA,EACFC,EAAA,EAAS,EACL,EACF,gBAhW6BC,EAAA,CAAA,EAAAC,EAAA,GAAAK,EAAAH,WAAA6H,iBAAA,EAAA3H,OAAA,aAAA,EAC/BL,EAAA,EAAAqD,EAAA/C,EAAAH,WAAAC,WAAA,EAAAC,SAAAC,EAAAH,WAAA6H,iBAAA,EAAA3H,OAAA,GAAA,EAAA,EAI+BL,EAAA,CAAA,EAAAC,EAAA,GAAAK,EAAAsG,gBAAA,EAAA,sBAAA,EAS/B5G,EAAA,CAAA,EAAAY,EAAA,WAAAN,EAAA2F,eAAA,GAAA3F,EAAAH,WAAA0N,YAAA,CAAA,EAIyB7N,EAAA,EAAAoE,EAAA,eAAA9D,EAAA2F,eAAA,CAAA,EAIzBjG,EAAA,CAAA,EAAAC,EAAA,IAAAK,EAAA2F,eAAA,EAAA,oBAAA,mBAAA,GAAA,EAOAjG,EAAA,EAAAY,EAAA,WAAAN,EAAA6F,uBAAA,GAAA,CAAA7F,EAAAH,WAAA6H,iBAAA,EAAA3H,MAAA,EAIyBL,EAAA,EAAAoE,EAAA,eAAA9D,EAAA6F,uBAAA,CAAA,EAIzBnG,EAAA,CAAA,EAAAC,EAAA,IAAAK,EAAA6F,uBAAA,EAAA,oBAAA,iBAAA,GAAA,EAKNnG,EAAA,EAAAqD,EAAA/C,EAAAH,WAAA0N,YAAA,EAAA,GAAA,EAAA,EAMA7N,EAAA,EAAAqD,GAAAyK,EAAAxN,EAAAH,WAAA4N,YAAA,GAAA,GAAA,GAAAD,CAAA,EAcM9N,EAAA,CAAA,EAAAC,EAAA,SAAAK,EAAAH,WAAA6H,iBAAA,EAAA3H,OAAA,GAAA,EAIJL,EAAA,EAAAqD,EAAA,CAAA/C,EAAAH,WAAA6H,iBAAA,EAAA3H,QAAA,CAAAC,EAAAH,WAAA0N,YAAA,EAAA,GAAA,EAAA,EAeA7N,EAAA,CAAA,EAAAuC,EAAAjC,EAAAH,WAAA6H,iBAAA,CAA6B,EA0LzBhI,EAAA,CAAA,EAAAC,EAAA,SAAAK,EAAAsG,gBAAA,EAAA,GAAA,EAIJ5G,EAAA,EAAAqD,EAAA,CAAA/C,EAAAsG,gBAAA,GAAA,CAAAtG,EAAAH,WAAA0N,YAAA,EAAA,GAAA,EAAA,EASA7N,EAAA,EAAAuC,GAAAyL,GAAAA,EAAA1N,EAAAH,WAAA2G,kBAAA,IAA8B,KAAA,KAAAkH,EAAAjH,aAAA,MAAAiH,IAAApM,OAAAoM,EAAAC,EAAA,GAAAC,EAAA,CAAA,EAmC9BlO,EAAA,CAAA,EAAAY,EAAA,SAAAN,EAAAgG,qBAAA,CAAA,EAWItG,EAAA,CAAA,EAAAY,EAAA,UAAAN,EAAAkG,iBAAA,CAAA,EAoBExG,EAAA,CAAA,EAAAY,EAAA,WAAAN,EAAAmG,kBAAA,CAAA,EAGAzG,EAAA,EAAAC,EAAA,IAAAK,EAAAmG,kBAAA,EAAA,eAAA,OAAA,GAAA,kBD1UI0H,EAAcC,EAAWC,EAAAC,EAAAC,EAAEC,EAAmBC,GAA+BC,EAA0B,EAAAC,cAAA,CAAA,CAAA,SAKtG/I,CAA2B,GAAA",
|
|
6
|
+
"names": ["S_InstanceDisplayName_Pipe", "registry_DS", "inject", "ExS_InstanceRegistry_DataService", "transform", "instanceKey", "resolveDisplayName", "pure", "standalone", "CC_AccountUsagePacing_Util", "WINDOW_SEC_BY_TYPE", "five_hour", "seven_day", "seven_day_opus", "seven_day_sonnet", "computePacingFraction", "params", "windowSec", "windowType", "undefined", "resetsAtMs", "windowMs", "windowStart", "pacing", "Math", "max", "nowMs", "classifyPacing", "utilization", "pacingFraction", "tolerance", "diff", "colorClassForPacing", "classification", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r0", "account_DS", "accounts_$", "length", "ctx", "\u0275\u0275element", "\u0275\u0275classMap", "tokenStatusBadgeClassOf", "account_r3", "tokenStatus", "\u0275\u0275property", "planTier", "group_r4", "siblingAccountKeys", "join", "\u0275\u0275textInterpolate", "displayName", "identity", "formatObservedAt", "ev_r6", "observedAt", "windowLabelOf", "windowType", "sourceBadgeClassOf", "source", "tmp_26_0", "undefined", "formatUtilization", "tmp_27_0", "utilization", "tmp_28_0", "lastObservedStatus", "formatResetCountdown", "resetsAtMs", "\u0275\u0275repeaterCreate", "CC_UsageDashboard_Component_For_35_Conditional_34_Conditional_9_For_18_Template", "\u0275\u0275repeaterTrackByIndex", "\u0275\u0275repeater", "historyItemsOf", "accountKey", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r5", "\u0275\u0275nextContext", "\u0275\u0275readContextLet", "\u0275\u0275resetView", "handleRefreshHistory", "\u0275\u0275template", "CC_UsageDashboard_Component_For_35_Conditional_34_Conditional_8_Template", "CC_UsageDashboard_Component_For_35_Conditional_34_Conditional_9_Template", "isHistoryLoading", "\u0275\u0275conditional", "\u0275\u0275declareLet", "CC_UsageDashboard_Component_For_35_Conditional_9_Template", "CC_UsageDashboard_Component_For_35_Conditional_10_Template", "CC_UsageDashboard_Component_For_35_Conditional_11_Template", "CC_UsageDashboard_Component_For_35_Conditional_13_Template", "CC_UsageDashboard_Component_For_35_Conditional_14_Template", "_r2", "handleEditEmail", "handleRefreshUsage", "handleToggleHistory", "CC_UsageDashboard_Component_For_35_Conditional_33_Template", "CC_UsageDashboard_Component_For_35_Conditional_34_Template", "\u0275\u0275storeLet", "primary", "\u0275\u0275classProp", "isHistoryOpen", "account_r7", "avatarBgClassOf", "avatarLetterOf", "displayNameOf", "email", "startsWith", "hasEmail", "organizationId", "isRefreshingUsageOf", "displayNameByAccountKey", "ak_r8", "slice", "pacingColorClassForFiveHour", "entry_r9", "items", "latestFiveHourUtilOf", "CC_UsageDashboard_Component_For_45_Conditional_9_Template", "ccapId", "\u0275\u0275pipeBind1", "tmp_12_0", "latestAccountKeyOf", "itemsCountOf", "CC_UsageDashboard_Component", "inject", "CC_Account_DataService", "instanceRegistry_DS", "ExS_InstanceRegistry_DataService", "isRefreshing_$", "signal", "isRefreshingAllUsage_$", "refreshingUsageKeys_$", "Set", "editEmailModalOpen_$", "editEmailAccountKey_$", "editEmailValue_$", "editEmailSaving_$", "expandedHistoryKeys_$", "loadingHistoryKeys_$", "instanceCount_$", "computed", "instanceMapping_$", "instances", "ngOnInit", "loadDashboardBootstrap", "list_$", "loadList", "startLiveUpdates", "handleRefresh", "__async", "set", "refreshAccounts", "update", "next", "add", "refreshAccountUsage", "delete", "handleRefreshAllUsage", "keys", "identityGroups_$", "map", "g", "Promise", "all", "k", "isFinite", "diffMs", "Date", "now", "totalMinutes", "Math", "floor", "days", "hours", "minutes", "has", "account", "handleEditEmailSave", "trimmed", "trim", "renameAccount", "handleEditEmailClose", "usageHistoryMap_$", "get", "loadHistoryFor", "loadAccountUsageHistory", "copy", "sort", "a", "b", "ta", "parse", "t", "d", "yyyy", "String", "getFullYear", "mm", "getMonth", "padStart", "dd", "getDate", "hh", "getHours", "mi", "getMinutes", "ss", "getSeconds", "name", "charAt", "toUpperCase", "palette", "hash", "i", "charCodeAt", "item", "latest", "group", "includes", "found", "find", "round", "utilizationColorClass", "fiveHourItem", "pacingFraction", "CC_AccountUsagePacing_Util", "computePacingFraction", "nowMs", "util", "classification", "classifyPacing", "colorClassForPacing", "selectors", "hostAttrs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "CC_UsageDashboard_Component_Conditional_10_Template", "CC_UsageDashboard_Component_Conditional_23_Template", "CC_UsageDashboard_Component_Conditional_24_Template", "CC_UsageDashboard_Component_Conditional_32_Template", "CC_UsageDashboard_Component_For_35_Template", "_forTrack0", "CC_UsageDashboard_Component_Conditional_43_Template", "CC_UsageDashboard_Component_For_45_Template", "_forTrack1", "$event", "isLoading_$", "tmp_10_0", "loadError_$", "tmp_16_0", "\u0275\u0275pureFunction0", "_c0", "CommonModule", "FormsModule", "DefaultValueAccessor", "NgControlStatus", "NgModel", "S_Modal_Component", "CC_AccountUsageView_Component", "S_InstanceDisplayName_Pipe", "encapsulation"]
|
|
7
|
+
}
|