@oneuptime/common 14.0.6 → 14.0.7
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/Models/DatabaseModels/InventoryItem.ts +23 -12
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.ts +217 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Services/AlertService.ts +32 -36
- package/Server/Services/IncidentAlertService.ts +609 -2
- package/Server/Services/IncidentService.ts +134 -44
- package/Server/Services/InventoryItemService.ts +38 -0
- package/Server/Services/IoTDeviceCredentialService.ts +13 -4
- package/Server/Services/ScheduledMaintenanceService.ts +50 -46
- package/Server/Services/UserNotificationRuleService.ts +55 -53
- package/Server/Services/WorkspaceNotificationSummaryService.ts +38 -20
- package/Server/Utils/AffectedResources/LinkedAffectedResources.ts +576 -0
- package/Server/Utils/Alert/AlertStateChangeAuthorization.ts +129 -0
- package/Server/Utils/Inventory/InventoryOverviewAggregation.ts +111 -0
- package/Server/Utils/Response.ts +31 -0
- package/Server/Utils/Topology/TopologyConcurrencyLimiter.ts +229 -0
- package/Server/Utils/Topology/TopologyQueries.ts +1350 -0
- package/Server/Utils/Topology/TopologyRequest.ts +463 -0
- package/Server/Utils/Topology/TopologyResponseCache.ts +183 -0
- package/Server/Utils/Topology/TopologySql.ts +1024 -0
- package/Tests/App/Dashboard/AcknowledgeAlertsOnDeclare.test.ts +369 -0
- package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +1 -1
- package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +510 -123
- package/Tests/App/Dashboard/AlertsTableAffectedResources.test.tsx +490 -0
- package/Tests/App/Dashboard/ChangeAlertStateDeclareIncident.test.tsx +886 -0
- package/Tests/App/Dashboard/CreateReviewStepRoleSummary.test.tsx +1250 -0
- package/Tests/App/Dashboard/CreateReviewStepSelectionSummary.test.tsx +738 -0
- package/Tests/App/Dashboard/DeclareIncidentFromAlert.test.ts +417 -0
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +1948 -229
- package/Tests/App/Dashboard/EntityDetailPanelLifecycle.test.tsx +493 -0
- package/Tests/App/Dashboard/EntityDetailPanelNavigation.test.tsx +439 -0
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +292 -1
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +798 -2
- package/Tests/App/Dashboard/FetchStateAndSeverityElements.test.tsx +669 -0
- package/Tests/App/Dashboard/FetchUsers.test.tsx +230 -0
- package/Tests/App/Dashboard/IncidentCreateAcknowledgeAlerts.test.tsx +1611 -0
- package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +1365 -57
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +964 -23
- package/Tests/App/Dashboard/InventoryRelationships.test.tsx +885 -0
- package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +201 -15
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +508 -36
- package/Tests/App/Dashboard/TopologyDataLifecycle.test.tsx +583 -0
- package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +982 -218
- package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +818 -114
- package/Tests/Server/Infrastructure/Postgres/RenameInventoryItemMigration.test.ts +90 -21
- package/Tests/Server/Services/DomainService.test.ts +525 -0
- package/Tests/Server/Services/IncidentAlertAcknowledgeOnDeclare.test.ts +2630 -0
- package/Tests/Server/Services/IncidentAlertPostgres.test.ts +1625 -1
- package/Tests/Server/Services/IncidentDeclareAcknowledgeAlerts.test.ts +2189 -0
- package/Tests/Server/Services/InventoryItemServiceOverviewCounts.test.ts +345 -0
- package/Tests/Server/Services/InventoryOverviewPostgres.test.ts +254 -0
- package/Tests/Server/Services/IoTDeviceCredentialService.test.ts +819 -0
- package/Tests/Server/Services/LinkedAffectedResourcesCreatedFeed.test.ts +420 -0
- package/Tests/Server/Services/SloAffectedResourceCreatedFeed.test.ts +92 -36
- package/Tests/Server/Utils/AffectedResources/LinkedAffectedResources.test.ts +858 -0
- package/Tests/Server/Utils/Alert/AlertStateChangeAuthorization.test.ts +1172 -0
- package/Tests/Server/Utils/Topology/InventoryItemEntityKeyIndexMigration.test.ts +386 -0
- package/Tests/Server/Utils/Topology/InventoryItemEntityKeyIndexMigrationPostgres.test.ts +430 -0
- package/Tests/Server/Utils/Topology/TopologyActivityParityPostgres.test.ts +279 -0
- package/Tests/Server/Utils/Topology/TopologyConcurrencyLimiter.test.ts +534 -0
- package/Tests/Server/Utils/Topology/TopologyEstateGenerator.ts +624 -0
- package/Tests/Server/Utils/Topology/TopologyJsonResponse.test.ts +90 -0
- package/Tests/Server/Utils/Topology/TopologyQueries.test.ts +1634 -0
- package/Tests/Server/Utils/Topology/TopologyQueriesDifferentialPostgres.test.ts +683 -0
- package/Tests/Server/Utils/Topology/TopologyQueriesPostgres.test.ts +2624 -0
- package/Tests/Server/Utils/Topology/TopologyReference.ts +1018 -0
- package/Tests/Server/Utils/Topology/TopologyRequest.test.ts +643 -0
- package/Tests/Server/Utils/Topology/TopologyResponseCache.test.ts +305 -0
- package/Tests/Server/Utils/Topology/TopologySql.test.ts +973 -0
- package/Tests/Types/Topology/TopologyTypeRules.test.ts +176 -0
- package/Tests/Utils/Incident/IncidentFromAlerts.test.ts +302 -0
- package/Types/Incident/IncidentAlertLink.ts +19 -0
- package/Types/Telemetry/InventoryLiveness.ts +26 -0
- package/Types/Topology/TopologyApi.ts +428 -0
- package/Types/Topology/TopologyTypeRules.ts +191 -0
- package/Utils/Incident/IncidentFromAlerts.ts +78 -0
- package/build/dist/Models/DatabaseModels/InventoryItem.js +20 -11
- package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.js +165 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +21 -33
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/IncidentAlertService.js +457 -3
- package/build/dist/Server/Services/IncidentAlertService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +96 -42
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemService.js +31 -0
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
- package/build/dist/Server/Services/IoTDeviceCredentialService.js +12 -5
- package/build/dist/Server/Services/IoTDeviceCredentialService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +37 -40
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +55 -51
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +42 -25
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
- package/build/dist/Server/Utils/AffectedResources/LinkedAffectedResources.js +405 -0
- package/build/dist/Server/Utils/AffectedResources/LinkedAffectedResources.js.map +1 -0
- package/build/dist/Server/Utils/Alert/AlertStateChangeAuthorization.js +112 -0
- package/build/dist/Server/Utils/Alert/AlertStateChangeAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/Inventory/InventoryOverviewAggregation.js +81 -0
- package/build/dist/Server/Utils/Inventory/InventoryOverviewAggregation.js.map +1 -0
- package/build/dist/Server/Utils/Response.js +30 -0
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/Topology/TopologyConcurrencyLimiter.js +178 -0
- package/build/dist/Server/Utils/Topology/TopologyConcurrencyLimiter.js.map +1 -0
- package/build/dist/Server/Utils/Topology/TopologyQueries.js +884 -0
- package/build/dist/Server/Utils/Topology/TopologyQueries.js.map +1 -0
- package/build/dist/Server/Utils/Topology/TopologyRequest.js +275 -0
- package/build/dist/Server/Utils/Topology/TopologyRequest.js.map +1 -0
- package/build/dist/Server/Utils/Topology/TopologyResponseCache.js +146 -0
- package/build/dist/Server/Utils/Topology/TopologyResponseCache.js.map +1 -0
- package/build/dist/Server/Utils/Topology/TopologySql.js +688 -0
- package/build/dist/Server/Utils/Topology/TopologySql.js.map +1 -0
- package/build/dist/Types/Incident/IncidentAlertLink.js +17 -0
- package/build/dist/Types/Incident/IncidentAlertLink.js.map +1 -1
- package/build/dist/Types/Telemetry/InventoryLiveness.js +23 -0
- package/build/dist/Types/Telemetry/InventoryLiveness.js.map +1 -1
- package/build/dist/Types/Topology/TopologyApi.js +55 -0
- package/build/dist/Types/Topology/TopologyApi.js.map +1 -0
- package/build/dist/Types/Topology/TopologyTypeRules.js +165 -0
- package/build/dist/Types/Topology/TopologyTypeRules.js.map +1 -0
- package/build/dist/Utils/Incident/IncidentFromAlerts.js +38 -0
- package/build/dist/Utils/Incident/IncidentFromAlerts.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopologyQueries.js","sourceRoot":"","sources":["../../../../../Server/Utils/Topology/TopologyQueries.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,oBAAoB,MAAM,qCAAqC,CAAC;AACvE,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAGnD,OAAO,UAAU,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,GAsBlB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAUL,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAKL,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,EACf,4BAA4B,EAC5B,iCAAiC,EACjC,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,+BAA+B,EAC/B,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,iCAAiC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AAClE,CAAC;AAWD,4EAA4E;AAE5E,SAAS,UAAU,CAAC,GAAe,EAAE,GAAW;IAC9C,MAAM,KAAK,GAAY,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAe,EAAE,GAAW;IACtD,MAAM,KAAK,GAAY,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAe,EAAE,GAAW;IACtD,MAAM,KAAK,GAAY,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAW,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,GAAe,EAAE,GAAW;;IAC9C,OAAO,MAAA,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,mCAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,GAAe,EAAE,GAAW;IAC/C,MAAM,KAAK,GAAY,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,CAAC;AAC7D,CAAC;AAED,SAAS,cAAc,CAAC,GAAe,EAAE,GAAW;IAClD,MAAM,KAAK,GAAY,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAmB,CAAC;AAC7B,CAAC;AAED,kEAAkE;AAClE,SAAS,aAAa,CACpB,GAAe,EACf,GAAW;IAEX,MAAM,GAAG,GAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,KAAK,GAAW,CAAC,CAAC;IACtB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,MAAM,KAAK,GAAY,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAC3B,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,GAAe;;IACnC,OAAO;QACL,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;QAC3B,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;QAC7B,IAAI,EAAE,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC;QACrC,oEAAoE;QACpE,MAAM,EAAE,MAAA,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,mCAAI,EAAE;QAC/C,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAe;IACzC,MAAM,MAAM,GAAiC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAuC,aAAa,CACnE,GAAG,EACH,uBAAuB,CACxB,CAAC;IACF,MAAM,WAAW,GAAuC,aAAa,CACnE,GAAG,EACH,uBAAuB,CACxB,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,qBAAqB,GAAG,WAAW,CAAC;IAC7C,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,qBAAqB,GAAG,WAAW,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,GAAG,GAAe,CAAC,KAAK,IAAI,EAAE,CAAe,CAAC;IACpD,MAAM,UAAU,GAA8B;QAC5C,gBAAgB,EAAE,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC;QACrD,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QACnD,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC;QACrC,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC;QAC1C,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC;QAC/C,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC;QAC/C,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC;QAC/C,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC;QACjD,aAAa,EAAE,kBAAkB,CAAC,GAAG,EAAE,eAAe,CAAC;QACvD,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC;KAClD,CAAC;IACF,+EAA+E;IAC/E,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACrB,UAAU,CAAC,OAAO,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,KAAa;IACnD,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa;IAIpB,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAChE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACnE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACjE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KACnE,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,4BAA4B,CAAC,IAAI,CACtC,CAAC,OAAkC,EAAW,EAAE;QAC9C,OAAO,OAAO,KAAK,KAAK,CAAC;IAC3B,CAAC,CACF,CAAC;AACJ,CAAC;AAOD;;;GAGG;AACH,SAAS,cAAc,CACrB,IAAuB,EACvB,MAAc;IAEd,MAAM,QAAQ,GAGV,aAAa,EAAE,CAAC;IACpB,MAAM,GAAG,GAAe,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtC,MAAM,MAAM,GAAY,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,KAAK,GAAe,CAAC,KAAK,IAAI,EAAE,CAAe,CAAC;QACtD,MAAM,OAAO,GAAY,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACrD,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAY,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QACpD,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,EAAE,EAAE,CAAC;QACP,MAAM,OAAO,GAAa,CAAC,UAAU,IAAI,EAAE,CAAgB,CAAC,SAAS,CAAC,CAAC;QACvE,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,4BAA4B,EAAE,CAAC;QACnD,MAAM,OAAO,GAAW,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/D,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU;YAC1B,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK;gBACpE,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,IAAI,CAAC;IACb,CAAC;IAED,OAAO;QACL,QAAQ;QACR,aAAa,EACX,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,iBAAiB,CAAC,yBAAyB;KAC3E,CAAC;AACJ,CAAC;AAED,6EAA6E;AAE7E,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,kBAAkB,CACpC,IAAqD;QAErD,MAAM,OAAO,GAAkB,oBAAoB,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC;QAC5E,OAAO,MAAM,OAAO,CAAC,WAAW,CAC9B,iBAAiB,EACjB,KAAK,EAAE,WAA0B,EAAc,EAAE;YAC/C,MAAM,WAAW,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACrD,MAAM,gBAAgB,GAAkB,mBAAmB,CACzD,0BAA0B,CAC3B,CAAC;YACF,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,WAAW,CAAC,KAAK,CACrB,+CAA+C,CAChD,CAAC;YACF,MAAM,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC/C,OAAO,MAAM,IAAI,CAAC;gBAChB,KAAK,EAAE,KAAK,EACV,SAA+B,EACH,EAAE;oBAC9B,OAAO,CAAC,MAAM,WAAW,CAAC,KAAK,CAC7B,SAAS,CAAC,GAAG,EACb,SAAS,CAAC,MAAM,CACjB,CAAsB,CAAC;gBAC1B,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,UAAgB;QACrC,OAAO;YACL,aAAa,EAAE,2BAA2B;YAC1C,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE;YACpC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;IAED,yDAAyD;IAClD,MAAM,CAAC,eAAe;QAI3B,OAAO;YACL,aAAa,EAAE,2BAA2B;YAC1C,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;IAED,sEAAsE;IAC/D,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,MAA+B,EAC/B,SAAiB;QAEjB,MAAM,IAAI,GAAsB,MAAM,MAAM,CAAC,KAAK,CAChD,qBAAqB,CAAC,EAAE,SAAS,EAAE,CAAC,CACrC,CAAC;QACF,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,GAAe,EAAU,EAAE;YAC/B,OAAO,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACvC,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE;YAChC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,eAAe,CACjC,MAA+B,EAC/B,SAAiB,EACjB,YAA2B;QAE3B,MAAM,IAAI,GAAsB,MAAM,MAAM,CAAC,KAAK,CAChD,sBAAsB,CAAC,EAAE,SAAS,EAAE,CAAC,CACtC,CAAC;QACF,OAAO;YACL,YAAY;YACZ,aAAa,EAAE,IAAI;iBAChB,GAAG,CAAC,CAAC,GAAe,EAAU,EAAE;gBAC/B,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC,CAAC;iBACD,IAAI,CAAC,gBAAgB,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,KAAK,CAAC,UAAU,CAC7B,MAA+B,EAC/B,IAA6C,EAC7C,KAAiC,EACjC,GAAW;QAEX,MAAM,KAAK,GAAsB,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACzD,CAAC;QACD,MAAM,OAAO,GAAsB,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAe,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACzB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC;YACnD,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,KAAK,CAAC,gBAAgB,CACnC,MAA+B,EAC/B,IAKC;QAED,MAAM,aAAa,GAAsB,MAAM,MAAM,CAAC,KAAK,CACzD,mBAAmB,CAAC;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CACH,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAAkB,KAAK,CAAC,IAAI,CAC1C,IAAI,GAAG,CACL,aAAa,CAAC,GAAG,CAAC,CAAC,GAAe,EAAU,EAAE;YAC5C,OAAO,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CACH,CACF,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzB,MAAM,UAAU,GAAsB,MAAM,MAAM,CAAC,KAAK,CACtD,oBAAoB,CAAC;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,UAAU;SACjB,CAAC,CACH,CAAC;QACF,MAAM,WAAW,GAAmD,IAAI,GAAG,EAGxE,CAAC;QACJ,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE;gBACtC,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC7B,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAyC,IAAI,GAAG,EAGzD,CAAC;QACJ,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,OAAO,GAAW,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACnD,MAAM,MAAM,GACV,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAW,GAAG,OAAO,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1D,IAAI,KAAK,GAAwC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC5D,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,sEAAsE;YACtE,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACrC,CACE,IAA6B,EAC7B,KAA8B,EACtB,EAAE;YACV,OAAO,CACL,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;gBAC7C,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CACxC,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IAEiB,AAAb,MAAM,CAAC,KAAK,CAAC,aAAa,CAC/B,OAAoD;QAEpD,MAAM,SAAS,GAAW,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,UAAU,GAAW,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAW,iBAAiB,CAAC,qBAAqB,CAAC;QAClE,MAAM,aAAa,GAAW,iBAAiB,CAAC,yBAAyB,CAAC;QAE1E,OAAO,MAAM,eAAe,CAAC,kBAAkB,CAC7C,KAAK,EACH,MAA+B,EACU,EAAE;YAC3C,MAAM,QAAQ,mCACT,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAC/C,QAAQ,EAAE,EAAE,EACZ,YAAY,EAAE,EAAE,EAChB,MAAM,EAAE,EAAE,EACV,gBAAgB,EAAE,IAAI,EACtB,oBAAoB,EAAE,IAAI,GAC3B,CAAC;YAEF,MAAM,YAAY,GAChB,MAAM,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/C,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,MAAM,GACV,MAAM,eAAe,CAAC,eAAe,CACnC,MAAM,EACN,SAAS,EACT,YAAY,CACb,CAAC;YAEJ,MAAM,QAAQ,GAGV,MAAM,eAAe,CAAC,UAAU,CAClC,MAAM,EACN,CAAC,KAAa,EAAwB,EAAE;gBACtC,OAAO,2BAA2B,CAAC;oBACjC,SAAS;oBACT,MAAM;oBACN,IAAI,EAAE,MAAM;oBACZ,KAAK;iBACN,CAAC,CAAC;YACL,CAAC,EACD,GAAyB,EAAE;gBACzB,OAAO,2BAA2B,CAAC;oBACjC,SAAS;oBACT,MAAM;oBACN,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC,EACD,SAAS,CACV,CAAC;YACF,MAAM,WAAW,GAAkB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAClD,CAAC,GAAe,EAAU,EAAE;gBAC1B,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC,CACF,CAAC;YACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,MAAM,YAAY,GAGd,MAAM,eAAe,CAAC,UAAU,CAClC,MAAM,EACN,CAAC,KAAa,EAAwB,EAAE;gBACtC,OAAO,+BAA+B,CAAC;oBACrC,SAAS;oBACT,UAAU;oBACV,WAAW;oBACX,IAAI,EAAE,MAAM;oBACZ,KAAK;iBACN,CAAC,CAAC;YACL,CAAC,EACD,GAAyB,EAAE;gBACzB,OAAO,+BAA+B,CAAC;oBACrC,SAAS;oBACT,UAAU;oBACV,WAAW;oBACX,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC,EACD,aAAa,CACd,CAAC;YACF,QAAQ,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAC3C,CAAC,GAAe,EAA0B,EAAE;gBAC1C,OAAO;oBACL,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;oBAC7B,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;oBACzB,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC;oBAC/C,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC;oBACjD,aAAa,EAAE,kBAAkB,CAAC,GAAG,EAAE,eAAe,CAAC;iBACxD,CAAC;YACJ,CAAC,CACF,CAAC;YACF,IAAI,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClD,QAAQ,CAAC,oBAAoB,GAAG;oBAC9B,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;oBAC/B,KAAK,EAAE,YAAY,CAAC,KAAK;iBAC1B,CAAC;YACJ,CAAC;YAED;;;eAGG;YACH,MAAM,aAAa,GAAgB,IAAI,GAAG,CAAS,WAAW,CAAC,CAAC;YAChE,MAAM,UAAU,GAAkB,KAAK,CAAC,IAAI,CAC1C,IAAI,GAAG,CACL,QAAQ,CAAC,YAAY,CAAC,GAAG,CACvB,CAAC,UAAkC,EAAU,EAAE;gBAC7C,OAAO,UAAU,CAAC,EAAE,CAAC;YACvB,CAAC,CACF,CACF,CACF;iBACE,MAAM,CAAC,CAAC,GAAW,EAAW,EAAE;gBAC/B,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC,CAAC;iBACD,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE1B,IAAI,OAAO,GAA+C;gBACxD,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,CAAC;aACT,CAAC;YACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,CACxC,MAAM,EACN,CAAC,KAAa,EAAwB,EAAE;oBACtC,OAAO,2BAA2B,CAAC;wBACjC,SAAS;wBACT,MAAM;wBACN,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,MAAM;wBACZ,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC,EACD,GAAyB,EAAE;oBACzB,OAAO,2BAA2B,CAAC;wBACjC,SAAS;wBACT,MAAM;wBACN,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC;gBACL,CAAC,EACD,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CACjC,CAAC;YACJ,CAAC;YAED,QAAQ,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CACzD,kBAAkB,CACnB,CAAC;YACF,MAAM,WAAW,GAAW,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC3D,IAAI,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC3C,QAAQ,CAAC,gBAAgB,GAAG;oBAC1B,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;oBAC/B,KAAK,EAAE,WAAW;iBACnB,CAAC;YACJ,CAAC;YAED,QAAQ,CAAC,MAAM,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE;gBAC/D,SAAS;gBACT,UAAU;gBACV,MAAM;gBACN,WAAW;aACZ,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC;QAClB,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,KAAK,CAAC,8BAA8B,CACjD,MAA+B,EAC/B,IAKC;QAED,MAAM,oBAAoB,GAAkB,KAAK,CAAC,IAAI,CACpD,IAAI,GAAG,CACL,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAA2B,EAAU,EAAE;YACnE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CACH,CACF,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;YAC7C,OAAO,IAAI,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,sDAAsD;QACtD,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QACD,MAAM,iBAAiB,GAAkB,oBAAoB,CAAC,GAAG,CAC/D,CAAC,KAAa,EAAU,EAAE;YACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC;QAC5C,CAAC,CACF,CAAC;QAEF,MAAM,YAAY,GAChB,MAAM,eAAe,CAAC,UAAU,CAC9B,MAAM,EACN,CAAC,KAAa,EAAwB,EAAE;YACtC,OAAO,+BAA+B,CAAC;gBACrC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,WAAW,EAAE,iBAAiB;gBAC9B,UAAU,EAAE,iBAAiB;gBAC7B,IAAI,EAAE,MAAM;gBACZ,KAAK;aACN,CAAC,CAAC;QACL,CAAC,EACD,GAAyB,EAAE;YACzB,OAAO,+BAA+B,CAAC;gBACrC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,WAAW,EAAE,iBAAiB;gBAC9B,UAAU,EAAE,iBAAiB;gBAC7B,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;QACL,CAAC,EACD,iBAAiB,CAAC,yBAAyB,CAC5C,CAAC;QAEJ,MAAM,OAAO,GAAgD,EAAE,CAAC;QAChE,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,GAAuB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACzD,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CACxB,CAAC;YACF,MAAM,EAAE,GAAuB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACvD,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CACtB,CAAC;YACF,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAC1D,SAAS;YACX,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,EAAE;gBACF,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC;gBAC/C,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC;gBACjD,aAAa,EAAE,kBAAkB,CAAC,GAAG,EAAE,eAAe,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,IAAI,CACV,CACE,IAA0C,EAC1C,KAA2C,EACnC,EAAE;YACV,OAAO,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACtD,CAAC,CACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC;QACrC,IAAI,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG;gBACnC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;gBAC/B,KAAK,EAAE,YAAY,CAAC,KAAK;aAC1B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IAEiB,AAAb,MAAM,CAAC,KAAK,CAAC,iBAAiB,CACnC,OAAoD;QAEpD,MAAM,SAAS,GAAW,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,UAAU,GAAW,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAW,iBAAiB,CAAC,sBAAsB,CAAC;QAEjE,OAAO,MAAM,eAAe,CAAC,kBAAkB,CAC7C,KAAK,EACH,MAA+B,EACc,EAAE;YAC/C,MAAM,QAAQ,mCACT,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAC/C,KAAK,EAAE,EAAE,EACT,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAE,EAAE,EACd,YAAY,EAAE,EAAE,EAChB,oBAAoB,EAAE,IAAI,EAC1B,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,EAC5C,UAAU,EAAE,IAAI,GACjB,CAAC;YAEF,MAAM,YAAY,GAChB,MAAM,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5D,MAAM,mBAAmB,GAAkB,YAAY,CAAC,MAAM,CAC5D,CAAC,IAAY,EAAW,EAAE;gBACxB,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC,CACF,CAAC;YAEF;;;;;;eAMG;YACH,MAAM,UAAU,GACd,mBAAmB,CAAC,MAAM,GAAG,CAAC;gBAC5B,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAChB,iCAAiC,CAAC;oBAChC,SAAS;oBACT,UAAU;oBACV,mBAAmB;iBACpB,CAAC,CACH;gBACH,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,cAAc,GAAgB,IAAI,GAAG,EAAU,CAAC;YACtD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAW,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAW,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC/C,IACE,wBAAwB,CAAC,IAAI,CAAC;oBAC9B,KAAK,GAAG,iBAAiB,CAAC,sBAAsB,EAChD,CAAC;oBACD,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACzB,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;wBACxB,IAAI;wBACJ,KAAK;wBACL,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;wBACjC,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC;wBACjD,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,EAAE,kBAAkB,CAAC;qBAC9D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAkB,mBAAmB,CAAC,MAAM,CACzD,CAAC,IAAY,EAAW,EAAE;gBACxB,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CACF,CAAC;YACF,MAAM,WAAW,GAAY,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,MAAM,GACV,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW;gBACjC,CAAC,CAAC,MAAM,eAAe,CAAC,eAAe,CACnC,MAAM,EACN,SAAS,EACT,YAAY,CACb;gBACH,CAAC,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;YAE1C,IAAI,KAAK,GAIL,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACtC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,KAAK,GAAG,MAAM,eAAe,CAAC,UAAU,CACtC,MAAM,EACN,CAAC,KAAa,EAAwB,EAAE;oBACtC,OAAO,4BAA4B,CAAC;wBAClC,SAAS;wBACT,UAAU;wBACV,MAAM;wBACN,SAAS;wBACT,IAAI,EAAE,MAAM;wBACZ,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC,EACD,GAAyB,EAAE;oBACzB,OAAO,4BAA4B,CAAC;wBAClC,SAAS;wBACT,UAAU;wBACV,MAAM;wBACN,SAAS;wBACT,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC;gBACL,CAAC,EACD,OAAO,CACR,CAAC;YACJ,CAAC;YAED,MAAM,cAAc,GAAwB,IAAI,GAAG,EAAkB,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAe,EAAE,KAAa,EAAQ,EAAE;gBAC1D,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAC7B,CAAC,GAAe,EAAkC,EAAE;gBAClD,MAAM,IAAI,GAAmC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC/D,MAAM,SAAS,GAAkB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACnE,wEAAwE;gBACxE,MAAM,MAAM,GACV,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBAC9C,IAAI,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,CAAC;oBACvC,MAAM,eAAe,GAAkB,kBAAkB,CACvD,GAAG,EACH,cAAc,CACf,CAAC;oBACF,MAAM,YAAY,GAChB,eAAe,KAAK,IAAI;wBACtB,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBAC1C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;wBAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;oBACzB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;wBACjC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;oBAC5D,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CACF,CAAC;YAEF,IAAI,WAAW,GAAW,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpC,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAChD,QAAQ,CAAC,UAAU,GAAG;oBACpB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;oBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC7B,IAAI,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAC/B,WAAW,EAAE,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,QAAQ,CAAC,MAAM,GAAG;gBAChB,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,eAAe,EAAE,WAAW;aAC7B,CAAC;YACF,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC9C,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC;gBAC9C,QAAQ,CAAC,MAAM,CAAC,eAAe,IAAI,UAAU,CAAC,MAAM,CAAC;YACvD,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,WAAW,GAAsB,MAAM,MAAM,CAAC,KAAK,CACvD,iBAAiB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CACzC,CAAC;gBACF,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CACjC,CAAC,GAAe,EAAqC,EAAE;oBACrD,OAAO;wBACL,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;wBAC3B,IAAI,EAAE,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC;qBACtC,CAAC;gBACJ,CAAC,CACF,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9D,MAAM,iBAAiB,GAAwB,IAAI,GAAG,EAGnD,CAAC;gBACJ,QAAQ,CAAC,QAAQ,CAAC,OAAO,CACvB,CACE,OAA0C,EAC1C,KAAa,EACP,EAAE;oBACR,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC5C,CAAC,CACF,CAAC;gBACF,MAAM,aAAa,GAAsB,MAAM,MAAM,CAAC,KAAK,CACzD,mBAAmB,CAAC;oBAClB,SAAS;oBACT,UAAU;oBACV,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAChC,CAAC,OAA0C,EAAU,EAAE;wBACrD,OAAO,OAAO,CAAC,GAAG,CAAC;oBACrB,CAAC,CACF;iBACF,CAAC,CACH,CAAC;gBACF,MAAM,UAAU,GAA4B,EAAE,CAAC;gBAC/C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;oBAChC,MAAM,OAAO,GAAuB,iBAAiB,CAAC,GAAG,CACvD,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAC3B,CAAC;oBACF,MAAM,IAAI,GAAuB,cAAc,CAAC,GAAG,CACjD,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAC1B,CAAC;oBACF,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;wBAChD,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;gBACD,UAAU,CAAC,IAAI,CACb,CAAC,IAAsB,EAAE,KAAuB,EAAU,EAAE;oBAC1D,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClD,CAAC,CACF,CAAC;gBACF,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;gBAEjC,MAAM,eAAe,CAAC,8BAA8B,CAAC,MAAM,EAAE;oBAC3D,SAAS;oBACT,UAAU;oBACV,QAAQ;oBACR,iBAAiB;iBAClB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,CACF,CAAC;IACJ,CAAC;IAED,2EAA2E;IAEvD,AAAb,MAAM,CAAC,KAAK,CAAC,iBAAiB,CACnC,OAAyD;QAEzD,MAAM,SAAS,GAAW,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,UAAU,GAAW,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAE5D,OAAO,MAAM,eAAe,CAAC,kBAAkB,CAC7C,KAAK,EACH,MAA+B,EACU,EAAE;;YAC3C,MAAM,OAAO,GAOT;gBACF,SAAS;gBACT,UAAU;gBACV,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;YACF,MAAM,SAAS,GAAsB,MAAM,MAAM,CAAC,KAAK,CACrD,uBAAuB,iCAAM,OAAO,KAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAG,CACjE,CAAC;YACF,MAAM,IAAI,GAAsB,MAAM,MAAM,CAAC,KAAK,CAChD,uBAAuB,iCAClB,OAAO,KACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,IACxB,CACH,CAAC;YACF,MAAM,KAAK,GAA8B,IAAI;iBAC1C,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC;iBACvB,GAAG,CAAC,YAAY,CAAC,CAAC;YACrB,MAAM,IAAI,GAAmC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAErE,uCACK,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAC/C,UAAU,EAAE,OAAO,CAAC,UAAU,EAC9B,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,EAC9C,KAAK,EACL,UAAU,EACR,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI;oBACjC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;oBAC1C,CAAC,CAAC,IAAI,IACV;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED,kEAAkE;IAE9C,AAAb,MAAM,CAAC,KAAK,CAAC,mBAAmB,CACrC,OAA+D;QAE/D,MAAM,QAAQ,mCACT,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAC/C,OAAO,EAAE,EAAE,GACZ,CAAC;QACF,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAsB,MAAM,eAAe,CAAC,kBAAkB,CACtE,KAAK,EAAE,MAA+B,EAA8B,EAAE;YACpE,OAAO,MAAM,MAAM,CAAC,KAAK,CACvB,yBAAyB,CAAC;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACvC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE;gBAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CACH,CAAC;QACJ,CAAC,CACF,CAAC;QAEF,MAAM,WAAW,GAAwB,IAAI,GAAG,EAAkB,CAAC;QACnE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,KAAK,GAAW,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IAEiB,AAAb,MAAM,CAAC,KAAK,CAAC,SAAS,CAC3B,OAAqD;QAErD,MAAM,MAAM,GAGR,MAAM,eAAe,CAAC,qBAAqB,CAC7C,OAAO,EACP,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,EAC/D,eAAe,CAAC,SAAS,EAAE,CAC5B,CAAC;QAEF,uCACK,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EACjC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,IAC3C;IACJ,CAAC;IAED,uDAAuD;IAEnC,AAAb,MAAM,CAAC,KAAK,CAAC,oBAAoB,CACtC,OAAgE;QAEhE,MAAM,MAAM,GAGR,MAAM,eAAe,CAAC,qBAAqB,CAC7C,OAAO,EACP,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,EAC/D,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CACpC,CAAC;QAEF,uCACK,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAC/C,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EACrD,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,IAC3C;IACJ,CAAC;IAED;;;;OAIG;IAEiB,AAAb,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,OAA4D;QAE5D,MAAM,MAAM,GAGR,MAAM,eAAe,CAAC,qBAAqB,CAC7C,OAAO,EACP,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,eAAe,CAAC,SAAS,EAAE,CAC5B,CAAC;QAEF,uCACK,eAAe,CAAC,eAAe,EAAE,KACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EACjC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,IAC3C;IACJ,CAAC;IAED,0EAA0E;IAEtD,AAAb,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAC7C,OAAuE;QAEvE,MAAM,MAAM,GAGR,MAAM,eAAe,CAAC,qBAAqB,CAC7C,OAAO,EACP,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CACpC,CAAC;QAEF,uCACK,eAAe,CAAC,eAAe,EAAE,KACpC,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EACrD,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,IAC3C;IACJ,CAAC;IAED,oDAAoD;IAC5C,MAAM,CAAC,SAAS;QACtB,OAAO;YACL,IAAI,EAAE,KAAK;YACX,cAAc,EAAE,iBAAiB,CAAC,oBAAoB;YACtD,SAAS,EAAE,iBAAiB,CAAC,eAAe;SAC7C,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,UAAU,CACvB,OAAgC;QAEhC,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;SACxD,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,qBAAqB,CACxC,OAAoD,EACpD,KAA0B,EAC1B,MAAmC;QAKnC,MAAM,SAAS,GAAW,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,OAAO,GAAY,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;QAElD,OAAO,MAAM,eAAe,CAAC,kBAAkB,CAC7C,KAAK,EACH,MAA+B,EAI9B,EAAE;YACH,MAAM,OAAO,GAAoB;gBAC/B,QAAQ,EAAE,aAAa,EAAE;gBACzB,aAAa,EAAE,KAAK;aACrB,CAAC;YAEF,MAAM,YAAY,GAChB,MAAM,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC5C,CAAC;YAED,MAAM,UAAU,GAAsB,MAAM,MAAM,CAAC,KAAK,CACtD,eAAe,CAAC;gBACd,SAAS;gBACT,YAAY;gBACZ,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,eAAe,EAAE,OAAO;aACzB,CAAC,CACH,CAAC;YACF,MAAM,SAAS,GAA2B,UAAU,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC5C,CAAC;YAED,MAAM,MAAM,mCACP,YAAY,CAAC,SAAS,CAAC,KAC1B,EAAE,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,EAC/B,WAAW,EAAE,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,EACzD,YAAY,EAAE,kBAAkB,CAAC,SAAS,EAAE,cAAc,CAAC,EAC3D,UAAU,EAAE,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC,EACvD,qBAAqB,EAAE,cAAc,CACnC,SAAS,EACT,uBAAuB,CACxB,EACD,qBAAqB,EAAE,cAAc,CACnC,SAAS,EACT,uBAAuB,CACxB,GACF,CAAC;YAEF,MAAM,WAAW,GAAsB,MAAM,MAAM,CAAC,KAAK,CACvD,uBAAuB,CAAC;gBACtB,SAAS;gBACT,KAAK;gBACL,YAAY;gBACZ,SAAS,EAAE,MAAM,CAAC,GAAG;gBACrB,SAAS,EAAE,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO;gBAC7C,SAAS,EAAE,iBAAiB,CAAC,yBAAyB,GAAG,CAAC;gBAC1D,MAAM;aACP,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,MAAM;gBACN,OAAO,EAAE,cAAc,CACrB,WAAW,EACX,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC3C;aACF,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AArzBqB;IADnB,WAAW,EAAE;;;;0CAkLb;AA2GmB;IADnB,WAAW,EAAE;;;;8CAoPb;AAImB;IADnB,WAAW,EAAE;;;;8CAqDb;AAImB;IADnB,WAAW,EAAE;;;;gDAoCb;AAQmB;IADnB,WAAW,EAAE;;;;sCAmBb;AAImB;IADnB,WAAW,EAAE;;;;iDAmBb;AAQmB;IADnB,WAAW,EAAE;;;;6CAmBb;AAImB;IADnB,WAAW,EAAE;;;;wDAmBb"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
2
|
+
import { TOPOLOGY_CONNECTION_SECTIONS, TopologyApiLimits, } from "../../../Types/Topology/TopologyApi";
|
|
3
|
+
import { isFlatInfrastructureType } from "../../../Types/Topology/TopologyTypeRules";
|
|
4
|
+
/*
|
|
5
|
+
* Strict parsing of Topology API request bodies. Everything the SQL binds
|
|
6
|
+
* comes out of here typed, bounded and normalized; anything else is a 400
|
|
7
|
+
* (BadDataException) before a connection is taken.
|
|
8
|
+
*/
|
|
9
|
+
/* A request's range start may run ahead of this server's clock by this much. */
|
|
10
|
+
export const RANGE_START_MAX_FUTURE_SKEW_MS = 5 * 60 * 1000;
|
|
11
|
+
/* Earliest accepted range start; Postgres has no year 0 and nothing is older. */
|
|
12
|
+
const RANGE_START_MIN_MS = Date.UTC(1970, 0, 1);
|
|
13
|
+
/*
|
|
14
|
+
* The oldest range start the maps honour; an older one is clamped to it (and
|
|
15
|
+
* the clamped value is what the response echoes). Relationships are pruned
|
|
16
|
+
* after 30 days and discovered resources sooner, so an older start draws the
|
|
17
|
+
* same map — but every distinct minute is its own whole-inventory build and
|
|
18
|
+
* cache entry, so an open-ended range would let one caller fan out builds by
|
|
19
|
+
* varying the minute.
|
|
20
|
+
*/
|
|
21
|
+
export const MAP_RANGE_START_MAX_AGE_MS = TopologyApiLimits.MaxMapRangeStartAgeDays * 24 * 60 * 60 * 1000;
|
|
22
|
+
/* Entity keys and types are varchar(100); a little slack for multi-byte text. */
|
|
23
|
+
export const MAX_ENTITY_KEY_LENGTH = 512;
|
|
24
|
+
export const MAX_ENTITY_TYPE_LENGTH = 200;
|
|
25
|
+
export const MAX_CURSOR_NAME_LENGTH = 512;
|
|
26
|
+
const ISO_DATE_TIME_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?(Z|[+-]\d{2}:?\d{2})$/;
|
|
27
|
+
/* Rows a section returns before "Show more", and the default page size. */
|
|
28
|
+
export function rowsForSection(section) {
|
|
29
|
+
return section === "calls" || section === "calledBy"
|
|
30
|
+
? TopologyApiLimits.EntityDependencyRows
|
|
31
|
+
: TopologyApiLimits.EntityOtherRows;
|
|
32
|
+
}
|
|
33
|
+
/* Floors a date to the whole minute (what the server uses and echoes). */
|
|
34
|
+
export function floorToMinute(date) {
|
|
35
|
+
return new Date(Math.floor(date.getTime() / 60000) * 60000);
|
|
36
|
+
}
|
|
37
|
+
export default class TopologyRequest {
|
|
38
|
+
static parseMapRequest(body, now = new Date()) {
|
|
39
|
+
const json = TopologyRequest.asObject(body);
|
|
40
|
+
const rangeStart = TopologyRequest.clampMapRangeStart(TopologyRequest.parseRangeStart(json, now), now);
|
|
41
|
+
const fresh = json["fresh"];
|
|
42
|
+
return {
|
|
43
|
+
rangeStart,
|
|
44
|
+
fresh: fresh === undefined
|
|
45
|
+
? false
|
|
46
|
+
: TopologyRequest.parseBoolean(fresh, "fresh"),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
static parseCollectionRequest(body, now = new Date()) {
|
|
50
|
+
const json = TopologyRequest.asObject(body);
|
|
51
|
+
return {
|
|
52
|
+
rangeStart: TopologyRequest.parseRangeStart(json, now),
|
|
53
|
+
entityType: TopologyRequest.parseCollectionType(json["entityType"], "entityType"),
|
|
54
|
+
includeInactive: TopologyRequest.parseBoolean(json["includeInactive"], "includeInactive"),
|
|
55
|
+
nameTerms: TopologyRequest.parseNameTerms(json["nameTerms"], "nameTerms", true),
|
|
56
|
+
cursor: TopologyRequest.parseCursor(json["cursor"]),
|
|
57
|
+
limit: TopologyRequest.parseInteger(json["limit"], "limit", {
|
|
58
|
+
min: 1,
|
|
59
|
+
max: TopologyApiLimits.CollectionPageSizeMax,
|
|
60
|
+
defaultValue: TopologyApiLimits.CollectionPageSizeDefault,
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
static parseCollectionSearchRequest(body, now = new Date()) {
|
|
65
|
+
const json = TopologyRequest.asObject(body);
|
|
66
|
+
const rawTypes = json["types"];
|
|
67
|
+
if (!Array.isArray(rawTypes)) {
|
|
68
|
+
throw new BadDataException("types must be an array");
|
|
69
|
+
}
|
|
70
|
+
if (rawTypes.length > TopologyApiLimits.MaxCollectionSearchTypes) {
|
|
71
|
+
throw new BadDataException(`types cannot have more than ${TopologyApiLimits.MaxCollectionSearchTypes} entries`);
|
|
72
|
+
}
|
|
73
|
+
const seen = new Set();
|
|
74
|
+
const types = rawTypes.map((rawType, index) => {
|
|
75
|
+
const entry = TopologyRequest.asObject(rawType, `types[${index}]`);
|
|
76
|
+
const entityType = TopologyRequest.parseCollectionType(entry["entityType"], `types[${index}].entityType`);
|
|
77
|
+
if (seen.has(entityType)) {
|
|
78
|
+
throw new BadDataException(`types lists "${entityType}" more than once`);
|
|
79
|
+
}
|
|
80
|
+
seen.add(entityType);
|
|
81
|
+
return {
|
|
82
|
+
entityType,
|
|
83
|
+
nameTerms: TopologyRequest.parseNameTerms(entry["nameTerms"], `types[${index}].nameTerms`, false),
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
rangeStart: TopologyRequest.parseRangeStart(json, now),
|
|
88
|
+
includeInactive: TopologyRequest.parseBoolean(json["includeInactive"], "includeInactive"),
|
|
89
|
+
types,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
static parseEntityRequest(body, now = new Date()) {
|
|
93
|
+
const json = TopologyRequest.asObject(body);
|
|
94
|
+
return Object.assign({ rangeStart: TopologyRequest.parseRangeStart(json, now) }, TopologyRequest.parseEntityTarget(json));
|
|
95
|
+
}
|
|
96
|
+
static parseEntityConnectionsRequest(body, now = new Date()) {
|
|
97
|
+
const json = TopologyRequest.asObject(body);
|
|
98
|
+
const entity = TopologyRequest.parseEntityRequest(json, now);
|
|
99
|
+
return Object.assign(Object.assign({}, entity), TopologyRequest.parseConnectionsPage(json));
|
|
100
|
+
}
|
|
101
|
+
/* The all-time reads take no range start; one sent anyway is ignored. */
|
|
102
|
+
static parseEntityAllTimeRequest(body) {
|
|
103
|
+
return TopologyRequest.parseEntityTarget(TopologyRequest.asObject(body));
|
|
104
|
+
}
|
|
105
|
+
static parseEntityAllTimeConnectionsRequest(body) {
|
|
106
|
+
const json = TopologyRequest.asObject(body);
|
|
107
|
+
return Object.assign(Object.assign({}, TopologyRequest.parseEntityTarget(json)), TopologyRequest.parseConnectionsPage(json));
|
|
108
|
+
}
|
|
109
|
+
// -------------------------------------------------------------- fields
|
|
110
|
+
static parseEntityTarget(json) {
|
|
111
|
+
return {
|
|
112
|
+
entityKey: TopologyRequest.parseString(json["entityKey"], "entityKey", {
|
|
113
|
+
maxLength: MAX_ENTITY_KEY_LENGTH,
|
|
114
|
+
allowEmpty: false,
|
|
115
|
+
}),
|
|
116
|
+
entityType: TopologyRequest.parseOptionalEntityType(json["entityType"]),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
static parseConnectionsPage(json) {
|
|
120
|
+
const rawSection = json["section"];
|
|
121
|
+
const section = TOPOLOGY_CONNECTION_SECTIONS.find((candidate) => {
|
|
122
|
+
return candidate === rawSection;
|
|
123
|
+
});
|
|
124
|
+
if (!section) {
|
|
125
|
+
throw new BadDataException(`section must be one of ${TOPOLOGY_CONNECTION_SECTIONS.join(", ")}`);
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
section,
|
|
129
|
+
offset: TopologyRequest.parseInteger(json["offset"], "offset", {
|
|
130
|
+
min: 0,
|
|
131
|
+
max: TopologyApiLimits.EntityConnectionScanLimit,
|
|
132
|
+
defaultValue: undefined,
|
|
133
|
+
}),
|
|
134
|
+
limit: TopologyRequest.parseInteger(json["limit"], "limit", {
|
|
135
|
+
min: 1,
|
|
136
|
+
max: TopologyApiLimits.EntityConnectionsPageSizeMax,
|
|
137
|
+
defaultValue: rowsForSection(section),
|
|
138
|
+
}),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
static asObject(value, field = "body") {
|
|
142
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
143
|
+
throw new BadDataException(`${field} must be a JSON object`);
|
|
144
|
+
}
|
|
145
|
+
return value;
|
|
146
|
+
}
|
|
147
|
+
/*
|
|
148
|
+
* A custom range can start long before anything the maps could draw; clamp
|
|
149
|
+
* it to the oldest start they honour, on a minute boundary like every other.
|
|
150
|
+
*/
|
|
151
|
+
static clampMapRangeStart(rangeStart, now) {
|
|
152
|
+
const oldest = new Date(Math.ceil((now.getTime() - MAP_RANGE_START_MAX_AGE_MS) / 60000) * 60000);
|
|
153
|
+
return rangeStart.getTime() < oldest.getTime() ? oldest : rangeStart;
|
|
154
|
+
}
|
|
155
|
+
static parseRangeStart(json, now) {
|
|
156
|
+
const value = json["rangeStart"];
|
|
157
|
+
if (typeof value !== "string" || value.length > 64) {
|
|
158
|
+
throw new BadDataException("rangeStart must be an ISO 8601 date-time");
|
|
159
|
+
}
|
|
160
|
+
if (!ISO_DATE_TIME_PATTERN.test(value)) {
|
|
161
|
+
throw new BadDataException("rangeStart must be an ISO 8601 date-time");
|
|
162
|
+
}
|
|
163
|
+
const parsed = Date.parse(value);
|
|
164
|
+
if (Number.isNaN(parsed)) {
|
|
165
|
+
throw new BadDataException("rangeStart is not a valid date");
|
|
166
|
+
}
|
|
167
|
+
if (parsed > now.getTime() + RANGE_START_MAX_FUTURE_SKEW_MS) {
|
|
168
|
+
throw new BadDataException("rangeStart cannot be in the future");
|
|
169
|
+
}
|
|
170
|
+
if (parsed < RANGE_START_MIN_MS) {
|
|
171
|
+
throw new BadDataException("rangeStart is too far in the past");
|
|
172
|
+
}
|
|
173
|
+
return floorToMinute(new Date(parsed));
|
|
174
|
+
}
|
|
175
|
+
static parseString(value, field, options) {
|
|
176
|
+
if (typeof value !== "string") {
|
|
177
|
+
throw new BadDataException(`${field} must be a string`);
|
|
178
|
+
}
|
|
179
|
+
if (!options.allowEmpty && value.length === 0) {
|
|
180
|
+
throw new BadDataException(`${field} cannot be empty`);
|
|
181
|
+
}
|
|
182
|
+
if (value.length > options.maxLength) {
|
|
183
|
+
throw new BadDataException(`${field} cannot be longer than ${options.maxLength} characters`);
|
|
184
|
+
}
|
|
185
|
+
return value;
|
|
186
|
+
}
|
|
187
|
+
static parseOptionalEntityType(value) {
|
|
188
|
+
if (value === undefined || value === null || value === "") {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
return TopologyRequest.parseString(value, "entityType", {
|
|
192
|
+
maxLength: MAX_ENTITY_TYPE_LENGTH,
|
|
193
|
+
allowEmpty: false,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
static parseCollectionType(value, field) {
|
|
197
|
+
const entityType = TopologyRequest.parseString(value, field, {
|
|
198
|
+
maxLength: MAX_ENTITY_TYPE_LENGTH,
|
|
199
|
+
allowEmpty: false,
|
|
200
|
+
});
|
|
201
|
+
if (!isFlatInfrastructureType(entityType)) {
|
|
202
|
+
throw new BadDataException(`${field} "${entityType}" is not a flat infrastructure type`);
|
|
203
|
+
}
|
|
204
|
+
return entityType;
|
|
205
|
+
}
|
|
206
|
+
static parseBoolean(value, field) {
|
|
207
|
+
if (typeof value !== "boolean") {
|
|
208
|
+
throw new BadDataException(`${field} must be a boolean`);
|
|
209
|
+
}
|
|
210
|
+
return value;
|
|
211
|
+
}
|
|
212
|
+
static parseInteger(value, field, options) {
|
|
213
|
+
if (value === undefined || value === null) {
|
|
214
|
+
if (options.defaultValue === undefined) {
|
|
215
|
+
throw new BadDataException(`${field} is required`);
|
|
216
|
+
}
|
|
217
|
+
return options.defaultValue;
|
|
218
|
+
}
|
|
219
|
+
if (typeof value !== "number" ||
|
|
220
|
+
!Number.isInteger(value) ||
|
|
221
|
+
value < options.min ||
|
|
222
|
+
value > options.max) {
|
|
223
|
+
throw new BadDataException(`${field} must be an integer from ${options.min} to ${options.max}`);
|
|
224
|
+
}
|
|
225
|
+
return value;
|
|
226
|
+
}
|
|
227
|
+
/*
|
|
228
|
+
* Search terms: trimmed and lowercased (the match is case-insensitive
|
|
229
|
+
* anyway), each non-empty and bounded, at most MaxSearchTerms of them.
|
|
230
|
+
*/
|
|
231
|
+
static parseNameTerms(value, field, optional) {
|
|
232
|
+
if (value === undefined || value === null) {
|
|
233
|
+
if (optional) {
|
|
234
|
+
return [];
|
|
235
|
+
}
|
|
236
|
+
throw new BadDataException(`${field} must be an array of strings`);
|
|
237
|
+
}
|
|
238
|
+
if (!Array.isArray(value)) {
|
|
239
|
+
throw new BadDataException(`${field} must be an array of strings`);
|
|
240
|
+
}
|
|
241
|
+
if (value.length > TopologyApiLimits.MaxSearchTerms) {
|
|
242
|
+
throw new BadDataException(`${field} cannot have more than ${TopologyApiLimits.MaxSearchTerms} terms`);
|
|
243
|
+
}
|
|
244
|
+
return value.map((term) => {
|
|
245
|
+
if (typeof term !== "string") {
|
|
246
|
+
throw new BadDataException(`${field} must be an array of strings`);
|
|
247
|
+
}
|
|
248
|
+
const normalized = term.trim().toLowerCase();
|
|
249
|
+
if (normalized.length === 0) {
|
|
250
|
+
throw new BadDataException(`${field} cannot contain an empty term`);
|
|
251
|
+
}
|
|
252
|
+
if (normalized.length > TopologyApiLimits.MaxSearchTermLength) {
|
|
253
|
+
throw new BadDataException(`${field} terms cannot be longer than ${TopologyApiLimits.MaxSearchTermLength} characters`);
|
|
254
|
+
}
|
|
255
|
+
return normalized;
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
static parseCursor(value) {
|
|
259
|
+
if (value === undefined || value === null) {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
const cursor = TopologyRequest.asObject(value, "cursor");
|
|
263
|
+
return {
|
|
264
|
+
name: TopologyRequest.parseString(cursor["name"], "cursor.name", {
|
|
265
|
+
maxLength: MAX_CURSOR_NAME_LENGTH,
|
|
266
|
+
allowEmpty: true,
|
|
267
|
+
}),
|
|
268
|
+
key: TopologyRequest.parseString(cursor["key"], "cursor.key", {
|
|
269
|
+
maxLength: MAX_ENTITY_KEY_LENGTH,
|
|
270
|
+
allowEmpty: false,
|
|
271
|
+
}),
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=TopologyRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopologyRequest.js","sourceRoot":"","sources":["../../../../../Server/Utils/Topology/TopologyRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* In-process cache for the Topology maps' serialized responses.
|
|
3
|
+
*
|
|
4
|
+
* Opening the Topology page, switching back to it and every other viewer of
|
|
5
|
+
* the same project inside a minute ask for the same thing: the maps for one
|
|
6
|
+
* project, as of one (minute-floored) range start. Building one reads the
|
|
7
|
+
* whole inventory, so the serialized JSON is kept for a short TTL and handed
|
|
8
|
+
* out as the string it already is — no re-serialization per request.
|
|
9
|
+
*
|
|
10
|
+
* Concurrent cold requests for one key share a single build (single flight):
|
|
11
|
+
* the first caller runs it, everyone arriving while it is in flight awaits the
|
|
12
|
+
* same promise. A failed build is never cached; its followers see the same
|
|
13
|
+
* failure and the next request starts over.
|
|
14
|
+
*
|
|
15
|
+
* An explicit refresh (`fresh`) skips the cached copy but not the rest: it
|
|
16
|
+
* joins a build of the key already in flight (which began reading at most one
|
|
17
|
+
* build's duration before the refresh) or starts one, and the result replaces
|
|
18
|
+
* the cached copy for everyone.
|
|
19
|
+
*
|
|
20
|
+
* Bounded by a byte budget rather than an entry count: a large estate's
|
|
21
|
+
* infrastructure payload is tens of megabytes, so a count bound says nothing
|
|
22
|
+
* about memory. Oldest entries are evicted first (Map iteration order is
|
|
23
|
+
* insertion order), and a single value over the whole budget is simply not
|
|
24
|
+
* kept. Per process, with no cross-process invalidation — the TTL is the
|
|
25
|
+
* staleness bound, and the maps already show data up to a minute old.
|
|
26
|
+
*
|
|
27
|
+
* Authorization is NOT this module's concern: callers must authorize the
|
|
28
|
+
* request before asking for a key, so a cache hit never skips a check.
|
|
29
|
+
*/
|
|
30
|
+
export const TOPOLOGY_RESPONSE_CACHE_TTL_MS = 60000;
|
|
31
|
+
/* ~256 MB, counting two bytes per UTF-16 code unit (the worst case in V8). */
|
|
32
|
+
export const TOPOLOGY_RESPONSE_CACHE_MAX_BYTES = 256 * 1024 * 1024;
|
|
33
|
+
/* One cached response per (route, project, minute-floored range start). */
|
|
34
|
+
export function topologyResponseCacheKey(data) {
|
|
35
|
+
return `${data.route}|${data.projectId}|${data.rangeStart.getTime()}`;
|
|
36
|
+
}
|
|
37
|
+
export class TopologyResponseCache {
|
|
38
|
+
constructor(ttlMs = TOPOLOGY_RESPONSE_CACHE_TTL_MS, maxBytes = TOPOLOGY_RESPONSE_CACHE_MAX_BYTES, now = () => {
|
|
39
|
+
return Date.now();
|
|
40
|
+
}) {
|
|
41
|
+
this.ttlMs = ttlMs;
|
|
42
|
+
this.maxBytes = maxBytes;
|
|
43
|
+
this.now = now;
|
|
44
|
+
this.store = new Map();
|
|
45
|
+
this.bytes = 0;
|
|
46
|
+
this.inFlight = new Map();
|
|
47
|
+
}
|
|
48
|
+
/*
|
|
49
|
+
* The cached value for `key`, or the result of `build` (shared, cached).
|
|
50
|
+
* With `fresh`, never the cached value: a build in flight or a new one.
|
|
51
|
+
*/
|
|
52
|
+
async getOrBuild(key, build, options = {}) {
|
|
53
|
+
if (!options.fresh) {
|
|
54
|
+
const cached = this.get(key);
|
|
55
|
+
if (cached !== undefined) {
|
|
56
|
+
return cached;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const running = this.inFlight.get(key);
|
|
60
|
+
if (running) {
|
|
61
|
+
return await running;
|
|
62
|
+
}
|
|
63
|
+
/*
|
|
64
|
+
* Wrapped so a `build` that throws synchronously still yields a promise
|
|
65
|
+
* to register and settle; otherwise the key would never be released.
|
|
66
|
+
*/
|
|
67
|
+
const promise = (async () => {
|
|
68
|
+
const value = await build();
|
|
69
|
+
this.set(key, value);
|
|
70
|
+
return value;
|
|
71
|
+
})();
|
|
72
|
+
this.inFlight.set(key, promise);
|
|
73
|
+
try {
|
|
74
|
+
return await promise;
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
if (this.inFlight.get(key) === promise) {
|
|
78
|
+
this.inFlight.delete(key);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
get(key) {
|
|
83
|
+
const entry = this.store.get(key);
|
|
84
|
+
if (!entry) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
if (this.now() > entry.expiresAt) {
|
|
88
|
+
this.delete(key);
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
return entry.value;
|
|
92
|
+
}
|
|
93
|
+
set(key, value) {
|
|
94
|
+
this.delete(key);
|
|
95
|
+
const bytes = value.length * 2;
|
|
96
|
+
if (bytes > this.maxBytes) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.sweepExpired();
|
|
100
|
+
while (this.store.size > 0 && this.bytes + bytes > this.maxBytes) {
|
|
101
|
+
const oldest = this.store.keys().next().value;
|
|
102
|
+
if (oldest === undefined) {
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
this.delete(oldest);
|
|
106
|
+
}
|
|
107
|
+
this.store.set(key, {
|
|
108
|
+
value,
|
|
109
|
+
bytes,
|
|
110
|
+
expiresAt: this.now() + this.ttlMs,
|
|
111
|
+
});
|
|
112
|
+
this.bytes += bytes;
|
|
113
|
+
}
|
|
114
|
+
delete(key) {
|
|
115
|
+
const entry = this.store.get(key);
|
|
116
|
+
if (!entry) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.bytes -= entry.bytes;
|
|
120
|
+
this.store.delete(key);
|
|
121
|
+
}
|
|
122
|
+
clear() {
|
|
123
|
+
this.store.clear();
|
|
124
|
+
this.inFlight.clear();
|
|
125
|
+
this.bytes = 0;
|
|
126
|
+
}
|
|
127
|
+
size() {
|
|
128
|
+
return this.store.size;
|
|
129
|
+
}
|
|
130
|
+
byteSize() {
|
|
131
|
+
return this.bytes;
|
|
132
|
+
}
|
|
133
|
+
inFlightCount() {
|
|
134
|
+
return this.inFlight.size;
|
|
135
|
+
}
|
|
136
|
+
sweepExpired() {
|
|
137
|
+
const now = this.now();
|
|
138
|
+
for (const [key, entry] of this.store) {
|
|
139
|
+
if (now > entry.expiresAt) {
|
|
140
|
+
this.delete(key);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export default new TopologyResponseCache();
|
|
146
|
+
//# sourceMappingURL=TopologyResponseCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopologyResponseCache.js","sourceRoot":"","sources":["../../../../../Server/Utils/Topology/TopologyResponseCache.ts"],"names":[],"mappings":"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"}
|