@acorex/platform 20.7.4 → 20.7.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-workflow.mjs","sources":["../tmp-esm2022/workflow/lib/errors.types.js","../tmp-esm2022/workflow/lib/workflow-event-dispatcher.service.js","../tmp-esm2022/workflow/lib/workflow-registery.service.js","../tmp-esm2022/workflow/lib/workflow.types.js","../tmp-esm2022/workflow/lib/actions/decide.action.js","../tmp-esm2022/workflow/lib/workflow.service.js","../tmp-esm2022/workflow/lib/actions/start-workflow.action.js","../tmp-esm2022/workflow/lib/engine/workflow-instance.types.js","../tmp-esm2022/workflow/lib/engine/activity/activity-definition.provider.js","../tmp-esm2022/workflow/lib/engine/activity/activity-definition.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-engine.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-expression-scope.service.js","../tmp-esm2022/workflow/lib/engine/runtime/activity-executor.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-manager.service.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.provider.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-local-engine.js","../tmp-esm2022/workflow/lib/engine/runtime/index.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.service.js","../tmp-esm2022/workflow/lib/engine/index.js","../tmp-esm2022/workflow/lib/workflow.module.js","../tmp-esm2022/workflow/acorex-platform-workflow.js"],"sourcesContent":["export class AXPWorkflowError extends Error {\n constructor(message, inner = null) {\n super(message);\n this.inner = inner;\n this.name = 'AXPWorkflowError';\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2Vycm9ycy50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsS0FBSztJQUN2QyxZQUFZLE9BQWUsRUFBUyxRQUFzQixJQUFJO1FBQzFELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURpQixVQUFLLEdBQUwsS0FBSyxDQUFxQjtRQUUxRCxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGlubmVyOiBFcnJvciB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQVhQV29ya2Zsb3dFcnJvcic7XG4gICAgfVxufSJdfQ==","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowEventService {\n constructor() {\n this.eventSubject = new Subject();\n }\n dispatch(event) {\n this.eventSubject.next(event);\n }\n get events$() {\n return this.eventSubject.asObservable();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowEventService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowEventService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL3dvcmtmbG93LWV2ZW50LWRpc3BhdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTTNDLE1BQU0sT0FBTyx1QkFBdUI7SUFIcEM7UUFJVSxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO0tBU3hEO0lBUEMsUUFBUSxDQUFDLEtBQXVCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQzsrR0FUVSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dFdmVudCB9IGZyb20gJy4vd29ya2Zsb3cudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dFdmVudFNlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PEFYUFdvcmtmbG93RXZlbnQ+KCk7XG5cbiAgZGlzcGF0Y2goZXZlbnQ6IEFYUFdvcmtmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBldmVudHMkKCk6IE9ic2VydmFibGU8QVhQV29ya2Zsb3dFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowRegistryService {\n constructor() {\n this.functionsMap = new Map();\n this.actionsMap = new Map();\n this.workflowsMap = new Map();\n }\n registerWorkflow(name, workflow) {\n this.workflowsMap.set(name, workflow);\n }\n getWorkflow(name) {\n return this.workflowsMap.get(name);\n }\n registerAction(name, action) {\n this.actionsMap.set(name, action);\n }\n getAction(name) {\n return this.actionsMap.get(name);\n }\n registerFunction(name, func) {\n this.functionsMap.set(name, func);\n }\n getFunction(name) {\n return this.functionsMap.get(name);\n }\n getFunctionNames() {\n return Array.from(this.functionsMap.keys());\n }\n getStep(workflowName, stepName) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n return steps[stepName];\n }\n return undefined;\n }\n updateStepInWorkflow(workflowName, stepName, step) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n if (steps[stepName]) {\n steps[stepName] = step;\n }\n else {\n throw new Error(`Step with name ${stepName} does not exist in workflow ${workflowName}.`);\n }\n }\n else {\n throw new Error(`Workflow with name ${workflowName} does not exist.`);\n }\n }\n addStepToWorkflow(workflowName, stepName, step) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n if (!steps[stepName]) {\n steps[stepName] = step;\n }\n else {\n throw new Error(`Step with name ${stepName} already exists in workflow ${workflowName}.`);\n }\n }\n else {\n throw new Error(`Workflow with name ${workflowName} does not exist.`);\n }\n }\n addAfterStep(workflowId, stepId, newStepId, newStepAction, conditionExpression) {\n const step = this.getStep(workflowId, stepId);\n if (step != undefined) {\n this.addStepToWorkflow(workflowId, newStepId, {\n action: newStepAction,\n nextSteps: step.nextSteps,\n });\n this.updateStepInWorkflow(workflowId, stepId, {\n ...step,\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: conditionExpression }],\n nextStepId: newStepId,\n },\n ],\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowRegistryService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcmVnaXN0ZXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvd29ya2Zsb3ctcmVnaXN0ZXJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUFNakQsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUlVLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7UUFDNUQsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO1FBQ3hELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7S0E0RnZEO0lBMUZDLGdCQUFnQixDQUFDLElBQVksRUFBRSxRQUFxQjtRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsTUFBK0I7UUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsSUFBK0I7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLENBQUMsWUFBb0IsRUFBRSxRQUFnQjtRQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQTJDLENBQUM7WUFDbkUsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxZQUFvQixFQUFFLFFBQWdCLEVBQUUsSUFBcUI7UUFDaEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUEyQyxDQUFDO1lBQ25FLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLFFBQVEsK0JBQStCLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDNUYsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsWUFBWSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsWUFBb0IsRUFBRSxRQUFnQixFQUFFLElBQXFCO1FBQzdFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBMkMsQ0FBQztZQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLFFBQVEsK0JBQStCLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDNUYsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsWUFBWSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUNWLFVBQWtCLEVBQ2xCLE1BQWMsRUFDZCxTQUFpQixFQUNqQixhQUFxQixFQUNyQixtQkFBMkI7UUFFM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUU7Z0JBQzVDLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDMUIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUU7Z0JBQzVDLEdBQUcsSUFBSTtnQkFDUCxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO3dCQUNqRSxVQUFVLEVBQUUsU0FBUztxQkFDdEI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0E5RlUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93LCBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dGdW5jdGlvbiwgQVhQV29ya2Zsb3dTdGVwIH0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1JlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgZnVuY3Rpb25zTWFwID0gbmV3IE1hcDxzdHJpbmcsIFR5cGU8QVhQV29ya2Zsb3dGdW5jdGlvbj4+KCk7XG4gIHByaXZhdGUgYWN0aW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPj4oKTtcbiAgcHJpdmF0ZSB3b3JrZmxvd3NNYXAgPSBuZXcgTWFwPHN0cmluZywgQVhQV29ya2Zsb3c+KCk7XG5cbiAgcmVnaXN0ZXJXb3JrZmxvdyhuYW1lOiBzdHJpbmcsIHdvcmtmbG93OiBBWFBXb3JrZmxvdyk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dzTWFwLnNldChuYW1lLCB3b3JrZmxvdyk7XG4gIH1cblxuICBnZXRXb3JrZmxvdyhuYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvdyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dzTWFwLmdldChuYW1lKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQWN0aW9uKG5hbWU6IHN0cmluZywgYWN0aW9uOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uc01hcC5zZXQobmFtZSwgYWN0aW9uKTtcbiAgfVxuXG4gIGdldEFjdGlvbihuYW1lOiBzdHJpbmcpOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uc01hcC5nZXQobmFtZSk7XG4gIH1cblxuICByZWdpc3RlckZ1bmN0aW9uKG5hbWU6IHN0cmluZywgZnVuYzogVHlwZTxBWFBXb3JrZmxvd0Z1bmN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuZnVuY3Rpb25zTWFwLnNldChuYW1lLCBmdW5jKTtcbiAgfVxuXG4gIGdldEZ1bmN0aW9uKG5hbWU6IHN0cmluZyk6IFR5cGU8QVhQV29ya2Zsb3dGdW5jdGlvbj4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uc01hcC5nZXQobmFtZSk7XG4gIH1cblxuICBnZXRGdW5jdGlvbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZ1bmN0aW9uc01hcC5rZXlzKCkpO1xuICB9XG5cbiAgZ2V0U3RlcCh3b3JrZmxvd05hbWU6IHN0cmluZywgc3RlcE5hbWU6IHN0cmluZyk6IEFYUFdvcmtmbG93U3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLndvcmtmbG93c01hcC5nZXQod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gd29ya2Zsb3cuc3RlcHMgYXMgeyBba2V5OiBzdHJpbmddOiBBWFBXb3JrZmxvd1N0ZXAgfTtcbiAgICAgIHJldHVybiBzdGVwc1tzdGVwTmFtZV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB1cGRhdGVTdGVwSW5Xb3JrZmxvdyh3b3JrZmxvd05hbWU6IHN0cmluZywgc3RlcE5hbWU6IHN0cmluZywgc3RlcDogQVhQV29ya2Zsb3dTdGVwKTogdm9pZCB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLndvcmtmbG93c01hcC5nZXQod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gd29ya2Zsb3cuc3RlcHMgYXMgeyBba2V5OiBzdHJpbmddOiBBWFBXb3JrZmxvd1N0ZXAgfTtcbiAgICAgIGlmIChzdGVwc1tzdGVwTmFtZV0pIHtcbiAgICAgICAgc3RlcHNbc3RlcE5hbWVdID0gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RlcCB3aXRoIG5hbWUgJHtzdGVwTmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gd29ya2Zsb3cgJHt3b3JrZmxvd05hbWV9LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IHdpdGggbmFtZSAke3dvcmtmbG93TmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RlcFRvV29ya2Zsb3cod29ya2Zsb3dOYW1lOiBzdHJpbmcsIHN0ZXBOYW1lOiBzdHJpbmcsIHN0ZXA6IEFYUFdvcmtmbG93U3RlcCk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gdGhpcy53b3JrZmxvd3NNYXAuZ2V0KHdvcmtmbG93TmFtZSk7XG4gICAgaWYgKHdvcmtmbG93KSB7XG4gICAgICBjb25zdCBzdGVwcyA9IHdvcmtmbG93LnN0ZXBzIGFzIHsgW2tleTogc3RyaW5nXTogQVhQV29ya2Zsb3dTdGVwIH07XG4gICAgICBpZiAoIXN0ZXBzW3N0ZXBOYW1lXSkge1xuICAgICAgICBzdGVwc1tzdGVwTmFtZV0gPSBzdGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGVwIHdpdGggbmFtZSAke3N0ZXBOYW1lfSBhbHJlYWR5IGV4aXN0cyBpbiB3b3JrZmxvdyAke3dvcmtmbG93TmFtZX0uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgd2l0aCBuYW1lICR7d29ya2Zsb3dOYW1lfSBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gIH1cblxuICBhZGRBZnRlclN0ZXAoXG4gICAgd29ya2Zsb3dJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIG5ld1N0ZXBJZDogc3RyaW5nLFxuICAgIG5ld1N0ZXBBY3Rpb246IHN0cmluZyxcbiAgICBjb25kaXRpb25FeHByZXNzaW9uOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuZ2V0U3RlcCh3b3JrZmxvd0lkLCBzdGVwSWQpO1xuICAgIGlmIChzdGVwICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hZGRTdGVwVG9Xb3JrZmxvdyh3b3JrZmxvd0lkLCBuZXdTdGVwSWQsIHtcbiAgICAgICAgYWN0aW9uOiBuZXdTdGVwQWN0aW9uLFxuICAgICAgICBuZXh0U3RlcHM6IHN0ZXAubmV4dFN0ZXBzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlU3RlcEluV29ya2Zsb3cod29ya2Zsb3dJZCwgc3RlcElkLCB7XG4gICAgICAgIC4uLnN0ZXAsXG4gICAgICAgIG5leHRTdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6ICdTSU5HTEUnLCBleHByZXNzaW9uOiBjb25kaXRpb25FeHByZXNzaW9uIH1dLFxuICAgICAgICAgICAgbmV4dFN0ZXBJZDogbmV3U3RlcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { filter } from 'rxjs';\nimport { AXPWorkflowEventService } from './workflow-event-dispatcher.service';\nimport { cloneDeep, get } from 'lodash-es';\nimport { setSmart } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowContext {\n constructor(initialData = {}) {\n this.variables = {};\n this.stepOutputs = new Map();\n this.variables = cloneDeep(initialData);\n }\n setVariable(key, value) {\n setSmart(this.variables, key, value);\n }\n setVariables(context = {}) {\n this.variables = { ...this.variables, ...context };\n }\n getVariable(key) {\n return !key ? this.variables : get(this.variables, key);\n }\n setOutput(key, output) {\n this.stepOutputs.set(key, output);\n }\n setOutputs(values) {\n this.stepOutputs = new Map([...this.stepOutputs, ...values]);\n }\n getOutput(key) {\n return this.stepOutputs.get(key);\n }\n}\nexport class AXPWorkflowAction {\n constructor() {\n this.eventService = inject(AXPWorkflowEventService);\n }\n dispatch(event) {\n this.eventService.dispatch(event);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowAction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowAction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowAction, decorators: [{\n type: Injectable\n }] });\nexport class AXPWorkflowFunction {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowFunction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowFunction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowFunction, decorators: [{\n type: Injectable\n }] });\nexport function createWorkFlowEvent(type) {\n const eventCreator = (payload) => ({ type, payload });\n eventCreator.type = type;\n return eventCreator;\n}\nexport function ofType(...allowedTypes) {\n return filter((event) => allowedTypes.some((type) => event.type === type.type));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvd29ya2Zsb3cudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBUWpELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBWSxjQUFtQixFQUFFO1FBSXpCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUpoRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBS0QsV0FBVyxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0QsWUFBWSxDQUFDLFVBQWUsRUFBRTtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFdBQVcsQ0FBVSxHQUFtQjtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxNQUFXO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQXdCO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRCxTQUFTLENBQVUsR0FBVztRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQXlCRCxNQUFNLE9BQWdCLGlCQUFpQjtJQUR2QztRQUVVLGlCQUFZLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FPeEQ7SUFMVyxRQUFRLENBQUMsS0FBdUI7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0FMbUIsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRHRDLFVBQVU7O0FBWVgsTUFBTSxPQUFnQixtQkFBbUI7K0dBQW5CLG1CQUFtQjttSEFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUR4QyxVQUFVOztBQVlYLE1BQU0sVUFBVSxtQkFBbUIsQ0FBSSxJQUFZO0lBQ2pELE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekQsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDekIsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQTZCLEdBQUcsWUFBcUM7SUFDekYsT0FBTyxNQUFNLENBQUMsQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHNldFNtYXJ0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvdyB7XG4gIHN0ZXBzOiB7IFtzdGVwTmFtZTogc3RyaW5nXTogQVhQV29ya2Zsb3dTdGVwIH07XG4gIHN0YXJ0U3RlcElkOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93Q29udGV4dCB7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbERhdGE6IGFueSA9IHt9KSB7XG4gICAgdGhpcy52YXJpYWJsZXMgPSBjbG9uZURlZXAoaW5pdGlhbERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YXJpYWJsZXM6IGFueSA9IHt9O1xuICBwcml2YXRlIHN0ZXBPdXRwdXRzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gIHNldFZhcmlhYmxlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgc2V0U21hcnQodGhpcy52YXJpYWJsZXMsIGtleSwgdmFsdWUpO1xuICB9XG5cblxuICBzZXRWYXJpYWJsZXMoY29udGV4dDogYW55ID0ge30pIHtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IHsgLi4udGhpcy52YXJpYWJsZXMsIC4uLmNvbnRleHQgfTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlPFQgPSBhbnk+KGtleT86IHN0cmluZyB8IG51bGwpOiBUIHtcbiAgICByZXR1cm4gIWtleSA/IHRoaXMudmFyaWFibGVzIDogZ2V0KHRoaXMudmFyaWFibGVzLCBrZXkpO1xuICB9XG5cbiAgc2V0T3V0cHV0KGtleTogc3RyaW5nLCBvdXRwdXQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3RlcE91dHB1dHMuc2V0KGtleSwgb3V0cHV0KTtcbiAgfVxuXG4gIHNldE91dHB1dHModmFsdWVzOiBNYXA8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5zdGVwT3V0cHV0cyA9IG5ldyBNYXAoWy4uLnRoaXMuc3RlcE91dHB1dHMsIC4uLnZhbHVlc10pXG4gIH1cblxuICBnZXRPdXRwdXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwT3V0cHV0cy5nZXQoa2V5KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0FjdGlvbklucHV0ID0gYW55O1xuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0NvbmRpdGlvblR5cGUgPSAnQU5EJyB8ICdPUicgfCAnU0lOR0xFJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NvbmRpdGlvbiB7XG4gIHR5cGU6IEFYUFdvcmtmbG93Q29uZGl0aW9uVHlwZTtcbiAgY29uZGl0aW9ucz86IEFYUFdvcmtmbG93Q29uZGl0aW9uW107IC8vIE5lc3RlZCBjb25kaXRpb25zXG4gIGV4cHJlc3Npb24/OiBzdHJpbmc7IC8vIFVzZWQgaWYgdHlwZSBpcyAnU0lOR0xFJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93TmV4dFN0ZXAge1xuICBjb25kaXRpb25zOiBBWFBXb3JrZmxvd0NvbmRpdGlvbltdO1xuICBuZXh0U3RlcElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dTdGVwIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGFjdGlvbjogQVhQV29ya2Zsb3dBY3Rpb24gfCBzdHJpbmc7XG4gIGlucHV0PzogQVhQV29ya2Zsb3dBY3Rpb25JbnB1dDtcbiAgbmV4dFN0ZXBzPzogQVhQV29ya2Zsb3dOZXh0U3RlcFtdO1xuICBjb25kaXRpb25zPzogQVhQV29ya2Zsb3dDb25kaXRpb25bXTtcbn1cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG4gIHByaXZhdGUgZXZlbnRTZXJ2aWNlID0gaW5qZWN0KEFYUFdvcmtmbG93RXZlbnRTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgZGlzcGF0Y2goZXZlbnQ6IEFYUFdvcmtmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaChldmVudCk7XG4gIH1cblxuICBhYnN0cmFjdCBleGVjdXRlKGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCk6IFByb21pc2U8dm9pZD47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFBXb3JrZmxvd0Z1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZXhlY3V0ZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8YW55PiB8IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0V2ZW50PFQgPSBhbnk+IHtcbiAgdHlwZTogc3RyaW5nO1xuICBwYXlsb2FkPzogVDtcbn1cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JrRmxvd0V2ZW50PFQ+KHR5cGU6IHN0cmluZykge1xuICBjb25zdCBldmVudENyZWF0b3IgPSAocGF5bG9hZDogVCkgPT4gKHsgdHlwZSwgcGF5bG9hZCB9KTtcbiAgZXZlbnRDcmVhdG9yLnR5cGUgPSB0eXBlO1xuICByZXR1cm4gZXZlbnRDcmVhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2ZUeXBlPFQgZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PiguLi5hbGxvd2VkVHlwZXM6IEFycmF5PHsgdHlwZTogc3RyaW5nIH0+KSB7XG4gIHJldHVybiBmaWx0ZXIoKGV2ZW50OiBUKSA9PiBhbGxvd2VkVHlwZXMuc29tZSgodHlwZSkgPT4gZXZlbnQudHlwZSA9PT0gdHlwZS50eXBlKSk7XG59XG4iXX0=","import { Injectable } from \"@angular/core\";\nimport { AXPWorkflowAction } from \"../workflow.types\";\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowDecideAction extends AXPWorkflowAction {\n async execute(context) {\n // its a fake action\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDecideAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDecideAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDecideAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9hY3Rpb25zL2RlY2lkZS5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sbUJBQW1CLENBQUM7O0FBTTFFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUFDMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUEyQjtRQUNyQyxvQkFBb0I7SUFDeEIsQ0FBQzsrR0FIUSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZwQixNQUFNOzs0RkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dDb250ZXh0IH0gZnJvbSBcIi4uL3dvcmtmbG93LnR5cGVzXCI7XG5cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dEZWNpZGVBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gaXRzIGEgZmFrZSBhY3Rpb25cbiAgICB9XG59Il19","import { Injectable, Injector, inject } from '@angular/core';\nimport { cloneDeep, set } from 'lodash-es';\nimport { AXPWorkflowError } from './errors.types';\nimport { AXPWorkflowEventService } from './workflow-event-dispatcher.service';\nimport { AXPWorkflowRegistryService } from './workflow-registery.service';\nimport { AXPWorkflowContext, } from './workflow.types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./workflow-registery.service\";\nexport class AXPWorkflowService {\n get events$() {\n return this.eventService.events$;\n }\n constructor(registryService, injector) {\n this.registryService = registryService;\n this.injector = injector;\n this.eventService = inject(AXPWorkflowEventService);\n }\n exists(name) {\n return !!this.registryService.getWorkflow(name);\n }\n async execute(workflow, initialContext = null) {\n // Instantiate or retrieve the workflow\n const wk = typeof workflow === 'string' ? this.getWorkflowInstance(workflow) : workflow;\n let currentStepId = wk.startStepId;\n const context = initialContext instanceof AXPWorkflowContext\n ? initialContext\n : new AXPWorkflowContext(this.processData(initialContext) ?? {});\n // Initialize context with initial variables\n while (currentStepId) {\n const currentStep = wk.steps[currentStepId];\n if (!currentStep) {\n throw new AXPWorkflowError(`Step '${currentStepId}' not found in the workflow steps.`);\n }\n // Instantiate or retrieve the action\n const action = typeof currentStep.action === 'string' ? this.getActionInstance(currentStep.action) : currentStep.action;\n //\n if (currentStep.input) {\n let inputs = {};\n await this.processInputs(cloneDeep(currentStep.input), inputs, '', context);\n await new Promise((resolve) => setTimeout(async () => {\n Object.assign(action, inputs);\n resolve(0);\n }));\n }\n try {\n await new Promise((resolve) => setTimeout(async () => {\n await action.execute(context);\n resolve(0);\n }, 0));\n }\n catch (error) {\n console.error(error);\n throw new AXPWorkflowError('Workflow Error', error);\n }\n // Determine the next step based on the conditions\n const nextStepInfo = await this.determineNextStep(currentStep, context);\n if (nextStepInfo) {\n currentStepId = nextStepInfo.nextStepId;\n }\n else {\n break; // Exit the loop if no next step is determined\n }\n }\n return context;\n }\n processData(initialContext) {\n //TODO: update values with expressions and return new object\n return initialContext;\n }\n getActionInstance(actionName) {\n const actionType = this.registryService.getAction(actionName);\n if (!actionType) {\n throw new AXPWorkflowError(`Action type '${actionName}' not found in the registry.`);\n }\n return this.injector.get(actionType);\n }\n getWorkflowInstance(workflowName) {\n const workflowType = this.registryService.getWorkflow(workflowName);\n if (!workflowType) {\n throw new AXPWorkflowError(`Workflow type '${workflowName}' not found in the registry.`);\n }\n return workflowType;\n }\n async determineNextStep(currentStep, context) {\n if (!currentStep.nextSteps) {\n return null;\n }\n for (const nextStep of currentStep.nextSteps) {\n if (await this.evaluateCondition(nextStep.conditions, context)) {\n return nextStep;\n }\n }\n return null;\n }\n async evaluateCondition(conditions, context) {\n if (!conditions || conditions.length === 0) {\n return true; // If no conditions, the step proceeds\n }\n // Map each condition to a promise using evaluateSingleCondition\n const conditionPromises = conditions.map((condition) => this.evaluateSingleCondition(condition, context));\n // Wait for all promises to resolve\n const results = await Promise.all(conditionPromises);\n // Check if every condition is true\n return results.every((result) => result);\n }\n async evaluateSingleCondition(condition, context) {\n switch (condition.type) {\n case 'SINGLE':\n return (!condition.expression ? true : await this.evaluateExpression(condition.expression, context));\n case 'AND':\n // Evaluate all conditions with 'AND' logic\n const andConditions = condition.conditions ?? [];\n const andResults = await Promise.all(andConditions.map((cond) => this.evaluateSingleCondition(cond, context)));\n return andResults.every((result) => result);\n case 'OR':\n // Evaluate all conditions with 'OR' logic\n const orConditions = condition.conditions ?? [];\n const orResults = await Promise.all(orConditions.map((cond) => this.evaluateSingleCondition(cond, context)));\n return orResults.some((result) => result);\n default:\n throw new AXPWorkflowError(`Unsupported condition type: ${condition.type}`);\n }\n }\n //TODO: return any and recursively update object, update scopes\n async evaluateExpression(templateExpression, context) {\n try {\n let expression = '';\n if (typeof templateExpression === 'string' && templateExpression.trim().includes('{{')) {\n const expressionMatch = templateExpression.match(/\\{\\{\\s*(.*?)\\s*\\}\\}/);\n if (!expressionMatch) {\n throw Error(`No valid expression found in \"${templateExpression}\"`);\n }\n expression = expressionMatch[1];\n }\n else {\n expression = templateExpression;\n }\n // Create a scope that includes context and registered functions\n const scope = { context, ...this.createFunctionScope() };\n // Evaluating the expression within the created scope\n const sandbox = new Function('scope', `return (async function() { with (scope) { return ${expression}; } })();`);\n const result = await sandbox(scope);\n return result;\n }\n catch (error) {\n console.error('Error evaluating expression:', error);\n return false;\n }\n }\n async processInputs(obj, inputs, pathPrefix = '', context = {}) {\n if (!obj) {\n return;\n }\n for await (const i of Object.entries(obj)) {\n const key = i[0];\n const value = i[1];\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n if (typeof value === 'string' && value.trim().includes('{{')) {\n const expValue = await this.evaluateExpression(value, context);\n set(inputs, currentPath, expValue);\n }\n else if (typeof value === 'object' &&\n value !== null &&\n (value.constructor === Object || Array.isArray(value))) {\n // Recursively handle nested objects\n this.processInputs(value, inputs, currentPath, context);\n }\n else {\n // Apply static values directly\n set(inputs, currentPath, value);\n }\n }\n }\n createFunctionScope() {\n const scope = {};\n this.registryService.getFunctionNames().forEach((name) => {\n scope[name] = this.getFunctionInstance(name).execute;\n });\n return { methods: { scope } };\n }\n getFunctionInstance(functionName) {\n const functionType = this.registryService.getFunction(functionName);\n if (!functionType) {\n throw new AXPWorkflowError(`Function type '${functionName}' not found in the registry.`);\n }\n return this.injector.get(functionType);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowService, deps: [{ token: i1.AXPWorkflowRegistryService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.AXPWorkflowRegistryService }, { type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi93b3JrZmxvdy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBSUwsa0JBQWtCLEdBS25CLE1BQU0sa0JBQWtCLENBQUM7OztBQUsxQixNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQW9CLGVBQTJDLEVBQVUsUUFBa0I7UUFBdkUsb0JBQWUsR0FBZixlQUFlLENBQTRCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQU5uRixpQkFBWSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBTXdDLENBQUM7SUFFaEcsTUFBTSxDQUFDLElBQVk7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUdELEtBQUssQ0FBQyxPQUFPLENBQ1gsUUFBOEIsRUFDOUIsaUJBQWtELElBQUk7UUFFdEQsdUNBQXVDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMs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SUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sK0JBQStCO2dCQUMvQixHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUFvQjtRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixZQUFZLDhCQUE4QixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0FwTlUsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RXJyb3IgfSBmcm9tICcuL2Vycm9ycy50eXBlcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvdy1yZWdpc3Rlcnkuc2VydmljZSc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvdyxcbiAgQVhQV29ya2Zsb3dBY3Rpb24sXG4gIEFYUFdvcmtmbG93Q29uZGl0aW9uLFxuICBBWFBXb3JrZmxvd0NvbnRleHQsXG4gIEFYUFdvcmtmbG93RXZlbnQsXG4gIEFYUFdvcmtmbG93RnVuY3Rpb24sXG4gIEFYUFdvcmtmbG93TmV4dFN0ZXAsXG4gIEFYUFdvcmtmbG93U3RlcCxcbn0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1NlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd0V2ZW50U2VydmljZSk7XG5cbiAgZ2V0IGV2ZW50cyQoKTogT2JzZXJ2YWJsZTxBWFBXb3JrZmxvd0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLmV2ZW50cyQ7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZ2lzdHJ5U2VydmljZTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICBleGlzdHMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cobmFtZSk7XG4gIH1cblxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgd29ya2Zsb3c6IEFYUFdvcmtmbG93IHwgc3RyaW5nLFxuICAgIGluaXRpYWxDb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQgfCBhbnkgfCBudWxsID0gbnVsbFxuICApOiBQcm9taXNlPEFYUFdvcmtmbG93Q29udGV4dD4ge1xuICAgIC8vIEluc3RhbnRpYXRlIG9yIHJldHJpZXZlIHRoZSB3b3JrZmxvd1xuICAgIGNvbnN0IHdrID0gdHlwZW9mIHdvcmtmbG93ID09PSAnc3RyaW5nJyA/IHRoaXMuZ2V0V29ya2Zsb3dJbnN0YW5jZSh3b3JrZmxvdykgOiB3b3JrZmxvdztcblxuICAgIGxldCBjdXJyZW50U3RlcElkID0gd2suc3RhcnRTdGVwSWQ7XG4gICAgY29uc3QgY29udGV4dCA9XG4gICAgICBpbml0aWFsQ29udGV4dCBpbnN0YW5jZW9mIEFYUFdvcmtmbG93Q29udGV4dFxuICAgICAgICA/IGluaXRpYWxDb250ZXh0XG4gICAgICAgIDogbmV3IEFYUFdvcmtmbG93Q29udGV4dCh0aGlzLnByb2Nlc3NEYXRhKGluaXRpYWxDb250ZXh0KSA/PyB7fSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBjb250ZXh0IHdpdGggaW5pdGlhbCB2YXJpYWJsZXNcblxuICAgIHdoaWxlIChjdXJyZW50U3RlcElkKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHdrLnN0ZXBzW2N1cnJlbnRTdGVwSWRdO1xuICAgICAgaWYgKCFjdXJyZW50U3RlcCkge1xuICAgICAgICB0aHJvdyBuZXcgQVhQV29ya2Zsb3dFcnJvcihgU3RlcCAnJHtjdXJyZW50U3RlcElkfScgbm90IGZvdW5kIGluIHRoZSB3b3JrZmxvdyBzdGVwcy5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5zdGFudGlhdGUgb3IgcmV0cmlldmUgdGhlIGFjdGlvblxuICAgICAgY29uc3QgYWN0aW9uID1cbiAgICAgICAgdHlwZW9mIGN1cnJlbnRTdGVwLmFjdGlvbiA9PT0gJ3N0cmluZycgPyB0aGlzLmdldEFjdGlvbkluc3RhbmNlKGN1cnJlbnRTdGVwLmFjdGlvbikgOiBjdXJyZW50U3RlcC5hY3Rpb247XG4gICAgICAvL1xuICAgICAgaWYgKGN1cnJlbnRTdGVwLmlucHV0KSB7XG4gICAgICAgIGxldCBpbnB1dHM6IGFueSA9IHt9O1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NJbnB1dHMoY2xvbmVEZWVwKGN1cnJlbnRTdGVwLmlucHV0KSwgaW5wdXRzLCAnJywgY29udGV4dCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIGlucHV0cyk7XG4gICAgICAgICAgICByZXNvbHZlKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbi5leGVjdXRlKGNvbnRleHQpO1xuICAgICAgICAgICAgcmVzb2x2ZSgwKTtcbiAgICAgICAgICB9LCAwKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBBWFBXb3JrZmxvd0Vycm9yKCdXb3JrZmxvdyBFcnJvcicsIGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIERldGVybWluZSB0aGUgbmV4dCBzdGVwIGJhc2VkIG9uIHRoZSBjb25kaXRpb25zXG4gICAgICBjb25zdCBuZXh0U3RlcEluZm8gPSBhd2FpdCB0aGlzLmRldGVybWluZU5leHRTdGVwKGN1cnJlbnRTdGVwLCBjb250ZXh0KTtcbiAgICAgIGlmIChuZXh0U3RlcEluZm8pIHtcbiAgICAgICAgY3VycmVudFN0ZXBJZCA9IG5leHRTdGVwSW5mby5uZXh0U3RlcElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7IC8vIEV4aXQgdGhlIGxvb3AgaWYgbm8gbmV4dCBzdGVwIGlzIGRldGVybWluZWRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEYXRhKGluaXRpYWxDb250ZXh0OiBhbnkpOiBhbnkge1xuICAgIC8vVE9ETzogdXBkYXRlIHZhbHVlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCByZXR1cm4gbmV3IG9iamVjdFxuICAgIHJldHVybiBpbml0aWFsQ29udGV4dDtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldEFjdGlvbkluc3RhbmNlKGFjdGlvbk5hbWU6IHN0cmluZyk6IEFYUFdvcmtmbG93QWN0aW9uIHtcbiAgICBjb25zdCBhY3Rpb25UeXBlID0gdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0QWN0aW9uKGFjdGlvbk5hbWUpO1xuICAgIGlmICghYWN0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYEFjdGlvbiB0eXBlICcke2FjdGlvbk5hbWV9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoYWN0aW9uVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFdvcmtmbG93SW5zdGFuY2Uod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvdyB7XG4gICAgY29uc3Qgd29ya2Zsb3dUeXBlID0gdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAoIXdvcmtmbG93VHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYFdvcmtmbG93IHR5cGUgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtmbG93VHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGV0ZXJtaW5lTmV4dFN0ZXAoXG4gICAgY3VycmVudFN0ZXA6IEFYUFdvcmtmbG93U3RlcCxcbiAgICBjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHRcbiAgKTogUHJvbWlzZTxBWFBXb3JrZmxvd05leHRTdGVwIHwgbnVsbD4ge1xuICAgIGlmICghY3VycmVudFN0ZXAubmV4dFN0ZXBzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuZXh0U3RlcCBvZiBjdXJyZW50U3RlcC5uZXh0U3RlcHMpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKG5leHRTdGVwLmNvbmRpdGlvbnMsIGNvbnRleHQpKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlQ29uZGl0aW9uKGNvbmRpdGlvbnM6IEFYUFdvcmtmbG93Q29uZGl0aW9uW10sIGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY29uZGl0aW9ucyB8fCBjb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIElmIG5vIGNvbmRpdGlvbnMsIHRoZSBzdGVwIHByb2NlZWRzXG4gICAgfVxuXG4gICAgLy8gTWFwIGVhY2ggY29uZGl0aW9uIHRvIGEgcHJvbWlzZSB1c2luZyBldmFsdWF0ZVNpbmdsZUNvbmRpdGlvblxuICAgIGNvbnN0IGNvbmRpdGlvblByb21pc2VzID0gY29uZGl0aW9ucy5tYXAoKGNvbmRpdGlvbikgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kaXRpb24sIGNvbnRleHQpKTtcblxuICAgIC8vIFdhaXQgZm9yIGFsbCBwcm9taXNlcyB0byByZXNvbHZlXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNvbmRpdGlvblByb21pc2VzKTtcblxuICAgIC8vIENoZWNrIGlmIGV2ZXJ5IGNvbmRpdGlvbiBpcyB0cnVlXG4gICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHJlc3VsdCkgPT4gcmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXZhbHVhdGVTaW5nbGVDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBBWFBXb3JrZmxvd0NvbmRpdGlvbixcbiAgICBjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgc3dpdGNoIChjb25kaXRpb24udHlwZSkge1xuICAgICAgY2FzZSAnU0lOR0xFJzpcbiAgICAgICAgcmV0dXJuICghY29uZGl0aW9uLmV4cHJlc3Npb24gPyB0cnVlIDogYXdhaXQgdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24oY29uZGl0aW9uLmV4cHJlc3Npb24sIGNvbnRleHQpKSBhcyBib29sZWFuO1xuICAgICAgY2FzZSAnQU5EJzpcbiAgICAgICAgLy8gRXZhbHVhdGUgYWxsIGNvbmRpdGlvbnMgd2l0aCAnQU5EJyBsb2dpY1xuICAgICAgICBjb25zdCBhbmRDb25kaXRpb25zID0gY29uZGl0aW9uLmNvbmRpdGlvbnMgPz8gW107XG4gICAgICAgIGNvbnN0IGFuZFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChhbmRDb25kaXRpb25zLm1hcCgoY29uZCkgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kLCBjb250ZXh0KSkpO1xuICAgICAgICByZXR1cm4gYW5kUmVzdWx0cy5ldmVyeSgocmVzdWx0KSA9PiByZXN1bHQpO1xuXG4gICAgICBjYXNlICdPUic6XG4gICAgICAgIC8vIEV2YWx1YXRlIGFsbCBjb25kaXRpb25zIHdpdGggJ09SJyBsb2dpY1xuICAgICAgICBjb25zdCBvckNvbmRpdGlvbnMgPSBjb25kaXRpb24uY29uZGl0aW9ucyA/PyBbXTtcbiAgICAgICAgY29uc3Qgb3JSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwob3JDb25kaXRpb25zLm1hcCgoY29uZCkgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kLCBjb250ZXh0KSkpO1xuICAgICAgICByZXR1cm4gb3JSZXN1bHRzLnNvbWUoKHJlc3VsdCkgPT4gcmVzdWx0KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYFVuc3VwcG9ydGVkIGNvbmRpdGlvbiB0eXBlOiAke2NvbmRpdGlvbi50eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vVE9ETzogcmV0dXJuIGFueSBhbmQgcmVjdXJzaXZlbHkgdXBkYXRlIG9iamVjdCwgdXBkYXRlIHNjb3Blc1xuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlRXhwcmVzc2lvbih0ZW1wbGF0ZUV4cHJlc3Npb246IHN0cmluZywgY29udGV4dDogQVhQV29ya2Zsb3dDb250ZXh0KTogUHJvbWlzZTxCb29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBleHByZXNzaW9uID0gJyc7XG4gICAgICBpZiAodHlwZW9mIHRlbXBsYXRlRXhwcmVzc2lvbiA9PT0gJ3N0cmluZycgJiYgdGVtcGxhdGVFeHByZXNzaW9uLnRyaW0oKS5pbmNsdWRlcygne3snKSkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uTWF0Y2ggPSB0ZW1wbGF0ZUV4cHJlc3Npb24ubWF0Y2goL1xce1xce1xccyooLio/KVxccypcXH1cXH0vKTtcbiAgICAgICAgaWYgKCFleHByZXNzaW9uTWF0Y2gpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gdmFsaWQgZXhwcmVzc2lvbiBmb3VuZCBpbiBcIiR7dGVtcGxhdGVFeHByZXNzaW9ufVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25NYXRjaFsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSB0ZW1wbGF0ZUV4cHJlc3Npb247XG4gICAgICB9XG4gICAgICAvLyBDcmVhdGUgYSBzY29wZSB0aGF0IGluY2x1ZGVzIGNvbnRleHQgYW5kIHJlZ2lzdGVyZWQgZnVuY3Rpb25zXG4gICAgICBjb25zdCBzY29wZSA9IHsgY29udGV4dCwgLi4udGhpcy5jcmVhdGVGdW5jdGlvblNjb3BlKCkgfTtcbiAgICAgIC8vIEV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gd2l0aGluIHRoZSBjcmVhdGVkIHNjb3BlXG4gICAgICBjb25zdCBzYW5kYm94ID0gbmV3IEZ1bmN0aW9uKCdzY29wZScsIGByZXR1cm4gKGFzeW5jIGZ1bmN0aW9uKCkgeyB3aXRoIChzY29wZSkgeyByZXR1cm4gJHtleHByZXNzaW9ufTsgfSB9KSgpO2ApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveChzY29wZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBldmFsdWF0aW5nIGV4cHJlc3Npb246JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0lucHV0cyhvYmo6IGFueSwgaW5wdXRzOiBhbnksIHBhdGhQcmVmaXg6IHN0cmluZyA9ICcnLCBjb250ZXh0OiBhbnkgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBpIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IGlbMV07XG4gICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGhQcmVmaXggPyBgJHtwYXRoUHJlZml4fS4ke2tleX1gIDoga2V5O1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmluY2x1ZGVzKCd7eycpKSB7XG4gICAgICAgIGNvbnN0IGV4cFZhbHVlID0gYXdhaXQgdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24odmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBzZXQoaW5wdXRzLCBjdXJyZW50UGF0aCwgZXhwVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAodmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkIG9iamVjdHNcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXRzKHZhbHVlLCBpbnB1dHMsIGN1cnJlbnRQYXRoLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFwcGx5IHN0YXRpYyB2YWx1ZXMgZGlyZWN0bHlcbiAgICAgICAgc2V0KGlucHV0cywgY3VycmVudFBhdGgsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uU2NvcGUoKTogYW55IHtcbiAgICBjb25zdCBzY29wZTogYW55ID0ge307XG4gICAgdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0RnVuY3Rpb25OYW1lcygpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIHNjb3BlW25hbWVdID0gdGhpcy5nZXRGdW5jdGlvbkluc3RhbmNlKG5hbWUpLmV4ZWN1dGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbWV0aG9kczogeyBzY29wZSB9IH07XG4gIH1cblxuICBwcml2YXRlIGdldEZ1bmN0aW9uSW5zdGFuY2UoZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvd0Z1bmN0aW9uIHtcbiAgICBjb25zdCBmdW5jdGlvblR5cGUgPSB0aGlzLnJlZ2lzdHJ5U2VydmljZS5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUpO1xuICAgIGlmICghZnVuY3Rpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgQVhQV29ya2Zsb3dFcnJvcihgRnVuY3Rpb24gdHlwZSAnJHtmdW5jdGlvbk5hbWV9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoZnVuY3Rpb25UeXBlKTtcbiAgfVxufVxuIl19","import { inject, Injectable } from \"@angular/core\";\nimport { AXPWorkflowAction } from \"../workflow.types\";\nimport { AXPWorkflowService } from \"../workflow.service\";\nimport * as i0 from \"@angular/core\";\nexport class AXPStartWorkflowAction extends AXPWorkflowAction {\n constructor() {\n super(...arguments);\n this.workflowService = inject(AXPWorkflowService);\n }\n async execute(context) {\n //console.log(\"start WK current context\", context);\n //console.log(\"start WK input context\", this.context);\n if (this.context)\n context.setVariables(this.context);\n //console.log(\"start WK merged context\", context);\n try {\n await this.workflowService.execute(this.workflow, context);\n }\n catch (e) {\n throw e;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPStartWorkflowAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPStartWorkflowAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPStartWorkflowAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtd29ya2Zsb3cuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2FjdGlvbnMvc3RhcnQtd29ya2Zsb3cuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQUg3RDs7UUFLWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0tBa0J2RDtJQWRHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBMkI7UUFDckMsbURBQW1EO1FBQ25ELHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsQ0FBQztRQUNaLENBQUM7SUFFTCxDQUFDOytHQW5CUSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZuQixNQUFNOzs0RkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93QWN0aW9uLCBBWFBXb3JrZmxvd0NvbnRleHQgfSBmcm9tIFwiLi4vd29ya2Zsb3cudHlwZXNcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93U2VydmljZSB9IGZyb20gXCIuLi93b3JrZmxvdy5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG5cbiAgICBwcml2YXRlIHdvcmtmbG93U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpXG4gICAgcHJpdmF0ZSB3b3JrZmxvdzogc3RyaW5nO1xuICAgIHByaXZhdGUgY29udGV4dDogYW55O1xuXG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGN1cnJlbnQgY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGlucHV0IGNvbnRleHRcIiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIGNvbnRleHQuc2V0VmFyaWFibGVzKHRoaXMuY29udGV4dClcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIG1lcmdlZCBjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53b3JrZmxvd1NlcnZpY2UuZXhlY3V0ZSh0aGlzLndvcmtmbG93LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG4iXX0=","// ============================================\n// WORKFLOW INSTANCE v3.0.0 TYPES\n// Based on Elsa Workflow Instance schema: https://elsaworkflows.io/schemas/workflow-instance/v3.0.0/schema.json\n// Compatible with Elsa backend while using ACoreX naming conventions\n// ============================================\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctaW5zdGFuY2UudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxpQ0FBaUM7QUFDakMsZ0hBQWdIO0FBQ2hILHFFQUFxRTtBQUNyRSwrQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV09SS0ZMT1cgSU5TVEFOQ0UgdjMuMC4wIFRZUEVTXG4vLyBCYXNlZCBvbiBFbHNhIFdvcmtmbG93IEluc3RhbmNlIHNjaGVtYTogaHR0cHM6Ly9lbHNhd29ya2Zsb3dzLmlvL3NjaGVtYXMvd29ya2Zsb3ctaW5zdGFuY2UvdjMuMC4wL3NjaGVtYS5qc29uXG4vLyBDb21wYXRpYmxlIHdpdGggRWxzYSBiYWNrZW5kIHdoaWxlIHVzaW5nIEFDb3JlWCBuYW1pbmcgY29udmVudGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogV29ya2Zsb3cgc3RhdHVzLlxuICovXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd1N0YXR1cyA9ICdSdW5uaW5nJyB8ICdGaW5pc2hlZCc7XG5cbi8qKlxuICogV29ya2Zsb3cgc3ViLXN0YXR1cy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dTdWJTdGF0dXMgPSAnUGVuZGluZycgfCAnRXhlY3V0aW5nJyB8ICdTdXNwZW5kZWQnIHwgJ0ZpbmlzaGVkJyB8ICdDYW5jZWxsZWQnIHwgJ0ZhdWx0ZWQnO1xuXG4vKipcbiAqIEFjdGl2aXR5IHN0YXR1cy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlTdGF0dXMgPSAnUnVubmluZycgfCAnQ29tcGxldGVkJyB8ICdDYW5jZWxlZCcgfCAnRmF1bHRlZCc7XG5cbi8qKlxuICogRXhjZXB0aW9uIHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUEV4Y2VwdGlvblN0YXRlIHtcbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiB0eXBlIG5hbWUuXG4gICAqL1xuICB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGFjayB0cmFjZSAobnVsbGFibGUpLlxuICAgKi9cbiAgc3RhY2tUcmFjZT86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElubmVyIGV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgaW5uZXJFeGNlcHRpb24/OiBBWFBFeGNlcHRpb25TdGF0ZSB8IG51bGw7XG59XG5cbi8qKlxuICogQWN0aXZpdHkgaW5jaWRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWN0aXZpdHlJbmNpZGVudCB7XG4gIC8qKlxuICAgKiBBY3Rpdml0eSBJRCB0aGF0IGNhdXNlZCB0aGUgaW5jaWRlbnQuXG4gICAqL1xuICBhY3Rpdml0eUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IG5vZGUgSUQuXG4gICAqL1xuICBhY3Rpdml0eU5vZGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSB0eXBlLlxuICAgKi9cbiAgYWN0aXZpdHlUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluY2lkZW50IG1lc3NhZ2UuXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgZXhjZXB0aW9uPzogQVhQRXhjZXB0aW9uU3RhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgKElTTyBkYXRlLXRpbWUpLlxuICAgKi9cbiAgdGltZXN0YW1wOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgZmF1bHQgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dGYXVsdFN0YXRlIHtcbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgZXhjZXB0aW9uPzogQVhQRXhjZXB0aW9uU3RhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBGYXVsdCBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGYXVsdGVkIGFjdGl2aXR5IElEIChudWxsYWJsZSkuXG4gICAqL1xuICBmYXVsdGVkQWN0aXZpdHlJZD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogQm9va21hcmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQm9va21hcmsge1xuICAvKipcbiAgICogQm9va21hcmsgSUQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBuYW1lLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBoYXNoLlxuICAgKi9cbiAgaGFzaDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBwYXlsb2FkIChudWxsYWJsZSkuXG4gICAqL1xuICBwYXlsb2FkPzogYW55IHwgbnVsbDtcblxuICAvKipcbiAgICogQWN0aXZpdHkgbm9kZSBJRC5cbiAgICovXG4gIGFjdGl2aXR5Tm9kZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IGluc3RhbmNlIElELlxuICAgKi9cbiAgYWN0aXZpdHlJbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dG8gYnVybiBmbGFnLlxuICAgKi9cbiAgYXV0b0J1cm4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBtZXRob2QgbmFtZSAobnVsbGFibGUpLlxuICAgKi9cbiAgY2FsbGJhY2tNZXRob2ROYW1lPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgKG51bGxhYmxlKS5cbiAgICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGw7XG59XG5cbi8qKlxuICogQ29tcGxldGlvbiBjYWxsYmFjayBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBDb21wbGV0aW9uQ2FsbGJhY2tTdGF0ZSB7XG4gIC8qKlxuICAgKiBPd25lciBhY3Rpdml0eSBpbnN0YW5jZSBJRC5cbiAgICovXG4gIG93bmVySW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDaGlsZCBhY3Rpdml0eSBub2RlIElELlxuICAgKi9cbiAgY2hpbGROb2RlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTWV0aG9kIG5hbWUgKG51bGxhYmxlKS5cbiAgICovXG4gIG1ldGhvZE5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIFZhcmlhYmxlIChmb3IgYWN0aXZpdHkgY29udGV4dCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWN0aXZpdHlWYXJpYWJsZSB7XG4gIC8qKlxuICAgKiBWYXJpYWJsZSBJRC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhcmlhYmxlIG5hbWUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgbmFtZS5cbiAgICovXG4gIHR5cGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElzIGFycmF5IGZsYWcuXG4gICAqL1xuICBpc0FycmF5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmFyaWFibGUgdmFsdWUgKG51bGxhYmxlKS5cbiAgICovXG4gIHZhbHVlPzogYW55IHwgbnVsbDtcblxuICAvKipcbiAgICogU3RvcmFnZSBkcml2ZXIgdHlwZSBuYW1lIChudWxsYWJsZSkuXG4gICAqL1xuICBzdG9yYWdlRHJpdmVyVHlwZU5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIEFjdGl2aXR5IGV4ZWN1dGlvbiBjb250ZXh0IHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFjdGl2aXR5RXhlY3V0aW9uQ29udGV4dFN0YXRlIHtcbiAgLyoqXG4gICAqIENvbnRleHQgSUQgKGFjdGl2aXR5IGluc3RhbmNlIElEKS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhcmVudCBjb250ZXh0IElEIChudWxsYWJsZSkuXG4gICAqL1xuICBwYXJlbnRDb250ZXh0SWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTY2hlZHVsZWQgYWN0aXZpdHkgbm9kZSBJRC5cbiAgICovXG4gIHNjaGVkdWxlZEFjdGl2aXR5Tm9kZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE93bmVyIGFjdGl2aXR5IG5vZGUgSUQgKG51bGxhYmxlKS5cbiAgICovXG4gIG93bmVyQWN0aXZpdHlOb2RlSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGJhZy5cbiAgICovXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0YXRlIChldmFsdWF0ZWQgcHJvcGVydGllcykgKG51bGxhYmxlKS5cbiAgICovXG4gIGFjdGl2aXR5U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcblxuICAvKipcbiAgICogRHluYW1pYyB2YXJpYWJsZXMuXG4gICAqL1xuICBkeW5hbWljVmFyaWFibGVzOiBBWFBBY3Rpdml0eVZhcmlhYmxlW107XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1czogQVhQQWN0aXZpdHlTdGF0dXM7XG5cbiAgLyoqXG4gICAqIElzIGV4ZWN1dGluZyBmbGFnLlxuICAgKi9cbiAgaXNFeGVjdXRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZhdWx0IGNvdW50LlxuICAgKi9cbiAgZmF1bHRDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdGFydGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSkuXG4gICAqL1xuICBzdGFydGVkQXQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcGxldGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSwgbnVsbGFibGUpLlxuICAgKi9cbiAgY29tcGxldGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUYWcgKG51bGxhYmxlKS5cbiAgICovXG4gIHRhZz86IGFueSB8IG51bGw7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgc3RhdGUgKGludGVybmFsIGV4ZWN1dGlvbiBzdGF0ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dTdGF0ZSB7XG4gIC8qKlxuICAgKiBTdGF0ZSBJRC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGRlZmluaXRpb24gSUQuXG4gICAqL1xuICBkZWZpbml0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgZGVmaW5pdGlvbiB2ZXJzaW9uLlxuICAgKi9cbiAgZGVmaW5pdGlvblZlcnNpb246IG51bWJlcjtcblxuICAvKipcbiAgICogQ29ycmVsYXRpb24gSUQgKG51bGxhYmxlKS5cbiAgICovXG4gIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGF0dXMuXG4gICAqL1xuICBzdGF0dXM6IEFYUFdvcmtmbG93U3RhdHVzO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdWItc3RhdHVzLlxuICAgKi9cbiAgc3ViU3RhdHVzOiBBWFBXb3JrZmxvd1N1YlN0YXR1cztcblxuICAvKipcbiAgICogQm9va21hcmtzLlxuICAgKi9cbiAgYm9va21hcmtzOiBBWFBCb29rbWFya1tdO1xuXG4gIC8qKlxuICAgKiBJbmNpZGVudHMuXG4gICAqL1xuICBpbmNpZGVudHM6IEFYUEFjdGl2aXR5SW5jaWRlbnRbXTtcblxuICAvKipcbiAgICogRmF1bHQgKG51bGxhYmxlKS5cbiAgICovXG4gIGZhdWx0PzogQVhQV29ya2Zsb3dGYXVsdFN0YXRlIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29tcGxldGlvbiBjYWxsYmFja3MuXG4gICAqL1xuICBjb21wbGV0aW9uQ2FsbGJhY2tzOiBBWFBDb21wbGV0aW9uQ2FsbGJhY2tTdGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSBleGVjdXRpb24gY29udGV4dHMuXG4gICAqL1xuICBhY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRzOiBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBkYXRhLlxuICAgKi9cbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIE91dHB1dCBkYXRhLlxuICAgKi9cbiAgb3V0cHV0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGJhZy5cbiAgICovXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lKS5cbiAgICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSkuXG4gICAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcblxuICAvKipcbiAgICogRmluaXNoZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lLCBudWxsYWJsZSkuXG4gICAqL1xuICBmaW5pc2hlZEF0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBpbnN0YW5jZSAoc3RvcmVkIGluIGRhdGFiYXNlKS5cbiAqIFRoaXMgbWF0Y2hlcyB0aGUgRWxzYSBXb3JrZmxvdyBJbnN0YW5jZSBzY2hlbWEgZm9yIGJhY2tlbmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0luc3RhbmNlIHtcbiAgLyoqXG4gICAqIFNjaGVtYSByZWZlcmVuY2UuXG4gICAqL1xuICAkc2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBkZWZpbml0aW9uIElELlxuICAgKi9cbiAgZGVmaW5pdGlvbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGRlZmluaXRpb24gdmVyc2lvbiBJRC5cbiAgICovXG4gIGRlZmluaXRpb25WZXJzaW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgZGVmaW5pdGlvbiB2ZXJzaW9uIG51bWJlci5cbiAgICovXG4gIHZlcnNpb246IG51bWJlcjtcblxuICAvKipcbiAgICogUGFyZW50IHdvcmtmbG93IGluc3RhbmNlIElEIChudWxsYWJsZSwgZm9yIGNoaWxkIHdvcmtmbG93cykuXG4gICAqL1xuICBwYXJlbnRXb3JrZmxvd0luc3RhbmNlSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGF0ZSAoaW50ZXJuYWwgZXhlY3V0aW9uIHN0YXRlKS5cbiAgICovXG4gIHdvcmtmbG93U3RhdGU6IEFYUFdvcmtmbG93U3RhdGU7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1czogQVhQV29ya2Zsb3dTdGF0dXM7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN1Yi1zdGF0dXMuXG4gICAqL1xuICBzdWJTdGF0dXM6IEFYUFdvcmtmbG93U3ViU3RhdHVzO1xuXG4gIC8qKlxuICAgKiBDb3JyZWxhdGlvbiBJRCAobnVsbGFibGUpLlxuICAgKi9cbiAgY29ycmVsYXRpb25JZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG5hbWUgKG51bGxhYmxlKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJbmNpZGVudCBjb3VudC5cbiAgICovXG4gIGluY2lkZW50Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlZCBhdCB0aW1lc3RhbXAgKElTTyBkYXRlLXRpbWUpLlxuICAgKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lKS5cbiAgICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaW5pc2hlZCBhdCB0aW1lc3RhbXAgKElTTyBkYXRlLXRpbWUsIG51bGxhYmxlKS5cbiAgICovXG4gIGZpbmlzaGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const AXP_ACTIVITY_PROVIDER = new InjectionToken('AXP_ACTIVITY_PROVIDER', {\n factory: () => [],\n});\nexport const AXP_ACTIVITY_CATEGORY_PROVIDER = new InjectionToken('AXP_ACTIVITY_CATEGORY_PROVIDER', {\n factory: () => [],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvYWN0aXZpdHkvYWN0aXZpdHktZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUE2Qix1QkFBdUIsRUFBRTtJQUN6RyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUM7QUF1QkgsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQXFDLGdDQUFnQyxFQUFFO0lBQ25JLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0NBQ3BCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBBY3Rpdml0eUNhdGVnb3J5LCBBWFBBY3Rpdml0eURlZmluaXRpb24gfSBmcm9tICcuL2FjdGl2aXR5LnR5cGVzJztcblxuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlQcm92aWRlclRva2VuID1cbiAgICB8IEFYUEFjdGl2aXR5UHJvdmlkZXJcbiAgICB8IFByb21pc2U8QVhQQWN0aXZpdHlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfQUNUSVZJVFlfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQWN0aXZpdHlQcm92aWRlclRva2VuW10+KCdBWFBfQUNUSVZJVFlfUFJPVklERVInLCB7XG4gICAgZmFjdG9yeTogKCkgPT4gW10sXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBBWFBBY3Rpdml0eVByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiBhY3Rpdml0eSBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCAtIENhdGVnb3J5IElEIHRvIGZpbHRlciBhY3Rpdml0aWVzXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBhY3Rpdml0eSBkZWZpbml0aW9ucyBhcnJheVxuICAgICAqL1xuICAgIGdldExpc3QoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eURlZmluaXRpb25bXT47XG4gICAgXG4gICAgLyoqXG4gICAgICogR2V0IGFjdGl2aXR5IGRlZmluaXRpb24gYnkgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpLlxuICAgICAqIFRoZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGNvbW1hbmQga2V5IGZvciBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIG5hbWUgLSBBY3Rpdml0eSBuYW1lICh1bmlxdWUgaWRlbnRpZmllciBhbmQgY29tbWFuZCBrZXkpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBhY3Rpdml0eSBkZWZpbml0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeUlkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyVG9rZW4gPVxuICAgIHwgQVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfQUNUSVZJVFlfQ0FURUdPUllfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyVG9rZW5bXT4oJ0FYUF9BQ1RJVklUWV9DQVRFR09SWV9QUk9WSURFUicsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeVtdPjtcbiAgICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+O1xufVxuXG4iXX0=","//#region ---- Imports ----\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER } from './activity-definition.provider';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Optimized Activity Definition Service\n *\n * Manages activity definitions (metadata) for UI and tooling.\n * Similar to AXPReportDefinitionService - only handles metadata, not execution.\n *\n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has activities (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\nexport class AXPActivityDefinitionService {\n constructor() {\n //#region ---- Providers & Caches ----\n this.categoryProviders = inject(AXP_ACTIVITY_CATEGORY_PROVIDER, { optional: true }) || [];\n this.activityProviders = inject(AXP_ACTIVITY_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Cache Storage ----\n /** Cache for categories by id - O(1) lookup */\n this.categoriesById = new Map();\n /** Cache for categories by parentId - O(1) lookup */\n this.categoriesByParentId = new Map();\n /** Cache for activity definitions by categoryId - O(1) lookup */\n this.activitiesByCategory = new Map();\n /** Cache for individual activity definitions by name - O(1) lookup */\n this.activitiesByName = new Map();\n /** Track which provider index owns each category (by category ID) */\n this.categoryOwnership = new Map(); // Maps categoryId → provider index\n /** Pending API requests to prevent duplicate calls */\n this.pendingCategoriesRequests = new Map();\n this.pendingActivitiesRequests = new Map();\n this.pendingActivityRequests = new Map();\n }\n //#endregion\n //#region ---- Initialization ----\n //#endregion\n //#region ---- Public API: Categories ----\n /**\n * Get categories by parentId with aggressive caching\n *\n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n *\n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId) {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId);\n }\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId);\n }\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategoriesFromProviders(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single category by ID with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n /**\n * Get category path from root to specified category\n *\n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId) {\n const path = [];\n let currentCategoryId = categoryId;\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n return path;\n }\n //#endregion\n //#region ---- Public API: Activity Definitions ----\n /**\n * Get activity definitions for a category with smart caching\n *\n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches activity definitions\n * - Returns cached result on subsequent calls\n *\n * @param categoryId - Category ID to get activity definitions from\n * @returns Array of activity definitions\n */\n async getActivitiesByCategoryId(categoryId) {\n // ✅ Fast path: Return cached result\n if (this.activitiesByCategory.has(categoryId)) {\n return this.activitiesByCategory.get(categoryId);\n }\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no activities - cache empty array and skip API call\n const emptyArray = [];\n this.activitiesByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n // ✅ Prevent duplicate requests\n if (this.pendingActivitiesRequests.has(categoryId)) {\n return this.pendingActivitiesRequests.get(categoryId);\n }\n // ✅ Load from providers\n const requestPromise = this.loadActivitiesFromProviders(categoryId);\n this.pendingActivitiesRequests.set(categoryId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single activity definition by name with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval\n *\n * @param name - Activity name (unique identifier and command key)\n * @returns Activity definition or undefined if not found\n */\n async getActivityByName(name) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.activitiesByName.has(name)) {\n return this.activitiesByName.get(name);\n }\n // ✅ Prevent duplicate requests\n if (this.pendingActivityRequests.has(name)) {\n return this.pendingActivityRequests.get(name);\n }\n // ✅ Load from providers\n const requestPromise = this.loadActivityFromProviders(name);\n this.pendingActivityRequests.set(name, requestPromise);\n return requestPromise;\n }\n /**\n * Get category ID containing a specific activity definition\n *\n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByActivityName(activityName) {\n // ✅ Search in cached activity definitions\n for (const [categoryId, definitions] of this.activitiesByCategory.entries()) {\n if (definitions.some(def => def.name === activityName)) {\n return categoryId;\n }\n }\n // ✅ Try loading the activity definition to find its category\n const definition = await this.getActivityByName(activityName);\n if (definition && definition.category) {\n // Try to find category by name/id\n const categories = await this.getCategories();\n const found = categories.find(cat => cat.id === definition.category || cat.title === definition.category);\n if (found) {\n return found.id;\n }\n }\n return undefined;\n }\n /**\n * Get category path for an activity\n */\n async getCategoriesPathByActivityName(activityName) {\n const categoryId = await this.getCategoryIdByActivityName(activityName);\n if (!categoryId) {\n throw new Error(`Activity '${activityName}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n //#endregion\n //#region ---- Private: Data Loading ----\n /**\n * Load categories from providers and cache results\n *\n * Optimization: Tracks provider ownership to avoid unnecessary API calls\n * - For root (parentId = undefined): Query ALL providers\n * - For children: Only query the provider that owns the parent\n */\n async loadCategoriesFromProviders(parentId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.categoryProviders);\n const categories = [];\n // Determine which provider(s) to query\n const providerIndicesToQuery = parentId\n ? this.getProviderIndexForCategory(parentId)\n : null; // Root: query all providers\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const cats = await p.value.getList(parentId);\n if (Array.isArray(cats) && cats.length > 0) {\n categories.push(...cats);\n // ✅ Track ownership: This provider INDEX owns these categories\n cats.forEach(cat => this.categoryOwnership.set(cat.id, i));\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, categories);\n categories.forEach(cat => this.categoriesById.set(cat.id, cat));\n return categories;\n }\n finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n /**\n * Get the provider index that owns a specific category\n *\n * @returns Array with provider index, or null if ownership unknown (query all)\n */\n getProviderIndexForCategory(categoryId) {\n const ownerIndex = this.categoryOwnership.get(categoryId);\n if (ownerIndex !== undefined) {\n return [ownerIndex];\n }\n // Ownership unknown - will query all providers (fallback)\n return null;\n }\n /**\n * Load activity definitions from providers and cache results\n *\n * Optimization: Only queries the provider that owns the category\n * Uses provider INDEX to match category provider with activity provider\n */\n async loadActivitiesFromProviders(categoryId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.activityProviders);\n const definitions = [];\n // ✅ Smart routing: Get provider INDEX that owns this category\n const ownerIndex = this.categoryOwnership.get(categoryId);\n const providerIndicesToQuery = ownerIndex !== undefined ? [ownerIndex] : null;\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const defs = await p.value.getList(categoryId);\n if (Array.isArray(defs)) {\n definitions.push(...defs);\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.activitiesByCategory.set(categoryId, definitions);\n definitions.forEach(def => {\n if (def.name) {\n this.activitiesByName.set(def.name, def);\n }\n });\n return definitions;\n }\n finally {\n this.pendingActivitiesRequests.delete(categoryId);\n }\n }\n /**\n * Load single activity definition from providers and cache result\n */\n async loadActivityFromProviders(name) {\n try {\n const resolvedProviders = await Promise.allSettled(this.activityProviders);\n // Try providers first\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value && typeof p.value.getById === 'function') {\n try {\n const result = await p.value.getById(name);\n if (result) {\n this.activitiesByName.set(name, result);\n return result;\n }\n }\n catch {\n // Continue on error\n }\n }\n }\n // Fallback: Search in cached activity definitions\n for (const definitions of this.activitiesByCategory.values()) {\n const found = definitions.find(def => def.name === name);\n if (found) {\n this.activitiesByName.set(name, found);\n return found;\n }\n }\n return undefined;\n }\n finally {\n this.pendingActivityRequests.delete(name);\n }\n }\n /**\n * Breadth-first search through category hierarchy\n */\n async searchCategoryInHierarchy(categoryId) {\n const searchQueue = [undefined];\n const searched = new Set();\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift();\n if (searched.has(parentId))\n continue;\n searched.add(parentId);\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n return found;\n }\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n return undefined;\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n /**\n * Check if category has activities (uses cached count)\n */\n categoryHasActivities(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n /**\n * Clear all caches\n */\n clearAllCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.activitiesByCategory.clear();\n this.activitiesByName.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingActivitiesRequests.clear();\n this.pendingActivityRequests.clear();\n }\n /**\n * Clear categories cache only\n */\n clearCategoriesCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n }\n /**\n * Clear activities cache only\n */\n clearActivitiesCache() {\n this.activitiesByCategory.clear();\n this.activitiesByName.clear();\n this.pendingActivitiesRequests.clear();\n this.pendingActivityRequests.clear();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPActivityDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPActivityDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPActivityDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9hY3Rpdml0eS9hY3Rpdml0eS1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx5QkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUUxRSxzRUFBc0U7UUFDOUQscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFFcEUscUVBQXFFO1FBQzdELHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDLENBQUMsbUNBQW1DO1FBRTFGLHNEQUFzRDtRQUM5Qyw4QkFBeUIsR0FBRyxJQUFJ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QUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQWhkUSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUZ6QixNQUFNOzs0RkFFVCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEFjdGl2aXR5Q2F0ZWdvcnksIEFYUEFjdGl2aXR5RGVmaW5pdGlvbiB9IGZyb20gJy4vYWN0aXZpdHkudHlwZXMnO1xuaW1wb3J0IHsgQVhQX0FDVElWSVRZX0NBVEVHT1JZX1BST1ZJREVSLCBBWFBfQUNUSVZJVFlfUFJPVklERVIgfSBmcm9tICcuL2FjdGl2aXR5LWRlZmluaXRpb24ucHJvdmlkZXInO1xuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBPcHRpbWl6ZWQgQWN0aXZpdHkgRGVmaW5pdGlvbiBTZXJ2aWNlXG4gKiBcbiAqIE1hbmFnZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnMgKG1ldGFkYXRhKSBmb3IgVUkgYW5kIHRvb2xpbmcuXG4gKiBTaW1pbGFyIHRvIEFYUFJlcG9ydERlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIGFjdGl2aXRpZXMgKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDMuIEFnZ3Jlc3NpdmUgY2FjaGluZyBwcmV2ZW50cyBkdXBsaWNhdGUgQVBJIGNhbGxzXG4gKiA0LiBTaW5nbGUgcGVuZGluZyByZXF1ZXN0IHBlciByZXNvdXJjZSBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnNcbiAqIDUuIExhenkgbG9hZGluZyAtIG9ubHkgbG9hZHMgZGF0YSB3aGVuIG5lZWRlZFxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIHtcbiAgICAvLyNyZWdpb24gLS0tLSAgIFByb3ZpZGVycyAmIENhY2hlcyAgIC0tLS1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlQcm92aWRlcnMgPSBpbmplY3QoQVhQX0FDVElWSVRZX0NBVEVHT1JZX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZpdHlQcm92aWRlcnMgPSBpbmplY3QoQVhQX0FDVElWSVRZX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhY2hlIFN0b3JhZ2UgICAtLS0tXG5cbiAgICAvKiogQ2FjaGUgZm9yIGNhdGVnb3JpZXMgYnkgaWQgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcmllc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgQVhQQWN0aXZpdHlDYXRlZ29yeT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlQYXJlbnRJZCA9IG5ldyBNYXA8c3RyaW5nIHwgdW5kZWZpbmVkLCBBWFBBY3Rpdml0eUNhdGVnb3J5W10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGFjdGl2aXR5IGRlZmluaXRpb25zIGJ5IGNhdGVnb3J5SWQgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgYWN0aXZpdGllc0J5Q2F0ZWdvcnkgPSBuZXcgTWFwPHN0cmluZywgQVhQQWN0aXZpdHlEZWZpbml0aW9uW10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGluZGl2aWR1YWwgYWN0aXZpdHkgZGVmaW5pdGlvbnMgYnkgbmFtZSAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBhY3Rpdml0aWVzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIEFYUEFjdGl2aXR5RGVmaW5pdGlvbj4oKTtcblxuICAgIC8qKiBUcmFjayB3aGljaCBwcm92aWRlciBpbmRleCBvd25zIGVhY2ggY2F0ZWdvcnkgKGJ5IGNhdGVnb3J5IElEKSAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlPd25lcnNoaXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBNYXBzIGNhdGVnb3J5SWQg4oaSIHByb3ZpZGVyIGluZGV4XG5cbiAgICAvKiogUGVuZGluZyBBUEkgcmVxdWVzdHMgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgKi9cbiAgICBwcml2YXRlIHBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZyB8IHVuZGVmaW5lZCwgUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPj4oKTtcbiAgICBwcml2YXRlIHBlbmRpbmdBY3Rpdml0eVJlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPj4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBJbml0aWFsaXphdGlvbiAgIC0tLS1cblxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IENhdGVnb3JpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCB3aXRoIGFnZ3Jlc3NpdmUgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogUmV0dXJucyBjYWNoZWQgcmVzdWx0IGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSxcbiAgICAgKiBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IEFQSSBjYWxscyBkdXJpbmcgbmF2aWdhdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXJlbnRJZCAtIFBhcmVudCBjYXRlZ29yeSBJRCAodW5kZWZpbmVkID0gcm9vdCBjYXRlZ29yaWVzKVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGNhdGVnb3JpZXMgd2l0aCBjb3VudCBtZXRhZGF0YSAoY2hpbGRyZW5Db3VudCwgaXRlbXNDb3VudClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuaGFzKHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHM6IFJldHVybiBwZW5kaW5nIHByb21pc2VcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmdldChwYXJlbnRJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIENyZWF0ZSBzaW5nbGUgcmVxdWVzdCBhbmQgY2FjaGUgaXRcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5zZXQocGFyZW50SWQsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpbmdsZSBjYXRlZ29yeSBieSBJRCB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWwsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiBzZWFyY2hpbmcgY2FjaGUsIHRoZW4gcHJvdmlkZXJzIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogTygxKSBsb29rdXAgaW4gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5SWQuaGFzKGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCBwYXJlbnQtY2hpbGQgbGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yaWVzIG9mIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0ZWdvcnlJZCwgZm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIHJvb3QgY2F0ZWdvcmllcyBpZiBub3QgbG9hZGVkXG4gICAgICAgIGlmICghdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXModW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBoaWVyYXJjaHlcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmcm9tIHJvb3QgdG8gc3BlY2lmaWVkIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBCdWlsZHMgcGF0aCB1c2luZyBjYWNoZWQgY2F0ZWdvcmllcyBvbmx5XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IHBhdGg6IEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5SWQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGN1cnJlbnRDYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGVnb3J5ICcke2N1cnJlbnRDYXRlZ29yeUlkfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5SWQgPSBjYXRlZ29yeS5wYXJlbnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgQVBJOiBBY3Rpdml0eSBEZWZpbml0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBhY3Rpdml0eSBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeSB3aXRoIHNtYXJ0IGNhY2hpbmdcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IENoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgaXRlbXNDb3VudCA+IDAsIGxvYWRzIGFuZCBjYWNoZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnNcbiAgICAgKiAtIFJldHVybnMgY2FjaGVkIHJlc3VsdCBvbiBzdWJzZXF1ZW50IGNhbGxzXG4gICAgICogXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBnZXQgYWN0aXZpdHkgZGVmaW5pdGlvbnMgZnJvbVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWN0aXZpdGllc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIC8vIOKchSBGYXN0IHBhdGg6IFJldHVybiBjYWNoZWQgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmhhcyhjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIGFjdGl2aXRpZXMgLSBjYWNoZSBlbXB0eSBhcnJheSBhbmQgc2tpcCBBUEkgY2FsbFxuICAgICAgICAgICAgY29uc3QgZW1wdHlBcnJheTogQVhQQWN0aXZpdHlEZWZpbml0aW9uW10gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGVtcHR5QXJyYXkpO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdBY3Rpdml0aWVzUmVxdWVzdHMuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIGZyb20gcHJvdmlkZXJzXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5sb2FkQWN0aXZpdGllc0Zyb21Qcm92aWRlcnMoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5zZXQoY2F0ZWdvcnlJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIGFjdGl2aXR5IGRlZmluaXRpb24gYnkgbmFtZSB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWxcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbmFtZSAtIEFjdGl2aXR5IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyIGFuZCBjb21tYW5kIGtleSlcbiAgICAgKiBAcmV0dXJucyBBY3Rpdml0eSBkZWZpbml0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY3Rpdml0eUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBPKDEpIGxvb2t1cCBpbiBjYWNoZVxuICAgICAgICBpZiAodGhpcy5hY3Rpdml0aWVzQnlOYW1lLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQWN0aXZpdHlSZXF1ZXN0cy5nZXQobmFtZSkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRBY3Rpdml0eUZyb21Qcm92aWRlcnMobmFtZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuc2V0KG5hbWUsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3J5IElEIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBhY3Rpdml0eSBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBTZWFyY2hlcyBjYWNoZSBmaXJzdCwgbG9hZHMgb24tZGVtYW5kIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5SWRCeUFjdGl2aXR5TmFtZShhY3Rpdml0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGRlZmluaXRpb25zXSBvZiB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zLnNvbWUoZGVmID0+IGRlZi5uYW1lID09PSBhY3Rpdml0eU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgVHJ5IGxvYWRpbmcgdGhlIGFjdGl2aXR5IGRlZmluaXRpb24gdG8gZmluZCBpdHMgY2F0ZWdvcnlcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZpdHlCeU5hbWUoYWN0aXZpdHlOYW1lKTtcbiAgICAgICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5jYXRlZ29yeSkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgY2F0ZWdvcnkgYnkgbmFtZS9pZFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gZGVmaW5pdGlvbi5jYXRlZ29yeSB8fCBjYXQudGl0bGUgPT09IGRlZmluaXRpb24uY2F0ZWdvcnkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmb3IgYW4gYWN0aXZpdHlcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzUGF0aEJ5QWN0aXZpdHlOYW1lKGFjdGl2aXR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+IHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlJZEJ5QWN0aXZpdHlOYW1lKGFjdGl2aXR5TmFtZSk7XG4gICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpdml0eSAnJHthY3Rpdml0eU5hbWV9JyBub3QgZm91bmQgaW4gYW55IGNhdGVnb3J5YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQpO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQcml2YXRlOiBEYXRhIExvYWRpbmcgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGNhdGVnb3JpZXMgZnJvbSBwcm92aWRlcnMgYW5kIGNhY2hlIHJlc3VsdHNcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IFRyYWNrcyBwcm92aWRlciBvd25lcnNoaXAgdG8gYXZvaWQgdW5uZWNlc3NhcnkgQVBJIGNhbGxzXG4gICAgICogLSBGb3Igcm9vdCAocGFyZW50SWQgPSB1bmRlZmluZWQpOiBRdWVyeSBBTEwgcHJvdmlkZXJzXG4gICAgICogLSBGb3IgY2hpbGRyZW46IE9ubHkgcXVlcnkgdGhlIHByb3ZpZGVyIHRoYXQgb3ducyB0aGUgcGFyZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkQ2F0ZWdvcmllc0Zyb21Qcm92aWRlcnMocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQcm92aWRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5jYXRlZ29yeVByb3ZpZGVycyk7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzOiBBWFBBY3Rpdml0eUNhdGVnb3J5W10gPSBbXTtcblxuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHByb3ZpZGVyKHMpIHRvIHF1ZXJ5XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gcGFyZW50SWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0UHJvdmlkZXJJbmRleEZvckNhdGVnb3J5KHBhcmVudElkKVxuICAgICAgICAgICAgICAgIDogbnVsbDsgLy8gUm9vdDogcXVlcnkgYWxsIHByb3ZpZGVyc1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc29sdmVkUHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHJlc29sdmVkUHJvdmlkZXJzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgcHJvdmlkZXIgaW5kZXggYW5kIHRoaXMgaXNuJ3QgaXRcbiAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXJJbmRpY2VzVG9RdWVyeSAhPT0gbnVsbCAmJiAhcHJvdmlkZXJJbmRpY2VzVG9RdWVyeS5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0TGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0cyA9IGF3YWl0IHAudmFsdWUuZ2V0TGlzdChwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYXRzKSAmJiBjYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goLi4uY2F0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDinIUgVHJhY2sgb3duZXJzaGlwOiBUaGlzIHByb3ZpZGVyIElOREVYIG93bnMgdGhlc2UgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdHMuZm9yRWFjaChjYXQgPT4gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5zZXQoY2F0LmlkLCBpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeVBhcmVudElkLnNldChwYXJlbnRJZCwgY2F0ZWdvcmllcyk7XG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goY2F0ID0+IHRoaXMuY2F0ZWdvcmllc0J5SWQuc2V0KGNhdC5pZCwgY2F0KSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYXRlZ29yaWVzO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmRlbGV0ZShwYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHByb3ZpZGVyIGluZGV4IHRoYXQgb3ducyBhIHNwZWNpZmljIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogQHJldHVybnMgQXJyYXkgd2l0aCBwcm92aWRlciBpbmRleCwgb3IgbnVsbCBpZiBvd25lcnNoaXAgdW5rbm93biAocXVlcnkgYWxsKVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UHJvdmlkZXJJbmRleEZvckNhdGVnb3J5KGNhdGVnb3J5SWQ6IHN0cmluZyk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG93bmVySW5kZXggPSB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmdldChjYXRlZ29yeUlkKTtcblxuICAgICAgICBpZiAob3duZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW293bmVySW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3duZXJzaGlwIHVua25vd24gLSB3aWxsIHF1ZXJ5IGFsbCBwcm92aWRlcnMgKGZhbGxiYWNrKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGFjdGl2aXR5IGRlZmluaXRpb25zIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRzXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBPbmx5IHF1ZXJpZXMgdGhlIHByb3ZpZGVyIHRoYXQgb3ducyB0aGUgY2F0ZWdvcnlcbiAgICAgKiBVc2VzIHByb3ZpZGVyIElOREVYIHRvIG1hdGNoIGNhdGVnb3J5IHByb3ZpZGVyIHdpdGggYWN0aXZpdHkgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBY3Rpdml0aWVzRnJvbVByb3ZpZGVycyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmFjdGl2aXR5UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBBY3Rpdml0eURlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgU21hcnQgcm91dGluZzogR2V0IHByb3ZpZGVyIElOREVYIHRoYXQgb3ducyB0aGlzIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gb3duZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gW293bmVySW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZnMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goLi4uZGVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LnNldChjYXRlZ29yeUlkLCBkZWZpbml0aW9ucyk7XG4gICAgICAgICAgICBkZWZpbml0aW9ucy5mb3JFYWNoKGRlZiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5zZXQoZGVmLm5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5kZWxldGUoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHNpbmdsZSBhY3Rpdml0eSBkZWZpbml0aW9uIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBY3Rpdml0eUZyb21Qcm92aWRlcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eURlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuYWN0aXZpdHlQcm92aWRlcnMpO1xuXG4gICAgICAgICAgICAvLyBUcnkgcHJvdmlkZXJzIGZpcnN0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0QnlJZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcC52YWx1ZS5nZXRCeUlkKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5zZXQobmFtZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZhbGxiYWNrOiBTZWFyY2ggaW4gY2FjaGVkIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb25zIG9mIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGRlZmluaXRpb25zLmZpbmQoZGVmID0+IGRlZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpdml0aWVzQnlOYW1lLnNldChuYW1lLCBmb3VuZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpdml0eVJlcXVlc3RzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyZWFkdGgtZmlyc3Qgc2VhcmNoIHRocm91Z2ggY2F0ZWdvcnkgaGllcmFyY2h5XG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBzZWFyY2hDYXRlZ29yeUluSGllcmFyY2h5KGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBzZWFyY2hRdWV1ZTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFt1bmRlZmluZWRdO1xuICAgICAgICBjb25zdCBzZWFyY2hlZCA9IG5ldyBTZXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgICAgIHdoaWxlIChzZWFyY2hRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNlYXJjaFF1ZXVlLnNoaWZ0KCkhO1xuICAgICAgICAgICAgaWYgKHNlYXJjaGVkLmhhcyhwYXJlbnRJZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2VhcmNoZWQuYWRkKHBhcmVudElkKTtcblxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcyhwYXJlbnRJZCk7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmlkID09PSBjYXRlZ29yeUlkKTtcblxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgT3B0aW1pemF0aW9uOiBPbmx5IHNlYXJjaCBjaGlsZHJlbiBpZiBjaGlsZHJlbkNvdW50ID4gMFxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LmNoaWxkcmVuQ291bnQgPiAwICYmICFzZWFyY2hlZC5oYXMoY2F0ZWdvcnkuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFF1ZXVlLnB1c2goY2F0ZWdvcnkuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhY2hlIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzQ2hpbGRyZW4oY2F0ZWdvcnlJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHJldHVybiBjYXRlZ29yeSA/IGNhdGVnb3J5LmNoaWxkcmVuQ291bnQgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgY2F0ZWdvcnkgaGFzIGFjdGl2aXRpZXMgKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzQWN0aXZpdGllcyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCkgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGNhY2hlc1xuICAgICAqL1xuICAgIGNsZWFyQWxsQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpdml0aWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aXZpdHlSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGNhdGVnb3JpZXMgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyQ2F0ZWdvcmllc0NhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhY3Rpdml0aWVzIGNhY2hlIG9ubHlcbiAgICAgKi9cbiAgICBjbGVhckFjdGl2aXRpZXNDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3Rpdml0aWVzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeU5hbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aXZpdGllc1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { InjectionToken } from '@angular/core';\n/**\n * Injection token for workflow engine.\n * Default implementation is AXPWorkflowLocalEngine.\n */\nexport const AXP_WORKFLOW_ENGINE = new InjectionToken('AXP_WORKFLOW_ENGINE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBb0QvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IscUJBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBWFBGcm9udEFjdGl2aXR5Q29tcGxldGVSZXF1ZXN0LFxuICBBWFBGcm9udEFjdGl2aXR5Q29tcGxldGVSZXNwb25zZSxcbiAgQVhQR2V0V29ya2Zsb3dTdGF0ZVJlcXVlc3QsXG4gIEFYUFJlc3VtZVdvcmtmbG93UmVxdWVzdCxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxufSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3Igd29ya2Zsb3cgZW5naW5lIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dFbmdpbmUge1xuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqXG4gICAqIENyZWF0ZXMgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UgaW4gYmFja2VuZCBhbmQgcmV0dXJucyBpbnN0YW5jZSBJRC5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgLSBTdGFydCB3b3JrZmxvdyByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFJlc3BvbnNlIHdpdGggaW5zdGFuY2VJZCBhbmQgaW5pdGlhbCBzdGF0ZVxuICAgKlxuICAgKi9cbiAgc3RhcnQocmVxdWVzdDogQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QpOiBQcm9taXNlPEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZT47XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBhIHN1c3BlbmRlZCB3b3JrZmxvdyBpbnN0YW5jZS5cbiAgICpcbiAgICogUmVzdW1lcyB3b3JrZmxvdyBpbnN0YW5jZSBhZnRlciB1c2VyIGludGVyYWN0aW9uIChlLmcuLCBhZnRlciBzaG93LWRpYWxvZykuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gUmVzdW1lIHdvcmtmbG93IHJlcXVlc3RcbiAgICogQHJldHVybnMgUmVzdW1lIHJlc3BvbnNlIHdpdGggbmV4dCBzdGVwIGFuZCB1cGRhdGVkIHN0YXRlXG4gICAqXG4gICAqL1xuICByZXN1bWUocmVxdWVzdDogQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0KTogUHJvbWlzZTxBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlPjtcblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgd29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGUuXG4gICAqXG4gICAqIFJldHJpZXZlcyBjdXJyZW50IHN0YXRlIG9mIGEgd29ya2Zsb3cgaW5zdGFuY2UgZnJvbSBiYWNrZW5kLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCAtIEdldCBzdGF0ZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIEN1cnJlbnQgd29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGVcbiAgICpcbiAgICovXG4gIGdldFN0YXRlKHJlcXVlc3Q6IEFYUEdldFdvcmtmbG93U3RhdGVSZXF1ZXN0KTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+O1xuXG4gIGZyb250QWN0aXZ0eUNvbXBsZXRlKHJlcXVlc3Q6IEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlcXVlc3QpOiBQcm9taXNlPEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlc3BvbnNlPjtcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHdvcmtmbG93IGVuZ2luZS5cbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgQVhQV29ya2Zsb3dMb2NhbEVuZ2luZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9XT1JLRkxPV19FTkdJTkUgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQV29ya2Zsb3dFbmdpbmU+KCdBWFBfV09SS0ZMT1dfRU5HSU5FJyk7XG4iXX0=","import { Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Workflow Expression Scope Service\n *\n * Shared service for building expression evaluation scope from workflow data.\n * Used by both Local Engine and Mock Runtime to manage workflow data (inputs, variables, outputs).\n *\n * Responsibilities:\n * - Build expression evaluation scope from workflow state\n * - Provide context.eval() function for accessing workflow data\n * - Manage workflow data structure (inputs, variables, outputs)\n *\n * This service does NOT:\n * - Execute activities\n * - Evaluate expressions (delegates to AXPExpressionEvaluatorService)\n * - Manage workflow state (handled by runtime)\n *\n * @example\n * ```typescript\n * const scopeService = inject(WorkflowExpressionScopeService);\n *\n * // Build scope from workflow state\n * const scope = scopeService.buildScope({\n * inputs: state.input || {},\n * variables: state.variables || {},\n * outputs: activityOutputs\n * });\n *\n * // Or build from state directly\n * const scope = scopeService.buildScopeFromState(state, activityOutputs);\n * ```\n */\nexport class WorkflowExpressionScopeService {\n //#region ---- Public Methods ----\n /**\n * Build expression evaluation scope for workflow activities.\n *\n * Provides workflow-specific data (inputs, variables, outputs) and context.eval() function.\n * Other data (session, current user, etc.) are provided by expression evaluator scope providers.\n *\n * Scope includes:\n * - inputs: Workflow input values (accessible as inputs.propertyName)\n * - variables: Workflow state variables (accessible as variables.propertyName or vars.propertyName)\n * - outputs: Previous activity outputs (accessible as outputs.activityId)\n * - context.eval(path): Function to access nested properties from workflow data\n *\n * Expressions can use:\n * - {{inputs.userName}} - Direct access to workflow input\n * - {{variables.someVar}} or {{vars.someVar}} - Direct access to workflow variable\n * - {{outputs.activityId.property}} - Direct access to previous activity output\n * - {{context.eval(\"inputs.userName\")}} - Access via context.eval (supports nested paths)\n * - {{context.eval(\"variables.someVar\")}} - Access variables via context.eval\n * - {{context.eval(\"outputs.activityId.property\")}} - Access outputs via context.eval\n * - {{session.currentUser().name}} - Access current user via expression evaluator scope providers\n *\n * The context.eval() function provides a unified way to access all workflow data,\n * similar to how entity-detail-list uses context.eval() to access parent data.\n *\n * @param context - Workflow expression context containing inputs, variables, and outputs\n * @returns Expression evaluator scope with workflow data and context.eval() function\n */\n buildScope(context) {\n // Build merged workflow data object for context.eval()\n // This allows expressions like: context.eval(\"inputs.userName\") or context.eval(\"variables.count\")\n const workflowData = {\n inputs: context.inputs || {},\n variables: context.variables || {},\n vars: context.variables || {}, // Alias for convenience\n outputs: context.outputs || {},\n };\n // Build scope object with workflow-specific data and context.eval()\n // Note: AXPExpressionEvaluatorScope type expects { [namespace]: { [name]: Function } }\n // but evaluate() method actually accepts flat objects with values too\n // We'll use 'any' to allow both values and functions\n const scope = {\n // Direct access to workflow data\n inputs: workflowData.inputs,\n variables: workflowData.variables,\n vars: workflowData.vars,\n outputs: workflowData.outputs,\n // Context object with eval function (similar to entity-detail-list pattern)\n context: {\n eval: (path) => {\n // Use lodash get to access nested properties\n // Supports paths like: \"inputs.userName\", \"variables.count\", \"outputs.activityId.property\"\n return get(workflowData, path);\n },\n },\n };\n return scope;\n }\n /**\n * Build expression evaluation scope from workflow instance state.\n *\n * Convenience method that extracts data from AXPWorkflowInstanceState.\n *\n * @param state - Workflow instance state\n * @param activityOutputs - Map of activity outputs (activityId -> output)\n * @returns Expression evaluator scope with workflow data and context.eval() function\n */\n buildScopeFromState(state, activityOutputs) {\n debugger;\n // Convert activity outputs to record format\n const outputs = {};\n if (activityOutputs) {\n if (activityOutputs instanceof Map) {\n activityOutputs.forEach((output, activityId) => {\n outputs[activityId] = output;\n });\n }\n else {\n Object.assign(outputs, activityOutputs);\n }\n }\n return this.buildScope({\n inputs: state.input || {},\n variables: state.variables || {},\n outputs: outputs,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowExpressionScopeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowExpressionScopeService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowExpressionScopeService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWV4cHJlc3Npb24tc2NvcGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBb0JoQyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUlILE1BQU0sT0FBTyw4QkFBOEI7SUFDekMsc0NBQXNDO0lBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNILFVBQVUsQ0FBQyxPQUFrQztRQUMzQyx1REFBdUQ7UUFDdkQsbUdBQW1HO1FBQ25HLE1BQU0sWUFBWSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDNUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsd0JBQXdCO1lBQ3ZELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLG9FQUFvRTtRQUNwRSx1RkFBdUY7UUFDdkYsc0VBQXNFO1FBQ3RFLHFEQUFxRDtRQUNyRCxNQUFNLEtBQUssR0FBUTtZQUNqQixpQ0FBaUM7WUFDakMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUztZQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBRTdCLDRFQUE0RTtZQUM1RSxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7b0JBQ3JCLDZDQUE2QztvQkFDN0MsMkZBQTJGO29CQUMzRixPQUFPLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7YUFDRjtTQUNGLENBQUM7UUFFRixPQUFPLEtBQW9DLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsbUJBQW1CLENBQ2pCLEtBQStCLEVBQy9CLGVBQXdEO1FBRXhELFFBQVEsQ0FBQztRQUNULDRDQUE0QztRQUM1QyxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxlQUFlLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUU7b0JBQzdDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDekIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNoQyxPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDOytHQS9GVSw4QkFBOEI7bUhBQTlCLDhCQUE4QixjQUY3QixNQUFNOzs0RkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICYgSW50ZXJmYWNlcyAgIC0tLS1cblxuLyoqXG4gKiBXb3JrZmxvdyBleHByZXNzaW9uIGV2YWx1YXRpb24gY29udGV4dC5cbiAqIENvbnRhaW5zIHdvcmtmbG93IHN0YXRlIGRhdGEgbmVlZGVkIGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dFeHByZXNzaW9uQ29udGV4dCB7XG4gIC8qKiBXb3JrZmxvdyBpbnB1dCB2YWx1ZXMgKi9cbiAgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBcbiAgLyoqIFdvcmtmbG93IHN0YXRlIHZhcmlhYmxlcyAqL1xuICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIFxuICAvKiogUHJldmlvdXMgYWN0aXZpdHkgb3V0cHV0cyAoYWN0aXZpdHlJZCAtPiBvdXRwdXQpICovXG4gIG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIFdvcmtmbG93IEV4cHJlc3Npb24gU2NvcGUgU2VydmljZVxuICogXG4gKiBTaGFyZWQgc2VydmljZSBmb3IgYnVpbGRpbmcgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHNjb3BlIGZyb20gd29ya2Zsb3cgZGF0YS5cbiAqIFVzZWQgYnkgYm90aCBMb2NhbCBFbmdpbmUgYW5kIE1vY2sgUnVudGltZSB0byBtYW5hZ2Ugd29ya2Zsb3cgZGF0YSAoaW5wdXRzLCB2YXJpYWJsZXMsIG91dHB1dHMpLlxuICogXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBCdWlsZCBleHByZXNzaW9uIGV2YWx1YXRpb24gc2NvcGUgZnJvbSB3b3JrZmxvdyBzdGF0ZVxuICogLSBQcm92aWRlIGNvbnRleHQuZXZhbCgpIGZ1bmN0aW9uIGZvciBhY2Nlc3Npbmcgd29ya2Zsb3cgZGF0YVxuICogLSBNYW5hZ2Ugd29ya2Zsb3cgZGF0YSBzdHJ1Y3R1cmUgKGlucHV0cywgdmFyaWFibGVzLCBvdXRwdXRzKVxuICogXG4gKiBUaGlzIHNlcnZpY2UgZG9lcyBOT1Q6XG4gKiAtIEV4ZWN1dGUgYWN0aXZpdGllc1xuICogLSBFdmFsdWF0ZSBleHByZXNzaW9ucyAoZGVsZWdhdGVzIHRvIEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTZXJ2aWNlKVxuICogLSBNYW5hZ2Ugd29ya2Zsb3cgc3RhdGUgKGhhbmRsZWQgYnkgcnVudGltZSlcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNjb3BlU2VydmljZSA9IGluamVjdChXb3JrZmxvd0V4cHJlc3Npb25TY29wZVNlcnZpY2UpO1xuICogXG4gKiAvLyBCdWlsZCBzY29wZSBmcm9tIHdvcmtmbG93IHN0YXRlXG4gKiBjb25zdCBzY29wZSA9IHNjb3BlU2VydmljZS5idWlsZFNjb3BlKHtcbiAqICAgaW5wdXRzOiBzdGF0ZS5pbnB1dCB8fCB7fSxcbiAqICAgdmFyaWFibGVzOiBzdGF0ZS52YXJpYWJsZXMgfHwge30sXG4gKiAgIG91dHB1dHM6IGFjdGl2aXR5T3V0cHV0c1xuICogfSk7XG4gKiBcbiAqIC8vIE9yIGJ1aWxkIGZyb20gc3RhdGUgZGlyZWN0bHlcbiAqIGNvbnN0IHNjb3BlID0gc2NvcGVTZXJ2aWNlLmJ1aWxkU2NvcGVGcm9tU3RhdGUoc3RhdGUsIGFjdGl2aXR5T3V0cHV0cyk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dFeHByZXNzaW9uU2NvcGVTZXJ2aWNlIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogQnVpbGQgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHNjb3BlIGZvciB3b3JrZmxvdyBhY3Rpdml0aWVzLlxuICAgKiBcbiAgICogUHJvdmlkZXMgd29ya2Zsb3ctc3BlY2lmaWMgZGF0YSAoaW5wdXRzLCB2YXJpYWJsZXMsIG91dHB1dHMpIGFuZCBjb250ZXh0LmV2YWwoKSBmdW5jdGlvbi5cbiAgICogT3RoZXIgZGF0YSAoc2Vzc2lvbiwgY3VycmVudCB1c2VyLCBldGMuKSBhcmUgcHJvdmlkZWQgYnkgZXhwcmVzc2lvbiBldmFsdWF0b3Igc2NvcGUgcHJvdmlkZXJzLlxuICAgKiBcbiAgICogU2NvcGUgaW5jbHVkZXM6XG4gICAqIC0gaW5wdXRzOiBXb3JrZmxvdyBpbnB1dCB2YWx1ZXMgKGFjY2Vzc2libGUgYXMgaW5wdXRzLnByb3BlcnR5TmFtZSlcbiAgICogLSB2YXJpYWJsZXM6IFdvcmtmbG93IHN0YXRlIHZhcmlhYmxlcyAoYWNjZXNzaWJsZSBhcyB2YXJpYWJsZXMucHJvcGVydHlOYW1lIG9yIHZhcnMucHJvcGVydHlOYW1lKVxuICAgKiAtIG91dHB1dHM6IFByZXZpb3VzIGFjdGl2aXR5IG91dHB1dHMgKGFjY2Vzc2libGUgYXMgb3V0cHV0cy5hY3Rpdml0eUlkKVxuICAgKiAtIGNvbnRleHQuZXZhbChwYXRoKTogRnVuY3Rpb24gdG8gYWNjZXNzIG5lc3RlZCBwcm9wZXJ0aWVzIGZyb20gd29ya2Zsb3cgZGF0YVxuICAgKiBcbiAgICogRXhwcmVzc2lvbnMgY2FuIHVzZTpcbiAgICogLSB7e2lucHV0cy51c2VyTmFtZX19IC0gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyBpbnB1dFxuICAgKiAtIHt7dmFyaWFibGVzLnNvbWVWYXJ9fSBvciB7e3ZhcnMuc29tZVZhcn19IC0gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyB2YXJpYWJsZVxuICAgKiAtIHt7b3V0cHV0cy5hY3Rpdml0eUlkLnByb3BlcnR5fX0gLSBEaXJlY3QgYWNjZXNzIHRvIHByZXZpb3VzIGFjdGl2aXR5IG91dHB1dFxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwiaW5wdXRzLnVzZXJOYW1lXCIpfX0gLSBBY2Nlc3MgdmlhIGNvbnRleHQuZXZhbCAoc3VwcG9ydHMgbmVzdGVkIHBhdGhzKVxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwidmFyaWFibGVzLnNvbWVWYXJcIil9fSAtIEFjY2VzcyB2YXJpYWJsZXMgdmlhIGNvbnRleHQuZXZhbFxuICAgKiAtIHt7Y29udGV4dC5ldmFsKFwib3V0cHV0cy5hY3Rpdml0eUlkLnByb3BlcnR5XCIpfX0gLSBBY2Nlc3Mgb3V0cHV0cyB2aWEgY29udGV4dC5ldmFsXG4gICAqIC0ge3tzZXNzaW9uLmN1cnJlbnRVc2VyKCkubmFtZX19IC0gQWNjZXNzIGN1cnJlbnQgdXNlciB2aWEgZXhwcmVzc2lvbiBldmFsdWF0b3Igc2NvcGUgcHJvdmlkZXJzXG4gICAqIFxuICAgKiBUaGUgY29udGV4dC5ldmFsKCkgZnVuY3Rpb24gcHJvdmlkZXMgYSB1bmlmaWVkIHdheSB0byBhY2Nlc3MgYWxsIHdvcmtmbG93IGRhdGEsXG4gICAqIHNpbWlsYXIgdG8gaG93IGVudGl0eS1kZXRhaWwtbGlzdCB1c2VzIGNvbnRleHQuZXZhbCgpIHRvIGFjY2VzcyBwYXJlbnQgZGF0YS5cbiAgICogXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gV29ya2Zsb3cgZXhwcmVzc2lvbiBjb250ZXh0IGNvbnRhaW5pbmcgaW5wdXRzLCB2YXJpYWJsZXMsIGFuZCBvdXRwdXRzXG4gICAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdG9yIHNjb3BlIHdpdGggd29ya2Zsb3cgZGF0YSBhbmQgY29udGV4dC5ldmFsKCkgZnVuY3Rpb25cbiAgICovXG4gIGJ1aWxkU2NvcGUoY29udGV4dDogV29ya2Zsb3dFeHByZXNzaW9uQ29udGV4dCk6IEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTY29wZSB7XG4gICAgLy8gQnVpbGQgbWVyZ2VkIHdvcmtmbG93IGRhdGEgb2JqZWN0IGZvciBjb250ZXh0LmV2YWwoKVxuICAgIC8vIFRoaXMgYWxsb3dzIGV4cHJlc3Npb25zIGxpa2U6IGNvbnRleHQuZXZhbChcImlucHV0cy51c2VyTmFtZVwiKSBvciBjb250ZXh0LmV2YWwoXCJ2YXJpYWJsZXMuY291bnRcIilcbiAgICBjb25zdCB3b3JrZmxvd0RhdGEgPSB7XG4gICAgICBpbnB1dHM6IGNvbnRleHQuaW5wdXRzIHx8IHt9LFxuICAgICAgdmFyaWFibGVzOiBjb250ZXh0LnZhcmlhYmxlcyB8fCB7fSxcbiAgICAgIHZhcnM6IGNvbnRleHQudmFyaWFibGVzIHx8IHt9LCAvLyBBbGlhcyBmb3IgY29udmVuaWVuY2VcbiAgICAgIG91dHB1dHM6IGNvbnRleHQub3V0cHV0cyB8fCB7fSxcbiAgICB9O1xuXG4gICAgLy8gQnVpbGQgc2NvcGUgb2JqZWN0IHdpdGggd29ya2Zsb3ctc3BlY2lmaWMgZGF0YSBhbmQgY29udGV4dC5ldmFsKClcbiAgICAvLyBOb3RlOiBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGUgdHlwZSBleHBlY3RzIHsgW25hbWVzcGFjZV06IHsgW25hbWVdOiBGdW5jdGlvbiB9IH1cbiAgICAvLyBidXQgZXZhbHVhdGUoKSBtZXRob2QgYWN0dWFsbHkgYWNjZXB0cyBmbGF0IG9iamVjdHMgd2l0aCB2YWx1ZXMgdG9vXG4gICAgLy8gV2UnbGwgdXNlICdhbnknIHRvIGFsbG93IGJvdGggdmFsdWVzIGFuZCBmdW5jdGlvbnNcbiAgICBjb25zdCBzY29wZTogYW55ID0ge1xuICAgICAgLy8gRGlyZWN0IGFjY2VzcyB0byB3b3JrZmxvdyBkYXRhXG4gICAgICBpbnB1dHM6IHdvcmtmbG93RGF0YS5pbnB1dHMsXG4gICAgICB2YXJpYWJsZXM6IHdvcmtmbG93RGF0YS52YXJpYWJsZXMsXG4gICAgICB2YXJzOiB3b3JrZmxvd0RhdGEudmFycyxcbiAgICAgIG91dHB1dHM6IHdvcmtmbG93RGF0YS5vdXRwdXRzLFxuICAgICAgXG4gICAgICAvLyBDb250ZXh0IG9iamVjdCB3aXRoIGV2YWwgZnVuY3Rpb24gKHNpbWlsYXIgdG8gZW50aXR5LWRldGFpbC1saXN0IHBhdHRlcm4pXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGV2YWw6IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAvLyBVc2UgbG9kYXNoIGdldCB0byBhY2Nlc3MgbmVzdGVkIHByb3BlcnRpZXNcbiAgICAgICAgICAvLyBTdXBwb3J0cyBwYXRocyBsaWtlOiBcImlucHV0cy51c2VyTmFtZVwiLCBcInZhcmlhYmxlcy5jb3VudFwiLCBcIm91dHB1dHMuYWN0aXZpdHlJZC5wcm9wZXJ0eVwiXG4gICAgICAgICAgcmV0dXJuIGdldCh3b3JrZmxvd0RhdGEsIHBhdGgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNjb3BlIGFzIEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBleHByZXNzaW9uIGV2YWx1YXRpb24gc2NvcGUgZnJvbSB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZS5cbiAgICogXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGV4dHJhY3RzIGRhdGEgZnJvbSBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUuXG4gICAqIFxuICAgKiBAcGFyYW0gc3RhdGUgLSBXb3JrZmxvdyBpbnN0YW5jZSBzdGF0ZVxuICAgKiBAcGFyYW0gYWN0aXZpdHlPdXRwdXRzIC0gTWFwIG9mIGFjdGl2aXR5IG91dHB1dHMgKGFjdGl2aXR5SWQgLT4gb3V0cHV0KVxuICAgKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRvciBzY29wZSB3aXRoIHdvcmtmbG93IGRhdGEgYW5kIGNvbnRleHQuZXZhbCgpIGZ1bmN0aW9uXG4gICAqL1xuICBidWlsZFNjb3BlRnJvbVN0YXRlKFxuICAgIHN0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUsXG4gICAgYWN0aXZpdHlPdXRwdXRzPzogTWFwPHN0cmluZywgYW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlIHtcbiAgICBkZWJ1Z2dlcjtcbiAgICAvLyBDb252ZXJ0IGFjdGl2aXR5IG91dHB1dHMgdG8gcmVjb3JkIGZvcm1hdFxuICAgIGNvbnN0IG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBpZiAoYWN0aXZpdHlPdXRwdXRzKSB7XG4gICAgICBpZiAoYWN0aXZpdHlPdXRwdXRzIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIGFjdGl2aXR5T3V0cHV0cy5mb3JFYWNoKChvdXRwdXQsIGFjdGl2aXR5SWQpID0+IHtcbiAgICAgICAgICBvdXRwdXRzW2FjdGl2aXR5SWRdID0gb3V0cHV0O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ob3V0cHV0cywgYWN0aXZpdHlPdXRwdXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZFNjb3BlKHtcbiAgICAgIGlucHV0czogc3RhdGUuaW5wdXQgfHwge30sXG4gICAgICB2YXJpYWJsZXM6IHN0YXRlLnZhcmlhYmxlcyB8fCB7fSxcbiAgICAgIG91dHB1dHM6IG91dHB1dHMsXG4gICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { WorkflowExpressionScopeService } from './workflow-expression-scope.service';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Activity Executor Service\n *\n * Service for executing workflow activities via CommandBus.\n * Automatically evaluates expressions in activity inputs before execution.\n *\n * @example\n * ```typescript\n * const executor = inject(ActivityExecutor);\n *\n * // Execute activity with task and workflow state (expressions will be evaluated)\n * const result = await executor.execute(task, workflowState, activityOutputs);\n * ```\n */\nexport class ActivityExecutor {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.commandService = inject(AXPCommandService);\n this.expressionEvaluator = inject(AXPExpressionEvaluatorService);\n this.expressionScopeService = inject(WorkflowExpressionScopeService);\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Execute a workflow activity with expression evaluation.\n *\n * Evaluates expressions in activity inputs using workflow state,\n * then executes the activity via CommandBus.\n *\n * @param task - Workflow task containing activity information\n * @param workflowState - Current workflow instance state (for expression evaluation)\n * @param activityOutputs - Map of previous activity outputs (for expression evaluation)\n * @returns Execution result with output and outcome\n */\n async execute(task, workflowState, activityOutputs) {\n try {\n const activityName = task.activityType;\n // Evaluate inputs if workflow state is provided\n let evaluatedInputs = task.input || {};\n if (workflowState) {\n // Build expression scope from workflow state\n const scope = this.expressionScopeService.buildScopeFromState(workflowState, activityOutputs);\n // Evaluate all inputs recursively (handles nested objects and arrays)\n evaluatedInputs = await this.expressionEvaluator.evaluate(task.input || {}, scope);\n }\n // Check if command exists\n const commandExists = this.commandService.exists(activityName);\n if (!commandExists) {\n console.warn(`[ActivityExecutor] ⚠️ Activity '${activityName}' is not registered as Command. ` +\n `Skipping execution.`);\n return {\n output: null,\n outcome: 'Done'\n };\n }\n // Flatten properties if nested (workflow-studio format)\n let commandInput = evaluatedInputs;\n if (commandInput['properties'] && typeof commandInput['properties'] === 'object') {\n // Flatten: {properties: {text: \"...\"}} -> {text: \"...\"}\n commandInput = { ...commandInput['properties'] };\n }\n // Execute activity via CommandBus\n // Activities registered as AXPCommand return {output, outcomes}\n const result = await this.commandService.execute(activityName, commandInput);\n if (!result) {\n return {\n output: null,\n outcome: 'Failed',\n };\n }\n if (!result.success) {\n return {\n output: {\n error: result.message?.text,\n },\n outcome: 'Failed',\n };\n }\n const commandResult = result.data;\n const outcomes = commandResult?.outcomes ?? {};\n // Determine outcome from command results\n // Default to 'Done' if no outcomes specified\n let outcome = 'Done';\n if (Object.keys(outcomes).length > 0) {\n outcome = outcomes['Done'] ? 'Done' : Object.keys(outcomes)[0] || 'Done';\n }\n return {\n output: commandResult?.output ?? null,\n outcome,\n };\n }\n catch (error) {\n console.error(`[ActivityExecutor] ❌ Error evaluating expressions or executing activity:`, error);\n return {\n output: { error: error.message || 'Unknown error' },\n outcome: 'Failed'\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ActivityExecutor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ActivityExecutor, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ActivityExecutor, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZXhlY3V0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvcnVudGltZS9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQW1CckYsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSUUsK0NBQStDO1FBRTlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDNUQsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7S0F3R2xGO0lBdEdDLFlBQVk7SUFFWixzQ0FBc0M7SUFFdEM7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsSUFBcUIsRUFDckIsYUFBd0MsRUFDeEMsZUFBd0Q7UUFHeEQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUV2QyxnREFBZ0Q7WUFDaEQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkMsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsNkNBQTZDO2dCQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNC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ICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93VGFzaywgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlIH0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcbmltcG9ydCB7IFdvcmtmbG93RXhwcmVzc2lvblNjb3BlU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogUmVzdWx0IG9mIGV4ZWN1dGluZyBhIHdvcmtmbG93IGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2aXR5RXhlY3V0aW9uUmVzdWx0IHtcbiAgLyoqXG4gICAqIEFjdGl2aXR5IGV4ZWN1dGlvbiBvdXRwdXQuXG4gICAqL1xuICBvdXRwdXQ6IGFueTtcblxuICAvKipcbiAgICogQWN0aXZpdHkgZXhlY3V0aW9uIG91dGNvbWUgKGUuZy4sICdEb25lJywgJ0NvbmZpcm1lZCcsICdDYW5jZWxsZWQnLCAnRmFpbGVkJykuXG4gICAqL1xuICBvdXRjb21lOiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIEFjdGl2aXR5IEV4ZWN1dG9yIFNlcnZpY2VcbiAqIFxuICogU2VydmljZSBmb3IgZXhlY3V0aW5nIHdvcmtmbG93IGFjdGl2aXRpZXMgdmlhIENvbW1hbmRCdXMuXG4gKiBBdXRvbWF0aWNhbGx5IGV2YWx1YXRlcyBleHByZXNzaW9ucyBpbiBhY3Rpdml0eSBpbnB1dHMgYmVmb3JlIGV4ZWN1dGlvbi5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGV4ZWN1dG9yID0gaW5qZWN0KEFjdGl2aXR5RXhlY3V0b3IpO1xuICogXG4gKiAvLyBFeGVjdXRlIGFjdGl2aXR5IHdpdGggdGFzayBhbmQgd29ya2Zsb3cgc3RhdGUgKGV4cHJlc3Npb25zIHdpbGwgYmUgZXZhbHVhdGVkKVxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZSh0YXNrLCB3b3JrZmxvd1N0YXRlLCBhY3Rpdml0eU91dHB1dHMpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5RXhlY3V0b3Ige1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFNlcnZpY2UgPSBpbmplY3QoQVhQQ29tbWFuZFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25FdmFsdWF0b3IgPSBpbmplY3QoQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25TY29wZVNlcnZpY2UgPSBpbmplY3QoV29ya2Zsb3dFeHByZXNzaW9uU2NvcGVTZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgd29ya2Zsb3cgYWN0aXZpdHkgd2l0aCBleHByZXNzaW9uIGV2YWx1YXRpb24uXG4gICAqIFxuICAgKiBFdmFsdWF0ZXMgZXhwcmVzc2lvbnMgaW4gYWN0aXZpdHkgaW5wdXRzIHVzaW5nIHdvcmtmbG93IHN0YXRlLFxuICAgKiB0aGVuIGV4ZWN1dGVzIHRoZSBhY3Rpdml0eSB2aWEgQ29tbWFuZEJ1cy5cbiAgICogXG4gICAqIEBwYXJhbSB0YXNrIC0gV29ya2Zsb3cgdGFzayBjb250YWluaW5nIGFjdGl2aXR5IGluZm9ybWF0aW9uXG4gICAqIEBwYXJhbSB3b3JrZmxvd1N0YXRlIC0gQ3VycmVudCB3b3JrZmxvdyBpbnN0YW5jZSBzdGF0ZSAoZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbilcbiAgICogQHBhcmFtIGFjdGl2aXR5T3V0cHV0cyAtIE1hcCBvZiBwcmV2aW91cyBhY3Rpdml0eSBvdXRwdXRzIChmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uKVxuICAgKiBAcmV0dXJucyBFeGVjdXRpb24gcmVzdWx0IHdpdGggb3V0cHV0IGFuZCBvdXRjb21lXG4gICAqL1xuICBhc3luYyBleGVjdXRlKFxuICAgIHRhc2s6IEFYUFdvcmtmbG93VGFzayxcbiAgICB3b3JrZmxvd1N0YXRlPzogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICAgIGFjdGl2aXR5T3V0cHV0cz86IE1hcDxzdHJpbmcsIGFueT4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8QWN0aXZpdHlFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWN0aXZpdHlOYW1lID0gdGFzay5hY3Rpdml0eVR5cGU7XG5cbiAgICAgIC8vIEV2YWx1YXRlIGlucHV0cyBpZiB3b3JrZmxvdyBzdGF0ZSBpcyBwcm92aWRlZFxuICAgICAgbGV0IGV2YWx1YXRlZElucHV0cyA9IHRhc2suaW5wdXQgfHwge307XG4gICAgICBpZiAod29ya2Zsb3dTdGF0ZSkge1xuICAgICAgICAvLyBCdWlsZCBleHByZXNzaW9uIHNjb3BlIGZyb20gd29ya2Zsb3cgc3RhdGVcbiAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLmV4cHJlc3Npb25TY29wZVNlcnZpY2UuYnVpbGRTY29wZUZyb21TdGF0ZSh3b3JrZmxvd1N0YXRlLCBhY3Rpdml0eU91dHB1dHMpO1xuICAgICAgICBcbiAgICAgICAgLy8gRXZhbHVhdGUgYWxsIGlucHV0cyByZWN1cnNpdmVseSAoaGFuZGxlcyBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzKVxuICAgICAgICBldmFsdWF0ZWRJbnB1dHMgPSBhd2FpdCB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbHVhdGUodGFzay5pbnB1dCB8fCB7fSwgc2NvcGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBjb21tYW5kIGV4aXN0c1xuICAgICAgY29uc3QgY29tbWFuZEV4aXN0cyA9IHRoaXMuY29tbWFuZFNlcnZpY2UuZXhpc3RzKGFjdGl2aXR5TmFtZSk7XG5cbiAgICAgIGlmICghY29tbWFuZEV4aXN0cykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtBY3Rpdml0eUV4ZWN1dG9yXSDimqDvuI8gQWN0aXZpdHkgJyR7YWN0aXZpdHlOYW1lfScgaXMgbm90IHJlZ2lzdGVyZWQgYXMgQ29tbWFuZC4gYCArXG4gICAgICAgICAgYFNraXBwaW5nIGV4ZWN1dGlvbi5gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdEb25lJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBGbGF0dGVuIHByb3BlcnRpZXMgaWYgbmVzdGVkICh3b3JrZmxvdy1zdHVkaW8gZm9ybWF0KVxuICAgICAgbGV0IGNvbW1hbmRJbnB1dCA9IGV2YWx1YXRlZElucHV0cztcbiAgICAgIGlmIChjb21tYW5kSW5wdXRbJ3Byb3BlcnRpZXMnXSAmJiB0eXBlb2YgY29tbWFuZElucHV0Wydwcm9wZXJ0aWVzJ10gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIEZsYXR0ZW46IHtwcm9wZXJ0aWVzOiB7dGV4dDogXCIuLi5cIn19IC0+IHt0ZXh0OiBcIi4uLlwifVxuICAgICAgICBjb21tYW5kSW5wdXQgPSB7IC4uLmNvbW1hbmRJbnB1dFsncHJvcGVydGllcyddIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEV4ZWN1dGUgYWN0aXZpdHkgdmlhIENvbW1hbmRCdXNcbiAgICAgIC8vIEFjdGl2aXRpZXMgcmVnaXN0ZXJlZCBhcyBBWFBDb21tYW5kIHJldHVybiB7b3V0cHV0LCBvdXRjb21lc31cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tbWFuZFNlcnZpY2UuZXhlY3V0ZTxSZWNvcmQ8c3RyaW5nLCBhbnk+LCB7XG4gICAgICAgIG91dHB1dDogYW55O1xuICAgICAgICBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgIH0+KGFjdGl2aXR5TmFtZSwgY29tbWFuZElucHV0KTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IG51bGwsXG4gICAgICAgICAgb3V0Y29tZTogJ0ZhaWxlZCcsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQubWVzc2FnZT8udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWU6ICdGYWlsZWQnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21tYW5kUmVzdWx0ID0gcmVzdWx0LmRhdGE7XG4gICAgICBjb25zdCBvdXRjb21lcyA9IGNvbW1hbmRSZXN1bHQ/Lm91dGNvbWVzID8/IHt9O1xuXG4gICAgICAvLyBEZXRlcm1pbmUgb3V0Y29tZSBmcm9tIGNvbW1hbmQgcmVzdWx0c1xuICAgICAgLy8gRGVmYXVsdCB0byAnRG9uZScgaWYgbm8gb3V0Y29tZXMgc3BlY2lmaWVkXG4gICAgICBsZXQgb3V0Y29tZSA9ICdEb25lJztcbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdXRjb21lcykubGVuZ3RoID4gMCkge1xuICAgICAgICBvdXRjb21lID0gb3V0Y29tZXNbJ0RvbmUnXSA/ICdEb25lJyA6IE9iamVjdC5rZXlzKG91dGNvbWVzKVswXSB8fCAnRG9uZSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogY29tbWFuZFJlc3VsdD8ub3V0cHV0ID8/IG51bGwsXG4gICAgICAgIG91dGNvbWUsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtBY3Rpdml0eUV4ZWN1dG9yXSDinYwgRXJyb3IgZXZhbHVhdGluZyBleHByZXNzaW9ucyBvciBleGVjdXRpbmcgYWN0aXZpdHk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiB7IGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyB9LFxuICAgICAgICBvdXRjb21lOiAnRmFpbGVkJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { ActivityExecutor } from './activity-executor.service';\nimport { AXP_WORKFLOW_ENGINE } from './workflow-engine';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Workflow Manager - Facade for workflow lifecycle orchestration.\n *\n * This service is the ONLY interface the frontend uses to interact with workflows.\n * It follows Clean Architecture principles and does NOT contain execution or business logic.\n *\n * Responsibilities:\n * - Orchestrate workflow lifecycle (start, execute, complete, resume)\n * - Delegate execution to ActivityExecutor\n * - Cache workflow state in memory\n * - Expose a stable API for UI\n *\n * Rules:\n * - No HTTP calls (delegates to AXPWorkflowEngine)\n * - No CommandBus / Command execution (delegates to ActivityExecutor)\n * - No workflow branching logic (backend decides)\n * - No business validation (backend validates)\n * - No backend assumptions (uses abstract runtime service)\n */\nexport class AXPWorkflowManager {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.workflowEngine = inject(AXP_WORKFLOW_ENGINE);\n this.activityExecutor = inject(ActivityExecutor);\n //#endregion\n //#region ---- State Cache ----\n /**\n * Cache workflow states in memory for quick access.\n * Key: instanceId\n * Value: AXPWorkflowInstanceState\n */\n this.stateCache = new Map();\n /**\n * Cache TTL in milliseconds (5 minutes).\n */\n this.CACHE_TTL = 5 * 60 * 1000;\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Execute frontend activities interactively until reaching human-task or completion.\n *\n * This method handles the interactive flow between frontend and backend:\n * 1. Executes frontend activity (ui-activity)\n * 2. Sends result to backend via frontActivtyComplete\n * 3. If backend returns nextTask (frontend activity), repeats the process\n * 4. Continues until workflow completes or reaches human-task\n *\n * @param instanceId - Workflow instance ID\n * @param task - Current task to execute\n * @param state - Current workflow state\n * @param lastActivityOutput - Last activity output (for expression evaluation)\n * @returns Final result with nextTask (if human-task) or completion status\n */\n async executeInteractiveFlow(instanceId, task, state, lastActivityOutput) {\n // Backend decides what to execute - frontend only executes ui-activity with frontend/both executionMode\n // If backend returns a task that's not executable here, return it as-is\n let currentTask = task;\n let currentState = state;\n const maxIterations = 100; // Prevent infinite loops\n let iterationCount = 0;\n while (currentTask && iterationCount < maxIterations) {\n iterationCount++;\n // Only execute if task is ui-activity with frontend/both executionMode\n // Backend decides if workflow should continue or suspend\n if (currentTask.taskType === 'ui-activity' &&\n (currentTask.executionMode === 'frontend' || currentTask.executionMode === 'both')) {\n // Execute frontend activity\n const execResult = await this.activityExecutor.execute(currentTask, currentState, lastActivityOutput);\n // Send result to backend\n const completeResponse = await this.workflowEngine.frontActivtyComplete({\n instanceId,\n activityNode: currentTask.activityId,\n output: execResult.output || {},\n outcome: execResult.outcome,\n });\n // Update state cache\n if (completeResponse.state) {\n const normalizedState = { ...completeResponse.state };\n if (normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n currentState = normalizedState;\n this.stateCache.set(instanceId, normalizedState);\n }\n // Backend decides: if no nextTask, workflow is completed\n if (!completeResponse.nextTask) {\n return {\n nextTask: null,\n state: currentState,\n output: completeResponse.output,\n };\n }\n // Backend decides: if nextTask is not executable here (human-task or other), return it\n // Backend already set status to 'suspended' if needed\n if (completeResponse.nextTask.taskType !== 'ui-activity' ||\n (completeResponse.nextTask.executionMode !== 'frontend' && completeResponse.nextTask.executionMode !== 'both')) {\n return {\n nextTask: completeResponse.nextTask,\n state: currentState,\n };\n }\n // Continue with next executable frontend task\n currentTask = completeResponse.nextTask;\n lastActivityOutput = execResult.output;\n }\n else {\n // Not a frontend ui-activity - return as-is\n return {\n nextTask: currentTask,\n state: currentState,\n };\n }\n }\n // Max iterations reached\n if (iterationCount >= maxIterations) {\n console.warn(`[AXPWorkflowManager] ⚠️ Maximum iterations (${maxIterations}) reached`);\n }\n return {\n nextTask: currentTask,\n state: currentState,\n };\n }\n /**\n * Start a new workflow instance.\n *\n * Creates a new workflow instance in backend and returns instance ID.\n * Backend decides what to do: returns pendingTask or indicates completion.\n *\n * @param workflowId - Workflow ID to start\n * @param input - Initial input data (optional)\n * @returns Start result with instanceId, state, and nextTask\n *\n * @example\n * ```typescript\n * const result = await workflowManager.start('my-workflow', { userId: '123' });\n *\n * if (result.success && result.nextTask) {\n * // Execute task if frontend\n * if (result.nextTask.executionMode === 'frontend') {\n * const execResult = await workflowManager.execute(result.nextTask);\n * await workflowManager.complete(result.instanceId!, result.nextTask, execResult.outcome, execResult.output);\n * }\n * }\n * ```\n */\n async start(workflowId, input = {}) {\n try {\n const response = await this.workflowEngine.start({\n workflowId,\n input,\n });\n // Cache state (normalize Date)\n let startNormalizedState = { ...response.state };\n if (startNormalizedState.lastUpdated && !(startNormalizedState.lastUpdated instanceof Date)) {\n startNormalizedState.lastUpdated = new Date(startNormalizedState.lastUpdated);\n }\n this.stateCache.set(response.instanceId, startNormalizedState);\n // 🎯 Interactive flow: Execute frontend activities automatically\n // Backend decides what to execute - if pendingTask is executable (ui-activity with frontend/both), execute it\n let finalNextTask = response.pendingTask || null;\n let finalOutput = startNormalizedState.output;\n // If backend returned a task that's executable here (ui-activity with frontend/both), execute it\n if (response.pendingTask &&\n response.pendingTask.taskType === 'ui-activity' &&\n (response.pendingTask.executionMode === 'frontend' || response.pendingTask.executionMode === 'both')) {\n const interactiveResult = await this.executeInteractiveFlow(response.instanceId, response.pendingTask, startNormalizedState, response.lastActivityOutput);\n finalNextTask = interactiveResult.nextTask;\n startNormalizedState = interactiveResult.state;\n if (interactiveResult.output !== undefined) {\n finalOutput = interactiveResult.output;\n }\n // Update cache with final state\n this.stateCache.set(response.instanceId, startNormalizedState);\n }\n // If backend returned null or non-executable task, return it as-is\n // Backend already decided workflow status (suspended, completed, etc.)\n return {\n success: true,\n instanceId: response.instanceId,\n state: startNormalizedState,\n nextTask: finalNextTask,\n output: finalOutput,\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error starting workflow:', error);\n return {\n success: false,\n error: error.message || 'Failed to start workflow',\n };\n }\n }\n /**\n * Resume a suspended workflow (e.g., after user interaction).\n *\n * Backend determines nextStep based on outcome and outcomeConnections.\n * Client only provides instanceId, stepId, outcome, and optional userInput.\n *\n * @param instanceId - Workflow instance ID\n * @param stepId - Step ID that was waiting for user input\n * @param outcome - User action outcome (e.g., 'Confirmed', 'Cancelled', 'Submitted')\n * @param userInput - Optional user input data\n * @param taskToken - Secure task token (required for secure resumption)\n * @returns Resume result with next task (if any)\n */\n async resume(instanceId, stepId, outcome, userInput, taskToken) {\n try {\n // Ensure taskToken is provided for secure resumption\n if (!taskToken) {\n throw new Error('Missing taskToken for resume operation');\n }\n // Backend handles everything: checks outcomeConnections and determines nextStep\n const response = await this.workflowEngine.resume({\n instanceId,\n stepId,\n taskToken,\n outcome,\n userInput,\n });\n // Update cache with state from backend\n let normalizedState = response.state ? { ...response.state } : undefined;\n if (normalizedState && normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n if (normalizedState) {\n this.stateCache.set(instanceId, normalizedState);\n }\n // 🎯 Interactive flow: Execute frontend activities automatically\n // Backend decides what to execute - if nextTask is executable (ui-activity with frontend/both), execute it\n let finalNextTask = response.nextTask || null;\n let finalOutput = response.output;\n // If backend returned a task that's executable here (ui-activity with frontend/both), execute it\n if (response.nextTask &&\n response.nextTask.taskType === 'ui-activity' &&\n (response.nextTask.executionMode === 'frontend' || response.nextTask.executionMode === 'both')) {\n const interactiveResult = await this.executeInteractiveFlow(instanceId, response.nextTask, normalizedState);\n finalNextTask = interactiveResult.nextTask;\n normalizedState = interactiveResult.state;\n if (interactiveResult.output !== undefined) {\n finalOutput = interactiveResult.output;\n }\n // Update cache with final state\n this.stateCache.set(instanceId, normalizedState);\n }\n // If backend returned null or non-executable task, return it as-is\n // Backend already decided workflow status (suspended, completed, etc.)\n return {\n success: true,\n instanceId,\n state: normalizedState || response.state,\n nextTask: finalNextTask,\n output: finalOutput,\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error resuming workflow:', error);\n return {\n success: false,\n instanceId,\n error: error.message || 'Failed to resume workflow',\n };\n }\n }\n /**\n * Get workflow instance state.\n *\n * Retrieves state from cache (if valid) or from backend.\n *\n * @param instanceId - Workflow instance ID\n * @returns Workflow instance state or null if not found\n */\n async getState(instanceId) {\n // Check cache first\n const cached = this.stateCache.get(instanceId);\n if (cached) {\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedCached = { ...cached };\n if (normalizedCached.lastUpdated && !(normalizedCached.lastUpdated instanceof Date)) {\n normalizedCached.lastUpdated = new Date(normalizedCached.lastUpdated);\n }\n // Validate cache age\n const cacheAge = Date.now() - normalizedCached.lastUpdated.getTime();\n if (cacheAge < this.CACHE_TTL) {\n return normalizedCached;\n }\n }\n // Fetch from backend\n try {\n const state = await this.workflowEngine.getState({\n instanceId,\n });\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedState = { ...state };\n if (normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n // Update cache\n this.stateCache.set(instanceId, normalizedState);\n return normalizedState;\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error getting workflow state:', error);\n return null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowManager, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowManager, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQTJCLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBOEd4RCxZQUFZO0FBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUlILE1BQU0sT0FBTyxrQkFBa0I7SUFIL0I7UUFJRSwrQ0FBK0M7UUFFOUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3RCxZQUFZO1FBRVosbUNBQW1DO1FBRW5DOzs7O1dBSUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFFakU7O1dBRUc7UUFDYyxjQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7S0ErVTVDO0lBN1VDLFlBQVk7SUFFWixzQ0FBc0M7SUFFdEM7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSyxLQUFLLENBQUMsc0JBQXNCLENBQ2xDLFVBQWtCLEVBQ2xCLElBQXFCLEVBQ3JCLEtBQStCLEVBQy9CLGtCQUF3QjtRQUV4Qix3R0FBd0c7UUFDeEcsd0VBQXdFO1FBRXhFLElBQUksV0FBVyxHQUEyQixJQUFJLENBQUM7UUFDL0MsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QjtRQUNwRCxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFFdkIsT0FBTyxXQUFXLElBQUksY0FBYyxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ3JELGNBQWMsRUFBRSxDQUFDO1lBRWpCLHVFQUF1RTtZQUN2RSx5REFBeUQ7WUFDekQsSUFDRSxXQUFXLENBQUMsUUFBUSxLQUFLLGFBQWE7Z0JBQ3RDLENBQUMsV0FBVyxDQUFDLGFBQWEsS0FBSyxVQUFVLElBQUksV0FBVyxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsRUFDbEYsQ0FBQztnQkFDRCw0QkFBNEI7Z0JBQzVCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDcEQsV0FBVyxFQUNYLFlBQVksRUFDWixrQkFBa0IsQ0FDbkIsQ0FBQztnQkFFRix5QkFBeUI7Z0JBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDO29CQUN0RSxVQUFVO29CQUNWLFlBQVksRUFBRSxXQUFXLENBQUMsVUFBVTtvQkFDcEMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLElBQUksRUFBRTtvQkFDL0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO2lCQUM1QixDQUFDLENBQUM7Z0JBRUgscUJBQXFCO2dCQUNyQixJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO29CQUMzQixNQUFNLGVBQWUsR0FBRyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3RELElBQUksZUFBZSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLFdBQVcsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNsRixlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDdEUsQ0FBQztvQkFDRCxZQUFZLEdBQUcsZUFBZSxDQUFDO29CQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ25ELENBQUM7Z0JBRUQseURBQXlEO2dCQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQy9CLE9BQU87d0JBQ0wsUUFBUSxFQUFFLElBQUk7d0JBQ2QsS0FBSyxFQUFFLFlBQVk7d0JBQ25CLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO3FCQUNoQyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsdUZBQXVGO2dCQUN2RixzREFBc0Q7Z0JBQ3RELElBQ0UsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxhQUFhO29CQUNwRCxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEtBQUssVUFBVSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLEVBQzlHLENBQUM7b0JBQ0QsT0FBTzt3QkFDTCxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTt3QkFDbkMsS0FBSyxFQUFFLFlBQVk7cUJBQ3BCLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCw4Q0FBOEM7Z0JBQzlDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDekMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDRDQUE0QztnQkFDNUMsT0FBTztvQkFDTCxRQUFRLEVBQUUsV0FBVztvQkFDckIsS0FBSyxFQUFFLFlBQVk7aUJBQ3BCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLGNBQWMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLCtDQUErQyxhQUFhLFdBQVcsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLFdBQVc7WUFDckIsS0FBSyxFQUFFLFlBQVk7U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBa0IsRUFBRSxRQUE2QixFQUFFO1FBQzdELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQy9DLFVBQVU7Z0JBQ1YsS0FBSzthQUNOLENBQUMsQ0FBQztZQUVILCtCQUErQjtZQUMvQixJQUFJLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakQsSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM1RixvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEYsQ0FBQztZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUUvRCxpRUFBaUU7WUFDakUsOEdBQThHO1lBQzlHLElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO1lBQ2pELElBQUksV0FBVyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztZQUU5QyxpR0FBaUc7WUFDakcsSUFDRSxRQUFRLENBQUMsV0FBVztnQkFDcEIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEtBQUssYUFBYTtnQkFDL0MsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsS0FBSyxVQUFVLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLEVBQ3BHLENBQUM7Z0JBQ0QsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FDekQsUUFBUSxDQUFDLFVBQVUsRUFDbkIsUUFBUSxDQUFDLFdBQVcsRUFDcEIsb0JBQW9CLEVBQ3BCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FDNUIsQ0FBQztnQkFFRixhQUFhLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDO2dCQUMzQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7Z0JBQy9DLElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMzQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDO2dCQUN6QyxDQUFDO2dCQUVELGdDQUFnQztnQkFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFDRCxtRUFBbUU7WUFDbkUsdUVBQXVFO1lBRXZFLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO2dCQUMvQixLQUFLLEVBQUUsb0JBQW9CO2dCQUMzQixRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFdBQVc7YUFDcEIsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEUsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSwwQkFBMEI7YUFDbkQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FDVixVQUFrQixFQUNsQixNQUFjLEVBQ2QsT0FBZSxFQUNmLFNBQWUsRUFDZixTQUFrQjtRQUVsQixJQUFJLENBQUM7WUFDSCxxREFBcUQ7WUFDckQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBRUQsZ0ZBQWdGO1lBQ2hGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2hELFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTixTQUFTO2dCQUNULE9BQU87Z0JBQ1AsU0FBUzthQUNWLENBQUMsQ0FBQztZQUVILHVDQUF1QztZQUN2QyxJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekUsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLFdBQVcsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyRyxlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBRUQsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFFRCxpRUFBaUU7WUFDakUsMkdBQTJHO1lBQzNHLElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO1lBQzlDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFFbEMsaUdBQWlHO1lBQ2pHLElBQ0UsUUFBUSxDQUFDLFFBQVE7Z0JBQ2pCLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLGFBQWE7Z0JBQzVDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxFQUM5RixDQUFDO2dCQUNELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQ3pELFVBQVUsRUFDVixRQUFRLENBQUMsUUFBUSxFQUNqQixlQUFnQixDQUNqQixDQUFDO2dCQUVGLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7Z0JBQzNDLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7Z0JBQzFDLElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMzQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDO2dCQUN6QyxDQUFDO2dCQUVELGdDQUFnQztnQkFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxtRUFBbUU7WUFDbkUsdUVBQXVFO1lBRXZFLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsVUFBVTtnQkFDVixLQUFLLEVBQUUsZUFBZSxJQUFJLFFBQVEsQ0FBQyxLQUFLO2dCQUN4QyxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFdBQVc7YUFDcEIsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEUsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxVQUFVO2dCQUNWLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLDJCQUEyQjthQUNwRCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFrQjtRQUMvQixvQkFBb0I7UUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLG1EQUFtRDtZQUNuRCxNQUFNLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxJQUFJLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BGLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4RSxDQUFDO1lBRUQscUJBQXFCO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixPQUFPLGdCQUFnQixDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0JBQy9DLFVBQVU7YUFDWCxDQUFDLENBQUM7WUFFSCxtREFBbUQ7WUFDbkQsTUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3JDLElBQUksZUFBZSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLFdBQVcsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsRixlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBRUQsZUFBZTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUVqRCxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7K0dBaFdVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2aXR5RXhlY3V0aW9uUmVzdWx0LCBBY3Rpdml0eUV4ZWN1dG9yIH0gZnJvbSAnLi9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUF9XT1JLRkxPV19FTkdJTkUgfSBmcm9tICcuL3dvcmtmbG93LWVuZ2luZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUsIEFYUFdvcmtmbG93VGFzayB9IGZyb20gJy4vd29ya2Zsb3ctcnVudGltZS50eXBlcyc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgJiBJbnRlcmZhY2VzICAgLS0tLVxuXG4vKipcbiAqIFJlc3VsdCBvZiBzdGFydGluZyBhIHdvcmtmbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93U3RhcnRSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC5cbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGluc3RhbmNlIElELlxuICAgKi9cbiAgaW5zdGFuY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogSW5pdGlhbCB3b3JrZmxvdyBzdGF0ZS5cbiAgICovXG4gIHN0YXRlPzogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlO1xuXG4gIC8qKlxuICAgKiBGaXJzdCB0YXNrIHRvIGV4ZWN1dGUgKGlmIGFueSkuXG4gICAqL1xuICBuZXh0VGFzaz86IEFYUFdvcmtmbG93VGFzayB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IG91dHB1dCAoaWYgY29tcGxldGVkIGltbWVkaWF0ZWx5KS5cbiAgICovXG4gIG91dHB1dD86IGFueTtcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSAoaWYgZmFpbGVkKS5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjb21wbGV0aW5nIGEgdGFzay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd0NvbXBsZXRlUmVzdWx0IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQuXG4gICAqL1xuICBzdWNjZXNzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBpbnN0YW5jZSBJRC5cbiAgICovXG4gIGluc3RhbmNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVXBkYXRlZCB3b3JrZmxvdyBzdGF0ZS5cbiAgICovXG4gIHN0YXRlPzogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlO1xuXG4gIC8qKlxuICAgKiBOZXh0IHRhc2sgdG8gZXhlY3V0ZSAoaWYgYW55KS5cbiAgICovXG4gIG5leHRUYXNrPzogQVhQV29ya2Zsb3dUYXNrIHwgbnVsbDtcblxuICAvKipcbiAgICogV29ya2Zsb3cgb3V0cHV0IChpZiBjb21wbGV0ZWQpLlxuICAgKi9cbiAgb3V0cHV0PzogYW55O1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIChpZiBmYWlsZWQpLlxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHJlc3VtaW5nIGEgd29ya2Zsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dSZXN1bWVSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC5cbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGluc3RhbmNlIElELlxuICAgKi9cbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIE5leHQgdGFzayB0byBleGVjdXRlIChpZiBhbnkpLlxuICAgKi9cbiAgbmV4dFRhc2s/OiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBvdXRwdXQgKGlmIGNvbXBsZXRlZCkuXG4gICAqL1xuICBvdXRwdXQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgKGlmIGZhaWxlZCkuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogV29ya2Zsb3cgTWFuYWdlciAtIEZhY2FkZSBmb3Igd29ya2Zsb3cgbGlmZWN5Y2xlIG9yY2hlc3RyYXRpb24uXG4gKlxuICogVGhpcyBzZXJ2aWNlIGlzIHRoZSBPTkxZIGludGVyZmFjZSB0aGUgZnJvbnRlbmQgdXNlcyB0byBpbnRlcmFjdCB3aXRoIHdvcmtmbG93cy5cbiAqIEl0IGZvbGxvd3MgQ2xlYW4gQXJjaGl0ZWN0dXJlIHByaW5jaXBsZXMgYW5kIGRvZXMgTk9UIGNvbnRhaW4gZXhlY3V0aW9uIG9yIGJ1c2luZXNzIGxvZ2ljLlxuICpcbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIE9yY2hlc3RyYXRlIHdvcmtmbG93IGxpZmVjeWNsZSAoc3RhcnQsIGV4ZWN1dGUsIGNvbXBsZXRlLCByZXN1bWUpXG4gKiAtIERlbGVnYXRlIGV4ZWN1dGlvbiB0byBBY3Rpdml0eUV4ZWN1dG9yXG4gKiAtIENhY2hlIHdvcmtmbG93IHN0YXRlIGluIG1lbW9yeVxuICogLSBFeHBvc2UgYSBzdGFibGUgQVBJIGZvciBVSVxuICpcbiAqIFJ1bGVzOlxuICogLSBObyBIVFRQIGNhbGxzIChkZWxlZ2F0ZXMgdG8gQVhQV29ya2Zsb3dFbmdpbmUpXG4gKiAtIE5vIENvbW1hbmRCdXMgLyBDb21tYW5kIGV4ZWN1dGlvbiAoZGVsZWdhdGVzIHRvIEFjdGl2aXR5RXhlY3V0b3IpXG4gKiAtIE5vIHdvcmtmbG93IGJyYW5jaGluZyBsb2dpYyAoYmFja2VuZCBkZWNpZGVzKVxuICogLSBObyBidXNpbmVzcyB2YWxpZGF0aW9uIChiYWNrZW5kIHZhbGlkYXRlcylcbiAqIC0gTm8gYmFja2VuZCBhc3N1bXB0aW9ucyAodXNlcyBhYnN0cmFjdCBydW50aW1lIHNlcnZpY2UpXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd01hbmFnZXIge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dFbmdpbmUgPSBpbmplY3QoQVhQX1dPUktGTE9XX0VOR0lORSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZpdHlFeGVjdXRvciA9IGluamVjdChBY3Rpdml0eUV4ZWN1dG9yKTsgXG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBTdGF0ZSBDYWNoZSAgIC0tLS1cblxuICAvKipcbiAgICogQ2FjaGUgd29ya2Zsb3cgc3RhdGVzIGluIG1lbW9yeSBmb3IgcXVpY2sgYWNjZXNzLlxuICAgKiBLZXk6IGluc3RhbmNlSWRcbiAgICogVmFsdWU6IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZT4oKTtcblxuICAvKipcbiAgICogQ2FjaGUgVFRMIGluIG1pbGxpc2Vjb25kcyAoNSBtaW51dGVzKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfVFRMID0gNSAqIDYwICogMTAwMDtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGZyb250ZW5kIGFjdGl2aXRpZXMgaW50ZXJhY3RpdmVseSB1bnRpbCByZWFjaGluZyBodW1hbi10YXNrIG9yIGNvbXBsZXRpb24uXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBpbnRlcmFjdGl2ZSBmbG93IGJldHdlZW4gZnJvbnRlbmQgYW5kIGJhY2tlbmQ6XG4gICAqIDEuIEV4ZWN1dGVzIGZyb250ZW5kIGFjdGl2aXR5ICh1aS1hY3Rpdml0eSlcbiAgICogMi4gU2VuZHMgcmVzdWx0IHRvIGJhY2tlbmQgdmlhIGZyb250QWN0aXZ0eUNvbXBsZXRlXG4gICAqIDMuIElmIGJhY2tlbmQgcmV0dXJucyBuZXh0VGFzayAoZnJvbnRlbmQgYWN0aXZpdHkpLCByZXBlYXRzIHRoZSBwcm9jZXNzXG4gICAqIDQuIENvbnRpbnVlcyB1bnRpbCB3b3JrZmxvdyBjb21wbGV0ZXMgb3IgcmVhY2hlcyBodW1hbi10YXNrXG4gICAqIFxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCAtIFdvcmtmbG93IGluc3RhbmNlIElEXG4gICAqIEBwYXJhbSB0YXNrIC0gQ3VycmVudCB0YXNrIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIHN0YXRlIC0gQ3VycmVudCB3b3JrZmxvdyBzdGF0ZVxuICAgKiBAcGFyYW0gbGFzdEFjdGl2aXR5T3V0cHV0IC0gTGFzdCBhY3Rpdml0eSBvdXRwdXQgKGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24pXG4gICAqIEByZXR1cm5zIEZpbmFsIHJlc3VsdCB3aXRoIG5leHRUYXNrIChpZiBodW1hbi10YXNrKSBvciBjb21wbGV0aW9uIHN0YXR1c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlSW50ZXJhY3RpdmVGbG93KFxuICAgIGluc3RhbmNlSWQ6IHN0cmluZyxcbiAgICB0YXNrOiBBWFBXb3JrZmxvd1Rhc2ssXG4gICAgc3RhdGU6IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZSxcbiAgICBsYXN0QWN0aXZpdHlPdXRwdXQ/OiBhbnlcbiAgKTogUHJvbWlzZTx7IG5leHRUYXNrOiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsOyBzdGF0ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlOyBvdXRwdXQ/OiBhbnkgfT4ge1xuICAgIC8vIEJhY2tlbmQgZGVjaWRlcyB3aGF0IHRvIGV4ZWN1dGUgLSBmcm9udGVuZCBvbmx5IGV4ZWN1dGVzIHVpLWFjdGl2aXR5IHdpdGggZnJvbnRlbmQvYm90aCBleGVjdXRpb25Nb2RlXG4gICAgLy8gSWYgYmFja2VuZCByZXR1cm5zIGEgdGFzayB0aGF0J3Mgbm90IGV4ZWN1dGFibGUgaGVyZSwgcmV0dXJuIGl0IGFzLWlzXG4gICAgXG4gICAgbGV0IGN1cnJlbnRUYXNrOiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsID0gdGFzaztcbiAgICBsZXQgY3VycmVudFN0YXRlID0gc3RhdGU7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDsgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wc1xuICAgIGxldCBpdGVyYXRpb25Db3VudCA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudFRhc2sgJiYgaXRlcmF0aW9uQ291bnQgPCBtYXhJdGVyYXRpb25zKSB7XG4gICAgICBpdGVyYXRpb25Db3VudCsrO1xuXG4gICAgICAvLyBPbmx5IGV4ZWN1dGUgaWYgdGFzayBpcyB1aS1hY3Rpdml0eSB3aXRoIGZyb250ZW5kL2JvdGggZXhlY3V0aW9uTW9kZVxuICAgICAgLy8gQmFja2VuZCBkZWNpZGVzIGlmIHdvcmtmbG93IHNob3VsZCBjb250aW51ZSBvciBzdXNwZW5kXG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnRUYXNrLnRhc2tUeXBlID09PSAndWktYWN0aXZpdHknICYmXG4gICAgICAgIChjdXJyZW50VGFzay5leGVjdXRpb25Nb2RlID09PSAnZnJvbnRlbmQnIHx8IGN1cnJlbnRUYXNrLmV4ZWN1dGlvbk1vZGUgPT09ICdib3RoJylcbiAgICAgICkge1xuICAgICAgICAvLyBFeGVjdXRlIGZyb250ZW5kIGFjdGl2aXR5XG4gICAgICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RXhlY3V0b3IuZXhlY3V0ZShcbiAgICAgICAgICBjdXJyZW50VGFzayxcbiAgICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgICAgbGFzdEFjdGl2aXR5T3V0cHV0XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gU2VuZCByZXN1bHQgdG8gYmFja2VuZFxuICAgICAgICBjb25zdCBjb21wbGV0ZVJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5mcm9udEFjdGl2dHlDb21wbGV0ZSh7XG4gICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICBhY3Rpdml0eU5vZGU6IGN1cnJlbnRUYXNrLmFjdGl2aXR5SWQsXG4gICAgICAgICAgb3V0cHV0OiBleGVjUmVzdWx0Lm91dHB1dCB8fCB7fSxcbiAgICAgICAgICBvdXRjb21lOiBleGVjUmVzdWx0Lm91dGNvbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBzdGF0ZSBjYWNoZVxuICAgICAgICBpZiAoY29tcGxldGVSZXNwb25zZS5zdGF0ZSkge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4uY29tcGxldGVSZXNwb25zZS5zdGF0ZSB9O1xuICAgICAgICAgIGlmIChub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudFN0YXRlID0gbm9ybWFsaXplZFN0YXRlO1xuICAgICAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQoaW5zdGFuY2VJZCwgbm9ybWFsaXplZFN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhY2tlbmQgZGVjaWRlczogaWYgbm8gbmV4dFRhc2ssIHdvcmtmbG93IGlzIGNvbXBsZXRlZFxuICAgICAgICBpZiAoIWNvbXBsZXRlUmVzcG9uc2UubmV4dFRhc2spIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dFRhc2s6IG51bGwsXG4gICAgICAgICAgICBzdGF0ZTogY3VycmVudFN0YXRlLFxuICAgICAgICAgICAgb3V0cHV0OiBjb21wbGV0ZVJlc3BvbnNlLm91dHB1dCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja2VuZCBkZWNpZGVzOiBpZiBuZXh0VGFzayBpcyBub3QgZXhlY3V0YWJsZSBoZXJlIChodW1hbi10YXNrIG9yIG90aGVyKSwgcmV0dXJuIGl0XG4gICAgICAgIC8vIEJhY2tlbmQgYWxyZWFkeSBzZXQgc3RhdHVzIHRvICdzdXNwZW5kZWQnIGlmIG5lZWRlZFxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29tcGxldGVSZXNwb25zZS5uZXh0VGFzay50YXNrVHlwZSAhPT0gJ3VpLWFjdGl2aXR5JyB8fFxuICAgICAgICAgIChjb21wbGV0ZVJlc3BvbnNlLm5leHRUYXNrLmV4ZWN1dGlvbk1vZGUgIT09ICdmcm9udGVuZCcgJiYgY29tcGxldGVSZXNwb25zZS5uZXh0VGFzay5leGVjdXRpb25Nb2RlICE9PSAnYm90aCcpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0VGFzazogY29tcGxldGVSZXNwb25zZS5uZXh0VGFzayxcbiAgICAgICAgICAgIHN0YXRlOiBjdXJyZW50U3RhdGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnRpbnVlIHdpdGggbmV4dCBleGVjdXRhYmxlIGZyb250ZW5kIHRhc2tcbiAgICAgICAgY3VycmVudFRhc2sgPSBjb21wbGV0ZVJlc3BvbnNlLm5leHRUYXNrO1xuICAgICAgICBsYXN0QWN0aXZpdHlPdXRwdXQgPSBleGVjUmVzdWx0Lm91dHB1dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBhIGZyb250ZW5kIHVpLWFjdGl2aXR5IC0gcmV0dXJuIGFzLWlzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmV4dFRhc2s6IGN1cnJlbnRUYXNrLFxuICAgICAgICAgIHN0YXRlOiBjdXJyZW50U3RhdGUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWF4IGl0ZXJhdGlvbnMgcmVhY2hlZFxuICAgIGlmIChpdGVyYXRpb25Db3VudCA+PSBtYXhJdGVyYXRpb25zKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtBWFBXb3JrZmxvd01hbmFnZXJdIOKaoO+4jyBNYXhpbXVtIGl0ZXJhdGlvbnMgKCR7bWF4SXRlcmF0aW9uc30pIHJlYWNoZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dFRhc2s6IGN1cnJlbnRUYXNrLFxuICAgICAgc3RhdGU6IGN1cnJlbnRTdGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IHdvcmtmbG93IGluc3RhbmNlLlxuICAgKlxuICAgKiBDcmVhdGVzIGEgbmV3IHdvcmtmbG93IGluc3RhbmNlIGluIGJhY2tlbmQgYW5kIHJldHVybnMgaW5zdGFuY2UgSUQuXG4gICAqIEJhY2tlbmQgZGVjaWRlcyB3aGF0IHRvIGRvOiByZXR1cm5zIHBlbmRpbmdUYXNrIG9yIGluZGljYXRlcyBjb21wbGV0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gd29ya2Zsb3dJZCAtIFdvcmtmbG93IElEIHRvIHN0YXJ0XG4gICAqIEBwYXJhbSBpbnB1dCAtIEluaXRpYWwgaW5wdXQgZGF0YSAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIFN0YXJ0IHJlc3VsdCB3aXRoIGluc3RhbmNlSWQsIHN0YXRlLCBhbmQgbmV4dFRhc2tcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCB3b3JrZmxvd01hbmFnZXIuc3RhcnQoJ215LXdvcmtmbG93JywgeyB1c2VySWQ6ICcxMjMnIH0pO1xuICAgKlxuICAgKiBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0Lm5leHRUYXNrKSB7XG4gICAqICAgLy8gRXhlY3V0ZSB0YXNrIGlmIGZyb250ZW5kXG4gICAqICAgaWYgKHJlc3VsdC5uZXh0VGFzay5leGVjdXRpb25Nb2RlID09PSAnZnJvbnRlbmQnKSB7XG4gICAqICAgICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dNYW5hZ2VyLmV4ZWN1dGUocmVzdWx0Lm5leHRUYXNrKTtcbiAgICogICAgIGF3YWl0IHdvcmtmbG93TWFuYWdlci5jb21wbGV0ZShyZXN1bHQuaW5zdGFuY2VJZCEsIHJlc3VsdC5uZXh0VGFzaywgZXhlY1Jlc3VsdC5vdXRjb21lLCBleGVjUmVzdWx0Lm91dHB1dCk7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc3RhcnQod29ya2Zsb3dJZDogc3RyaW5nLCBpbnB1dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogUHJvbWlzZTxXb3JrZmxvd1N0YXJ0UmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5zdGFydCh7XG4gICAgICAgIHdvcmtmbG93SWQsXG4gICAgICAgIGlucHV0LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENhY2hlIHN0YXRlIChub3JtYWxpemUgRGF0ZSlcbiAgICAgIGxldCBzdGFydE5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfTtcbiAgICAgIGlmIChzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKHN0YXJ0Tm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KHJlc3BvbnNlLmluc3RhbmNlSWQsIHN0YXJ0Tm9ybWFsaXplZFN0YXRlKTtcblxuICAgICAgLy8g8J+OryBJbnRlcmFjdGl2ZSBmbG93OiBFeGVjdXRlIGZyb250ZW5kIGFjdGl2aXRpZXMgYXV0b21hdGljYWxseVxuICAgICAgLy8gQmFja2VuZCBkZWNpZGVzIHdoYXQgdG8gZXhlY3V0ZSAtIGlmIHBlbmRpbmdUYXNrIGlzIGV4ZWN1dGFibGUgKHVpLWFjdGl2aXR5IHdpdGggZnJvbnRlbmQvYm90aCksIGV4ZWN1dGUgaXRcbiAgICAgIGxldCBmaW5hbE5leHRUYXNrID0gcmVzcG9uc2UucGVuZGluZ1Rhc2sgfHwgbnVsbDtcbiAgICAgIGxldCBmaW5hbE91dHB1dCA9IHN0YXJ0Tm9ybWFsaXplZFN0YXRlLm91dHB1dDtcblxuICAgICAgLy8gSWYgYmFja2VuZCByZXR1cm5lZCBhIHRhc2sgdGhhdCdzIGV4ZWN1dGFibGUgaGVyZSAodWktYWN0aXZpdHkgd2l0aCBmcm9udGVuZC9ib3RoKSwgZXhlY3V0ZSBpdFxuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5wZW5kaW5nVGFzayAmJlxuICAgICAgICByZXNwb25zZS5wZW5kaW5nVGFzay50YXNrVHlwZSA9PT0gJ3VpLWFjdGl2aXR5JyAmJlxuICAgICAgICAocmVzcG9uc2UucGVuZGluZ1Rhc2suZXhlY3V0aW9uTW9kZSA9PT0gJ2Zyb250ZW5kJyB8fCByZXNwb25zZS5wZW5kaW5nVGFzay5leGVjdXRpb25Nb2RlID09PSAnYm90aCcpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVJbnRlcmFjdGl2ZUZsb3coXG4gICAgICAgICAgcmVzcG9uc2UuaW5zdGFuY2VJZCxcbiAgICAgICAgICByZXNwb25zZS5wZW5kaW5nVGFzayxcbiAgICAgICAgICBzdGFydE5vcm1hbGl6ZWRTdGF0ZSxcbiAgICAgICAgICByZXNwb25zZS5sYXN0QWN0aXZpdHlPdXRwdXRcbiAgICAgICAgKTtcblxuICAgICAgICBmaW5hbE5leHRUYXNrID0gaW50ZXJhY3RpdmVSZXN1bHQubmV4dFRhc2s7XG4gICAgICAgIHN0YXJ0Tm9ybWFsaXplZFN0YXRlID0gaW50ZXJhY3RpdmVSZXN1bHQuc3RhdGU7XG4gICAgICAgIGlmIChpbnRlcmFjdGl2ZVJlc3VsdC5vdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbmFsT3V0cHV0ID0gaW50ZXJhY3RpdmVSZXN1bHQub3V0cHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGNhY2hlIHdpdGggZmluYWwgc3RhdGVcbiAgICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChyZXNwb25zZS5pbnN0YW5jZUlkLCBzdGFydE5vcm1hbGl6ZWRTdGF0ZSk7XG4gICAgICB9XG4gICAgICAvLyBJZiBiYWNrZW5kIHJldHVybmVkIG51bGwgb3Igbm9uLWV4ZWN1dGFibGUgdGFzaywgcmV0dXJuIGl0IGFzLWlzXG4gICAgICAvLyBCYWNrZW5kIGFscmVhZHkgZGVjaWRlZCB3b3JrZmxvdyBzdGF0dXMgKHN1c3BlbmRlZCwgY29tcGxldGVkLCBldGMuKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBpbnN0YW5jZUlkOiByZXNwb25zZS5pbnN0YW5jZUlkLFxuICAgICAgICBzdGF0ZTogc3RhcnROb3JtYWxpemVkU3RhdGUsXG4gICAgICAgIG5leHRUYXNrOiBmaW5hbE5leHRUYXNrLFxuICAgICAgICBvdXRwdXQ6IGZpbmFsT3V0cHV0LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQVhQV29ya2Zsb3dNYW5hZ2VyXSDinYwgRXJyb3Igc3RhcnRpbmcgd29ya2Zsb3c6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc3RhcnQgd29ya2Zsb3cnLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIGEgc3VzcGVuZGVkIHdvcmtmbG93IChlLmcuLCBhZnRlciB1c2VyIGludGVyYWN0aW9uKS5cbiAgICpcbiAgICogQmFja2VuZCBkZXRlcm1pbmVzIG5leHRTdGVwIGJhc2VkIG9uIG91dGNvbWUgYW5kIG91dGNvbWVDb25uZWN0aW9ucy5cbiAgICogQ2xpZW50IG9ubHkgcHJvdmlkZXMgaW5zdGFuY2VJZCwgc3RlcElkLCBvdXRjb21lLCBhbmQgb3B0aW9uYWwgdXNlcklucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCAtIFdvcmtmbG93IGluc3RhbmNlIElEXG4gICAqIEBwYXJhbSBzdGVwSWQgLSBTdGVwIElEIHRoYXQgd2FzIHdhaXRpbmcgZm9yIHVzZXIgaW5wdXRcbiAgICogQHBhcmFtIG91dGNvbWUgLSBVc2VyIGFjdGlvbiBvdXRjb21lIChlLmcuLCAnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCcsICdTdWJtaXR0ZWQnKVxuICAgKiBAcGFyYW0gdXNlcklucHV0IC0gT3B0aW9uYWwgdXNlciBpbnB1dCBkYXRhXG4gICAqIEBwYXJhbSB0YXNrVG9rZW4gLSBTZWN1cmUgdGFzayB0b2tlbiAocmVxdWlyZWQgZm9yIHNlY3VyZSByZXN1bXB0aW9uKVxuICAgKiBAcmV0dXJucyBSZXN1bWUgcmVzdWx0IHdpdGggbmV4dCB0YXNrIChpZiBhbnkpXG4gICAqL1xuICBhc3luYyByZXN1bWUoXG4gICAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIG91dGNvbWU6IHN0cmluZyxcbiAgICB1c2VySW5wdXQ/OiBhbnksXG4gICAgdGFza1Rva2VuPzogc3RyaW5nLFxuICApOiBQcm9taXNlPFdvcmtmbG93UmVzdW1lUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSB0YXNrVG9rZW4gaXMgcHJvdmlkZWQgZm9yIHNlY3VyZSByZXN1bXB0aW9uXG4gICAgICBpZiAoIXRhc2tUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdGFza1Rva2VuIGZvciByZXN1bWUgb3BlcmF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJhY2tlbmQgaGFuZGxlcyBldmVyeXRoaW5nOiBjaGVja3Mgb3V0Y29tZUNvbm5lY3Rpb25zIGFuZCBkZXRlcm1pbmVzIG5leHRTdGVwXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud29ya2Zsb3dFbmdpbmUucmVzdW1lKHtcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgc3RlcElkLFxuICAgICAgICB0YXNrVG9rZW4sXG4gICAgICAgIG91dGNvbWUsXG4gICAgICAgIHVzZXJJbnB1dCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGRhdGUgY2FjaGUgd2l0aCBzdGF0ZSBmcm9tIGJhY2tlbmRcbiAgICAgIGxldCBub3JtYWxpemVkU3RhdGUgPSByZXNwb25zZS5zdGF0ZSA/IHsgLi4ucmVzcG9uc2Uuc3RhdGUgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChub3JtYWxpemVkU3RhdGUgJiYgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkICYmICEobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgbm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZSkge1xuICAgICAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KGluc3RhbmNlSWQsIG5vcm1hbGl6ZWRTdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIPCfjq8gSW50ZXJhY3RpdmUgZmxvdzogRXhlY3V0ZSBmcm9udGVuZCBhY3Rpdml0aWVzIGF1dG9tYXRpY2FsbHlcbiAgICAgIC8vIEJhY2tlbmQgZGVjaWRlcyB3aGF0IHRvIGV4ZWN1dGUgLSBpZiBuZXh0VGFzayBpcyBleGVjdXRhYmxlICh1aS1hY3Rpdml0eSB3aXRoIGZyb250ZW5kL2JvdGgpLCBleGVjdXRlIGl0XG4gICAgICBsZXQgZmluYWxOZXh0VGFzayA9IHJlc3BvbnNlLm5leHRUYXNrIHx8IG51bGw7XG4gICAgICBsZXQgZmluYWxPdXRwdXQgPSByZXNwb25zZS5vdXRwdXQ7XG5cbiAgICAgIC8vIElmIGJhY2tlbmQgcmV0dXJuZWQgYSB0YXNrIHRoYXQncyBleGVjdXRhYmxlIGhlcmUgKHVpLWFjdGl2aXR5IHdpdGggZnJvbnRlbmQvYm90aCksIGV4ZWN1dGUgaXRcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UubmV4dFRhc2sgJiZcbiAgICAgICAgcmVzcG9uc2UubmV4dFRhc2sudGFza1R5cGUgPT09ICd1aS1hY3Rpdml0eScgJiZcbiAgICAgICAgKHJlc3BvbnNlLm5leHRUYXNrLmV4ZWN1dGlvbk1vZGUgPT09ICdmcm9udGVuZCcgfHwgcmVzcG9uc2UubmV4dFRhc2suZXhlY3V0aW9uTW9kZSA9PT0gJ2JvdGgnKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlUmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlSW50ZXJhY3RpdmVGbG93KFxuICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgICAgcmVzcG9uc2UubmV4dFRhc2ssXG4gICAgICAgICAgbm9ybWFsaXplZFN0YXRlIVxuICAgICAgICApO1xuXG4gICAgICAgIGZpbmFsTmV4dFRhc2sgPSBpbnRlcmFjdGl2ZVJlc3VsdC5uZXh0VGFzaztcbiAgICAgICAgbm9ybWFsaXplZFN0YXRlID0gaW50ZXJhY3RpdmVSZXN1bHQuc3RhdGU7XG4gICAgICAgIGlmIChpbnRlcmFjdGl2ZVJlc3VsdC5vdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbmFsT3V0cHV0ID0gaW50ZXJhY3RpdmVSZXN1bHQub3V0cHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGNhY2hlIHdpdGggZmluYWwgc3RhdGVcbiAgICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBub3JtYWxpemVkU3RhdGUpO1xuICAgICAgfVxuICAgICAgLy8gSWYgYmFja2VuZCByZXR1cm5lZCBudWxsIG9yIG5vbi1leGVjdXRhYmxlIHRhc2ssIHJldHVybiBpdCBhcy1pc1xuICAgICAgLy8gQmFja2VuZCBhbHJlYWR5IGRlY2lkZWQgd29ya2Zsb3cgc3RhdHVzIChzdXNwZW5kZWQsIGNvbXBsZXRlZCwgZXRjLilcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgc3RhdGU6IG5vcm1hbGl6ZWRTdGF0ZSB8fCByZXNwb25zZS5zdGF0ZSxcbiAgICAgICAgbmV4dFRhc2s6IGZpbmFsTmV4dFRhc2ssXG4gICAgICAgIG91dHB1dDogZmluYWxPdXRwdXQsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciByZXN1bWluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byByZXN1bWUgd29ya2Zsb3cnLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdvcmtmbG93IGluc3RhbmNlIHN0YXRlLlxuICAgKlxuICAgKiBSZXRyaWV2ZXMgc3RhdGUgZnJvbSBjYWNoZSAoaWYgdmFsaWQpIG9yIGZyb20gYmFja2VuZC5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgLSBXb3JrZmxvdyBpbnN0YW5jZSBJRFxuICAgKiBAcmV0dXJucyBXb3JrZmxvdyBpbnN0YW5jZSBzdGF0ZSBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdGUoaW5zdGFuY2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfCBudWxsPiB7XG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnN0YXRlQ2FjaGUuZ2V0KGluc3RhbmNlSWQpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgY29uc3Qgbm9ybWFsaXplZENhY2hlZCA9IHsgLi4uY2FjaGVkIH07XG4gICAgICBpZiAobm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCAmJiAhKG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkQ2FjaGVkLmxhc3RVcGRhdGVkID0gbmV3IERhdGUobm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGNhY2hlIGFnZVxuICAgICAgY29uc3QgY2FjaGVBZ2UgPSBEYXRlLm5vdygpIC0gbm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZC5nZXRUaW1lKCk7XG4gICAgICBpZiAoY2FjaGVBZ2UgPCB0aGlzLkNBQ0hFX1RUTCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZENhY2hlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGZXRjaCBmcm9tIGJhY2tlbmRcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLndvcmtmbG93RW5naW5lLmdldFN0YXRlKHtcbiAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBOb3JtYWxpemUgbGFzdFVwZGF0ZWQgdG8gRGF0ZSAoZm9yIGNhY2hlIHNhZmV0eSlcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgICAgIGlmIChub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQoaW5zdGFuY2VJZCwgbm9ybWFsaXplZFN0YXRlKTtcblxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRTdGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQVhQV29ya2Zsb3dNYW5hZ2VyXSDinYwgRXJyb3IgZ2V0dGluZyB3b3JrZmxvdyBzdGF0ZTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const AXP_WORKFLOW_PROVIDER = new InjectionToken('AXP_WORKFLOW_PROVIDER', {\n factory: () => [],\n});\nexport const AXP_WORKFLOW_CATEGORY_PROVIDER = new InjectionToken('AXP_WORKFLOW_CATEGORY_PROVIDER', {\n factory: () => [],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMkIvQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsdUJBQXVCLEVBQUU7SUFDekcsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDO0FBdUJILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUFxQyxnQ0FBZ0MsRUFBRTtJQUNuSSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5cbi8qKlxuICogV29ya2Zsb3cgQ2F0ZWdvcnkgLSBFeHRlbmRzIEFYUENhdGVnb3J5RW50aXR5IGZvciBjb25zaXN0ZW5jeSBhbmQgcGVyZm9ybWFuY2VcbiAqIFxuICogSW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBBWFBDYXRlZ29yeUVudGl0eTpcbiAqIC0gaWQ6IHN0cmluZyAgICAgICAgICAgICAgICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyXG4gKiAtIHRpdGxlOiBzdHJpbmcgICAgICAgICAgICAgICAgLSBEaXNwbGF5IG5hbWVcbiAqIC0gZGVzY3JpcHRpb24/OiBzdHJpbmcgICAgICAgICAtIENhdGVnb3J5IGRlc2NyaXB0aW9uXG4gKiAtIHBhcmVudElkPzogc3RyaW5nICAgICAgICAgICAgLSBQYXJlbnQgY2F0ZWdvcnkgSURcbiAqIC0gY2hpbGRyZW5Db3VudDogbnVtYmVyICAgICAgICAtIERpcmVjdCBjaGlsZCBjYXRlZ29yaWVzIGNvdW50IChlbmFibGVzIGxhenkgbG9hZGluZylcbiAqIC0gaXRlbXNDb3VudD86IG51bWJlciAgICAgICAgICAtIERpcmVjdCB3b3JrZmxvd3MgY291bnRcbiAqIC0gdG90YWxDaGlsZHJlbkNvdW50PzogbnVtYmVyICAtIFRvdGFsIG5lc3RlZCBjYXRlZ29yaWVzIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqIC0gdG90YWxJdGVtc0NvdW50PzogbnVtYmVyICAgICAtIFRvdGFsIHdvcmtmbG93cyBpbiB0cmVlIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NhdGVnb3J5IGV4dGVuZHMgQVhQQ2F0ZWdvcnlFbnRpdHkge1xuICAgIC8vIE5vIGFkZGl0aW9uYWwgcHJvcGVydGllcyBuZWVkZWQgLSBhbGwgaW5oZXJpdGVkIGZyb20gQVhQQ2F0ZWdvcnlFbnRpdHlcbiAgICAvLyBVc2U6IGNoaWxkcmVuQ291bnQgaW5zdGVhZCBvZiBoYXNDaGlsZFxuICAgIC8vIFVzZTogaXRlbXNDb3VudCBpbnN0ZWFkIG9mIGhhc1dvcmtmbG93XG59XG5cbmV4cG9ydCB0eXBlIEFYUFdvcmtmbG93UHJvdmlkZXJUb2tlbiA9XG4gICAgfCBBWFBXb3JrZmxvd1Byb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUFdvcmtmbG93UHJvdmlkZXI+O1xuXG5leHBvcnQgY29uc3QgQVhQX1dPUktGTE9XX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPEFYUFdvcmtmbG93UHJvdmlkZXJUb2tlbltdPignQVhQX1dPUktGTE9XX1BST1ZJREVSJywge1xuICAgIGZhY3Rvcnk6ICgpID0+IFtdLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dQcm92aWRlciB7XG4gICAgLyoqXG4gICAgICogR2V0IGxpc3Qgb2Ygd29ya2Zsb3cgZGVmaW5pdGlvbnMgZm9yIGEgY2F0ZWdvcnkuXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBmaWx0ZXIgd29ya2Zsb3dzXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiB3b3JrZmxvdyBkZWZpbml0aW9uIGFycmF5XG4gICAgICovXG4gICAgZ2V0TGlzdChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPjtcbiAgICBcbiAgICAvKipcbiAgICAgKiBHZXQgZnVsbCB3b3JrZmxvdyBkZWZpbml0aW9uIGJ5IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyKS5cbiAgICAgKiBVc2VkIGJ5IHdvcmtmbG93IGVuZ2luZXMgZm9yIGV4ZWN1dGlvbiBhbmQgVUkgZm9yIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gV29ya2Zsb3cgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBmdWxsIHdvcmtmbG93IGRlZmluaXRpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCBudWxsPjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyVG9rZW4gPVxuICAgIHwgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyVG9rZW5bXT4oJ0FYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUicsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPjtcbiAgICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+O1xufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXP_WORKFLOW_PROVIDER, } from '../workflow/workflow-definition.provider';\nimport { AXPActivityDefinitionService } from '../activity/activity-definition.service';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Local engine implementation that manages workflow progression and state.\n *\n * This engine:\n * - Returns frontend/both activities as pendingTask (does NOT execute them)\n * - Skips backend activities (does not error, continues execution)\n * - Maintains workflow state in memory\n * - Does not require backend API calls\n *\n * Execution of frontend tasks is handled by AXPWorkflowManager via ActivityExecutor.\n * This engine only manages workflow progression and state storage.\n *\n * This is the DEFAULT engine provider. Applications can override it with\n * an API-based engine implementation.\n */\nexport class AXPWorkflowLocalEngine {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.activityDefinitionService = inject(AXPActivityDefinitionService);\n this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Instance Storage ----\n /**\n * In-memory storage for workflow instances.\n * Key: instanceId\n * Value: LocalWorkflowState\n */\n this.instances = new Map();\n /**\n * Task token storage for secure resume operations.\n * Key: taskToken\n * Value: { instanceId, activityId }\n */\n this.taskTokens = new Map();\n }\n //#endregion\n //#region ---- Public Methods (AXPWorkflowEngine) ----\n /**\n * Start a new workflow instance.\n *\n * Creates an in-memory workflow instance and progresses it.\n * Frontend/both activities are returned as pendingTask for external execution.\n * Backend activities are skipped.\n */\n async start(request) {\n console.log(`[WorkflowLocalEngine] 🚀 Starting workflow: ${request.workflowId}`, request);\n // Generate instance ID\n const instanceId = AXPDataGenerator.uuid();\n const now = new Date();\n // Load workflow definition\n console.log(`[WorkflowLocalEngine] 📥 Loading workflow definition: ${request.workflowId}`);\n const definition = await this.getDefinition(request.workflowId);\n if (!definition) {\n console.error(`[WorkflowLocalEngine] ❌ Workflow definition not found: ${request.workflowId}`);\n throw new Error(`Workflow definition not found: ${request.workflowId}`);\n }\n console.log(`[WorkflowLocalEngine] ✅ Definition loaded:`, {\n name: definition.name,\n activitiesCount: definition.graph?.activities?.length || 0,\n connectionsCount: definition.graph?.connections?.length || 0,\n });\n // Initialize workflow state\n const state = {\n instanceId,\n workflowId: request.workflowId,\n status: 'running',\n variables: {},\n input: request.input || {},\n output: undefined,\n lastUpdated: now,\n };\n // Create local state\n const localState = {\n instanceId,\n workflowId: request.workflowId,\n definition,\n state,\n completedActivities: new Set(),\n activityResults: new Map(),\n };\n // Store instance\n this.instances.set(instanceId, localState);\n // Execute workflow steps\n console.log(`[WorkflowLocalEngine] ⚙️ Executing workflow steps...`);\n const pendingTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n console.log(`[WorkflowLocalEngine] ✅ Workflow started:`, {\n instanceId,\n status: localState.state.status,\n hasPendingTask: !!pendingTask,\n pendingTaskType: pendingTask?.activityType,\n });\n return {\n instanceId,\n state: localState.state,\n pendingTask: pendingTask || null,\n };\n }\n /**\n * Resume a suspended workflow instance.\n *\n * Validates task token, applies externally executed result,\n * and continues progressing workflow steps.\n */\n async resume(request) {\n // Validate task token\n const tokenInfo = this.taskTokens.get(request.taskToken);\n if (!tokenInfo || tokenInfo.instanceId !== request.instanceId || tokenInfo.activityId !== request.stepId) {\n throw new Error('Invalid task token');\n }\n // Get instance\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Store activity result (from external execution)\n localState.activityResults.set(request.stepId, {\n output: request.userInput || {},\n outcome: request.outcome,\n });\n localState.completedActivities.add(request.stepId);\n // Merge output/userInput into state variables\n if (request.userInput) {\n localState.state.variables = {\n ...localState.state.variables,\n ...(request.userInput || {}),\n };\n }\n // Mark activity as completed and continue progression\n // Continue progressing workflow steps (skipping backend activities)\n const nextTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n // Determine final status\n if (!nextTask && localState.state.status === 'running') {\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n }\n return {\n output: request.userInput || {},\n outcomes: { [request.outcome]: true },\n state: localState.state,\n nextTask: nextTask || null,\n };\n }\n /**\n * Get current workflow instance state.\n */\n async getState(request) {\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Normalize lastUpdated to Date (for cache safety)\n const state = { ...localState.state };\n if (state.lastUpdated && !(state.lastUpdated instanceof Date)) {\n state.lastUpdated = new Date(state.lastUpdated);\n }\n return state;\n }\n //#endregion\n //#region ---- Private Methods ----\n /**\n * Get workflow definition from available providers.\n */\n async getDefinition(workflowId) {\n // Try all providers in order\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value) {\n const provider = p.value;\n // Check if provider has getByName method\n if (typeof provider.getByName === 'function') {\n try {\n const definition = await provider.getByName(workflowId);\n if (definition) {\n return definition;\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n }\n return null;\n }\n /**\n * Progress workflow steps starting from the current position.\n *\n * For frontend/both activities: returns task immediately (suspends workflow).\n * For backend activities: skips and continues.\n *\n * Returns the next pending task (if frontend activity found) or null (if completed).\n */\n async executeWorkflowSteps(localState) {\n const graph = localState.definition.graph;\n const activities = graph.activities || [];\n const connections = graph.connections || [];\n // Build activity map\n const activityMap = new Map();\n activities.forEach(activity => {\n activityMap.set(activity.id, activity);\n });\n // Build connection graph\n const outgoingConnections = new Map();\n const incomingConnections = new Map();\n connections.forEach(conn => {\n const sourceId = conn.source.activtyName;\n const targetId = conn.target.activtyName;\n if (!outgoingConnections.has(sourceId)) {\n outgoingConnections.set(sourceId, []);\n }\n outgoingConnections.get(sourceId).push(conn);\n if (!incomingConnections.has(targetId)) {\n incomingConnections.set(targetId, []);\n }\n incomingConnections.get(targetId).push(conn);\n });\n // Find starting activity (use startActivityId or no incoming connections, or first activity)\n let currentActivityId = localState.currentActivityId;\n if (!currentActivityId) {\n // Use startActivityId if available\n if (graph.startActivityId) {\n currentActivityId = graph.startActivityId;\n }\n else {\n // Find root activity (no incoming connections)\n for (const activity of activities) {\n if (!incomingConnections.has(activity.id)) {\n currentActivityId = activity.id;\n break;\n }\n }\n // If no root found, use first activity\n if (!currentActivityId && activities.length > 0) {\n currentActivityId = activities[0].id;\n }\n }\n }\n // Execute workflow steps\n while (currentActivityId) {\n const activity = activityMap.get(currentActivityId);\n if (!activity) {\n break;\n }\n // Skip if already completed\n if (localState.completedActivities.has(currentActivityId)) {\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n continue;\n }\n // Get activity definition to retrieve executionMode and title\n console.log(`[WorkflowLocalEngine] 🔍 Getting activity definition for: ${activity.name}`);\n const activityDefinition = await this.activityDefinitionService.getActivityByName(activity.name);\n console.log(`[WorkflowLocalEngine] 📋 Activity definition:`, {\n name: activityDefinition?.name,\n type: activityDefinition?.type,\n executionMode: activityDefinition?.executionMode,\n title: activityDefinition?.title,\n found: !!activityDefinition,\n });\n const executionMode = activityDefinition?.executionMode || 'frontend';\n const activityTitle = activityDefinition?.title;\n // Handle backend activities: skip\n if (executionMode === 'backend') {\n console.log(`[WorkflowLocalEngine] ⏭️ Skipping backend activity: ${activity.name} (${activity.id})`);\n localState.completedActivities.add(currentActivityId);\n localState.activityResults.set(currentActivityId, {\n output: null,\n outcome: 'Done',\n });\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n continue;\n }\n // Handle frontend/both activities: return as pendingTask (do NOT execute)\n if (executionMode === 'frontend' || executionMode === 'both') {\n // Create task for external execution\n // Note: Expression evaluation will be done by ActivityExecutor\n const task = {\n taskToken: AXPDataGenerator.uuid(),\n activityId: activity.id,\n activityType: activity.name,\n activityName: activityTitle || undefined,\n executionMode: executionMode,\n input: activity.inputs || {}, // Pass raw inputs - executor will evaluate\n config: activity.customProperties || {},\n };\n // Store task token for secure resume\n this.taskTokens.set(task.taskToken, {\n instanceId: localState.instanceId,\n activityId: activity.id,\n });\n // Update state to indicate suspension\n localState.currentActivityId = currentActivityId;\n localState.state.status = 'suspended';\n localState.state.currentStepId = currentActivityId;\n // Return task immediately - AXPWorkflowManager will execute it\n return task;\n }\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n }\n // Workflow completed\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n localState.currentActivityId = undefined;\n return null;\n }\n /**\n * Get next activity ID based on connections and outcomes.\n */\n getNextActivityId(currentActivityId, outgoingConnections, activityResults) {\n const connections = outgoingConnections.get(currentActivityId) || [];\n if (connections.length === 0) {\n return null; // No outgoing connections - workflow ends\n }\n // Get current activity result\n const result = activityResults.get(currentActivityId);\n const outcome = result?.outcome || 'Done';\n // Find connection matching outcome\n // Outcome matching is typically done via port name (e.g., \"Done\", \"Failed\")\n for (const conn of connections) {\n const sourcePort = conn.source.port || 'Done';\n if (sourcePort === outcome) {\n return conn.target.activtyName;\n }\n }\n // If no matching outcome, use first connection (default path)\n if (connections.length > 0) {\n return connections[0].target.activtyName;\n }\n return null;\n }\n async frontActivtyComplete(request) {\n return {};\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowLocalEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowLocalEngine }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowLocalEngine, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbG9jYWwtZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWxvY2FsLWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW1CbkQsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWlCekQsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQURuQztRQUVFLCtDQUErQztRQUU5Qiw4QkFBeUIsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNqRSxzQkFBaUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFN0YsWUFBWTtRQUVaLHdDQUF3QztRQUV4Qzs7OztXQUlHO1FBQ0ssY0FBUyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBRTFEOzs7O1dBSUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXNELENBQUM7S0E4WHBGO0lBNVhDLFlBQVk7SUFFWiwwREFBMEQ7SUFFMUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFnQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUYsdUJBQXVCO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLGdCQUFn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LG1CQUFpRCxFQUNqRCxlQUE4RDtRQUU5RCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLENBQUMsMENBQTBDO1FBQ3pELENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDO1FBRTFDLG1DQUFtQztRQUNuQyw0RUFBNEU7UUFDNUUsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7WUFDOUMsSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDM0MsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxPQUF3QztRQUNsRSxPQUFPLEVBQUUsQ0FBQztJQUNYLENBQUM7K0dBaFpVLHNCQUFzQjttSEFBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0VuZ2luZSB9IGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJztcbmltcG9ydCB7XG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXF1ZXN0LFxuICBBWFBTdGFydFdvcmtmbG93UmVzcG9uc2UsXG4gIEFYUFJlc3VtZVdvcmtmbG93UmVxdWVzdCxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQR2V0V29ya2Zsb3dTdGF0ZVJlcXVlc3QsXG4gIEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZSxcbiAgQVhQV29ya2Zsb3dUYXNrLFxuICBBWFBGcm9udEFjdGl2aXR5Q29tcGxldGVSZXF1ZXN0LFxuICBBWFBGcm9udEFjdGl2aXR5Q29tcGxldGVSZXNwb25zZSxcbn0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcbmltcG9ydCB7XG4gIEFYUFdvcmtmbG93RGVmaW5pdGlvbixcbiAgQVhQV29ya2Zsb3dHcmFwaCxcbiAgQVhQV29ya2Zsb3dBY3Rpdml0eUluc3RhbmNlLFxuICBBWFBDb25uZWN0aW9uLFxufSBmcm9tICcuLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcbmltcG9ydCB7XG4gIEFYUF9XT1JLRkxPV19QUk9WSURFUixcbiAgQVhQV29ya2Zsb3dQcm92aWRlcixcbn0gZnJvbSAnLi4vd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYWN0aXZpdHkvYWN0aXZpdHktZGVmaW5pdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUERhdGFHZW5lcmF0b3IgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICYgSW50ZXJmYWNlcyAgIC0tLS1cblxuLyoqXG4gKiBJbnRlcm5hbCB3b3JrZmxvdyBleGVjdXRpb24gc3RhdGUuXG4gKi9cbmludGVyZmFjZSBMb2NhbFdvcmtmbG93U3RhdGUge1xuICBpbnN0YW5jZUlkOiBzdHJpbmc7XG4gIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgZGVmaW5pdGlvbjogQVhQV29ya2Zsb3dEZWZpbml0aW9uO1xuICBzdGF0ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlO1xuICBjdXJyZW50QWN0aXZpdHlJZD86IHN0cmluZztcbiAgY29tcGxldGVkQWN0aXZpdGllczogU2V0PHN0cmluZz47XG4gIGFjdGl2aXR5UmVzdWx0czogTWFwPHN0cmluZywgeyBvdXRwdXQ6IGFueTsgb3V0Y29tZTogc3RyaW5nIH0+O1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBMb2NhbCBlbmdpbmUgaW1wbGVtZW50YXRpb24gdGhhdCBtYW5hZ2VzIHdvcmtmbG93IHByb2dyZXNzaW9uIGFuZCBzdGF0ZS5cbiAqIFxuICogVGhpcyBlbmdpbmU6XG4gKiAtIFJldHVybnMgZnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzIGFzIHBlbmRpbmdUYXNrIChkb2VzIE5PVCBleGVjdXRlIHRoZW0pXG4gKiAtIFNraXBzIGJhY2tlbmQgYWN0aXZpdGllcyAoZG9lcyBub3QgZXJyb3IsIGNvbnRpbnVlcyBleGVjdXRpb24pXG4gKiAtIE1haW50YWlucyB3b3JrZmxvdyBzdGF0ZSBpbiBtZW1vcnlcbiAqIC0gRG9lcyBub3QgcmVxdWlyZSBiYWNrZW5kIEFQSSBjYWxsc1xuICogXG4gKiBFeGVjdXRpb24gb2YgZnJvbnRlbmQgdGFza3MgaXMgaGFuZGxlZCBieSBBWFBXb3JrZmxvd01hbmFnZXIgdmlhIEFjdGl2aXR5RXhlY3V0b3IuXG4gKiBUaGlzIGVuZ2luZSBvbmx5IG1hbmFnZXMgd29ya2Zsb3cgcHJvZ3Jlc3Npb24gYW5kIHN0YXRlIHN0b3JhZ2UuXG4gKiBcbiAqIFRoaXMgaXMgdGhlIERFRkFVTFQgZW5naW5lIHByb3ZpZGVyLiBBcHBsaWNhdGlvbnMgY2FuIG92ZXJyaWRlIGl0IHdpdGhcbiAqIGFuIEFQSS1iYXNlZCBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd0xvY2FsRW5naW5lIGltcGxlbWVudHMgQVhQV29ya2Zsb3dFbmdpbmUge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSA9IGluamVjdChBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd1Byb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBJbnN0YW5jZSBTdG9yYWdlICAgLS0tLVxuXG4gIC8qKlxuICAgKiBJbi1tZW1vcnkgc3RvcmFnZSBmb3Igd29ya2Zsb3cgaW5zdGFuY2VzLlxuICAgKiBLZXk6IGluc3RhbmNlSWRcbiAgICogVmFsdWU6IExvY2FsV29ya2Zsb3dTdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YW5jZXMgPSBuZXcgTWFwPHN0cmluZywgTG9jYWxXb3JrZmxvd1N0YXRlPigpO1xuXG4gIC8qKlxuICAgKiBUYXNrIHRva2VuIHN0b3JhZ2UgZm9yIHNlY3VyZSByZXN1bWUgb3BlcmF0aW9ucy5cbiAgICogS2V5OiB0YXNrVG9rZW5cbiAgICogVmFsdWU6IHsgaW5zdGFuY2VJZCwgYWN0aXZpdHlJZCB9XG4gICAqL1xuICBwcml2YXRlIHRhc2tUb2tlbnMgPSBuZXcgTWFwPHN0cmluZywgeyBpbnN0YW5jZUlkOiBzdHJpbmc7IGFjdGl2aXR5SWQ6IHN0cmluZyB9PigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIE1ldGhvZHMgKEFYUFdvcmtmbG93RW5naW5lKSAgIC0tLS1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBDcmVhdGVzIGFuIGluLW1lbW9yeSB3b3JrZmxvdyBpbnN0YW5jZSBhbmQgcHJvZ3Jlc3NlcyBpdC5cbiAgICogRnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzIGFyZSByZXR1cm5lZCBhcyBwZW5kaW5nVGFzayBmb3IgZXh0ZXJuYWwgZXhlY3V0aW9uLlxuICAgKiBCYWNrZW5kIGFjdGl2aXRpZXMgYXJlIHNraXBwZWQuXG4gICAqL1xuICBhc3luYyBzdGFydChyZXF1ZXN0OiBBWFBTdGFydFdvcmtmbG93UmVxdWVzdCk6IFByb21pc2U8QVhQU3RhcnRXb3JrZmxvd1Jlc3BvbnNlPiB7XG4gICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDwn5qAIFN0YXJ0aW5nIHdvcmtmbG93OiAke3JlcXVlc3Qud29ya2Zsb3dJZH1gLCByZXF1ZXN0KTtcbiAgICBcbiAgICAvLyBHZW5lcmF0ZSBpbnN0YW5jZSBJRFxuICAgIGNvbnN0IGluc3RhbmNlSWQgPSBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gTG9hZCB3b3JrZmxvdyBkZWZpbml0aW9uXG4gICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDwn5OlIExvYWRpbmcgd29ya2Zsb3cgZGVmaW5pdGlvbjogJHtyZXF1ZXN0LndvcmtmbG93SWR9YCk7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZ2V0RGVmaW5pdGlvbihyZXF1ZXN0LndvcmtmbG93SWQpO1xuICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgY29uc29sZS5lcnJvcihgW1dvcmtmbG93TG9jYWxFbmdpbmVdIOKdjCBXb3JrZmxvdyBkZWZpbml0aW9uIG5vdCBmb3VuZDogJHtyZXF1ZXN0LndvcmtmbG93SWR9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IGRlZmluaXRpb24gbm90IGZvdW5kOiAke3JlcXVlc3Qud29ya2Zsb3dJZH1gKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIOKchSBEZWZpbml0aW9uIGxvYWRlZDpgLCB7XG4gICAgICBuYW1lOiBkZWZpbml0aW9uLm5hbWUsXG4gICAgICBhY3Rpdml0aWVzQ291bnQ6IGRlZmluaXRpb24uZ3JhcGg/LmFjdGl2aXRpZXM/Lmxlbmd0aCB8fCAwLFxuICAgICAgY29ubmVjdGlvbnNDb3VudDogZGVmaW5pdGlvbi5ncmFwaD8uY29ubmVjdGlvbnM/Lmxlbmd0aCB8fCAwLFxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB3b3JrZmxvdyBzdGF0ZVxuICAgIGNvbnN0IHN0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgd29ya2Zsb3dJZDogcmVxdWVzdC53b3JrZmxvd0lkLFxuICAgICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgICB2YXJpYWJsZXM6IHt9LFxuICAgICAgaW5wdXQ6IHJlcXVlc3QuaW5wdXQgfHwge30sXG4gICAgICBvdXRwdXQ6IHVuZGVmaW5lZCxcbiAgICAgIGxhc3RVcGRhdGVkOiBub3csXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBsb2NhbCBzdGF0ZVxuICAgIGNvbnN0IGxvY2FsU3RhdGU6IExvY2FsV29ya2Zsb3dTdGF0ZSA9IHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICB3b3JrZmxvd0lkOiByZXF1ZXN0LndvcmtmbG93SWQsXG4gICAgICBkZWZpbml0aW9uLFxuICAgICAgc3RhdGUsXG4gICAgICBjb21wbGV0ZWRBY3Rpdml0aWVzOiBuZXcgU2V0KCksXG4gICAgICBhY3Rpdml0eVJlc3VsdHM6IG5ldyBNYXAoKSxcbiAgICB9O1xuXG4gICAgLy8gU3RvcmUgaW5zdGFuY2VcbiAgICB0aGlzLmluc3RhbmNlcy5zZXQoaW5zdGFuY2VJZCwgbG9jYWxTdGF0ZSk7XG5cbiAgICAvLyBFeGVjdXRlIHdvcmtmbG93IHN0ZXBzXG4gICAgY29uc29sZS5sb2coYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDimpnvuI8gRXhlY3V0aW5nIHdvcmtmbG93IHN0ZXBzLi4uYCk7XG4gICAgY29uc3QgcGVuZGluZ1Rhc2sgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXb3JrZmxvd1N0ZXBzKGxvY2FsU3RhdGUpO1xuXG4gICAgLy8gVXBkYXRlIHN0YXRlXG4gICAgbG9jYWxTdGF0ZS5zdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCk7XG5cbiAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIOKchSBXb3JrZmxvdyBzdGFydGVkOmAsIHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICBzdGF0dXM6IGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzLFxuICAgICAgaGFzUGVuZGluZ1Rhc2s6ICEhcGVuZGluZ1Rhc2ssXG4gICAgICBwZW5kaW5nVGFza1R5cGU6IHBlbmRpbmdUYXNrPy5hY3Rpdml0eVR5cGUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIHN0YXRlOiBsb2NhbFN0YXRlLnN0YXRlLFxuICAgICAgcGVuZGluZ1Rhc2s6IHBlbmRpbmdUYXNrIHx8IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgYSBzdXNwZW5kZWQgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBWYWxpZGF0ZXMgdGFzayB0b2tlbiwgYXBwbGllcyBleHRlcm5hbGx5IGV4ZWN1dGVkIHJlc3VsdCxcbiAgICogYW5kIGNvbnRpbnVlcyBwcm9ncmVzc2luZyB3b3JrZmxvdyBzdGVwcy5cbiAgICovXG4gIGFzeW5jIHJlc3VtZShyZXF1ZXN0OiBBWFBSZXN1bWVXb3JrZmxvd1JlcXVlc3QpOiBQcm9taXNlPEFYUFJlc3VtZVdvcmtmbG93UmVzcG9uc2U+IHtcbiAgICAvLyBWYWxpZGF0ZSB0YXNrIHRva2VuXG4gICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy50YXNrVG9rZW5zLmdldChyZXF1ZXN0LnRhc2tUb2tlbik7XG4gICAgaWYgKCF0b2tlbkluZm8gfHwgdG9rZW5JbmZvLmluc3RhbmNlSWQgIT09IHJlcXVlc3QuaW5zdGFuY2VJZCB8fCB0b2tlbkluZm8uYWN0aXZpdHlJZCAhPT0gcmVxdWVzdC5zdGVwSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0YXNrIHRva2VuJyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGluc3RhbmNlXG4gICAgY29uc3QgbG9jYWxTdGF0ZSA9IHRoaXMuaW5zdGFuY2VzLmdldChyZXF1ZXN0Lmluc3RhbmNlSWQpO1xuICAgIGlmICghbG9jYWxTdGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyBpbnN0YW5jZSBub3QgZm91bmQ6ICR7cmVxdWVzdC5pbnN0YW5jZUlkfWApO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIGFjdGl2aXR5IHJlc3VsdCAoZnJvbSBleHRlcm5hbCBleGVjdXRpb24pXG4gICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHMuc2V0KHJlcXVlc3Quc3RlcElkLCB7XG4gICAgICBvdXRwdXQ6IHJlcXVlc3QudXNlcklucHV0IHx8IHt9LFxuICAgICAgb3V0Y29tZTogcmVxdWVzdC5vdXRjb21lLFxuICAgIH0pO1xuICAgIGxvY2FsU3RhdGUuY29tcGxldGVkQWN0aXZpdGllcy5hZGQocmVxdWVzdC5zdGVwSWQpO1xuXG4gICAgLy8gTWVyZ2Ugb3V0cHV0L3VzZXJJbnB1dCBpbnRvIHN0YXRlIHZhcmlhYmxlc1xuICAgIGlmIChyZXF1ZXN0LnVzZXJJbnB1dCkge1xuICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXMgPSB7XG4gICAgICAgIC4uLmxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzLFxuICAgICAgICAuLi4ocmVxdWVzdC51c2VySW5wdXQgfHwge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFjdGl2aXR5IGFzIGNvbXBsZXRlZCBhbmQgY29udGludWUgcHJvZ3Jlc3Npb25cbiAgICAvLyBDb250aW51ZSBwcm9ncmVzc2luZyB3b3JrZmxvdyBzdGVwcyAoc2tpcHBpbmcgYmFja2VuZCBhY3Rpdml0aWVzKVxuICAgIGNvbnN0IG5leHRUYXNrID0gYXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3dTdGVwcyhsb2NhbFN0YXRlKTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZVxuICAgIGxvY2FsU3RhdGUuc3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGZpbmFsIHN0YXR1c1xuICAgIGlmICghbmV4dFRhc2sgJiYgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUub3V0cHV0ID0gbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDogcmVxdWVzdC51c2VySW5wdXQgfHwge30sXG4gICAgICBvdXRjb21lczogeyBbcmVxdWVzdC5vdXRjb21lXTogdHJ1ZSB9LFxuICAgICAgc3RhdGU6IGxvY2FsU3RhdGUuc3RhdGUsXG4gICAgICBuZXh0VGFzazogbmV4dFRhc2sgfHwgbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHdvcmtmbG93IGluc3RhbmNlIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdGUocmVxdWVzdDogQVhQR2V0V29ya2Zsb3dTdGF0ZVJlcXVlc3QpOiBQcm9taXNlPEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZT4ge1xuICAgIGNvbnN0IGxvY2FsU3RhdGUgPSB0aGlzLmluc3RhbmNlcy5nZXQocmVxdWVzdC5pbnN0YW5jZUlkKTtcbiAgICBpZiAoIWxvY2FsU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgaW5zdGFuY2Ugbm90IGZvdW5kOiAke3JlcXVlc3QuaW5zdGFuY2VJZH1gKTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemUgbGFzdFVwZGF0ZWQgdG8gRGF0ZSAoZm9yIGNhY2hlIHNhZmV0eSlcbiAgICBjb25zdCBzdGF0ZSA9IHsgLi4ubG9jYWxTdGF0ZS5zdGF0ZSB9O1xuICAgIGlmIChzdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKHN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIHN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoc3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZSBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgd29ya2Zsb3cgZGVmaW5pdGlvbiBmcm9tIGF2YWlsYWJsZSBwcm92aWRlcnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERlZmluaXRpb24od29ya2Zsb3dJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCBudWxsPiB7XG4gICAgLy8gVHJ5IGFsbCBwcm92aWRlcnMgaW4gb3JkZXJcbiAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgIGlmIChwLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiYgcC52YWx1ZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHAudmFsdWU7XG4gICAgICAgIC8vIENoZWNrIGlmIHByb3ZpZGVyIGhhcyBnZXRCeU5hbWUgbWV0aG9kXG4gICAgICAgIGlmICh0eXBlb2YgcHJvdmlkZXIuZ2V0QnlOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCBwcm92aWRlci5nZXRCeU5hbWUod29ya2Zsb3dJZCk7XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yIC0gdHJ5IG90aGVyIHByb3ZpZGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2dyZXNzIHdvcmtmbG93IHN0ZXBzIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAqIFxuICAgKiBGb3IgZnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzOiByZXR1cm5zIHRhc2sgaW1tZWRpYXRlbHkgKHN1c3BlbmRzIHdvcmtmbG93KS5cbiAgICogRm9yIGJhY2tlbmQgYWN0aXZpdGllczogc2tpcHMgYW5kIGNvbnRpbnVlcy5cbiAgICogXG4gICAqIFJldHVybnMgdGhlIG5leHQgcGVuZGluZyB0YXNrIChpZiBmcm9udGVuZCBhY3Rpdml0eSBmb3VuZCkgb3IgbnVsbCAoaWYgY29tcGxldGVkKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVdvcmtmbG93U3RlcHMobG9jYWxTdGF0ZTogTG9jYWxXb3JrZmxvd1N0YXRlKTogUHJvbWlzZTxBWFBXb3JrZmxvd1Rhc2sgfCBudWxsPiB7XG4gICAgY29uc3QgZ3JhcGggPSBsb2NhbFN0YXRlLmRlZmluaXRpb24uZ3JhcGg7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IGdyYXBoLmFjdGl2aXRpZXMgfHwgW107XG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSBncmFwaC5jb25uZWN0aW9ucyB8fCBbXTtcblxuICAgIC8vIEJ1aWxkIGFjdGl2aXR5IG1hcFxuICAgIGNvbnN0IGFjdGl2aXR5TWFwID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZT4oKTtcbiAgICBhY3Rpdml0aWVzLmZvckVhY2goYWN0aXZpdHkgPT4ge1xuICAgICAgYWN0aXZpdHlNYXAuc2V0KGFjdGl2aXR5LmlkLCBhY3Rpdml0eSk7XG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZCBjb25uZWN0aW9uIGdyYXBoXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+KCk7XG4gICAgY29uc3QgaW5jb21pbmdDb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+KCk7XG5cbiAgICBjb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xuICAgICAgY29uc3Qgc291cmNlSWQgPSBjb25uLnNvdXJjZS5hY3RpdnR5TmFtZTtcbiAgICAgIGNvbnN0IHRhcmdldElkID0gY29ubi50YXJnZXQuYWN0aXZ0eU5hbWU7XG5cbiAgICAgIGlmICghb3V0Z29pbmdDb25uZWN0aW9ucy5oYXMoc291cmNlSWQpKSB7XG4gICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMuc2V0KHNvdXJjZUlkLCBbXSk7XG4gICAgICB9XG4gICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLmdldChzb3VyY2VJZCkhLnB1c2goY29ubik7XG5cbiAgICAgIGlmICghaW5jb21pbmdDb25uZWN0aW9ucy5oYXModGFyZ2V0SWQpKSB7XG4gICAgICAgIGluY29taW5nQ29ubmVjdGlvbnMuc2V0KHRhcmdldElkLCBbXSk7XG4gICAgICB9XG4gICAgICBpbmNvbWluZ0Nvbm5lY3Rpb25zLmdldCh0YXJnZXRJZCkhLnB1c2goY29ubik7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5kIHN0YXJ0aW5nIGFjdGl2aXR5ICh1c2Ugc3RhcnRBY3Rpdml0eUlkIG9yIG5vIGluY29taW5nIGNvbm5lY3Rpb25zLCBvciBmaXJzdCBhY3Rpdml0eSlcbiAgICBsZXQgY3VycmVudEFjdGl2aXR5SWQgPSBsb2NhbFN0YXRlLmN1cnJlbnRBY3Rpdml0eUlkO1xuICAgIGlmICghY3VycmVudEFjdGl2aXR5SWQpIHtcbiAgICAgIC8vIFVzZSBzdGFydEFjdGl2aXR5SWQgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoZ3JhcGguc3RhcnRBY3Rpdml0eUlkKSB7XG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gZ3JhcGguc3RhcnRBY3Rpdml0eUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmluZCByb290IGFjdGl2aXR5IChubyBpbmNvbWluZyBjb25uZWN0aW9ucylcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpdml0eSBvZiBhY3Rpdml0aWVzKSB7XG4gICAgICAgICAgaWYgKCFpbmNvbWluZ0Nvbm5lY3Rpb25zLmhhcyhhY3Rpdml0eS5pZCkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gYWN0aXZpdHkuaWQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbm8gcm9vdCBmb3VuZCwgdXNlIGZpcnN0IGFjdGl2aXR5XG4gICAgICAgIGlmICghY3VycmVudEFjdGl2aXR5SWQgJiYgYWN0aXZpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBhY3Rpdml0aWVzWzBdLmlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3b3JrZmxvdyBzdGVwc1xuICAgIHdoaWxlIChjdXJyZW50QWN0aXZpdHlJZCkge1xuICAgICAgY29uc3QgYWN0aXZpdHkgPSBhY3Rpdml0eU1hcC5nZXQoY3VycmVudEFjdGl2aXR5SWQpO1xuICAgICAgaWYgKCFhY3Rpdml0eSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiBhbHJlYWR5IGNvbXBsZXRlZFxuICAgICAgaWYgKGxvY2FsU3RhdGUuY29tcGxldGVkQWN0aXZpdGllcy5oYXMoY3VycmVudEFjdGl2aXR5SWQpKSB7XG4gICAgICAgIC8vIE1vdmUgdG8gbmV4dCBhY3Rpdml0eVxuICAgICAgICBjb25zdCBuZXh0SWQgPSB0aGlzLmdldE5leHRBY3Rpdml0eUlkKFxuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMsXG4gICAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHNcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBuZXh0SWQgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IGFjdGl2aXR5IGRlZmluaXRpb24gdG8gcmV0cmlldmUgZXhlY3V0aW9uTW9kZSBhbmQgdGl0bGVcbiAgICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g8J+UjSBHZXR0aW5nIGFjdGl2aXR5IGRlZmluaXRpb24gZm9yOiAke2FjdGl2aXR5Lm5hbWV9YCk7XG4gICAgICBjb25zdCBhY3Rpdml0eURlZmluaXRpb24gPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UuZ2V0QWN0aXZpdHlCeU5hbWUoYWN0aXZpdHkubmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIPCfk4sgQWN0aXZpdHkgZGVmaW5pdGlvbjpgLCB7XG4gICAgICAgIG5hbWU6IGFjdGl2aXR5RGVmaW5pdGlvbj8ubmFtZSxcbiAgICAgICAgdHlwZTogYWN0aXZpdHlEZWZpbml0aW9uPy50eXBlLFxuICAgICAgICBleGVjdXRpb25Nb2RlOiBhY3Rpdml0eURlZmluaXRpb24/LmV4ZWN1dGlvbk1vZGUsXG4gICAgICAgIHRpdGxlOiBhY3Rpdml0eURlZmluaXRpb24/LnRpdGxlLFxuICAgICAgICBmb3VuZDogISFhY3Rpdml0eURlZmluaXRpb24sXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgZXhlY3V0aW9uTW9kZSA9IGFjdGl2aXR5RGVmaW5pdGlvbj8uZXhlY3V0aW9uTW9kZSB8fCAnZnJvbnRlbmQnO1xuICAgICAgY29uc3QgYWN0aXZpdHlUaXRsZSA9IGFjdGl2aXR5RGVmaW5pdGlvbj8udGl0bGU7XG5cbiAgICAgIC8vIEhhbmRsZSBiYWNrZW5kIGFjdGl2aXRpZXM6IHNraXBcbiAgICAgIGlmIChleGVjdXRpb25Nb2RlID09PSAnYmFja2VuZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDij63vuI8gU2tpcHBpbmcgYmFja2VuZCBhY3Rpdml0eTogJHthY3Rpdml0eS5uYW1lfSAoJHthY3Rpdml0eS5pZH0pYFxuICAgICAgICApO1xuICAgICAgICBsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuYWRkKGN1cnJlbnRBY3Rpdml0eUlkKTtcbiAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHMuc2V0KGN1cnJlbnRBY3Rpdml0eUlkLCB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdEb25lJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTW92ZSB0byBuZXh0IGFjdGl2aXR5XG4gICAgICAgIGNvbnN0IG5leHRJZCA9IHRoaXMuZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgICAgICAgY3VycmVudEFjdGl2aXR5SWQsXG4gICAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucyxcbiAgICAgICAgICBsb2NhbFN0YXRlLmFjdGl2aXR5UmVzdWx0c1xuICAgICAgICApO1xuICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IG5leHRJZCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzOiByZXR1cm4gYXMgcGVuZGluZ1Rhc2sgKGRvIE5PVCBleGVjdXRlKVxuICAgICAgaWYgKGV4ZWN1dGlvbk1vZGUgPT09ICdmcm9udGVuZCcgfHwgZXhlY3V0aW9uTW9kZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIC8vIENyZWF0ZSB0YXNrIGZvciBleHRlcm5hbCBleGVjdXRpb25cbiAgICAgICAgLy8gTm90ZTogRXhwcmVzc2lvbiBldmFsdWF0aW9uIHdpbGwgYmUgZG9uZSBieSBBY3Rpdml0eUV4ZWN1dG9yXG4gICAgICAgIGNvbnN0IHRhc2s6IEFYUFdvcmtmbG93VGFzayA9IHtcbiAgICAgICAgICB0YXNrVG9rZW46IEFYUERhdGFHZW5lcmF0b3IudXVpZCgpLFxuICAgICAgICAgIGFjdGl2aXR5SWQ6IGFjdGl2aXR5LmlkLFxuICAgICAgICAgIGFjdGl2aXR5VHlwZTogYWN0aXZpdHkubmFtZSxcbiAgICAgICAgICBhY3Rpdml0eU5hbWU6IGFjdGl2aXR5VGl0bGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGV4ZWN1dGlvbk1vZGU6IGV4ZWN1dGlvbk1vZGUgYXMgJ2Zyb250ZW5kJyB8ICdiYWNrZW5kJyB8ICdib3RoJyxcbiAgICAgICAgICBpbnB1dDogYWN0aXZpdHkuaW5wdXRzIHx8IHt9LCAvLyBQYXNzIHJhdyBpbnB1dHMgLSBleGVjdXRvciB3aWxsIGV2YWx1YXRlXG4gICAgICAgICAgY29uZmlnOiBhY3Rpdml0eS5jdXN0b21Qcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN0b3JlIHRhc2sgdG9rZW4gZm9yIHNlY3VyZSByZXN1bWVcbiAgICAgICAgdGhpcy50YXNrVG9rZW5zLnNldCh0YXNrLnRhc2tUb2tlbiwge1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGxvY2FsU3RhdGUuaW5zdGFuY2VJZCxcbiAgICAgICAgICBhY3Rpdml0eUlkOiBhY3Rpdml0eS5pZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHN0YXRlIHRvIGluZGljYXRlIHN1c3BlbnNpb25cbiAgICAgICAgbG9jYWxTdGF0ZS5jdXJyZW50QWN0aXZpdHlJZCA9IGN1cnJlbnRBY3Rpdml0eUlkO1xuICAgICAgICBsb2NhbFN0YXRlLnN0YXRlLnN0YXR1cyA9ICdzdXNwZW5kZWQnO1xuICAgICAgICBsb2NhbFN0YXRlLnN0YXRlLmN1cnJlbnRTdGVwSWQgPSBjdXJyZW50QWN0aXZpdHlJZDtcblxuICAgICAgICAvLyBSZXR1cm4gdGFzayBpbW1lZGlhdGVseSAtIEFYUFdvcmtmbG93TWFuYWdlciB3aWxsIGV4ZWN1dGUgaXRcbiAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vdmUgdG8gbmV4dCBhY3Rpdml0eVxuICAgICAgY29uc3QgbmV4dElkID0gdGhpcy5nZXROZXh0QWN0aXZpdHlJZChcbiAgICAgICAgY3VycmVudEFjdGl2aXR5SWQsXG4gICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMsXG4gICAgICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzXG4gICAgICApO1xuICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBuZXh0SWQgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFdvcmtmbG93IGNvbXBsZXRlZFxuICAgIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgbG9jYWxTdGF0ZS5zdGF0ZS5vdXRwdXQgPSBsb2NhbFN0YXRlLnN0YXRlLnZhcmlhYmxlcztcbiAgICBsb2NhbFN0YXRlLmN1cnJlbnRBY3Rpdml0eUlkID0gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5leHQgYWN0aXZpdHkgSUQgYmFzZWQgb24gY29ubmVjdGlvbnMgYW5kIG91dGNvbWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXh0QWN0aXZpdHlJZChcbiAgICBjdXJyZW50QWN0aXZpdHlJZDogc3RyaW5nLFxuICAgIG91dGdvaW5nQ29ubmVjdGlvbnM6IE1hcDxzdHJpbmcsIEFYUENvbm5lY3Rpb25bXT4sXG4gICAgYWN0aXZpdHlSZXN1bHRzOiBNYXA8c3RyaW5nLCB7IG91dHB1dDogYW55OyBvdXRjb21lOiBzdHJpbmcgfT5cbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zLmdldChjdXJyZW50QWN0aXZpdHlJZCkgfHwgW107XG5cbiAgICBpZiAoY29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gTm8gb3V0Z29pbmcgY29ubmVjdGlvbnMgLSB3b3JrZmxvdyBlbmRzXG4gICAgfVxuXG4gICAgLy8gR2V0IGN1cnJlbnQgYWN0aXZpdHkgcmVzdWx0XG4gICAgY29uc3QgcmVzdWx0ID0gYWN0aXZpdHlSZXN1bHRzLmdldChjdXJyZW50QWN0aXZpdHlJZCk7XG4gICAgY29uc3Qgb3V0Y29tZSA9IHJlc3VsdD8ub3V0Y29tZSB8fCAnRG9uZSc7XG5cbiAgICAvLyBGaW5kIGNvbm5lY3Rpb24gbWF0Y2hpbmcgb3V0Y29tZVxuICAgIC8vIE91dGNvbWUgbWF0Y2hpbmcgaXMgdHlwaWNhbGx5IGRvbmUgdmlhIHBvcnQgbmFtZSAoZS5nLiwgXCJEb25lXCIsIFwiRmFpbGVkXCIpXG4gICAgZm9yIChjb25zdCBjb25uIG9mIGNvbm5lY3Rpb25zKSB7XG4gICAgICBjb25zdCBzb3VyY2VQb3J0ID0gY29ubi5zb3VyY2UucG9ydCB8fCAnRG9uZSc7XG4gICAgICBpZiAoc291cmNlUG9ydCA9PT0gb3V0Y29tZSkge1xuICAgICAgICByZXR1cm4gY29ubi50YXJnZXQuYWN0aXZ0eU5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gbWF0Y2hpbmcgb3V0Y29tZSwgdXNlIGZpcnN0IGNvbm5lY3Rpb24gKGRlZmF1bHQgcGF0aClcbiAgICBpZiAoY29ubmVjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGNvbm5lY3Rpb25zWzBdLnRhcmdldC5hY3RpdnR5TmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGZyb250QWN0aXZ0eUNvbXBsZXRlKHJlcXVlc3Q6IEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlcXVlc3QpOiBQcm9taXNlPEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlc3BvbnNlPiB7XG4gICByZXR1cm4ge307IFxuICB9XG5cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","// Workflow Runtime Services\nexport * from './workflow-engine';\nexport * from './workflow-runtime.types';\nexport * from './workflow-manager.service';\nexport * from './workflow-local-engine';\nexport * from './activity-executor.service';\nexport * from './workflow-expression-scope.service';\nexport * from './workflow-engine';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3J1bnRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXb3JrZmxvdyBSdW50aW1lIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWVuZ2luZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1sb2NhbC1lbmdpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJzsiXX0=","//#region ---- Imports ----\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_PROVIDER } from './workflow-definition.provider';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Optimized Workflow Definition Service\n *\n * Manages workflow definitions (metadata) for UI and tooling.\n * Similar to AXPActivityDefinitionService - only handles metadata, not execution.\n *\n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has workflows (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\nexport class AXPWorkflowDefinitionService {\n constructor() {\n //#region ---- Providers & Caches ----\n this.categoryProviders = inject(AXP_WORKFLOW_CATEGORY_PROVIDER, { optional: true }) || [];\n this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Cache Storage ----\n /** Cache for categories by id - O(1) lookup */\n this.categoriesById = new Map();\n /** Cache for categories by parentId - O(1) lookup */\n this.categoriesByParentId = new Map();\n /** Cache for workflow definitions by categoryId - O(1) lookup */\n this.workflowsByCategory = new Map();\n /** Cache for individual workflow definitions by name - O(1) lookup */\n this.workflowsByName = new Map();\n /** Track which provider index owns each category (by category ID) */\n this.categoryOwnership = new Map(); // Maps categoryId → provider index\n /** Pending API requests to prevent duplicate calls */\n this.pendingCategoriesRequests = new Map();\n this.pendingWorkflowsRequests = new Map();\n this.pendingWorkflowRequests = new Map();\n }\n //#endregion\n //#region ---- Public API: Categories ----\n /**\n * Get categories by parentId with aggressive caching\n *\n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n *\n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId) {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId);\n }\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId);\n }\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategoriesFromProviders(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single category by ID with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n /**\n * Get category path from root to specified category\n *\n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId) {\n const path = [];\n let currentCategoryId = categoryId;\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n return path;\n }\n //#endregion\n //#region ---- Public API: Workflow Definitions ----\n /**\n * Get workflow definitions for a category with smart caching\n *\n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches workflow definitions\n * - Returns cached result on subsequent calls\n *\n * @param categoryId - Category ID to get workflow definitions from\n * @returns Array of workflow definitions\n */\n async getWorkflowsByCategoryId(categoryId) {\n // ✅ Fast path: Return cached result\n if (this.workflowsByCategory.has(categoryId)) {\n return this.workflowsByCategory.get(categoryId);\n }\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no workflows - cache empty array and skip API call\n const emptyArray = [];\n this.workflowsByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n // ✅ Prevent duplicate requests\n if (this.pendingWorkflowsRequests.has(categoryId)) {\n return this.pendingWorkflowsRequests.get(categoryId);\n }\n // ✅ Load from providers\n const requestPromise = this.loadWorkflowsFromProviders(categoryId);\n this.pendingWorkflowsRequests.set(categoryId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single workflow definition by name with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval\n *\n * @param name - Workflow name (unique identifier)\n * @returns Workflow definition or undefined if not found\n */\n async getWorkflowByName(name) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.workflowsByName.has(name)) {\n return this.workflowsByName.get(name);\n }\n // ✅ Prevent duplicate requests\n if (this.pendingWorkflowRequests.has(name)) {\n return this.pendingWorkflowRequests.get(name);\n }\n // ✅ Load from providers\n const requestPromise = this.loadWorkflowFromProviders(name);\n this.pendingWorkflowRequests.set(name, requestPromise);\n return requestPromise;\n }\n /**\n * Get category ID containing a specific workflow definition\n *\n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByWorkflowName(workflowName) {\n // ✅ Search in cached workflow definitions\n for (const [categoryId, definitions] of this.workflowsByCategory.entries()) {\n if (definitions.some(def => def.name === workflowName)) {\n return categoryId;\n }\n }\n // ✅ Try loading the workflow definition to find its category\n // Note: AXPWorkflowDefinition doesn't have category field\n // Category is managed separately through category providers\n // This method searches through cached categories\n const definition = await this.getWorkflowByName(workflowName);\n if (definition) {\n // Search through all categories to find which one contains this workflow\n const categories = await this.getCategories();\n for (const category of categories) {\n const workflows = await this.getWorkflowsByCategoryId(category.id);\n if (workflows.some(w => w.name === workflowName)) {\n return category.id;\n }\n }\n }\n return undefined;\n }\n /**\n * Get category path for a workflow\n */\n async getCategoriesPathByWorkflowName(workflowName) {\n const categoryId = await this.getCategoryIdByWorkflowName(workflowName);\n if (!categoryId) {\n throw new Error(`Workflow '${workflowName}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n //#endregion\n //#region ---- Private: Data Loading ----\n /**\n * Load categories from providers and cache results\n *\n * Optimization: Tracks provider ownership to avoid unnecessary API calls\n * - For root (parentId = undefined): Query ALL providers\n * - For children: Only query the provider that owns the parent\n */\n async loadCategoriesFromProviders(parentId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.categoryProviders);\n const categories = [];\n // Determine which provider(s) to query\n const providerIndicesToQuery = parentId\n ? this.getProviderIndexForCategory(parentId)\n : null; // Root: query all providers\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const cats = await p.value.getList(parentId);\n if (Array.isArray(cats) && cats.length > 0) {\n categories.push(...cats);\n // ✅ Track ownership: This provider INDEX owns these categories\n cats.forEach(cat => this.categoryOwnership.set(cat.id, i));\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, categories);\n categories.forEach(cat => this.categoriesById.set(cat.id, cat));\n return categories;\n }\n finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n /**\n * Get the provider index that owns a specific category\n *\n * @returns Array with provider index, or null if ownership unknown (query all)\n */\n getProviderIndexForCategory(categoryId) {\n const ownerIndex = this.categoryOwnership.get(categoryId);\n if (ownerIndex !== undefined) {\n return [ownerIndex];\n }\n // Ownership unknown - will query all providers (fallback)\n return null;\n }\n /**\n * Load workflow definitions from providers and cache results\n *\n * Optimization: Only queries the provider that owns the category\n * Uses provider INDEX to match category provider with workflow provider\n */\n async loadWorkflowsFromProviders(categoryId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n const definitions = [];\n // ✅ Smart routing: Get provider INDEX that owns this category\n const ownerIndex = this.categoryOwnership.get(categoryId);\n const providerIndicesToQuery = ownerIndex !== undefined ? [ownerIndex] : null;\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const defs = await p.value.getList(categoryId);\n if (Array.isArray(defs)) {\n definitions.push(...defs);\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.workflowsByCategory.set(categoryId, definitions);\n definitions.forEach(def => {\n if (def.name) {\n this.workflowsByName.set(def.name, def);\n }\n });\n return definitions;\n }\n finally {\n this.pendingWorkflowsRequests.delete(categoryId);\n }\n }\n /**\n * Load single workflow definition from providers and cache result\n */\n async loadWorkflowFromProviders(name) {\n try {\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n // Try providers first\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value && typeof p.value.getByName === 'function') {\n try {\n const definition = await p.value.getByName(name);\n if (definition) {\n this.workflowsByName.set(name, definition);\n return definition;\n }\n }\n catch {\n // Continue on error\n }\n }\n }\n // Fallback: Search in cached workflow definitions\n for (const definitions of this.workflowsByCategory.values()) {\n const found = definitions.find(def => def.name === name);\n if (found) {\n this.workflowsByName.set(name, found);\n return found;\n }\n }\n return undefined;\n }\n finally {\n this.pendingWorkflowRequests.delete(name);\n }\n }\n /**\n * Breadth-first search through category hierarchy\n */\n async searchCategoryInHierarchy(categoryId) {\n const searchQueue = [undefined];\n const searched = new Set();\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift();\n if (searched.has(parentId))\n continue;\n searched.add(parentId);\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n return found;\n }\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n return undefined;\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n /**\n * Check if category has workflows (uses cached count)\n */\n categoryHasWorkflows(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n /**\n * Clear all caches\n */\n clearAllCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.workflowsByCategory.clear();\n this.workflowsByName.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingWorkflowsRequests.clear();\n this.pendingWorkflowRequests.clear();\n }\n /**\n * Clear categories cache only\n */\n clearCategoriesCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n }\n /**\n * Clear workflows cache only\n */\n clearWorkflowsCache() {\n this.workflowsByCategory.clear();\n this.workflowsByName.clear();\n this.pendingWorkflowsRequests.clear();\n this.pendingWorkflowRequests.clear();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS93b3JrZmxvdy93b3JrZmxvdy1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUV6RSxzRUFBc0U7UUFDOUQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztRQUVuRSxxRUFBcUU7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUMsQ0FBQyxtQ0FBbUM7UUFFMUYsc0RBQXNEO1FBQzlDLDhCQUF5QixHQUFHLElBQUks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Q0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pDLENBQUM7K0dBaGRRLDRCQUE0QjttSEFBNUIsNEJBQTRCLGNBRnpCLE1BQU07OzRGQUVULDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dDYXRlZ29yeSB9IGZyb20gJy4vd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tICcuLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUiwgQVhQX1dPUktGTE9XX1BST1ZJREVSIH0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogT3B0aW1pemVkIFdvcmtmbG93IERlZmluaXRpb24gU2VydmljZVxuICogXG4gKiBNYW5hZ2VzIHdvcmtmbG93IGRlZmluaXRpb25zIChtZXRhZGF0YSkgZm9yIFVJIGFuZCB0b29saW5nLlxuICogU2ltaWxhciB0byBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIHdvcmtmbG93cyAobm8gcXVlcnkgbmVlZGVkKVxuICogMy4gQWdncmVzc2l2ZSBjYWNoaW5nIHByZXZlbnRzIGR1cGxpY2F0ZSBBUEkgY2FsbHNcbiAqIDQuIFNpbmdsZSBwZW5kaW5nIHJlcXVlc3QgcGVyIHJlc291cmNlIHByZXZlbnRzIHJhY2UgY29uZGl0aW9uc1xuICogNS4gTGF6eSBsb2FkaW5nIC0gb25seSBsb2FkcyBkYXRhIHdoZW4gbmVlZGVkXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2Uge1xuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJvdmlkZXJzICYgQ2FjaGVzICAgLS0tLVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVByb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd1Byb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgU3RvcmFnZSAgIC0tLS1cblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBpZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0NhdGVnb3J5PigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBjYXRlZ29yaWVzIGJ5IHBhcmVudElkIC0gTygxKSBsb29rdXAgKi9cbiAgICBwcml2YXRlIGNhdGVnb3JpZXNCeVBhcmVudElkID0gbmV3IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3Igd29ya2Zsb3cgZGVmaW5pdGlvbnMgYnkgY2F0ZWdvcnlJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSB3b3JrZmxvd3NCeUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBpbmRpdmlkdWFsIHdvcmtmbG93IGRlZmluaXRpb25zIGJ5IG5hbWUgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgd29ya2Zsb3dzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbj4oKTtcblxuICAgIC8qKiBUcmFjayB3aGljaCBwcm92aWRlciBpbmRleCBvd25zIGVhY2ggY2F0ZWdvcnkgKGJ5IGNhdGVnb3J5IElEKSAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlPd25lcnNoaXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBNYXBzIGNhdGVnb3J5SWQg4oaSIHByb3ZpZGVyIGluZGV4XG5cbiAgICAvKiogUGVuZGluZyBBUEkgcmVxdWVzdHMgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgKi9cbiAgICBwcml2YXRlIHBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZyB8IHVuZGVmaW5lZCwgUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uW10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93UmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCB1bmRlZmluZWQ+PigpO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IENhdGVnb3JpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCB3aXRoIGFnZ3Jlc3NpdmUgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogUmV0dXJucyBjYWNoZWQgcmVzdWx0IGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSxcbiAgICAgKiBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IEFQSSBjYWxscyBkdXJpbmcgbmF2aWdhdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXJlbnRJZCAtIFBhcmVudCBjYXRlZ29yeSBJRCAodW5kZWZpbmVkID0gcm9vdCBjYXRlZ29yaWVzKVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGNhdGVnb3JpZXMgd2l0aCBjb3VudCBtZXRhZGF0YSAoY2hpbGRyZW5Db3VudCwgaXRlbXNDb3VudClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuaGFzKHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHM6IFJldHVybiBwZW5kaW5nIHByb21pc2VcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmdldChwYXJlbnRJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIENyZWF0ZSBzaW5nbGUgcmVxdWVzdCBhbmQgY2FjaGUgaXRcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5zZXQocGFyZW50SWQsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpbmdsZSBjYXRlZ29yeSBieSBJRCB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWwsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiBzZWFyY2hpbmcgY2FjaGUsIHRoZW4gcHJvdmlkZXJzIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogTygxKSBsb29rdXAgaW4gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5SWQuaGFzKGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCBwYXJlbnQtY2hpbGQgbGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yaWVzIG9mIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0ZWdvcnlJZCwgZm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIHJvb3QgY2F0ZWdvcmllcyBpZiBub3QgbG9hZGVkXG4gICAgICAgIGlmICghdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXModW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBoaWVyYXJjaHlcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmcm9tIHJvb3QgdG8gc3BlY2lmaWVkIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBCdWlsZHMgcGF0aCB1c2luZyBjYWNoZWQgY2F0ZWdvcmllcyBvbmx5XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IHBhdGg6IEFYUFdvcmtmbG93Q2F0ZWdvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5SWQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGN1cnJlbnRDYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGVnb3J5ICcke2N1cnJlbnRDYXRlZ29yeUlkfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5SWQgPSBjYXRlZ29yeS5wYXJlbnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgQVBJOiBXb3JrZmxvdyBEZWZpbml0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeSB3aXRoIHNtYXJ0IGNhY2hpbmdcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IENoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgaXRlbXNDb3VudCA+IDAsIGxvYWRzIGFuZCBjYWNoZXMgd29ya2Zsb3cgZGVmaW5pdGlvbnNcbiAgICAgKiAtIFJldHVybnMgY2FjaGVkIHJlc3VsdCBvbiBzdWJzZXF1ZW50IGNhbGxzXG4gICAgICogXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBnZXQgd29ya2Zsb3cgZGVmaW5pdGlvbnMgZnJvbVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICovXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uW10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIHdvcmtmbG93cyAtIGNhY2hlIGVtcHR5IGFycmF5IGFuZCBza2lwIEFQSSBjYWxsXG4gICAgICAgICAgICBjb25zdCBlbXB0eUFycmF5OiBBWFBXb3JrZmxvd0RlZmluaXRpb25bXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeUNhdGVnb3J5LnNldChjYXRlZ29yeUlkLCBlbXB0eUFycmF5KTtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eUFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIFByZXZlbnQgZHVwbGljYXRlIHJlcXVlc3RzXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5nZXQoY2F0ZWdvcnlJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRXb3JrZmxvd3NGcm9tUHJvdmlkZXJzKGNhdGVnb3J5SWQpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5zZXQoY2F0ZWdvcnlJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIHdvcmtmbG93IGRlZmluaXRpb24gYnkgbmFtZSB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWxcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFdvcmtmbG93IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyKVxuICAgICAqIEByZXR1cm5zIFdvcmtmbG93IGRlZmluaXRpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldFdvcmtmbG93QnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBGYXN0IHBhdGg6IE8oMSkgbG9va3VwIGluIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndvcmtmbG93c0J5TmFtZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5TmFtZS5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5nZXQobmFtZSkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRXb3JrZmxvd0Zyb21Qcm92aWRlcnMobmFtZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuc2V0KG5hbWUsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3J5IElEIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyB3b3JrZmxvdyBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBTZWFyY2hlcyBjYWNoZSBmaXJzdCwgbG9hZHMgb24tZGVtYW5kIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5SWRCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGRlZmluaXRpb25zXSBvZiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnMuc29tZShkZWYgPT4gZGVmLm5hbWUgPT09IHdvcmtmbG93TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2F0ZWdvcnlJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBUcnkgbG9hZGluZyB0aGUgd29ya2Zsb3cgZGVmaW5pdGlvbiB0byBmaW5kIGl0cyBjYXRlZ29yeVxuICAgICAgICAvLyBOb3RlOiBBWFBXb3JrZmxvd0RlZmluaXRpb24gZG9lc24ndCBoYXZlIGNhdGVnb3J5IGZpZWxkXG4gICAgICAgIC8vIENhdGVnb3J5IGlzIG1hbmFnZWQgc2VwYXJhdGVseSB0aHJvdWdoIGNhdGVnb3J5IHByb3ZpZGVyc1xuICAgICAgICAvLyBUaGlzIG1ldGhvZCBzZWFyY2hlcyB0aHJvdWdoIGNhY2hlZCBjYXRlZ29yaWVzXG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93QnlOYW1lKHdvcmtmbG93TmFtZSk7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAvLyBTZWFyY2ggdGhyb3VnaCBhbGwgY2F0ZWdvcmllcyB0byBmaW5kIHdoaWNoIG9uZSBjb250YWlucyB0aGlzIHdvcmtmbG93XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHdvcmtmbG93cy5zb21lKHcgPT4gdy5uYW1lID09PSB3b3JrZmxvd05hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXRlZ29yeS5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yeSBwYXRoIGZvciBhIHdvcmtmbG93XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBhd2FpdCB0aGlzLmdldENhdGVnb3J5SWRCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWUpO1xuICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kIGluIGFueSBjYXRlZ29yeWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldENhdGVnb3JpZXNQYXRoQnlJZChjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZTogRGF0YSBMb2FkaW5nICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBjYXRlZ29yaWVzIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRzXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBUcmFja3MgcHJvdmlkZXIgb3duZXJzaGlwIHRvIGF2b2lkIHVubmVjZXNzYXJ5IEFQSSBjYWxsc1xuICAgICAqIC0gRm9yIHJvb3QgKHBhcmVudElkID0gdW5kZWZpbmVkKTogUXVlcnkgQUxMIHByb3ZpZGVyc1xuICAgICAqIC0gRm9yIGNoaWxkcmVuOiBPbmx5IHF1ZXJ5IHRoZSBwcm92aWRlciB0aGF0IG93bnMgdGhlIHBhcmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZENhdGVnb3JpZXNGcm9tUHJvdmlkZXJzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuY2F0ZWdvcnlQcm92aWRlcnMpO1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllczogQVhQV29ya2Zsb3dDYXRlZ29yeVtdID0gW107XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGljaCBwcm92aWRlcihzKSB0byBxdWVyeVxuICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbmRpY2VzVG9RdWVyeSA9IHBhcmVudElkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmdldFByb3ZpZGVySW5kZXhGb3JDYXRlZ29yeShwYXJlbnRJZClcbiAgICAgICAgICAgICAgICA6IG51bGw7IC8vIFJvb3Q6IHF1ZXJ5IGFsbCBwcm92aWRlcnNcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdHMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2F0cykgJiYgY2F0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKC4uLmNhdHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4pyFIFRyYWNrIG93bmVyc2hpcDogVGhpcyBwcm92aWRlciBJTkRFWCBvd25zIHRoZXNlIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRzLmZvckVhY2goY2F0ID0+IHRoaXMuY2F0ZWdvcnlPd25lcnNoaXAuc2V0KGNhdC5pZCwgaSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yIC0gdHJ5IG90aGVyIHByb3ZpZGVyc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgQ2FjaGUgcmVzdWx0cyBmb3IgZmFzdCBzdWJzZXF1ZW50IGFjY2Vzc1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5zZXQocGFyZW50SWQsIGNhdGVnb3JpZXMpO1xuICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKGNhdCA9PiB0aGlzLmNhdGVnb3JpZXNCeUlkLnNldChjYXQuaWQsIGNhdCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5kZWxldGUocGFyZW50SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwcm92aWRlciBpbmRleCB0aGF0IG93bnMgYSBzcGVjaWZpYyBjYXRlZ29yeVxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFycmF5IHdpdGggcHJvdmlkZXIgaW5kZXgsIG9yIG51bGwgaWYgb3duZXJzaGlwIHVua25vd24gKHF1ZXJ5IGFsbClcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFByb3ZpZGVySW5kZXhGb3JDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcpOiBudW1iZXJbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG5cbiAgICAgICAgaWYgKG93bmVySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtvd25lckluZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE93bmVyc2hpcCB1bmtub3duIC0gd2lsbCBxdWVyeSBhbGwgcHJvdmlkZXJzIChmYWxsYmFjaylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmcm9tIHByb3ZpZGVycyBhbmQgY2FjaGUgcmVzdWx0c1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogT25seSBxdWVyaWVzIHRoZSBwcm92aWRlciB0aGF0IG93bnMgdGhlIGNhdGVnb3J5XG4gICAgICogVXNlcyBwcm92aWRlciBJTkRFWCB0byBtYXRjaCBjYXRlZ29yeSBwcm92aWRlciB3aXRoIHdvcmtmbG93IHByb3ZpZGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkV29ya2Zsb3dzRnJvbVByb3ZpZGVycyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBXb3JrZmxvd0RlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgU21hcnQgcm91dGluZzogR2V0IHByb3ZpZGVyIElOREVYIHRoYXQgb3ducyB0aGlzIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gb3duZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gW293bmVySW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZnMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goLi4uZGVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGRlZmluaXRpb25zKTtcbiAgICAgICAgICAgIGRlZmluaXRpb25zLmZvckVhY2goZGVmID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVmLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuc2V0KGRlZi5uYW1lLCBkZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5kZWxldGUoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHNpbmdsZSB3b3JrZmxvdyBkZWZpbml0aW9uIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRXb3JrZmxvd0Zyb21Qcm92aWRlcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMud29ya2Zsb3dQcm92aWRlcnMpO1xuXG4gICAgICAgICAgICAvLyBUcnkgcHJvdmlkZXJzIGZpcnN0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0QnlOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgcC52YWx1ZS5nZXRCeU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dzQnlOYW1lLnNldChuYW1lLCBkZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGYWxsYmFjazogU2VhcmNoIGluIGNhY2hlZCB3b3JrZmxvdyBkZWZpbml0aW9uc1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9ucyBvZiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGRlZmluaXRpb25zLmZpbmQoZGVmID0+IGRlZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuc2V0KG5hbWUsIGZvdW5kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBjYXRlZ29yeSBoaWVyYXJjaHlcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIHNlYXJjaENhdGVnb3J5SW5IaWVyYXJjaHkoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFF1ZXVlOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW3VuZGVmaW5lZF07XG4gICAgICAgIGNvbnN0IHNlYXJjaGVkID0gbmV3IFNldDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAgICAgd2hpbGUgKHNlYXJjaFF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc2VhcmNoUXVldWUuc2hpZnQoKSE7XG4gICAgICAgICAgICBpZiAoc2VhcmNoZWQuaGFzKHBhcmVudElkKSkgY29udGludWU7XG4gICAgICAgICAgICBzZWFyY2hlZC5hZGQocGFyZW50SWQpO1xuXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKHBhcmVudElkKTtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBPcHRpbWl6YXRpb246IE9ubHkgc2VhcmNoIGNoaWxkcmVuIGlmIGNoaWxkcmVuQ291bnQgPiAwXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkuY2hpbGRyZW5Db3VudCA+IDAgJiYgIXNlYXJjaGVkLmhhcyhjYXRlZ29yeS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoUXVldWUucHVzaChjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGNhdGVnb3J5IGhhcyBjaGlsZHJlbiAodXNlcyBjYWNoZWQgY291bnQpXG4gICAgICovXG4gICAgY2F0ZWdvcnlIYXNDaGlsZHJlbihjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gY2F0ZWdvcnkuY2hpbGRyZW5Db3VudCA+IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBjYXRlZ29yeSBoYXMgd29ya2Zsb3dzICh1c2VzIGNhY2hlZCBjb3VudClcbiAgICAgKi9cbiAgICBjYXRlZ29yeUhhc1dvcmtmbG93cyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCkgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGNhY2hlc1xuICAgICAqL1xuICAgIGNsZWFyQWxsQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuY2xlYXIoKTtcbiAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGNhdGVnb3JpZXMgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyQ2F0ZWdvcmllc0NhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB3b3JrZmxvd3MgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyV29ya2Zsb3dzQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","// Workflow Instance Types (Storage/Database)\nexport * from './workflow-instance.types';\n// Activity System Types (Simplified)\nexport * from './activity/activity.types';\nexport * from './activity';\n// Simple Runtime (Coordinator only)\nexport * from './runtime';\n// Workflow Definition System (Category + Metadata)\nexport * from './workflow/workflow-definition.provider';\nexport * from './workflow/workflow-definition.service';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLDZDQUE2QztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBbUIxQyxxQ0FBcUM7QUFDckMsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxjQUFjLFlBQVksQ0FBQztBQUUzQixvQ0FBb0M7QUFDcEMsY0FBYyxXQUFXLENBQUM7QUFFMUIsbURBQW1EO0FBQ25ELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtmbG93IERlZmluaXRpb24gVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG4vLyBFeHBvcnQgd29ya2Zsb3cgZGVmaW5pdGlvbiB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBBWFBXb3JrZmxvd0RlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93R3JhcGgsXG4gIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZSxcbiAgQVhQQ29ubmVjdGlvbixcbiAgQVhQVmFyaWFibGVEZWZpbml0aW9uLFxuICBBWFBXb3JrZmxvd0lucHV0RGVzY3JpcHRvcixcbiAgQVhQV29ya2Zsb3dPdXRwdXREZXNjcmlwdG9yLFxuICBBWFBXb3JrZmxvd0V4dGVuc2lvbnMsXG4gIEFYUEVsc2FXb3JrZmxvd0V4dGVuc2lvbnMsXG4gIEFYUFdvcmtmbG93QmluZGluZyxcbn0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcblxuLy8gV29ya2Zsb3cgSW5zdGFuY2UgVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzJztcblxuXG4vLyBSZS1leHBvcnQgV29ya2Zsb3cgSW5zdGFuY2UgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZSxcbiAgQVhQV29ya2Zsb3dTdGF0ZSxcbiAgQVhQV29ya2Zsb3dTdGF0dXMsXG4gIEFYUFdvcmtmbG93U3ViU3RhdHVzLFxuICBBWFBBY3Rpdml0eVN0YXR1cyxcbiAgQVhQRXhjZXB0aW9uU3RhdGUsXG4gIEFYUEFjdGl2aXR5SW5jaWRlbnQsXG4gIEFYUFdvcmtmbG93RmF1bHRTdGF0ZSxcbiAgQVhQQm9va21hcmssXG4gIEFYUENvbXBsZXRpb25DYWxsYmFja1N0YXRlLFxuICBBWFBBY3Rpdml0eVZhcmlhYmxlLFxuICBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZSxcbn0gZnJvbSAnLi93b3JrZmxvdy1pbnN0YW5jZS50eXBlcyc7XG5cbi8vIEFjdGl2aXR5IFN5c3RlbSBUeXBlcyAoU2ltcGxpZmllZClcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHkvYWN0aXZpdHkudHlwZXMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2FjdGl2aXR5JztcblxuLy8gU2ltcGxlIFJ1bnRpbWUgKENvb3JkaW5hdG9yIG9ubHkpXG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUnO1xuXG4vLyBXb3JrZmxvdyBEZWZpbml0aW9uIFN5c3RlbSAoQ2F0ZWdvcnkgKyBNZXRhZGF0YSlcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93L3dvcmtmbG93LWRlZmluaXRpb24uc2VydmljZSc7Il19","import { Inject, NgModule, Optional } from '@angular/core';\nimport { AXPWorkflowDecideAction } from './actions/decide.action';\nimport { AXPStartWorkflowAction } from './actions/start-workflow.action';\nimport { AXPWorkflowRegistryService } from './workflow-registery.service';\nimport { AXP_WORKFLOW_ENGINE, AXPWorkflowLocalEngine } from './engine';\nimport { AXPWorkflowManager } from './engine/runtime/workflow-manager.service';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowModule {\n static forRoot(config) {\n return {\n ngModule: AXPWorkflowModule,\n providers: [\n {\n provide: 'AXPWorkflowModuleFactory',\n useFactory: (registry) => () => {\n registry.registerAction('start-workflow', AXPStartWorkflowAction);\n registry.registerAction('decide', AXPWorkflowDecideAction);\n //\n if (config?.functions) {\n for (const [key, type] of Object.entries(config.functions)) {\n registry.registerFunction(key, type);\n }\n }\n //\n if (config?.actions) {\n for (const [key, type] of Object.entries(config.actions)) {\n registry.registerAction(key, type);\n }\n }\n //\n if (config?.workflows) {\n for (const [key, type] of Object.entries(config.workflows)) {\n registry.registerWorkflow(key, type);\n }\n }\n },\n deps: [AXPWorkflowRegistryService],\n multi: true,\n },\n ...Object.values(config?.actions ?? { AXPStartWorkflowAction }),\n ...Object.values(config?.functions ?? {}),\n ],\n };\n }\n static forChild(config) {\n return {\n ngModule: AXPWorkflowModule,\n providers: [\n // Built-in activities are already registered in forRoot via @NgModule providers\n // No need to register again in forChild\n {\n provide: 'AXPWorkflowModuleFactory',\n useFactory: (registry) => () => {\n registry.registerAction('start-workflow', AXPStartWorkflowAction);\n registry.registerAction('decide', AXPWorkflowDecideAction);\n //\n if (config?.functions) {\n for (const [key, type] of Object.entries(config.functions)) {\n registry.registerFunction(key, type);\n }\n }\n //\n if (config?.actions) {\n for (const [key, type] of Object.entries(config.actions)) {\n registry.registerAction(key, type);\n }\n }\n //\n if (config?.workflows) {\n for (const [key, type] of Object.entries(config.workflows)) {\n registry.registerWorkflow(key, type);\n }\n }\n },\n deps: [AXPWorkflowRegistryService],\n multi: true,\n },\n ...Object.values(config?.actions ?? {}),\n ...Object.values(config?.functions ?? {}),\n ],\n };\n }\n /**\n * @ignore\n */\n constructor(instances) {\n instances?.forEach((f) => {\n f();\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowModule, deps: [{ token: 'AXPWorkflowModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowModule, providers: [\n AXPWorkflowLocalEngine,\n {\n provide: AXP_WORKFLOW_ENGINE,\n useExisting: AXPWorkflowLocalEngine,\n },\n AXPWorkflowManager,\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n AXPWorkflowLocalEngine,\n {\n provide: AXP_WORKFLOW_ENGINE,\n useExisting: AXPWorkflowLocalEngine,\n },\n AXPWorkflowManager,\n ],\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: ['AXPWorkflowModuleFactory']\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL3dvcmtmbG93Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUF1QixRQUFRLEVBQUUsUUFBUSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0FBMEIvRSxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaUM7UUFDOUMsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSwwQkFBMEI7b0JBQ25DLFVBQVUsRUFBRSxDQUFDLFFBQW9DLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTt3QkFDekQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO3dCQUNsRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO3dCQUMzRCxFQUFFO3dCQUNGLElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDOzRCQUN0QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FB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TSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO2FBQzFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQTRELFNBQWdCO1FBQzFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QixDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FyRlUsaUJBQWlCLGtCQWlGSSwwQkFBMEI7Z0hBakYvQyxpQkFBaUI7Z0hBQWpCLGlCQUFpQixhQVRqQjtZQUNULHNCQUFzQjtZQUN0QjtnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsc0JBQXNCO2FBQ3BDO1lBQ0Qsa0JBQWtCO1NBQ25COzs0RkFFVSxpQkFBaUI7a0JBYjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVCxzQkFBc0I7d0JBQ3RCOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxzQkFBc0I7eUJBQ3BDO3dCQUNELGtCQUFrQjtxQkFDbkI7aUJBQ0Y7OzBCQWtGYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIE9wdGlvbmFsLCBUeXBlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RGVjaWRlQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb25zL2RlY2lkZS5hY3Rpb24nO1xuaW1wb3J0IHsgQVhQU3RhcnRXb3JrZmxvd0FjdGlvbiB9IGZyb20gJy4vYWN0aW9ucy9zdGFydC13b3JrZmxvdy5hY3Rpb24nO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuL3dvcmtmbG93LXJlZ2lzdGVyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93LCBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dGdW5jdGlvbiB9IGZyb20gJy4vd29ya2Zsb3cudHlwZXMnO1xuaW1wb3J0IHsgQVhQX1dPUktGTE9XX0VOR0lORSwgQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSB9IGZyb20gJy4vZW5naW5lJztcbmltcG9ydCB7IEFYUFdvcmtmbG93TWFuYWdlciB9IGZyb20gJy4vZW5naW5lL3J1bnRpbWUvd29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dNb2R1bGVDb25maWdzIHtcbiAgZnVuY3Rpb25zPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUeXBlPEFYUFdvcmtmbG93RnVuY3Rpb24+O1xuICB9O1xuICBhY3Rpb25zPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPjtcbiAgfTtcbiAgd29ya2Zsb3dzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBBWFBXb3JrZmxvdztcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW10sXG4gIGV4cG9ydHM6IFtdLFxuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBWFBXb3JrZmxvd0xvY2FsRW5naW5lLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9XT1JLRkxPV19FTkdJTkUsXG4gICAgICB1c2VFeGlzdGluZzogQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSxcbiAgICB9LFxuICAgIEFYUFdvcmtmbG93TWFuYWdlcixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dNb2R1bGUge1xuXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEFYUFdvcmtmbG93TW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQV29ya2Zsb3dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUFdvcmtmbG93TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiAnQVhQV29ya2Zsb3dNb2R1bGVGYWN0b3J5JyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiAocmVnaXN0cnk6IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbignc3RhcnQtd29ya2Zsb3cnLCBBWFBTdGFydFdvcmtmbG93QWN0aW9uKTtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKCdkZWNpZGUnLCBBWFBXb3JrZmxvd0RlY2lkZUFjdGlvbik7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8uZnVuY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckZ1bmN0aW9uKGtleSwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmFjdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oa2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGlmIChjb25maWc/LndvcmtmbG93cykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy53b3JrZmxvd3MpKSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJXb3JrZmxvdyhrZXksIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXBzOiBbQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2VdLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAuLi5PYmplY3QudmFsdWVzKGNvbmZpZz8uYWN0aW9ucyA/PyB7IEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gfSksXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoY29uZmlnPy5mdW5jdGlvbnMgPz8ge30pLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKGNvbmZpZz86IEFYUFdvcmtmbG93TW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQV29ya2Zsb3dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUFdvcmtmbG93TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC8vIEJ1aWx0LWluIGFjdGl2aXRpZXMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiBmb3JSb290IHZpYSBATmdNb2R1bGUgcHJvdmlkZXJzXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcmVnaXN0ZXIgYWdhaW4gaW4gZm9yQ2hpbGRcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6ICdBWFBXb3JrZmxvd01vZHVsZUZhY3RvcnknLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UpID0+ICgpID0+IHtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKCdzdGFydC13b3JrZmxvdycsIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24pO1xuICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oJ2RlY2lkZScsIEFYUFdvcmtmbG93RGVjaWRlQWN0aW9uKTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5mdW5jdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRnVuY3Rpb24oa2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGlmIChjb25maWc/LmFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuYWN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihrZXksIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8ud29ya2Zsb3dzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLndvcmtmbG93cykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlcldvcmtmbG93KGtleSwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcHM6IFtBWFBXb3JrZmxvd1JlZ2lzdHJ5U2VydmljZV0sXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoY29uZmlnPy5hY3Rpb25zID8/IHt9KSxcbiAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhjb25maWc/LmZ1bmN0aW9ucyA/PyB7fSksXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdCgnQVhQV29ya2Zsb3dNb2R1bGVGYWN0b3J5JykgaW5zdGFuY2VzOiBhbnlbXSkge1xuICAgIGluc3RhbmNlcz8uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgZigpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1.AXPWorkflowRegistryService"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-workflow.mjs","sources":["../tmp-esm2022/workflow/lib/errors.types.js","../tmp-esm2022/workflow/lib/workflow-event-dispatcher.service.js","../tmp-esm2022/workflow/lib/workflow-registery.service.js","../tmp-esm2022/workflow/lib/workflow.types.js","../tmp-esm2022/workflow/lib/actions/decide.action.js","../tmp-esm2022/workflow/lib/workflow.service.js","../tmp-esm2022/workflow/lib/actions/start-workflow.action.js","../tmp-esm2022/workflow/lib/engine/workflow-instance.types.js","../tmp-esm2022/workflow/lib/engine/activity/activity-definition.provider.js","../tmp-esm2022/workflow/lib/engine/activity/activity-definition.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-engine.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-expression-scope.service.js","../tmp-esm2022/workflow/lib/engine/runtime/activity-executor.service.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-manager.service.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.provider.js","../tmp-esm2022/workflow/lib/engine/runtime/workflow-local-engine.js","../tmp-esm2022/workflow/lib/engine/runtime/index.js","../tmp-esm2022/workflow/lib/engine/workflow/workflow-definition.service.js","../tmp-esm2022/workflow/lib/engine/index.js","../tmp-esm2022/workflow/lib/workflow.module.js","../tmp-esm2022/workflow/acorex-platform-workflow.js"],"sourcesContent":["export class AXPWorkflowError extends Error {\n constructor(message, inner = null) {\n super(message);\n this.inner = inner;\n this.name = 'AXPWorkflowError';\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2Vycm9ycy50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsS0FBSztJQUN2QyxZQUFZLE9BQWUsRUFBUyxRQUFzQixJQUFJO1FBQzFELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURpQixVQUFLLEdBQUwsS0FBSyxDQUFxQjtRQUUxRCxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGlubmVyOiBFcnJvciB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQVhQV29ya2Zsb3dFcnJvcic7XG4gICAgfVxufSJdfQ==","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowEventService {\n constructor() {\n this.eventSubject = new Subject();\n }\n dispatch(event) {\n this.eventSubject.next(event);\n }\n get events$() {\n return this.eventSubject.asObservable();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowEventService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowEventService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL3dvcmtmbG93LWV2ZW50LWRpc3BhdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTTNDLE1BQU0sT0FBTyx1QkFBdUI7SUFIcEM7UUFJVSxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO0tBU3hEO0lBUEMsUUFBUSxDQUFDLEtBQXVCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQzsrR0FUVSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dFdmVudCB9IGZyb20gJy4vd29ya2Zsb3cudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dFdmVudFNlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PEFYUFdvcmtmbG93RXZlbnQ+KCk7XG5cbiAgZGlzcGF0Y2goZXZlbnQ6IEFYUFdvcmtmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBldmVudHMkKCk6IE9ic2VydmFibGU8QVhQV29ya2Zsb3dFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowRegistryService {\n constructor() {\n this.functionsMap = new Map();\n this.actionsMap = new Map();\n this.workflowsMap = new Map();\n }\n registerWorkflow(name, workflow) {\n this.workflowsMap.set(name, workflow);\n }\n getWorkflow(name) {\n return this.workflowsMap.get(name);\n }\n registerAction(name, action) {\n this.actionsMap.set(name, action);\n }\n getAction(name) {\n return this.actionsMap.get(name);\n }\n registerFunction(name, func) {\n this.functionsMap.set(name, func);\n }\n getFunction(name) {\n return this.functionsMap.get(name);\n }\n getFunctionNames() {\n return Array.from(this.functionsMap.keys());\n }\n getStep(workflowName, stepName) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n return steps[stepName];\n }\n return undefined;\n }\n updateStepInWorkflow(workflowName, stepName, step) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n if (steps[stepName]) {\n steps[stepName] = step;\n }\n else {\n throw new Error(`Step with name ${stepName} does not exist in workflow ${workflowName}.`);\n }\n }\n else {\n throw new Error(`Workflow with name ${workflowName} does not exist.`);\n }\n }\n addStepToWorkflow(workflowName, stepName, step) {\n const workflow = this.workflowsMap.get(workflowName);\n if (workflow) {\n const steps = workflow.steps;\n if (!steps[stepName]) {\n steps[stepName] = step;\n }\n else {\n throw new Error(`Step with name ${stepName} already exists in workflow ${workflowName}.`);\n }\n }\n else {\n throw new Error(`Workflow with name ${workflowName} does not exist.`);\n }\n }\n addAfterStep(workflowId, stepId, newStepId, newStepAction, conditionExpression) {\n const step = this.getStep(workflowId, stepId);\n if (step != undefined) {\n this.addStepToWorkflow(workflowId, newStepId, {\n action: newStepAction,\n nextSteps: step.nextSteps,\n });\n this.updateStepInWorkflow(workflowId, stepId, {\n ...step,\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: conditionExpression }],\n nextStepId: newStepId,\n },\n ],\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowRegistryService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcmVnaXN0ZXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvd29ya2Zsb3ctcmVnaXN0ZXJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUFNakQsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUlVLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7UUFDNUQsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFDO1FBQ3hELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7S0E0RnZEO0lBMUZDLGdCQUFnQixDQUFDLElBQVksRUFBRSxRQUFxQjtRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsTUFBK0I7UUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsSUFBK0I7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWTtRQUN0QixPQUFPLElBQUksQ0FB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QUFDO0lBQ0gsQ0FBQzsrR0E5RlUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93LCBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dGdW5jdGlvbiwgQVhQV29ya2Zsb3dTdGVwIH0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1JlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgZnVuY3Rpb25zTWFwID0gbmV3IE1hcDxzdHJpbmcsIFR5cGU8QVhQV29ya2Zsb3dGdW5jdGlvbj4+KCk7XG4gIHByaXZhdGUgYWN0aW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPj4oKTtcbiAgcHJpdmF0ZSB3b3JrZmxvd3NNYXAgPSBuZXcgTWFwPHN0cmluZywgQVhQV29ya2Zsb3c+KCk7XG5cbiAgcmVnaXN0ZXJXb3JrZmxvdyhuYW1lOiBzdHJpbmcsIHdvcmtmbG93OiBBWFBXb3JrZmxvdyk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dzTWFwLnNldChuYW1lLCB3b3JrZmxvdyk7XG4gIH1cblxuICBnZXRXb3JrZmxvdyhuYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvdyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dzTWFwLmdldChuYW1lKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQWN0aW9uKG5hbWU6IHN0cmluZywgYWN0aW9uOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uc01hcC5zZXQobmFtZSwgYWN0aW9uKTtcbiAgfVxuXG4gIGdldEFjdGlvbihuYW1lOiBzdHJpbmcpOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uc01hcC5nZXQobmFtZSk7XG4gIH1cblxuICByZWdpc3RlckZ1bmN0aW9uKG5hbWU6IHN0cmluZywgZnVuYzogVHlwZTxBWFBXb3JrZmxvd0Z1bmN0aW9uPik6IHZvaWQge1xuICAgIHRoaXMuZnVuY3Rpb25zTWFwLnNldChuYW1lLCBmdW5jKTtcbiAgfVxuXG4gIGdldEZ1bmN0aW9uKG5hbWU6IHN0cmluZyk6IFR5cGU8QVhQV29ya2Zsb3dGdW5jdGlvbj4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uc01hcC5nZXQobmFtZSk7XG4gIH1cblxuICBnZXRGdW5jdGlvbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZ1bmN0aW9uc01hcC5rZXlzKCkpO1xuICB9XG5cbiAgZ2V0U3RlcCh3b3JrZmxvd05hbWU6IHN0cmluZywgc3RlcE5hbWU6IHN0cmluZyk6IEFYUFdvcmtmbG93U3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLndvcmtmbG93c01hcC5nZXQod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gd29ya2Zsb3cuc3RlcHMgYXMgeyBba2V5OiBzdHJpbmddOiBBWFBXb3JrZmxvd1N0ZXAgfTtcbiAgICAgIHJldHVybiBzdGVwc1tzdGVwTmFtZV07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB1cGRhdGVTdGVwSW5Xb3JrZmxvdyh3b3JrZmxvd05hbWU6IHN0cmluZywgc3RlcE5hbWU6IHN0cmluZywgc3RlcDogQVhQV29ya2Zsb3dTdGVwKTogdm9pZCB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLndvcmtmbG93c01hcC5nZXQod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAod29ya2Zsb3cpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gd29ya2Zsb3cuc3RlcHMgYXMgeyBba2V5OiBzdHJpbmddOiBBWFBXb3JrZmxvd1N0ZXAgfTtcbiAgICAgIGlmIChzdGVwc1tzdGVwTmFtZV0pIHtcbiAgICAgICAgc3RlcHNbc3RlcE5hbWVdID0gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RlcCB3aXRoIG5hbWUgJHtzdGVwTmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gd29ya2Zsb3cgJHt3b3JrZmxvd05hbWV9LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtmbG93IHdpdGggbmFtZSAke3dvcmtmbG93TmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RlcFRvV29ya2Zsb3cod29ya2Zsb3dOYW1lOiBzdHJpbmcsIHN0ZXBOYW1lOiBzdHJpbmcsIHN0ZXA6IEFYUFdvcmtmbG93U3RlcCk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gdGhpcy53b3JrZmxvd3NNYXAuZ2V0KHdvcmtmbG93TmFtZSk7XG4gICAgaWYgKHdvcmtmbG93KSB7XG4gICAgICBjb25zdCBzdGVwcyA9IHdvcmtmbG93LnN0ZXBzIGFzIHsgW2tleTogc3RyaW5nXTogQVhQV29ya2Zsb3dTdGVwIH07XG4gICAgICBpZiAoIXN0ZXBzW3N0ZXBOYW1lXSkge1xuICAgICAgICBzdGVwc1tzdGVwTmFtZV0gPSBzdGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGVwIHdpdGggbmFtZSAke3N0ZXBOYW1lfSBhbHJlYWR5IGV4aXN0cyBpbiB3b3JrZmxvdyAke3dvcmtmbG93TmFtZX0uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgd2l0aCBuYW1lICR7d29ya2Zsb3dOYW1lfSBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG4gIH1cblxuICBhZGRBZnRlclN0ZXAoXG4gICAgd29ya2Zsb3dJZDogc3RyaW5nLFxuICAgIHN0ZXBJZDogc3RyaW5nLFxuICAgIG5ld1N0ZXBJZDogc3RyaW5nLFxuICAgIG5ld1N0ZXBBY3Rpb246IHN0cmluZyxcbiAgICBjb25kaXRpb25FeHByZXNzaW9uOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuZ2V0U3RlcCh3b3JrZmxvd0lkLCBzdGVwSWQpO1xuICAgIGlmIChzdGVwICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hZGRTdGVwVG9Xb3JrZmxvdyh3b3JrZmxvd0lkLCBuZXdTdGVwSWQsIHtcbiAgICAgICAgYWN0aW9uOiBuZXdTdGVwQWN0aW9uLFxuICAgICAgICBuZXh0U3RlcHM6IHN0ZXAubmV4dFN0ZXBzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlU3RlcEluV29ya2Zsb3cod29ya2Zsb3dJZCwgc3RlcElkLCB7XG4gICAgICAgIC4uLnN0ZXAsXG4gICAgICAgIG5leHRTdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6ICdTSU5HTEUnLCBleHByZXNzaW9uOiBjb25kaXRpb25FeHByZXNzaW9uIH1dLFxuICAgICAgICAgICAgbmV4dFN0ZXBJZDogbmV3U3RlcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { filter } from 'rxjs';\nimport { AXPWorkflowEventService } from './workflow-event-dispatcher.service';\nimport { cloneDeep, get } from 'lodash-es';\nimport { setSmart } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowContext {\n constructor(initialData = {}) {\n this.variables = {};\n this.stepOutputs = new Map();\n this.variables = cloneDeep(initialData);\n }\n setVariable(key, value) {\n setSmart(this.variables, key, value);\n }\n setVariables(context = {}) {\n this.variables = { ...this.variables, ...context };\n }\n getVariable(key) {\n return !key ? this.variables : get(this.variables, key);\n }\n setOutput(key, output) {\n this.stepOutputs.set(key, output);\n }\n setOutputs(values) {\n this.stepOutputs = new Map([...this.stepOutputs, ...values]);\n }\n getOutput(key) {\n return this.stepOutputs.get(key);\n }\n}\nexport class AXPWorkflowAction {\n constructor() {\n this.eventService = inject(AXPWorkflowEventService);\n }\n dispatch(event) {\n this.eventService.dispatch(event);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowAction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowAction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowAction, decorators: [{\n type: Injectable\n }] });\nexport class AXPWorkflowFunction {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowFunction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowFunction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowFunction, decorators: [{\n type: Injectable\n }] });\nexport function createWorkFlowEvent(type) {\n const eventCreator = (payload) => ({ type, payload });\n eventCreator.type = type;\n return eventCreator;\n}\nexport function ofType(...allowedTypes) {\n return filter((event) => allowedTypes.some((type) => event.type === type.type));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvd29ya2Zsb3cudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBUWpELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBWSxjQUFtQixFQUFFO1FBSXpCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUpoRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBS0QsV0FBVyxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0QsWUFBWSxDQUFDLFVBQWUsRUFBRTtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFdBQVcsQ0FBVSxHQUFtQjtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxNQUFXO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQXdCO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRCxTQUFTLENBQVUsR0FBVztRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQXlCRCxNQUFNLE9BQWdCLGlCQUFpQjtJQUR2QztRQUVVLGlCQUFZLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FPeEQ7SUFMVyxRQUFRLENBQUMsS0FBdUI7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0FMbUIsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRHRDLFVBQVU7O0FBWVgsTUFBTSxPQUFnQixtQkFBbUI7K0dBQW5CLG1CQUFtQjttSEFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUR4QyxVQUFVOztBQVlYLE1BQU0sVUFBVSxtQkFBbUIsQ0FBSSxJQUFZO0lBQ2pELE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekQsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDekIsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQTZCLEdBQUcsWUFBcUM7SUFDekYsT0FBTyxNQUFNLENBQUMsQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHNldFNtYXJ0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvdyB7XG4gIHN0ZXBzOiB7IFtzdGVwTmFtZTogc3RyaW5nXTogQVhQV29ya2Zsb3dTdGVwIH07XG4gIHN0YXJ0U3RlcElkOiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93Q29udGV4dCB7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbERhdGE6IGFueSA9IHt9KSB7XG4gICAgdGhpcy52YXJpYWJsZXMgPSBjbG9uZURlZXAoaW5pdGlhbERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YXJpYWJsZXM6IGFueSA9IHt9O1xuICBwcml2YXRlIHN0ZXBPdXRwdXRzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gIHNldFZhcmlhYmxlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgc2V0U21hcnQodGhpcy52YXJpYWJsZXMsIGtleSwgdmFsdWUpO1xuICB9XG5cblxuICBzZXRWYXJpYWJsZXMoY29udGV4dDogYW55ID0ge30pIHtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IHsgLi4udGhpcy52YXJpYWJsZXMsIC4uLmNvbnRleHQgfTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlPFQgPSBhbnk+KGtleT86IHN0cmluZyB8IG51bGwpOiBUIHtcbiAgICByZXR1cm4gIWtleSA/IHRoaXMudmFyaWFibGVzIDogZ2V0KHRoaXMudmFyaWFibGVzLCBrZXkpO1xuICB9XG5cbiAgc2V0T3V0cHV0KGtleTogc3RyaW5nLCBvdXRwdXQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3RlcE91dHB1dHMuc2V0KGtleSwgb3V0cHV0KTtcbiAgfVxuXG4gIHNldE91dHB1dHModmFsdWVzOiBNYXA8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5zdGVwT3V0cHV0cyA9IG5ldyBNYXAoWy4uLnRoaXMuc3RlcE91dHB1dHMsIC4uLnZhbHVlc10pXG4gIH1cblxuICBnZXRPdXRwdXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwT3V0cHV0cy5nZXQoa2V5KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0FjdGlvbklucHV0ID0gYW55O1xuXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd0NvbmRpdGlvblR5cGUgPSAnQU5EJyB8ICdPUicgfCAnU0lOR0xFJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NvbmRpdGlvbiB7XG4gIHR5cGU6IEFYUFdvcmtmbG93Q29uZGl0aW9uVHlwZTtcbiAgY29uZGl0aW9ucz86IEFYUFdvcmtmbG93Q29uZGl0aW9uW107IC8vIE5lc3RlZCBjb25kaXRpb25zXG4gIGV4cHJlc3Npb24/OiBzdHJpbmc7IC8vIFVzZWQgaWYgdHlwZSBpcyAnU0lOR0xFJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93TmV4dFN0ZXAge1xuICBjb25kaXRpb25zOiBBWFBXb3JrZmxvd0NvbmRpdGlvbltdO1xuICBuZXh0U3RlcElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dTdGVwIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGFjdGlvbjogQVhQV29ya2Zsb3dBY3Rpb24gfCBzdHJpbmc7XG4gIGlucHV0PzogQVhQV29ya2Zsb3dBY3Rpb25JbnB1dDtcbiAgbmV4dFN0ZXBzPzogQVhQV29ya2Zsb3dOZXh0U3RlcFtdO1xuICBjb25kaXRpb25zPzogQVhQV29ya2Zsb3dDb25kaXRpb25bXTtcbn1cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG4gIHByaXZhdGUgZXZlbnRTZXJ2aWNlID0gaW5qZWN0KEFYUFdvcmtmbG93RXZlbnRTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgZGlzcGF0Y2goZXZlbnQ6IEFYUFdvcmtmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaChldmVudCk7XG4gIH1cblxuICBhYnN0cmFjdCBleGVjdXRlKGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCk6IFByb21pc2U8dm9pZD47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFBXb3JrZmxvd0Z1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZXhlY3V0ZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8YW55PiB8IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0V2ZW50PFQgPSBhbnk+IHtcbiAgdHlwZTogc3RyaW5nO1xuICBwYXlsb2FkPzogVDtcbn1cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JrRmxvd0V2ZW50PFQ+KHR5cGU6IHN0cmluZykge1xuICBjb25zdCBldmVudENyZWF0b3IgPSAocGF5bG9hZDogVCkgPT4gKHsgdHlwZSwgcGF5bG9hZCB9KTtcbiAgZXZlbnRDcmVhdG9yLnR5cGUgPSB0eXBlO1xuICByZXR1cm4gZXZlbnRDcmVhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2ZUeXBlPFQgZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PiguLi5hbGxvd2VkVHlwZXM6IEFycmF5PHsgdHlwZTogc3RyaW5nIH0+KSB7XG4gIHJldHVybiBmaWx0ZXIoKGV2ZW50OiBUKSA9PiBhbGxvd2VkVHlwZXMuc29tZSgodHlwZSkgPT4gZXZlbnQudHlwZSA9PT0gdHlwZS50eXBlKSk7XG59XG4iXX0=","import { Injectable } from \"@angular/core\";\nimport { AXPWorkflowAction } from \"../workflow.types\";\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowDecideAction extends AXPWorkflowAction {\n async execute(context) {\n // its a fake action\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDecideAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDecideAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDecideAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9hY3Rpb25zL2RlY2lkZS5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sbUJBQW1CLENBQUM7O0FBTTFFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUFDMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUEyQjtRQUNyQyxvQkFBb0I7SUFDeEIsQ0FBQzsrR0FIUSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZwQixNQUFNOzs0RkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dDb250ZXh0IH0gZnJvbSBcIi4uL3dvcmtmbG93LnR5cGVzXCI7XG5cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dEZWNpZGVBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gaXRzIGEgZmFrZSBhY3Rpb25cbiAgICB9XG59Il19","import { Injectable, Injector, inject } from '@angular/core';\nimport { cloneDeep, set } from 'lodash-es';\nimport { AXPWorkflowError } from './errors.types';\nimport { AXPWorkflowEventService } from './workflow-event-dispatcher.service';\nimport { AXPWorkflowRegistryService } from './workflow-registery.service';\nimport { AXPWorkflowContext, } from './workflow.types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./workflow-registery.service\";\nexport class AXPWorkflowService {\n get events$() {\n return this.eventService.events$;\n }\n constructor(registryService, injector) {\n this.registryService = registryService;\n this.injector = injector;\n this.eventService = inject(AXPWorkflowEventService);\n }\n exists(name) {\n return !!this.registryService.getWorkflow(name);\n }\n async execute(workflow, initialContext = null) {\n // Instantiate or retrieve the workflow\n const wk = typeof workflow === 'string' ? this.getWorkflowInstance(workflow) : workflow;\n let currentStepId = wk.startStepId;\n const context = initialContext instanceof AXPWorkflowContext\n ? initialContext\n : new AXPWorkflowContext(this.processData(initialContext) ?? {});\n // Initialize context with initial variables\n while (currentStepId) {\n const currentStep = wk.steps[currentStepId];\n if (!currentStep) {\n throw new AXPWorkflowError(`Step '${currentStepId}' not found in the workflow steps.`);\n }\n // Instantiate or retrieve the action\n const action = typeof currentStep.action === 'string' ? this.getActionInstance(currentStep.action) : currentStep.action;\n //\n if (currentStep.input) {\n let inputs = {};\n await this.processInputs(cloneDeep(currentStep.input), inputs, '', context);\n await new Promise((resolve) => setTimeout(async () => {\n Object.assign(action, inputs);\n resolve(0);\n }));\n }\n try {\n await new Promise((resolve) => setTimeout(async () => {\n await action.execute(context);\n resolve(0);\n }, 0));\n }\n catch (error) {\n console.error(error);\n throw new AXPWorkflowError('Workflow Error', error);\n }\n // Determine the next step based on the conditions\n const nextStepInfo = await this.determineNextStep(currentStep, context);\n if (nextStepInfo) {\n currentStepId = nextStepInfo.nextStepId;\n }\n else {\n break; // Exit the loop if no next step is determined\n }\n }\n return context;\n }\n processData(initialContext) {\n //TODO: update values with expressions and return new object\n return initialContext;\n }\n getActionInstance(actionName) {\n const actionType = this.registryService.getAction(actionName);\n if (!actionType) {\n throw new AXPWorkflowError(`Action type '${actionName}' not found in the registry.`);\n }\n return this.injector.get(actionType);\n }\n getWorkflowInstance(workflowName) {\n const workflowType = this.registryService.getWorkflow(workflowName);\n if (!workflowType) {\n throw new AXPWorkflowError(`Workflow type '${workflowName}' not found in the registry.`);\n }\n return workflowType;\n }\n async determineNextStep(currentStep, context) {\n if (!currentStep.nextSteps) {\n return null;\n }\n for (const nextStep of currentStep.nextSteps) {\n if (await this.evaluateCondition(nextStep.conditions, context)) {\n return nextStep;\n }\n }\n return null;\n }\n async evaluateCondition(conditions, context) {\n if (!conditions || conditions.length === 0) {\n return true; // If no conditions, the step proceeds\n }\n // Map each condition to a promise using evaluateSingleCondition\n const conditionPromises = conditions.map((condition) => this.evaluateSingleCondition(condition, context));\n // Wait for all promises to resolve\n const results = await Promise.all(conditionPromises);\n // Check if every condition is true\n return results.every((result) => result);\n }\n async evaluateSingleCondition(condition, context) {\n switch (condition.type) {\n case 'SINGLE':\n return (!condition.expression ? true : await this.evaluateExpression(condition.expression, context));\n case 'AND':\n // Evaluate all conditions with 'AND' logic\n const andConditions = condition.conditions ?? [];\n const andResults = await Promise.all(andConditions.map((cond) => this.evaluateSingleCondition(cond, context)));\n return andResults.every((result) => result);\n case 'OR':\n // Evaluate all conditions with 'OR' logic\n const orConditions = condition.conditions ?? [];\n const orResults = await Promise.all(orConditions.map((cond) => this.evaluateSingleCondition(cond, context)));\n return orResults.some((result) => result);\n default:\n throw new AXPWorkflowError(`Unsupported condition type: ${condition.type}`);\n }\n }\n //TODO: return any and recursively update object, update scopes\n async evaluateExpression(templateExpression, context) {\n try {\n let expression = '';\n if (typeof templateExpression === 'string' && templateExpression.trim().includes('{{')) {\n const expressionMatch = templateExpression.match(/\\{\\{\\s*(.*?)\\s*\\}\\}/);\n if (!expressionMatch) {\n throw Error(`No valid expression found in \"${templateExpression}\"`);\n }\n expression = expressionMatch[1];\n }\n else {\n expression = templateExpression;\n }\n // Create a scope that includes context and registered functions\n const scope = { context, ...this.createFunctionScope() };\n // Evaluating the expression within the created scope\n const sandbox = new Function('scope', `return (async function() { with (scope) { return ${expression}; } })();`);\n const result = await sandbox(scope);\n return result;\n }\n catch (error) {\n console.error('Error evaluating expression:', error);\n return false;\n }\n }\n async processInputs(obj, inputs, pathPrefix = '', context = {}) {\n if (!obj) {\n return;\n }\n for await (const i of Object.entries(obj)) {\n const key = i[0];\n const value = i[1];\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n if (typeof value === 'string' && value.trim().includes('{{')) {\n const expValue = await this.evaluateExpression(value, context);\n set(inputs, currentPath, expValue);\n }\n else if (typeof value === 'object' &&\n value !== null &&\n (value.constructor === Object || Array.isArray(value))) {\n // Recursively handle nested objects\n this.processInputs(value, inputs, currentPath, context);\n }\n else {\n // Apply static values directly\n set(inputs, currentPath, value);\n }\n }\n }\n createFunctionScope() {\n const scope = {};\n this.registryService.getFunctionNames().forEach((name) => {\n scope[name] = this.getFunctionInstance(name).execute;\n });\n return { methods: { scope } };\n }\n getFunctionInstance(functionName) {\n const functionType = this.registryService.getFunction(functionName);\n if (!functionType) {\n throw new AXPWorkflowError(`Function type '${functionName}' not found in the registry.`);\n }\n return this.injector.get(functionType);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowService, deps: [{ token: i1.AXPWorkflowRegistryService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.AXPWorkflowRegistryService }, { type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi93b3JrZmxvdy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBSUwsa0JBQWtCLEdBS25CLE1BQU0sa0JBQWtCLENBQUM7OztBQUsxQixNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQW9CLGVBQTJDLEVBQVUsUUFBa0I7UUFBdkUsb0JBQWUsR0FBZixlQUFlLENBQTRCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQU5uRixpQkFBWSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBTXdDLENBQUM7SUFFaEcsTUFBTSxDQUFDLElBQVk7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUdELEtBQUssQ0FBQyxPQUFPLENBQ1gsUUFBOEIsRUFDOUIsaUJBQWtELElBQUk7UUFFdEQsdUNBQXVDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMs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SUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sK0JBQStCO2dCQUMvQixHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUFvQjtRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixZQUFZLDhCQUE4QixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0FwTlUsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RXJyb3IgfSBmcm9tICcuL2Vycm9ycy50eXBlcyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0V2ZW50U2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvdy1yZWdpc3Rlcnkuc2VydmljZSc7XG5pbXBvcnQge1xuICBBWFBXb3JrZmxvdyxcbiAgQVhQV29ya2Zsb3dBY3Rpb24sXG4gIEFYUFdvcmtmbG93Q29uZGl0aW9uLFxuICBBWFBXb3JrZmxvd0NvbnRleHQsXG4gIEFYUFdvcmtmbG93RXZlbnQsXG4gIEFYUFdvcmtmbG93RnVuY3Rpb24sXG4gIEFYUFdvcmtmbG93TmV4dFN0ZXAsXG4gIEFYUFdvcmtmbG93U3RlcCxcbn0gZnJvbSAnLi93b3JrZmxvdy50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXb3JrZmxvd1NlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd0V2ZW50U2VydmljZSk7XG5cbiAgZ2V0IGV2ZW50cyQoKTogT2JzZXJ2YWJsZTxBWFBXb3JrZmxvd0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLmV2ZW50cyQ7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZ2lzdHJ5U2VydmljZTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICBleGlzdHMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cobmFtZSk7XG4gIH1cblxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgd29ya2Zsb3c6IEFYUFdvcmtmbG93IHwgc3RyaW5nLFxuICAgIGluaXRpYWxDb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQgfCBhbnkgfCBudWxsID0gbnVsbFxuICApOiBQcm9taXNlPEFYUFdvcmtmbG93Q29udGV4dD4ge1xuICAgIC8vIEluc3RhbnRpYXRlIG9yIHJldHJpZXZlIHRoZSB3b3JrZmxvd1xuICAgIGNvbnN0IHdrID0gdHlwZW9mIHdvcmtmbG93ID09PSAnc3RyaW5nJyA/IHRoaXMuZ2V0V29ya2Zsb3dJbnN0YW5jZSh3b3JrZmxvdykgOiB3b3JrZmxvdztcblxuICAgIGxldCBjdXJyZW50U3RlcElkID0gd2suc3RhcnRTdGVwSWQ7XG4gICAgY29uc3QgY29udGV4dCA9XG4gICAgICBpbml0aWFsQ29udGV4dCBpbnN0YW5jZW9mIEFYUFdvcmtmbG93Q29udGV4dFxuICAgICAgICA/IGluaXRpYWxDb250ZXh0XG4gICAgICAgIDogbmV3IEFYUFdvcmtmbG93Q29udGV4dCh0aGlzLnByb2Nlc3NEYXRhKGluaXRpYWxDb250ZXh0KSA/PyB7fSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBjb250ZXh0IHdpdGggaW5pdGlhbCB2YXJpYWJsZXNcblxuICAgIHdoaWxlIChjdXJyZW50U3RlcElkKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHdrLnN0ZXBzW2N1cnJlbnRTdGVwSWRdO1xuICAgICAgaWYgKCFjdXJyZW50U3RlcCkge1xuICAgICAgICB0aHJvdyBuZXcgQVhQV29ya2Zsb3dFcnJvcihgU3RlcCAnJHtjdXJyZW50U3RlcElkfScgbm90IGZvdW5kIGluIHRoZSB3b3JrZmxvdyBzdGVwcy5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5zdGFudGlhdGUgb3IgcmV0cmlldmUgdGhlIGFjdGlvblxuICAgICAgY29uc3QgYWN0aW9uID1cbiAgICAgICAgdHlwZW9mIGN1cnJlbnRTdGVwLmFjdGlvbiA9PT0gJ3N0cmluZycgPyB0aGlzLmdldEFjdGlvbkluc3RhbmNlKGN1cnJlbnRTdGVwLmFjdGlvbikgOiBjdXJyZW50U3RlcC5hY3Rpb247XG4gICAgICAvL1xuICAgICAgaWYgKGN1cnJlbnRTdGVwLmlucHV0KSB7XG4gICAgICAgIGxldCBpbnB1dHM6IGFueSA9IHt9O1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NJbnB1dHMoY2xvbmVEZWVwKGN1cnJlbnRTdGVwLmlucHV0KSwgaW5wdXRzLCAnJywgY29udGV4dCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIGlucHV0cyk7XG4gICAgICAgICAgICByZXNvbHZlKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbi5leGVjdXRlKGNvbnRleHQpO1xuICAgICAgICAgICAgcmVzb2x2ZSgwKTtcbiAgICAgICAgICB9LCAwKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBBWFBXb3JrZmxvd0Vycm9yKCdXb3JrZmxvdyBFcnJvcicsIGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIERldGVybWluZSB0aGUgbmV4dCBzdGVwIGJhc2VkIG9uIHRoZSBjb25kaXRpb25zXG4gICAgICBjb25zdCBuZXh0U3RlcEluZm8gPSBhd2FpdCB0aGlzLmRldGVybWluZU5leHRTdGVwKGN1cnJlbnRTdGVwLCBjb250ZXh0KTtcbiAgICAgIGlmIChuZXh0U3RlcEluZm8pIHtcbiAgICAgICAgY3VycmVudFN0ZXBJZCA9IG5leHRTdGVwSW5mby5uZXh0U3RlcElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7IC8vIEV4aXQgdGhlIGxvb3AgaWYgbm8gbmV4dCBzdGVwIGlzIGRldGVybWluZWRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEYXRhKGluaXRpYWxDb250ZXh0OiBhbnkpOiBhbnkge1xuICAgIC8vVE9ETzogdXBkYXRlIHZhbHVlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCByZXR1cm4gbmV3IG9iamVjdFxuICAgIHJldHVybiBpbml0aWFsQ29udGV4dDtcbiAgfVxuXG5cblxuICBwcml2YXRlIGdldEFjdGlvbkluc3RhbmNlKGFjdGlvbk5hbWU6IHN0cmluZyk6IEFYUFdvcmtmbG93QWN0aW9uIHtcbiAgICBjb25zdCBhY3Rpb25UeXBlID0gdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0QWN0aW9uKGFjdGlvbk5hbWUpO1xuICAgIGlmICghYWN0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYEFjdGlvbiB0eXBlICcke2FjdGlvbk5hbWV9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoYWN0aW9uVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFdvcmtmbG93SW5zdGFuY2Uod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvdyB7XG4gICAgY29uc3Qgd29ya2Zsb3dUeXBlID0gdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0V29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgICBpZiAoIXdvcmtmbG93VHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYFdvcmtmbG93IHR5cGUgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtmbG93VHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGV0ZXJtaW5lTmV4dFN0ZXAoXG4gICAgY3VycmVudFN0ZXA6IEFYUFdvcmtmbG93U3RlcCxcbiAgICBjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHRcbiAgKTogUHJvbWlzZTxBWFBXb3JrZmxvd05leHRTdGVwIHwgbnVsbD4ge1xuICAgIGlmICghY3VycmVudFN0ZXAubmV4dFN0ZXBzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuZXh0U3RlcCBvZiBjdXJyZW50U3RlcC5uZXh0U3RlcHMpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKG5leHRTdGVwLmNvbmRpdGlvbnMsIGNvbnRleHQpKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlQ29uZGl0aW9uKGNvbmRpdGlvbnM6IEFYUFdvcmtmbG93Q29uZGl0aW9uW10sIGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY29uZGl0aW9ucyB8fCBjb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIElmIG5vIGNvbmRpdGlvbnMsIHRoZSBzdGVwIHByb2NlZWRzXG4gICAgfVxuXG4gICAgLy8gTWFwIGVhY2ggY29uZGl0aW9uIHRvIGEgcHJvbWlzZSB1c2luZyBldmFsdWF0ZVNpbmdsZUNvbmRpdGlvblxuICAgIGNvbnN0IGNvbmRpdGlvblByb21pc2VzID0gY29uZGl0aW9ucy5tYXAoKGNvbmRpdGlvbikgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kaXRpb24sIGNvbnRleHQpKTtcblxuICAgIC8vIFdhaXQgZm9yIGFsbCBwcm9taXNlcyB0byByZXNvbHZlXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNvbmRpdGlvblByb21pc2VzKTtcblxuICAgIC8vIENoZWNrIGlmIGV2ZXJ5IGNvbmRpdGlvbiBpcyB0cnVlXG4gICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHJlc3VsdCkgPT4gcmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXZhbHVhdGVTaW5nbGVDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBBWFBXb3JrZmxvd0NvbmRpdGlvbixcbiAgICBjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgc3dpdGNoIChjb25kaXRpb24udHlwZSkge1xuICAgICAgY2FzZSAnU0lOR0xFJzpcbiAgICAgICAgcmV0dXJuICghY29uZGl0aW9uLmV4cHJlc3Npb24gPyB0cnVlIDogYXdhaXQgdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24oY29uZGl0aW9uLmV4cHJlc3Npb24sIGNvbnRleHQpKSBhcyBib29sZWFuO1xuICAgICAgY2FzZSAnQU5EJzpcbiAgICAgICAgLy8gRXZhbHVhdGUgYWxsIGNvbmRpdGlvbnMgd2l0aCAnQU5EJyBsb2dpY1xuICAgICAgICBjb25zdCBhbmRDb25kaXRpb25zID0gY29uZGl0aW9uLmNvbmRpdGlvbnMgPz8gW107XG4gICAgICAgIGNvbnN0IGFuZFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChhbmRDb25kaXRpb25zLm1hcCgoY29uZCkgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kLCBjb250ZXh0KSkpO1xuICAgICAgICByZXR1cm4gYW5kUmVzdWx0cy5ldmVyeSgocmVzdWx0KSA9PiByZXN1bHQpO1xuXG4gICAgICBjYXNlICdPUic6XG4gICAgICAgIC8vIEV2YWx1YXRlIGFsbCBjb25kaXRpb25zIHdpdGggJ09SJyBsb2dpY1xuICAgICAgICBjb25zdCBvckNvbmRpdGlvbnMgPSBjb25kaXRpb24uY29uZGl0aW9ucyA/PyBbXTtcbiAgICAgICAgY29uc3Qgb3JSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwob3JDb25kaXRpb25zLm1hcCgoY29uZCkgPT4gdGhpcy5ldmFsdWF0ZVNpbmdsZUNvbmRpdGlvbihjb25kLCBjb250ZXh0KSkpO1xuICAgICAgICByZXR1cm4gb3JSZXN1bHRzLnNvbWUoKHJlc3VsdCkgPT4gcmVzdWx0KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEFYUFdvcmtmbG93RXJyb3IoYFVuc3VwcG9ydGVkIGNvbmRpdGlvbiB0eXBlOiAke2NvbmRpdGlvbi50eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vVE9ETzogcmV0dXJuIGFueSBhbmQgcmVjdXJzaXZlbHkgdXBkYXRlIG9iamVjdCwgdXBkYXRlIHNjb3Blc1xuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlRXhwcmVzc2lvbih0ZW1wbGF0ZUV4cHJlc3Npb246IHN0cmluZywgY29udGV4dDogQVhQV29ya2Zsb3dDb250ZXh0KTogUHJvbWlzZTxCb29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBleHByZXNzaW9uID0gJyc7XG4gICAgICBpZiAodHlwZW9mIHRlbXBsYXRlRXhwcmVzc2lvbiA9PT0gJ3N0cmluZycgJiYgdGVtcGxhdGVFeHByZXNzaW9uLnRyaW0oKS5pbmNsdWRlcygne3snKSkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uTWF0Y2ggPSB0ZW1wbGF0ZUV4cHJlc3Npb24ubWF0Y2goL1xce1xce1xccyooLio/KVxccypcXH1cXH0vKTtcbiAgICAgICAgaWYgKCFleHByZXNzaW9uTWF0Y2gpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gdmFsaWQgZXhwcmVzc2lvbiBmb3VuZCBpbiBcIiR7dGVtcGxhdGVFeHByZXNzaW9ufVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25NYXRjaFsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSB0ZW1wbGF0ZUV4cHJlc3Npb247XG4gICAgICB9XG4gICAgICAvLyBDcmVhdGUgYSBzY29wZSB0aGF0IGluY2x1ZGVzIGNvbnRleHQgYW5kIHJlZ2lzdGVyZWQgZnVuY3Rpb25zXG4gICAgICBjb25zdCBzY29wZSA9IHsgY29udGV4dCwgLi4udGhpcy5jcmVhdGVGdW5jdGlvblNjb3BlKCkgfTtcbiAgICAgIC8vIEV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gd2l0aGluIHRoZSBjcmVhdGVkIHNjb3BlXG4gICAgICBjb25zdCBzYW5kYm94ID0gbmV3IEZ1bmN0aW9uKCdzY29wZScsIGByZXR1cm4gKGFzeW5jIGZ1bmN0aW9uKCkgeyB3aXRoIChzY29wZSkgeyByZXR1cm4gJHtleHByZXNzaW9ufTsgfSB9KSgpO2ApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveChzY29wZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBldmFsdWF0aW5nIGV4cHJlc3Npb246JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0lucHV0cyhvYmo6IGFueSwgaW5wdXRzOiBhbnksIHBhdGhQcmVmaXg6IHN0cmluZyA9ICcnLCBjb250ZXh0OiBhbnkgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBpIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IGlbMV07XG4gICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGhQcmVmaXggPyBgJHtwYXRoUHJlZml4fS4ke2tleX1gIDoga2V5O1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmluY2x1ZGVzKCd7eycpKSB7XG4gICAgICAgIGNvbnN0IGV4cFZhbHVlID0gYXdhaXQgdGhpcy5ldmFsdWF0ZUV4cHJlc3Npb24odmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBzZXQoaW5wdXRzLCBjdXJyZW50UGF0aCwgZXhwVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAodmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkIG9iamVjdHNcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXRzKHZhbHVlLCBpbnB1dHMsIGN1cnJlbnRQYXRoLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFwcGx5IHN0YXRpYyB2YWx1ZXMgZGlyZWN0bHlcbiAgICAgICAgc2V0KGlucHV0cywgY3VycmVudFBhdGgsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uU2NvcGUoKTogYW55IHtcbiAgICBjb25zdCBzY29wZTogYW55ID0ge307XG4gICAgdGhpcy5yZWdpc3RyeVNlcnZpY2UuZ2V0RnVuY3Rpb25OYW1lcygpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIHNjb3BlW25hbWVdID0gdGhpcy5nZXRGdW5jdGlvbkluc3RhbmNlKG5hbWUpLmV4ZWN1dGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbWV0aG9kczogeyBzY29wZSB9IH07XG4gIH1cblxuICBwcml2YXRlIGdldEZ1bmN0aW9uSW5zdGFuY2UoZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBBWFBXb3JrZmxvd0Z1bmN0aW9uIHtcbiAgICBjb25zdCBmdW5jdGlvblR5cGUgPSB0aGlzLnJlZ2lzdHJ5U2VydmljZS5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUpO1xuICAgIGlmICghZnVuY3Rpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgQVhQV29ya2Zsb3dFcnJvcihgRnVuY3Rpb24gdHlwZSAnJHtmdW5jdGlvbk5hbWV9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoZnVuY3Rpb25UeXBlKTtcbiAgfVxufVxuIl19","import { inject, Injectable } from \"@angular/core\";\nimport { AXPWorkflowAction } from \"../workflow.types\";\nimport { AXPWorkflowService } from \"../workflow.service\";\nimport * as i0 from \"@angular/core\";\nexport class AXPStartWorkflowAction extends AXPWorkflowAction {\n constructor() {\n super(...arguments);\n this.workflowService = inject(AXPWorkflowService);\n }\n async execute(context) {\n //console.log(\"start WK current context\", context);\n //console.log(\"start WK input context\", this.context);\n if (this.context)\n context.setVariables(this.context);\n //console.log(\"start WK merged context\", context);\n try {\n await this.workflowService.execute(this.workflow, context);\n }\n catch (e) {\n throw e;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPStartWorkflowAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPStartWorkflowAction, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPStartWorkflowAction, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtd29ya2Zsb3cuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2FjdGlvbnMvc3RhcnQtd29ya2Zsb3cuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLekQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQUg3RDs7UUFLWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0tBa0J2RDtJQWRHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBMkI7UUFDckMsbURBQW1EO1FBQ25ELHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsQ0FBQztRQUNaLENBQUM7SUFFTCxDQUFDOytHQW5CUSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZuQixNQUFNOzs0RkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93QWN0aW9uLCBBWFBXb3JrZmxvd0NvbnRleHQgfSBmcm9tIFwiLi4vd29ya2Zsb3cudHlwZXNcIjtcbmltcG9ydCB7IEFYUFdvcmtmbG93U2VydmljZSB9IGZyb20gXCIuLi93b3JrZmxvdy5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gZXh0ZW5kcyBBWFBXb3JrZmxvd0FjdGlvbiB7XG5cbiAgICBwcml2YXRlIHdvcmtmbG93U2VydmljZSA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpXG4gICAgcHJpdmF0ZSB3b3JrZmxvdzogc3RyaW5nO1xuICAgIHByaXZhdGUgY29udGV4dDogYW55O1xuXG4gICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGN1cnJlbnQgY29udGV4dFwiLCBjb250ZXh0KTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIGlucHV0IGNvbnRleHRcIiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIGNvbnRleHQuc2V0VmFyaWFibGVzKHRoaXMuY29udGV4dClcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0IFdLIG1lcmdlZCBjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53b3JrZmxvd1NlcnZpY2UuZXhlY3V0ZSh0aGlzLndvcmtmbG93LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG4iXX0=","// ============================================\n// WORKFLOW INSTANCE v3.0.0 TYPES\n// Based on Elsa Workflow Instance schema: https://elsaworkflows.io/schemas/workflow-instance/v3.0.0/schema.json\n// Compatible with Elsa backend while using ACoreX naming conventions\n// ============================================\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctaW5zdGFuY2UudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxpQ0FBaUM7QUFDakMsZ0hBQWdIO0FBQ2hILHFFQUFxRTtBQUNyRSwrQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV09SS0ZMT1cgSU5TVEFOQ0UgdjMuMC4wIFRZUEVTXG4vLyBCYXNlZCBvbiBFbHNhIFdvcmtmbG93IEluc3RhbmNlIHNjaGVtYTogaHR0cHM6Ly9lbHNhd29ya2Zsb3dzLmlvL3NjaGVtYXMvd29ya2Zsb3ctaW5zdGFuY2UvdjMuMC4wL3NjaGVtYS5qc29uXG4vLyBDb21wYXRpYmxlIHdpdGggRWxzYSBiYWNrZW5kIHdoaWxlIHVzaW5nIEFDb3JlWCBuYW1pbmcgY29udmVudGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogV29ya2Zsb3cgc3RhdHVzLlxuICovXG5leHBvcnQgdHlwZSBBWFBXb3JrZmxvd1N0YXR1cyA9ICdSdW5uaW5nJyB8ICdGaW5pc2hlZCc7XG5cbi8qKlxuICogV29ya2Zsb3cgc3ViLXN0YXR1cy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dTdWJTdGF0dXMgPSAnUGVuZGluZycgfCAnRXhlY3V0aW5nJyB8ICdTdXNwZW5kZWQnIHwgJ0ZpbmlzaGVkJyB8ICdDYW5jZWxsZWQnIHwgJ0ZhdWx0ZWQnO1xuXG4vKipcbiAqIEFjdGl2aXR5IHN0YXR1cy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlTdGF0dXMgPSAnUnVubmluZycgfCAnQ29tcGxldGVkJyB8ICdDYW5jZWxlZCcgfCAnRmF1bHRlZCc7XG5cbi8qKlxuICogRXhjZXB0aW9uIHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUEV4Y2VwdGlvblN0YXRlIHtcbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiB0eXBlIG5hbWUuXG4gICAqL1xuICB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGFjayB0cmFjZSAobnVsbGFibGUpLlxuICAgKi9cbiAgc3RhY2tUcmFjZT86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElubmVyIGV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgaW5uZXJFeGNlcHRpb24/OiBBWFBFeGNlcHRpb25TdGF0ZSB8IG51bGw7XG59XG5cbi8qKlxuICogQWN0aXZpdHkgaW5jaWRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWN0aXZpdHlJbmNpZGVudCB7XG4gIC8qKlxuICAgKiBBY3Rpdml0eSBJRCB0aGF0IGNhdXNlZCB0aGUgaW5jaWRlbnQuXG4gICAqL1xuICBhY3Rpdml0eUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IG5vZGUgSUQuXG4gICAqL1xuICBhY3Rpdml0eU5vZGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSB0eXBlLlxuICAgKi9cbiAgYWN0aXZpdHlUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluY2lkZW50IG1lc3NhZ2UuXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgZXhjZXB0aW9uPzogQVhQRXhjZXB0aW9uU3RhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgKElTTyBkYXRlLXRpbWUpLlxuICAgKi9cbiAgdGltZXN0YW1wOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgZmF1bHQgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dGYXVsdFN0YXRlIHtcbiAgLyoqXG4gICAqIEV4Y2VwdGlvbiAobnVsbGFibGUpLlxuICAgKi9cbiAgZXhjZXB0aW9uPzogQVhQRXhjZXB0aW9uU3RhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBGYXVsdCBtZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGYXVsdGVkIGFjdGl2aXR5IElEIChudWxsYWJsZSkuXG4gICAqL1xuICBmYXVsdGVkQWN0aXZpdHlJZD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogQm9va21hcmsuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQm9va21hcmsge1xuICAvKipcbiAgICogQm9va21hcmsgSUQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBuYW1lLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBoYXNoLlxuICAgKi9cbiAgaGFzaDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCb29rbWFyayBwYXlsb2FkIChudWxsYWJsZSkuXG4gICAqL1xuICBwYXlsb2FkPzogYW55IHwgbnVsbDtcblxuICAvKipcbiAgICogQWN0aXZpdHkgbm9kZSBJRC5cbiAgICovXG4gIGFjdGl2aXR5Tm9kZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IGluc3RhbmNlIElELlxuICAgKi9cbiAgYWN0aXZpdHlJbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dG8gYnVybiBmbGFnLlxuICAgKi9cbiAgYXV0b0J1cm4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBtZXRob2QgbmFtZSAobnVsbGFibGUpLlxuICAgKi9cbiAgY2FsbGJhY2tNZXRob2ROYW1lPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgKG51bGxhYmxlKS5cbiAgICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGw7XG59XG5cbi8qKlxuICogQ29tcGxldGlvbiBjYWxsYmFjayBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBDb21wbGV0aW9uQ2FsbGJhY2tTdGF0ZSB7XG4gIC8qKlxuICAgKiBPd25lciBhY3Rpdml0eSBpbnN0YW5jZSBJRC5cbiAgICovXG4gIG93bmVySW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDaGlsZCBhY3Rpdml0eSBub2RlIElELlxuICAgKi9cbiAgY2hpbGROb2RlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTWV0aG9kIG5hbWUgKG51bGxhYmxlKS5cbiAgICovXG4gIG1ldGhvZE5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIFZhcmlhYmxlIChmb3IgYWN0aXZpdHkgY29udGV4dCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWN0aXZpdHlWYXJpYWJsZSB7XG4gIC8qKlxuICAgKiBWYXJpYWJsZSBJRC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhcmlhYmxlIG5hbWUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgbmFtZS5cbiAgICovXG4gIHR5cGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElzIGFycmF5IGZsYWcuXG4gICAqL1xuICBpc0FycmF5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmFyaWFibGUgdmFsdWUgKG51bGxhYmxlKS5cbiAgICovXG4gIHZhbHVlPzogYW55IHwgbnVsbDtcblxuICAvKipcbiAgICogU3RvcmFnZSBkcml2ZXIgdHlwZSBuYW1lIChudWxsYWJsZSkuXG4gICAqL1xuICBzdG9yYWdlRHJpdmVyVHlwZU5hbWU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIEFjdGl2aXR5IGV4ZWN1dGlvbiBjb250ZXh0IHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFjdGl2aXR5RXhlY3V0aW9uQ29udGV4dFN0YXRlIHtcbiAgLyoqXG4gICAqIENvbnRleHQgSUQgKGFjdGl2aXR5IGluc3RhbmNlIElEKS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhcmVudCBjb250ZXh0IElEIChudWxsYWJsZSkuXG4gICAqL1xuICBwYXJlbnRDb250ZXh0SWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTY2hlZHVsZWQgYWN0aXZpdHkgbm9kZSBJRC5cbiAgICovXG4gIHNjaGVkdWxlZEFjdGl2aXR5Tm9kZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE93bmVyIGFjdGl2aXR5IG5vZGUgSUQgKG51bGxhYmxlKS5cbiAgICovXG4gIG93bmVyQWN0aXZpdHlOb2RlSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGJhZy5cbiAgICovXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0YXRlIChldmFsdWF0ZWQgcHJvcGVydGllcykgKG51bGxhYmxlKS5cbiAgICovXG4gIGFjdGl2aXR5U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcblxuICAvKipcbiAgICogRHluYW1pYyB2YXJpYWJsZXMuXG4gICAqL1xuICBkeW5hbWljVmFyaWFibGVzOiBBWFBBY3Rpdml0eVZhcmlhYmxlW107XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1czogQVhQQWN0aXZpdHlTdGF0dXM7XG5cbiAgLyoqXG4gICAqIElzIGV4ZWN1dGluZyBmbGFnLlxuICAgKi9cbiAgaXNFeGVjdXRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZhdWx0IGNvdW50LlxuICAgKi9cbiAgZmF1bHRDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdGFydGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSkuXG4gICAqL1xuICBzdGFydGVkQXQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcGxldGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSwgbnVsbGFibGUpLlxuICAgKi9cbiAgY29tcGxldGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUYWcgKG51bGxhYmxlKS5cbiAgICovXG4gIHRhZz86IGFueSB8IG51bGw7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgc3RhdGUgKGludGVybmFsIGV4ZWN1dGlvbiBzdGF0ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dTdGF0ZSB7XG4gIC8qKlxuICAgKiBTdGF0ZSBJRC5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGRlZmluaXRpb24gSUQuXG4gICAqL1xuICBkZWZpbml0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgZGVmaW5pdGlvbiB2ZXJzaW9uLlxuICAgKi9cbiAgZGVmaW5pdGlvblZlcnNpb246IG51bWJlcjtcblxuICAvKipcbiAgICogQ29ycmVsYXRpb24gSUQgKG51bGxhYmxlKS5cbiAgICovXG4gIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGF0dXMuXG4gICAqL1xuICBzdGF0dXM6IEFYUFdvcmtmbG93U3RhdHVzO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdWItc3RhdHVzLlxuICAgKi9cbiAgc3ViU3RhdHVzOiBBWFBXb3JrZmxvd1N1YlN0YXR1cztcblxuICAvKipcbiAgICogQm9va21hcmtzLlxuICAgKi9cbiAgYm9va21hcmtzOiBBWFBCb29rbWFya1tdO1xuXG4gIC8qKlxuICAgKiBJbmNpZGVudHMuXG4gICAqL1xuICBpbmNpZGVudHM6IEFYUEFjdGl2aXR5SW5jaWRlbnRbXTtcblxuICAvKipcbiAgICogRmF1bHQgKG51bGxhYmxlKS5cbiAgICovXG4gIGZhdWx0PzogQVhQV29ya2Zsb3dGYXVsdFN0YXRlIHwgbnVsbDtcblxuICAvKipcbiAgICogQ29tcGxldGlvbiBjYWxsYmFja3MuXG4gICAqL1xuICBjb21wbGV0aW9uQ2FsbGJhY2tzOiBBWFBDb21wbGV0aW9uQ2FsbGJhY2tTdGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSBleGVjdXRpb24gY29udGV4dHMuXG4gICAqL1xuICBhY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRzOiBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBkYXRhLlxuICAgKi9cbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIE91dHB1dCBkYXRhLlxuICAgKi9cbiAgb3V0cHV0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGJhZy5cbiAgICovXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lKS5cbiAgICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIGF0IHRpbWVzdGFtcCAoSVNPIGRhdGUtdGltZSkuXG4gICAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcblxuICAvKipcbiAgICogRmluaXNoZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lLCBudWxsYWJsZSkuXG4gICAqL1xuICBmaW5pc2hlZEF0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBpbnN0YW5jZSAoc3RvcmVkIGluIGRhdGFiYXNlKS5cbiAqIFRoaXMgbWF0Y2hlcyB0aGUgRWxzYSBXb3JrZmxvdyBJbnN0YW5jZSBzY2hlbWEgZm9yIGJhY2tlbmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0luc3RhbmNlIHtcbiAgLyoqXG4gICAqIFNjaGVtYSByZWZlcmVuY2UuXG4gICAqL1xuICAkc2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBkZWZpbml0aW9uIElELlxuICAgKi9cbiAgZGVmaW5pdGlvbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGRlZmluaXRpb24gdmVyc2lvbiBJRC5cbiAgICovXG4gIGRlZmluaXRpb25WZXJzaW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgZGVmaW5pdGlvbiB2ZXJzaW9uIG51bWJlci5cbiAgICovXG4gIHZlcnNpb246IG51bWJlcjtcblxuICAvKipcbiAgICogUGFyZW50IHdvcmtmbG93IGluc3RhbmNlIElEIChudWxsYWJsZSwgZm9yIGNoaWxkIHdvcmtmbG93cykuXG4gICAqL1xuICBwYXJlbnRXb3JrZmxvd0luc3RhbmNlSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGF0ZSAoaW50ZXJuYWwgZXhlY3V0aW9uIHN0YXRlKS5cbiAgICovXG4gIHdvcmtmbG93U3RhdGU6IEFYUFdvcmtmbG93U3RhdGU7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN0YXR1cy5cbiAgICovXG4gIHN0YXR1czogQVhQV29ya2Zsb3dTdGF0dXM7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN1Yi1zdGF0dXMuXG4gICAqL1xuICBzdWJTdGF0dXM6IEFYUFdvcmtmbG93U3ViU3RhdHVzO1xuXG4gIC8qKlxuICAgKiBDb3JyZWxhdGlvbiBJRCAobnVsbGFibGUpLlxuICAgKi9cbiAgY29ycmVsYXRpb25JZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG5hbWUgKG51bGxhYmxlKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJbmNpZGVudCBjb3VudC5cbiAgICovXG4gIGluY2lkZW50Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlZCBhdCB0aW1lc3RhbXAgKElTTyBkYXRlLXRpbWUpLlxuICAgKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgYXQgdGltZXN0YW1wIChJU08gZGF0ZS10aW1lKS5cbiAgICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaW5pc2hlZCBhdCB0aW1lc3RhbXAgKElTTyBkYXRlLXRpbWUsIG51bGxhYmxlKS5cbiAgICovXG4gIGZpbmlzaGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBFbnRpdHkgcmVmZXJlbmNlIElEIChmb3IgbGlua2luZyB3b3JrZmxvdyBpbnN0YW5jZXMgdG8gYnVzaW5lc3MgZW50aXRpZXMpLlxuICAgKi9cbiAgZW50aXR5UmVmSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBFbnRpdHkgcmVmZXJlbmNlIHR5cGUgKGUuZy4sICdIdW1hbkNhcGl0YWxNYW5hZ2VtZW50LkxlYXZlUmVxdWVzdCcpLlxuICAgKi9cbiAgZW50aXR5UmVmVHlwZT86IHN0cmluZyB8IG51bGw7XG59XG5cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const AXP_ACTIVITY_PROVIDER = new InjectionToken('AXP_ACTIVITY_PROVIDER', {\n factory: () => [],\n});\nexport const AXP_ACTIVITY_CATEGORY_PROVIDER = new InjectionToken('AXP_ACTIVITY_CATEGORY_PROVIDER', {\n factory: () => [],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvYWN0aXZpdHkvYWN0aXZpdHktZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUE2Qix1QkFBdUIsRUFBRTtJQUN6RyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUM7QUF1QkgsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQXFDLGdDQUFnQyxFQUFFO0lBQ25JLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0NBQ3BCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBBY3Rpdml0eUNhdGVnb3J5LCBBWFBBY3Rpdml0eURlZmluaXRpb24gfSBmcm9tICcuL2FjdGl2aXR5LnR5cGVzJztcblxuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlQcm92aWRlclRva2VuID1cbiAgICB8IEFYUEFjdGl2aXR5UHJvdmlkZXJcbiAgICB8IFByb21pc2U8QVhQQWN0aXZpdHlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfQUNUSVZJVFlfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQWN0aXZpdHlQcm92aWRlclRva2VuW10+KCdBWFBfQUNUSVZJVFlfUFJPVklERVInLCB7XG4gICAgZmFjdG9yeTogKCkgPT4gW10sXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBBWFBBY3Rpdml0eVByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBHZXQgbGlzdCBvZiBhY3Rpdml0eSBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeS5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCAtIENhdGVnb3J5IElEIHRvIGZpbHRlciBhY3Rpdml0aWVzXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBhY3Rpdml0eSBkZWZpbml0aW9ucyBhcnJheVxuICAgICAqL1xuICAgIGdldExpc3QoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eURlZmluaXRpb25bXT47XG4gICAgXG4gICAgLyoqXG4gICAgICogR2V0IGFjdGl2aXR5IGRlZmluaXRpb24gYnkgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpLlxuICAgICAqIFRoZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGNvbW1hbmQga2V5IGZvciBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIG5hbWUgLSBBY3Rpdml0eSBuYW1lICh1bmlxdWUgaWRlbnRpZmllciBhbmQgY29tbWFuZCBrZXkpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBhY3Rpdml0eSBkZWZpbml0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeUlkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyVG9rZW4gPVxuICAgIHwgQVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfQUNUSVZJVFlfQ0FURUdPUllfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQWN0aXZpdHlDYXRlZ29yeVByb3ZpZGVyVG9rZW5bXT4oJ0FYUF9BQ1RJVklUWV9DQVRFR09SWV9QUk9WSURFUicsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeVtdPjtcbiAgICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+O1xufVxuXG4iXX0=","//#region ---- Imports ----\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER } from './activity-definition.provider';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Optimized Activity Definition Service\n *\n * Manages activity definitions (metadata) for UI and tooling.\n * Similar to AXPReportDefinitionService - only handles metadata, not execution.\n *\n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has activities (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\nexport class AXPActivityDefinitionService {\n constructor() {\n //#region ---- Providers & Caches ----\n this.categoryProviders = inject(AXP_ACTIVITY_CATEGORY_PROVIDER, { optional: true }) || [];\n this.activityProviders = inject(AXP_ACTIVITY_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Cache Storage ----\n /** Cache for categories by id - O(1) lookup */\n this.categoriesById = new Map();\n /** Cache for categories by parentId - O(1) lookup */\n this.categoriesByParentId = new Map();\n /** Cache for activity definitions by categoryId - O(1) lookup */\n this.activitiesByCategory = new Map();\n /** Cache for individual activity definitions by name - O(1) lookup */\n this.activitiesByName = new Map();\n /** Track which provider index owns each category (by category ID) */\n this.categoryOwnership = new Map(); // Maps categoryId → provider index\n /** Pending API requests to prevent duplicate calls */\n this.pendingCategoriesRequests = new Map();\n this.pendingActivitiesRequests = new Map();\n this.pendingActivityRequests = new Map();\n }\n //#endregion\n //#region ---- Initialization ----\n //#endregion\n //#region ---- Public API: Categories ----\n /**\n * Get categories by parentId with aggressive caching\n *\n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n *\n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId) {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId);\n }\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId);\n }\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategoriesFromProviders(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single category by ID with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n /**\n * Get category path from root to specified category\n *\n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId) {\n const path = [];\n let currentCategoryId = categoryId;\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n return path;\n }\n //#endregion\n //#region ---- Public API: Activity Definitions ----\n /**\n * Get activity definitions for a category with smart caching\n *\n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches activity definitions\n * - Returns cached result on subsequent calls\n *\n * @param categoryId - Category ID to get activity definitions from\n * @returns Array of activity definitions\n */\n async getActivitiesByCategoryId(categoryId) {\n // ✅ Fast path: Return cached result\n if (this.activitiesByCategory.has(categoryId)) {\n return this.activitiesByCategory.get(categoryId);\n }\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no activities - cache empty array and skip API call\n const emptyArray = [];\n this.activitiesByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n // ✅ Prevent duplicate requests\n if (this.pendingActivitiesRequests.has(categoryId)) {\n return this.pendingActivitiesRequests.get(categoryId);\n }\n // ✅ Load from providers\n const requestPromise = this.loadActivitiesFromProviders(categoryId);\n this.pendingActivitiesRequests.set(categoryId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single activity definition by name with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval\n *\n * @param name - Activity name (unique identifier and command key)\n * @returns Activity definition or undefined if not found\n */\n async getActivityByName(name) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.activitiesByName.has(name)) {\n return this.activitiesByName.get(name);\n }\n // ✅ Prevent duplicate requests\n if (this.pendingActivityRequests.has(name)) {\n return this.pendingActivityRequests.get(name);\n }\n // ✅ Load from providers\n const requestPromise = this.loadActivityFromProviders(name);\n this.pendingActivityRequests.set(name, requestPromise);\n return requestPromise;\n }\n /**\n * Get category ID containing a specific activity definition\n *\n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByActivityName(activityName) {\n // ✅ Search in cached activity definitions\n for (const [categoryId, definitions] of this.activitiesByCategory.entries()) {\n if (definitions.some(def => def.name === activityName)) {\n return categoryId;\n }\n }\n // ✅ Try loading the activity definition to find its category\n const definition = await this.getActivityByName(activityName);\n if (definition && definition.category) {\n // Try to find category by name/id\n const categories = await this.getCategories();\n const found = categories.find(cat => cat.id === definition.category || cat.title === definition.category);\n if (found) {\n return found.id;\n }\n }\n return undefined;\n }\n /**\n * Get category path for an activity\n */\n async getCategoriesPathByActivityName(activityName) {\n const categoryId = await this.getCategoryIdByActivityName(activityName);\n if (!categoryId) {\n throw new Error(`Activity '${activityName}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n //#endregion\n //#region ---- Private: Data Loading ----\n /**\n * Load categories from providers and cache results\n *\n * Optimization: Tracks provider ownership to avoid unnecessary API calls\n * - For root (parentId = undefined): Query ALL providers\n * - For children: Only query the provider that owns the parent\n */\n async loadCategoriesFromProviders(parentId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.categoryProviders);\n const categories = [];\n // Determine which provider(s) to query\n const providerIndicesToQuery = parentId\n ? this.getProviderIndexForCategory(parentId)\n : null; // Root: query all providers\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const cats = await p.value.getList(parentId);\n if (Array.isArray(cats) && cats.length > 0) {\n categories.push(...cats);\n // ✅ Track ownership: This provider INDEX owns these categories\n cats.forEach(cat => this.categoryOwnership.set(cat.id, i));\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, categories);\n categories.forEach(cat => this.categoriesById.set(cat.id, cat));\n return categories;\n }\n finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n /**\n * Get the provider index that owns a specific category\n *\n * @returns Array with provider index, or null if ownership unknown (query all)\n */\n getProviderIndexForCategory(categoryId) {\n const ownerIndex = this.categoryOwnership.get(categoryId);\n if (ownerIndex !== undefined) {\n return [ownerIndex];\n }\n // Ownership unknown - will query all providers (fallback)\n return null;\n }\n /**\n * Load activity definitions from providers and cache results\n *\n * Optimization: Only queries the provider that owns the category\n * Uses provider INDEX to match category provider with activity provider\n */\n async loadActivitiesFromProviders(categoryId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.activityProviders);\n const definitions = [];\n // ✅ Smart routing: Get provider INDEX that owns this category\n const ownerIndex = this.categoryOwnership.get(categoryId);\n const providerIndicesToQuery = ownerIndex !== undefined ? [ownerIndex] : null;\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const defs = await p.value.getList(categoryId);\n if (Array.isArray(defs)) {\n definitions.push(...defs);\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.activitiesByCategory.set(categoryId, definitions);\n definitions.forEach(def => {\n if (def.name) {\n this.activitiesByName.set(def.name, def);\n }\n });\n return definitions;\n }\n finally {\n this.pendingActivitiesRequests.delete(categoryId);\n }\n }\n /**\n * Load single activity definition from providers and cache result\n */\n async loadActivityFromProviders(name) {\n try {\n const resolvedProviders = await Promise.allSettled(this.activityProviders);\n // Try providers first\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value && typeof p.value.getById === 'function') {\n try {\n const result = await p.value.getById(name);\n if (result) {\n this.activitiesByName.set(name, result);\n return result;\n }\n }\n catch {\n // Continue on error\n }\n }\n }\n // Fallback: Search in cached activity definitions\n for (const definitions of this.activitiesByCategory.values()) {\n const found = definitions.find(def => def.name === name);\n if (found) {\n this.activitiesByName.set(name, found);\n return found;\n }\n }\n return undefined;\n }\n finally {\n this.pendingActivityRequests.delete(name);\n }\n }\n /**\n * Breadth-first search through category hierarchy\n */\n async searchCategoryInHierarchy(categoryId) {\n const searchQueue = [undefined];\n const searched = new Set();\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift();\n if (searched.has(parentId))\n continue;\n searched.add(parentId);\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n return found;\n }\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n return undefined;\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n /**\n * Check if category has activities (uses cached count)\n */\n categoryHasActivities(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n /**\n * Clear all caches\n */\n clearAllCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.activitiesByCategory.clear();\n this.activitiesByName.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingActivitiesRequests.clear();\n this.pendingActivityRequests.clear();\n }\n /**\n * Clear categories cache only\n */\n clearCategoriesCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n }\n /**\n * Clear activities cache only\n */\n clearActivitiesCache() {\n this.activitiesByCategory.clear();\n this.activitiesByName.clear();\n this.pendingActivitiesRequests.clear();\n this.pendingActivityRequests.clear();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPActivityDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPActivityDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPActivityDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9hY3Rpdml0eS9hY3Rpdml0eS1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx5QkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUUxRSxzRUFBc0U7UUFDOUQscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFFcEUscUVBQXFFO1FBQzdELHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDLENBQUMsbUNBQW1DO1FBRTFGLHNEQUFzRDtRQUM5Qyw4QkFBeUIsR0FBRyxJQUFJ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QUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOytHQWhkUSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUZ6QixNQUFNOzs0RkFFVCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEFjdGl2aXR5Q2F0ZWdvcnksIEFYUEFjdGl2aXR5RGVmaW5pdGlvbiB9IGZyb20gJy4vYWN0aXZpdHkudHlwZXMnO1xuaW1wb3J0IHsgQVhQX0FDVElWSVRZX0NBVEVHT1JZX1BST1ZJREVSLCBBWFBfQUNUSVZJVFlfUFJPVklERVIgfSBmcm9tICcuL2FjdGl2aXR5LWRlZmluaXRpb24ucHJvdmlkZXInO1xuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBPcHRpbWl6ZWQgQWN0aXZpdHkgRGVmaW5pdGlvbiBTZXJ2aWNlXG4gKiBcbiAqIE1hbmFnZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnMgKG1ldGFkYXRhKSBmb3IgVUkgYW5kIHRvb2xpbmcuXG4gKiBTaW1pbGFyIHRvIEFYUFJlcG9ydERlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIGFjdGl2aXRpZXMgKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDMuIEFnZ3Jlc3NpdmUgY2FjaGluZyBwcmV2ZW50cyBkdXBsaWNhdGUgQVBJIGNhbGxzXG4gKiA0LiBTaW5nbGUgcGVuZGluZyByZXF1ZXN0IHBlciByZXNvdXJjZSBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnNcbiAqIDUuIExhenkgbG9hZGluZyAtIG9ubHkgbG9hZHMgZGF0YSB3aGVuIG5lZWRlZFxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIHtcbiAgICAvLyNyZWdpb24gLS0tLSAgIFByb3ZpZGVycyAmIENhY2hlcyAgIC0tLS1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlQcm92aWRlcnMgPSBpbmplY3QoQVhQX0FDVElWSVRZX0NBVEVHT1JZX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZpdHlQcm92aWRlcnMgPSBpbmplY3QoQVhQX0FDVElWSVRZX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IFtdO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhY2hlIFN0b3JhZ2UgICAtLS0tXG5cbiAgICAvKiogQ2FjaGUgZm9yIGNhdGVnb3JpZXMgYnkgaWQgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcmllc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgQVhQQWN0aXZpdHlDYXRlZ29yeT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlQYXJlbnRJZCA9IG5ldyBNYXA8c3RyaW5nIHwgdW5kZWZpbmVkLCBBWFBBY3Rpdml0eUNhdGVnb3J5W10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGFjdGl2aXR5IGRlZmluaXRpb25zIGJ5IGNhdGVnb3J5SWQgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgYWN0aXZpdGllc0J5Q2F0ZWdvcnkgPSBuZXcgTWFwPHN0cmluZywgQVhQQWN0aXZpdHlEZWZpbml0aW9uW10+KCk7XG5cbiAgICAvKiogQ2FjaGUgZm9yIGluZGl2aWR1YWwgYWN0aXZpdHkgZGVmaW5pdGlvbnMgYnkgbmFtZSAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBhY3Rpdml0aWVzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIEFYUEFjdGl2aXR5RGVmaW5pdGlvbj4oKTtcblxuICAgIC8qKiBUcmFjayB3aGljaCBwcm92aWRlciBpbmRleCBvd25zIGVhY2ggY2F0ZWdvcnkgKGJ5IGNhdGVnb3J5IElEKSAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlPd25lcnNoaXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBNYXBzIGNhdGVnb3J5SWQg4oaSIHByb3ZpZGVyIGluZGV4XG5cbiAgICAvKiogUGVuZGluZyBBUEkgcmVxdWVzdHMgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgKi9cbiAgICBwcml2YXRlIHBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZyB8IHVuZGVmaW5lZCwgUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPj4oKTtcbiAgICBwcml2YXRlIHBlbmRpbmdBY3Rpdml0eVJlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPj4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBJbml0aWFsaXphdGlvbiAgIC0tLS1cblxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IENhdGVnb3JpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCB3aXRoIGFnZ3Jlc3NpdmUgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogUmV0dXJucyBjYWNoZWQgcmVzdWx0IGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSxcbiAgICAgKiBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IEFQSSBjYWxscyBkdXJpbmcgbmF2aWdhdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXJlbnRJZCAtIFBhcmVudCBjYXRlZ29yeSBJRCAodW5kZWZpbmVkID0gcm9vdCBjYXRlZ29yaWVzKVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGNhdGVnb3JpZXMgd2l0aCBjb3VudCBtZXRhZGF0YSAoY2hpbGRyZW5Db3VudCwgaXRlbXNDb3VudClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuaGFzKHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHM6IFJldHVybiBwZW5kaW5nIHByb21pc2VcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmdldChwYXJlbnRJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIENyZWF0ZSBzaW5nbGUgcmVxdWVzdCBhbmQgY2FjaGUgaXRcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5zZXQocGFyZW50SWQsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpbmdsZSBjYXRlZ29yeSBieSBJRCB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWwsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiBzZWFyY2hpbmcgY2FjaGUsIHRoZW4gcHJvdmlkZXJzIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogTygxKSBsb29rdXAgaW4gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5SWQuaGFzKGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCBwYXJlbnQtY2hpbGQgbGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yaWVzIG9mIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0ZWdvcnlJZCwgZm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIHJvb3QgY2F0ZWdvcmllcyBpZiBub3QgbG9hZGVkXG4gICAgICAgIGlmICghdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXModW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBoaWVyYXJjaHlcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmcm9tIHJvb3QgdG8gc3BlY2lmaWVkIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBCdWlsZHMgcGF0aCB1c2luZyBjYWNoZWQgY2F0ZWdvcmllcyBvbmx5XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IHBhdGg6IEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5SWQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGN1cnJlbnRDYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGVnb3J5ICcke2N1cnJlbnRDYXRlZ29yeUlkfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5SWQgPSBjYXRlZ29yeS5wYXJlbnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgQVBJOiBBY3Rpdml0eSBEZWZpbml0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBhY3Rpdml0eSBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeSB3aXRoIHNtYXJ0IGNhY2hpbmdcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IENoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgaXRlbXNDb3VudCA+IDAsIGxvYWRzIGFuZCBjYWNoZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnNcbiAgICAgKiAtIFJldHVybnMgY2FjaGVkIHJlc3VsdCBvbiBzdWJzZXF1ZW50IGNhbGxzXG4gICAgICogXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBnZXQgYWN0aXZpdHkgZGVmaW5pdGlvbnMgZnJvbVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWN0aXZpdGllc0J5Q2F0ZWdvcnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIC8vIOKchSBGYXN0IHBhdGg6IFJldHVybiBjYWNoZWQgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmhhcyhjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIGFjdGl2aXRpZXMgLSBjYWNoZSBlbXB0eSBhcnJheSBhbmQgc2tpcCBBUEkgY2FsbFxuICAgICAgICAgICAgY29uc3QgZW1wdHlBcnJheTogQVhQQWN0aXZpdHlEZWZpbml0aW9uW10gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGVtcHR5QXJyYXkpO1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5QXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdBY3Rpdml0aWVzUmVxdWVzdHMuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIGZyb20gcHJvdmlkZXJzXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5sb2FkQWN0aXZpdGllc0Zyb21Qcm92aWRlcnMoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5zZXQoY2F0ZWdvcnlJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIGFjdGl2aXR5IGRlZmluaXRpb24gYnkgbmFtZSB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWxcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbmFtZSAtIEFjdGl2aXR5IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyIGFuZCBjb21tYW5kIGtleSlcbiAgICAgKiBAcmV0dXJucyBBY3Rpdml0eSBkZWZpbml0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY3Rpdml0eUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyDinIUgRmFzdCBwYXRoOiBPKDEpIGxvb2t1cCBpbiBjYWNoZVxuICAgICAgICBpZiAodGhpcy5hY3Rpdml0aWVzQnlOYW1lLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQWN0aXZpdHlSZXF1ZXN0cy5nZXQobmFtZSkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRBY3Rpdml0eUZyb21Qcm92aWRlcnMobmFtZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuc2V0KG5hbWUsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3J5IElEIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBhY3Rpdml0eSBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBTZWFyY2hlcyBjYWNoZSBmaXJzdCwgbG9hZHMgb24tZGVtYW5kIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5SWRCeUFjdGl2aXR5TmFtZShhY3Rpdml0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGRlZmluaXRpb25zXSBvZiB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zLnNvbWUoZGVmID0+IGRlZi5uYW1lID09PSBhY3Rpdml0eU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgVHJ5IGxvYWRpbmcgdGhlIGFjdGl2aXR5IGRlZmluaXRpb24gdG8gZmluZCBpdHMgY2F0ZWdvcnlcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZpdHlCeU5hbWUoYWN0aXZpdHlOYW1lKTtcbiAgICAgICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5jYXRlZ29yeSkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgY2F0ZWdvcnkgYnkgbmFtZS9pZFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBjYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gZGVmaW5pdGlvbi5jYXRlZ29yeSB8fCBjYXQudGl0bGUgPT09IGRlZmluaXRpb24uY2F0ZWdvcnkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmb3IgYW4gYWN0aXZpdHlcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzUGF0aEJ5QWN0aXZpdHlOYW1lKGFjdGl2aXR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eUNhdGVnb3J5W10+IHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlJZEJ5QWN0aXZpdHlOYW1lKGFjdGl2aXR5TmFtZSk7XG4gICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpdml0eSAnJHthY3Rpdml0eU5hbWV9JyBub3QgZm91bmQgaW4gYW55IGNhdGVnb3J5YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQpO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQcml2YXRlOiBEYXRhIExvYWRpbmcgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGNhdGVnb3JpZXMgZnJvbSBwcm92aWRlcnMgYW5kIGNhY2hlIHJlc3VsdHNcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IFRyYWNrcyBwcm92aWRlciBvd25lcnNoaXAgdG8gYXZvaWQgdW5uZWNlc3NhcnkgQVBJIGNhbGxzXG4gICAgICogLSBGb3Igcm9vdCAocGFyZW50SWQgPSB1bmRlZmluZWQpOiBRdWVyeSBBTEwgcHJvdmlkZXJzXG4gICAgICogLSBGb3IgY2hpbGRyZW46IE9ubHkgcXVlcnkgdGhlIHByb3ZpZGVyIHRoYXQgb3ducyB0aGUgcGFyZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkQ2F0ZWdvcmllc0Zyb21Qcm92aWRlcnMocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQcm92aWRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5jYXRlZ29yeVByb3ZpZGVycyk7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzOiBBWFBBY3Rpdml0eUNhdGVnb3J5W10gPSBbXTtcblxuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHByb3ZpZGVyKHMpIHRvIHF1ZXJ5XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gcGFyZW50SWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0UHJvdmlkZXJJbmRleEZvckNhdGVnb3J5KHBhcmVudElkKVxuICAgICAgICAgICAgICAgIDogbnVsbDsgLy8gUm9vdDogcXVlcnkgYWxsIHByb3ZpZGVyc1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc29sdmVkUHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHJlc29sdmVkUHJvdmlkZXJzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgcHJvdmlkZXIgaW5kZXggYW5kIHRoaXMgaXNuJ3QgaXRcbiAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXJJbmRpY2VzVG9RdWVyeSAhPT0gbnVsbCAmJiAhcHJvdmlkZXJJbmRpY2VzVG9RdWVyeS5pbmNsdWRlcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0TGlzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0cyA9IGF3YWl0IHAudmFsdWUuZ2V0TGlzdChwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYXRzKSAmJiBjYXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goLi4uY2F0cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDinIUgVHJhY2sgb3duZXJzaGlwOiBUaGlzIHByb3ZpZGVyIElOREVYIG93bnMgdGhlc2UgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdHMuZm9yRWFjaChjYXQgPT4gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5zZXQoY2F0LmlkLCBpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeVBhcmVudElkLnNldChwYXJlbnRJZCwgY2F0ZWdvcmllcyk7XG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goY2F0ID0+IHRoaXMuY2F0ZWdvcmllc0J5SWQuc2V0KGNhdC5pZCwgY2F0KSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjYXRlZ29yaWVzO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmRlbGV0ZShwYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHByb3ZpZGVyIGluZGV4IHRoYXQgb3ducyBhIHNwZWNpZmljIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogQHJldHVybnMgQXJyYXkgd2l0aCBwcm92aWRlciBpbmRleCwgb3IgbnVsbCBpZiBvd25lcnNoaXAgdW5rbm93biAocXVlcnkgYWxsKVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UHJvdmlkZXJJbmRleEZvckNhdGVnb3J5KGNhdGVnb3J5SWQ6IHN0cmluZyk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG93bmVySW5kZXggPSB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmdldChjYXRlZ29yeUlkKTtcblxuICAgICAgICBpZiAob3duZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW293bmVySW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3duZXJzaGlwIHVua25vd24gLSB3aWxsIHF1ZXJ5IGFsbCBwcm92aWRlcnMgKGZhbGxiYWNrKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGFjdGl2aXR5IGRlZmluaXRpb25zIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRzXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBPbmx5IHF1ZXJpZXMgdGhlIHByb3ZpZGVyIHRoYXQgb3ducyB0aGUgY2F0ZWdvcnlcbiAgICAgKiBVc2VzIHByb3ZpZGVyIElOREVYIHRvIG1hdGNoIGNhdGVnb3J5IHByb3ZpZGVyIHdpdGggYWN0aXZpdHkgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBY3Rpdml0aWVzRnJvbVByb3ZpZGVycyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLmFjdGl2aXR5UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBBY3Rpdml0eURlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgU21hcnQgcm91dGluZzogR2V0IHByb3ZpZGVyIElOREVYIHRoYXQgb3ducyB0aGlzIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gb3duZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gW293bmVySW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZnMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goLi4uZGVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LnNldChjYXRlZ29yeUlkLCBkZWZpbml0aW9ucyk7XG4gICAgICAgICAgICBkZWZpbml0aW9ucy5mb3JFYWNoKGRlZiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5zZXQoZGVmLm5hbWUsIGRlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXRpZXNSZXF1ZXN0cy5kZWxldGUoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHNpbmdsZSBhY3Rpdml0eSBkZWZpbml0aW9uIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBY3Rpdml0eUZyb21Qcm92aWRlcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBBY3Rpdml0eURlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuYWN0aXZpdHlQcm92aWRlcnMpO1xuXG4gICAgICAgICAgICAvLyBUcnkgcHJvdmlkZXJzIGZpcnN0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0QnlJZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcC52YWx1ZS5nZXRCeUlkKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5zZXQobmFtZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZhbGxiYWNrOiBTZWFyY2ggaW4gY2FjaGVkIGFjdGl2aXR5IGRlZmluaXRpb25zXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb25zIG9mIHRoaXMuYWN0aXZpdGllc0J5Q2F0ZWdvcnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGRlZmluaXRpb25zLmZpbmQoZGVmID0+IGRlZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpdml0aWVzQnlOYW1lLnNldChuYW1lLCBmb3VuZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpdml0eVJlcXVlc3RzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyZWFkdGgtZmlyc3Qgc2VhcmNoIHRocm91Z2ggY2F0ZWdvcnkgaGllcmFyY2h5XG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBzZWFyY2hDYXRlZ29yeUluSGllcmFyY2h5KGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlDYXRlZ29yeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBzZWFyY2hRdWV1ZTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFt1bmRlZmluZWRdO1xuICAgICAgICBjb25zdCBzZWFyY2hlZCA9IG5ldyBTZXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgICAgIHdoaWxlIChzZWFyY2hRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNlYXJjaFF1ZXVlLnNoaWZ0KCkhO1xuICAgICAgICAgICAgaWYgKHNlYXJjaGVkLmhhcyhwYXJlbnRJZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2VhcmNoZWQuYWRkKHBhcmVudElkKTtcblxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcmllcyhwYXJlbnRJZCk7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmlkID09PSBjYXRlZ29yeUlkKTtcblxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgT3B0aW1pemF0aW9uOiBPbmx5IHNlYXJjaCBjaGlsZHJlbiBpZiBjaGlsZHJlbkNvdW50ID4gMFxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LmNoaWxkcmVuQ291bnQgPiAwICYmICFzZWFyY2hlZC5oYXMoY2F0ZWdvcnkuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFF1ZXVlLnB1c2goY2F0ZWdvcnkuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhY2hlIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzQ2hpbGRyZW4oY2F0ZWdvcnlJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIHJldHVybiBjYXRlZ29yeSA/IGNhdGVnb3J5LmNoaWxkcmVuQ291bnQgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgY2F0ZWdvcnkgaGFzIGFjdGl2aXRpZXMgKHVzZXMgY2FjaGVkIGNvdW50KVxuICAgICAqL1xuICAgIGNhdGVnb3J5SGFzQWN0aXZpdGllcyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCkgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGNhY2hlc1xuICAgICAqL1xuICAgIGNsZWFyQWxsQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeUNhdGVnb3J5LmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYWN0aXZpdGllc0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmNhdGVnb3J5T3duZXJzaGlwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpdml0aWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aXZpdHlSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGNhdGVnb3JpZXMgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyQ2F0ZWdvcmllc0NhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhY3Rpdml0aWVzIGNhY2hlIG9ubHlcbiAgICAgKi9cbiAgICBjbGVhckFjdGl2aXRpZXNDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3Rpdml0aWVzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLmFjdGl2aXRpZXNCeU5hbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aXZpdGllc1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGl2aXR5UmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { InjectionToken } from '@angular/core';\n/**\n * Injection token for workflow engine.\n * Default implementation is AXPWorkflowLocalEngine.\n */\nexport const AXP_WORKFLOW_ENGINE = new InjectionToken('AXP_WORKFLOW_ENGINE');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBb0QvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IscUJBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBWFBGcm9udEFjdGl2aXR5Q29tcGxldGVSZXF1ZXN0LFxuICBBWFBGcm9udEFjdGl2aXR5Q29tcGxldGVSZXNwb25zZSxcbiAgQVhQR2V0V29ya2Zsb3dTdGF0ZVJlcXVlc3QsXG4gIEFYUFJlc3VtZVdvcmtmbG93UmVxdWVzdCxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxufSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3Igd29ya2Zsb3cgZW5naW5lIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dFbmdpbmUge1xuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UuXG4gICAqXG4gICAqIENyZWF0ZXMgYSBuZXcgd29ya2Zsb3cgaW5zdGFuY2UgaW4gYmFja2VuZCBhbmQgcmV0dXJucyBpbnN0YW5jZSBJRC5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgLSBTdGFydCB3b3JrZmxvdyByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFJlc3BvbnNlIHdpdGggaW5zdGFuY2VJZCBhbmQgaW5pdGlhbCBzdGF0ZVxuICAgKlxuICAgKi9cbiAgc3RhcnQocmVxdWVzdDogQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QpOiBQcm9taXNlPEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZT47XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBhIHN1c3BlbmRlZCB3b3JrZmxvdyBpbnN0YW5jZS5cbiAgICpcbiAgICogUmVzdW1lcyB3b3JrZmxvdyBpbnN0YW5jZSBhZnRlciB1c2VyIGludGVyYWN0aW9uIChlLmcuLCBhZnRlciBzaG93LWRpYWxvZykuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gUmVzdW1lIHdvcmtmbG93IHJlcXVlc3RcbiAgICogQHJldHVybnMgUmVzdW1lIHJlc3BvbnNlIHdpdGggbmV4dCBzdGVwIGFuZCB1cGRhdGVkIHN0YXRlXG4gICAqXG4gICAqL1xuICByZXN1bWUocmVxdWVzdDogQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0KTogUHJvbWlzZTxBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlPjtcblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgd29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGUuXG4gICAqXG4gICAqIFJldHJpZXZlcyBjdXJyZW50IHN0YXRlIG9mIGEgd29ya2Zsb3cgaW5zdGFuY2UgZnJvbSBiYWNrZW5kLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCAtIEdldCBzdGF0ZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIEN1cnJlbnQgd29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGVcbiAgICpcbiAgICovXG4gIGdldFN0YXRlKHJlcXVlc3Q6IEFYUEdldFdvcmtmbG93U3RhdGVSZXF1ZXN0KTogUHJvbWlzZTxBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU+O1xuXG4gIGZyb250QWN0aXZ0eUNvbXBsZXRlKHJlcXVlc3Q6IEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlcXVlc3QpOiBQcm9taXNlPEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlc3BvbnNlPjtcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHdvcmtmbG93IGVuZ2luZS5cbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgQVhQV29ya2Zsb3dMb2NhbEVuZ2luZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9XT1JLRkxPV19FTkdJTkUgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQV29ya2Zsb3dFbmdpbmU+KCdBWFBfV09SS0ZMT1dfRU5HSU5FJyk7XG4iXX0=","import { Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Workflow Expression Scope Service\n *\n * Shared service for building expression evaluation scope from workflow data.\n * Used by both Local Engine and Mock Runtime to manage workflow data (inputs, variables, outputs).\n *\n * Responsibilities:\n * - Build expression evaluation scope from workflow state\n * - Provide context.eval() function for accessing workflow data\n * - Manage workflow data structure (inputs, variables, outputs)\n *\n * This service does NOT:\n * - Execute activities\n * - Evaluate expressions (delegates to AXPExpressionEvaluatorService)\n * - Manage workflow state (handled by runtime)\n *\n * @example\n * ```typescript\n * const scopeService = inject(WorkflowExpressionScopeService);\n *\n * // Build scope from workflow state\n * const scope = scopeService.buildScope({\n * inputs: state.input || {},\n * variables: state.variables || {},\n * outputs: activityOutputs\n * });\n *\n * // Or build from state directly\n * const scope = scopeService.buildScopeFromState(state, activityOutputs);\n * ```\n */\nexport class WorkflowExpressionScopeService {\n //#region ---- Public Methods ----\n /**\n * Build expression evaluation scope for workflow activities.\n *\n * Provides workflow-specific data (inputs, variables, outputs) and context.eval() function.\n * Other data (session, current user, etc.) are provided by expression evaluator scope providers.\n *\n * Scope includes:\n * - inputs: Workflow input values (accessible as inputs.propertyName)\n * - variables: Workflow state variables (accessible as variables.propertyName or vars.propertyName)\n * - outputs: Previous activity outputs (accessible as outputs.activityId)\n * - context.eval(path): Function to access nested properties from workflow data\n *\n * Expressions can use:\n * - {{inputs.userName}} - Direct access to workflow input\n * - {{variables.someVar}} or {{vars.someVar}} - Direct access to workflow variable\n * - {{outputs.activityId.property}} - Direct access to previous activity output\n * - {{context.eval(\"inputs.userName\")}} - Access via context.eval (supports nested paths)\n * - {{context.eval(\"variables.someVar\")}} - Access variables via context.eval\n * - {{context.eval(\"outputs.activityId.property\")}} - Access outputs via context.eval\n * - {{session.currentUser().name}} - Access current user via expression evaluator scope providers\n *\n * The context.eval() function provides a unified way to access all workflow data,\n * similar to how entity-detail-list uses context.eval() to access parent data.\n *\n * @param context - Workflow expression context containing inputs, variables, and outputs\n * @returns Expression evaluator scope with workflow data and context.eval() function\n */\n buildScope(context) {\n // Build merged workflow data object for context.eval()\n // This allows expressions like: context.eval(\"inputs.userName\") or context.eval(\"variables.count\")\n const workflowData = {\n inputs: context.inputs || {},\n variables: context.variables || {},\n vars: context.variables || {}, // Alias for convenience\n outputs: context.outputs || {},\n };\n // Build scope object with workflow-specific data and context.eval()\n // Note: AXPExpressionEvaluatorScope type expects { [namespace]: { [name]: Function } }\n // but evaluate() method actually accepts flat objects with values too\n // We'll use 'any' to allow both values and functions\n const scope = {\n // Direct access to workflow data\n inputs: workflowData.inputs,\n variables: workflowData.variables,\n vars: workflowData.vars,\n outputs: workflowData.outputs,\n // Context object with eval function (similar to entity-detail-list pattern)\n context: {\n eval: (path) => {\n // Use lodash get to access nested properties\n // Supports paths like: \"inputs.userName\", \"variables.count\", \"outputs.activityId.property\"\n return get(workflowData, path);\n },\n },\n };\n return scope;\n }\n /**\n * Build expression evaluation scope from workflow instance state.\n *\n * Convenience method that extracts data from AXPWorkflowInstanceState.\n *\n * @param state - Workflow instance state\n * @param activityOutputs - Map of activity outputs (activityId -> output)\n * @returns Expression evaluator scope with workflow data and context.eval() function\n */\n buildScopeFromState(state, activityOutputs) {\n debugger;\n // Convert activity outputs to record format\n const outputs = {};\n if (activityOutputs) {\n if (activityOutputs instanceof Map) {\n activityOutputs.forEach((output, activityId) => {\n outputs[activityId] = output;\n });\n }\n else {\n Object.assign(outputs, activityOutputs);\n }\n }\n // Convenience alias for the last activity output (if available).\n // This allows expressions like: {{outputs.last.someField}}\n if (outputs['last'] === undefined && state.lastActivityOutput !== undefined) {\n outputs['last'] = state.lastActivityOutput;\n }\n return this.buildScope({\n inputs: state.input || {},\n variables: state.variables || {},\n outputs: outputs,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowExpressionScopeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowExpressionScopeService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowExpressionScopeService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWV4cHJlc3Npb24tc2NvcGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBb0JoQyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUlILE1BQU0sT0FBTyw4QkFBOEI7SUFDekMsc0NBQXNDO0lBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNILFVBQVUsQ0FBQyxPQUFrQztRQUMzQyx1REFBdUQ7UUFDdkQsbUdBQW1HO1FBQ25HLE1BQU0sWUFBWSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDNUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtZQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsd0JBQXdCO1lBQ3ZELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLG9FQUFvRTtRQUNwRSx1RkFBdUY7UUFDdkYsc0VBQXNFO1FBQ3RFLHFEQUFxRDtRQUNyRCxNQUFNLEtBQUssR0FBUTtZQUNqQixpQ0FBaUM7WUFDakMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUztZQUNqQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBRTdCLDRFQUE0RTtZQUM1RSxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7b0JBQ3JCLDZDQUE2QztvQkFDN0MsMkZBQTJGO29CQUMzRixPQUFPLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7YUFDRjtTQUNGLENBQUM7UUFFRixPQUFPLEtBQW9DLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsbUJBQW1CLENBQ2pCLEtBQStCLEVBQy9CLGVBQXdEO1FBRXhELFFBQVEsQ0FBQztRQUNULDRDQUE0QztRQUM1QyxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxlQUFlLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUU7b0JBQzdDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBRUQsaUVBQWlFO1FBQ2pFLDJEQUEyRDtRQUMzRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLGtCQUFrQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVFLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDN0MsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNyQixNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3pCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDaEMsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FyR1UsOEJBQThCO21IQUE5Qiw4QkFBOEIsY0FGN0IsTUFBTTs7NEZBRVAsOEJBQThCO2tCQUgxQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTY29wZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlIH0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogV29ya2Zsb3cgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGNvbnRleHQuXG4gKiBDb250YWlucyB3b3JrZmxvdyBzdGF0ZSBkYXRhIG5lZWRlZCBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93RXhwcmVzc2lvbkNvbnRleHQge1xuICAvKiogV29ya2Zsb3cgaW5wdXQgdmFsdWVzICovXG4gIGlucHV0czogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgXG4gIC8qKiBXb3JrZmxvdyBzdGF0ZSB2YXJpYWJsZXMgKi9cbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBcbiAgLyoqIFByZXZpb3VzIGFjdGl2aXR5IG91dHB1dHMgKGFjdGl2aXR5SWQgLT4gb3V0cHV0KSAqL1xuICBvdXRwdXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBXb3JrZmxvdyBFeHByZXNzaW9uIFNjb3BlIFNlcnZpY2VcbiAqIFxuICogU2hhcmVkIHNlcnZpY2UgZm9yIGJ1aWxkaW5nIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBzY29wZSBmcm9tIHdvcmtmbG93IGRhdGEuXG4gKiBVc2VkIGJ5IGJvdGggTG9jYWwgRW5naW5lIGFuZCBNb2NrIFJ1bnRpbWUgdG8gbWFuYWdlIHdvcmtmbG93IGRhdGEgKGlucHV0cywgdmFyaWFibGVzLCBvdXRwdXRzKS5cbiAqIFxuICogUmVzcG9uc2liaWxpdGllczpcbiAqIC0gQnVpbGQgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHNjb3BlIGZyb20gd29ya2Zsb3cgc3RhdGVcbiAqIC0gUHJvdmlkZSBjb250ZXh0LmV2YWwoKSBmdW5jdGlvbiBmb3IgYWNjZXNzaW5nIHdvcmtmbG93IGRhdGFcbiAqIC0gTWFuYWdlIHdvcmtmbG93IGRhdGEgc3RydWN0dXJlIChpbnB1dHMsIHZhcmlhYmxlcywgb3V0cHV0cylcbiAqIFxuICogVGhpcyBzZXJ2aWNlIGRvZXMgTk9UOlxuICogLSBFeGVjdXRlIGFjdGl2aXRpZXNcbiAqIC0gRXZhbHVhdGUgZXhwcmVzc2lvbnMgKGRlbGVnYXRlcyB0byBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2VydmljZSlcbiAqIC0gTWFuYWdlIHdvcmtmbG93IHN0YXRlIChoYW5kbGVkIGJ5IHJ1bnRpbWUpXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzY29wZVNlcnZpY2UgPSBpbmplY3QoV29ya2Zsb3dFeHByZXNzaW9uU2NvcGVTZXJ2aWNlKTtcbiAqIFxuICogLy8gQnVpbGQgc2NvcGUgZnJvbSB3b3JrZmxvdyBzdGF0ZVxuICogY29uc3Qgc2NvcGUgPSBzY29wZVNlcnZpY2UuYnVpbGRTY29wZSh7XG4gKiAgIGlucHV0czogc3RhdGUuaW5wdXQgfHwge30sXG4gKiAgIHZhcmlhYmxlczogc3RhdGUudmFyaWFibGVzIHx8IHt9LFxuICogICBvdXRwdXRzOiBhY3Rpdml0eU91dHB1dHNcbiAqIH0pO1xuICogXG4gKiAvLyBPciBidWlsZCBmcm9tIHN0YXRlIGRpcmVjdGx5XG4gKiBjb25zdCBzY29wZSA9IHNjb3BlU2VydmljZS5idWlsZFNjb3BlRnJvbVN0YXRlKHN0YXRlLCBhY3Rpdml0eU91dHB1dHMpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93RXhwcmVzc2lvblNjb3BlU2VydmljZSB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEJ1aWxkIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBzY29wZSBmb3Igd29ya2Zsb3cgYWN0aXZpdGllcy5cbiAgICogXG4gICAqIFByb3ZpZGVzIHdvcmtmbG93LXNwZWNpZmljIGRhdGEgKGlucHV0cywgdmFyaWFibGVzLCBvdXRwdXRzKSBhbmQgY29udGV4dC5ldmFsKCkgZnVuY3Rpb24uXG4gICAqIE90aGVyIGRhdGEgKHNlc3Npb24sIGN1cnJlbnQgdXNlciwgZXRjLikgYXJlIHByb3ZpZGVkIGJ5IGV4cHJlc3Npb24gZXZhbHVhdG9yIHNjb3BlIHByb3ZpZGVycy5cbiAgICogXG4gICAqIFNjb3BlIGluY2x1ZGVzOlxuICAgKiAtIGlucHV0czogV29ya2Zsb3cgaW5wdXQgdmFsdWVzIChhY2Nlc3NpYmxlIGFzIGlucHV0cy5wcm9wZXJ0eU5hbWUpXG4gICAqIC0gdmFyaWFibGVzOiBXb3JrZmxvdyBzdGF0ZSB2YXJpYWJsZXMgKGFjY2Vzc2libGUgYXMgdmFyaWFibGVzLnByb3BlcnR5TmFtZSBvciB2YXJzLnByb3BlcnR5TmFtZSlcbiAgICogLSBvdXRwdXRzOiBQcmV2aW91cyBhY3Rpdml0eSBvdXRwdXRzIChhY2Nlc3NpYmxlIGFzIG91dHB1dHMuYWN0aXZpdHlJZClcbiAgICogLSBjb250ZXh0LmV2YWwocGF0aCk6IEZ1bmN0aW9uIHRvIGFjY2VzcyBuZXN0ZWQgcHJvcGVydGllcyBmcm9tIHdvcmtmbG93IGRhdGFcbiAgICogXG4gICAqIEV4cHJlc3Npb25zIGNhbiB1c2U6XG4gICAqIC0ge3tpbnB1dHMudXNlck5hbWV9fSAtIERpcmVjdCBhY2Nlc3MgdG8gd29ya2Zsb3cgaW5wdXRcbiAgICogLSB7e3ZhcmlhYmxlcy5zb21lVmFyfX0gb3Ige3t2YXJzLnNvbWVWYXJ9fSAtIERpcmVjdCBhY2Nlc3MgdG8gd29ya2Zsb3cgdmFyaWFibGVcbiAgICogLSB7e291dHB1dHMuYWN0aXZpdHlJZC5wcm9wZXJ0eX19IC0gRGlyZWN0IGFjY2VzcyB0byBwcmV2aW91cyBhY3Rpdml0eSBvdXRwdXRcbiAgICogLSB7e2NvbnRleHQuZXZhbChcImlucHV0cy51c2VyTmFtZVwiKX19IC0gQWNjZXNzIHZpYSBjb250ZXh0LmV2YWwgKHN1cHBvcnRzIG5lc3RlZCBwYXRocylcbiAgICogLSB7e2NvbnRleHQuZXZhbChcInZhcmlhYmxlcy5zb21lVmFyXCIpfX0gLSBBY2Nlc3MgdmFyaWFibGVzIHZpYSBjb250ZXh0LmV2YWxcbiAgICogLSB7e2NvbnRleHQuZXZhbChcIm91dHB1dHMuYWN0aXZpdHlJZC5wcm9wZXJ0eVwiKX19IC0gQWNjZXNzIG91dHB1dHMgdmlhIGNvbnRleHQuZXZhbFxuICAgKiAtIHt7c2Vzc2lvbi5jdXJyZW50VXNlcigpLm5hbWV9fSAtIEFjY2VzcyBjdXJyZW50IHVzZXIgdmlhIGV4cHJlc3Npb24gZXZhbHVhdG9yIHNjb3BlIHByb3ZpZGVyc1xuICAgKiBcbiAgICogVGhlIGNvbnRleHQuZXZhbCgpIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdW5pZmllZCB3YXkgdG8gYWNjZXNzIGFsbCB3b3JrZmxvdyBkYXRhLFxuICAgKiBzaW1pbGFyIHRvIGhvdyBlbnRpdHktZGV0YWlsLWxpc3QgdXNlcyBjb250ZXh0LmV2YWwoKSB0byBhY2Nlc3MgcGFyZW50IGRhdGEuXG4gICAqIFxuICAgKiBAcGFyYW0gY29udGV4dCAtIFdvcmtmbG93IGV4cHJlc3Npb24gY29udGV4dCBjb250YWluaW5nIGlucHV0cywgdmFyaWFibGVzLCBhbmQgb3V0cHV0c1xuICAgKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRvciBzY29wZSB3aXRoIHdvcmtmbG93IGRhdGEgYW5kIGNvbnRleHQuZXZhbCgpIGZ1bmN0aW9uXG4gICAqL1xuICBidWlsZFNjb3BlKGNvbnRleHQ6IFdvcmtmbG93RXhwcmVzc2lvbkNvbnRleHQpOiBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGUge1xuICAgIC8vIEJ1aWxkIG1lcmdlZCB3b3JrZmxvdyBkYXRhIG9iamVjdCBmb3IgY29udGV4dC5ldmFsKClcbiAgICAvLyBUaGlzIGFsbG93cyBleHByZXNzaW9ucyBsaWtlOiBjb250ZXh0LmV2YWwoXCJpbnB1dHMudXNlck5hbWVcIikgb3IgY29udGV4dC5ldmFsKFwidmFyaWFibGVzLmNvdW50XCIpXG4gICAgY29uc3Qgd29ya2Zsb3dEYXRhID0ge1xuICAgICAgaW5wdXRzOiBjb250ZXh0LmlucHV0cyB8fCB7fSxcbiAgICAgIHZhcmlhYmxlczogY29udGV4dC52YXJpYWJsZXMgfHwge30sXG4gICAgICB2YXJzOiBjb250ZXh0LnZhcmlhYmxlcyB8fCB7fSwgLy8gQWxpYXMgZm9yIGNvbnZlbmllbmNlXG4gICAgICBvdXRwdXRzOiBjb250ZXh0Lm91dHB1dHMgfHwge30sXG4gICAgfTtcblxuICAgIC8vIEJ1aWxkIHNjb3BlIG9iamVjdCB3aXRoIHdvcmtmbG93LXNwZWNpZmljIGRhdGEgYW5kIGNvbnRleHQuZXZhbCgpXG4gICAgLy8gTm90ZTogQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlIHR5cGUgZXhwZWN0cyB7IFtuYW1lc3BhY2VdOiB7IFtuYW1lXTogRnVuY3Rpb24gfSB9XG4gICAgLy8gYnV0IGV2YWx1YXRlKCkgbWV0aG9kIGFjdHVhbGx5IGFjY2VwdHMgZmxhdCBvYmplY3RzIHdpdGggdmFsdWVzIHRvb1xuICAgIC8vIFdlJ2xsIHVzZSAnYW55JyB0byBhbGxvdyBib3RoIHZhbHVlcyBhbmQgZnVuY3Rpb25zXG4gICAgY29uc3Qgc2NvcGU6IGFueSA9IHtcbiAgICAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gd29ya2Zsb3cgZGF0YVxuICAgICAgaW5wdXRzOiB3b3JrZmxvd0RhdGEuaW5wdXRzLFxuICAgICAgdmFyaWFibGVzOiB3b3JrZmxvd0RhdGEudmFyaWFibGVzLFxuICAgICAgdmFyczogd29ya2Zsb3dEYXRhLnZhcnMsXG4gICAgICBvdXRwdXRzOiB3b3JrZmxvd0RhdGEub3V0cHV0cyxcbiAgICAgIFxuICAgICAgLy8gQ29udGV4dCBvYmplY3Qgd2l0aCBldmFsIGZ1bmN0aW9uIChzaW1pbGFyIHRvIGVudGl0eS1kZXRhaWwtbGlzdCBwYXR0ZXJuKVxuICAgICAgY29udGV4dDoge1xuICAgICAgICBldmFsOiAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgLy8gVXNlIGxvZGFzaCBnZXQgdG8gYWNjZXNzIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgLy8gU3VwcG9ydHMgcGF0aHMgbGlrZTogXCJpbnB1dHMudXNlck5hbWVcIiwgXCJ2YXJpYWJsZXMuY291bnRcIiwgXCJvdXRwdXRzLmFjdGl2aXR5SWQucHJvcGVydHlcIlxuICAgICAgICAgIHJldHVybiBnZXQod29ya2Zsb3dEYXRhLCBwYXRoKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBzY29wZSBhcyBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHNjb3BlIGZyb20gd29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGUuXG4gICAqIFxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCBleHRyYWN0cyBkYXRhIGZyb20gQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLlxuICAgKiBcbiAgICogQHBhcmFtIHN0YXRlIC0gV29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGVcbiAgICogQHBhcmFtIGFjdGl2aXR5T3V0cHV0cyAtIE1hcCBvZiBhY3Rpdml0eSBvdXRwdXRzIChhY3Rpdml0eUlkIC0+IG91dHB1dClcbiAgICogQHJldHVybnMgRXhwcmVzc2lvbiBldmFsdWF0b3Igc2NvcGUgd2l0aCB3b3JrZmxvdyBkYXRhIGFuZCBjb250ZXh0LmV2YWwoKSBmdW5jdGlvblxuICAgKi9cbiAgYnVpbGRTY29wZUZyb21TdGF0ZShcbiAgICBzdGF0ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICAgIGFjdGl2aXR5T3V0cHV0cz86IE1hcDxzdHJpbmcsIGFueT4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTY29wZSB7XG4gICAgZGVidWdnZXI7XG4gICAgLy8gQ29udmVydCBhY3Rpdml0eSBvdXRwdXRzIHRvIHJlY29yZCBmb3JtYXRcbiAgICBjb25zdCBvdXRwdXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgaWYgKGFjdGl2aXR5T3V0cHV0cykge1xuICAgICAgaWYgKGFjdGl2aXR5T3V0cHV0cyBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICBhY3Rpdml0eU91dHB1dHMuZm9yRWFjaCgob3V0cHV0LCBhY3Rpdml0eUlkKSA9PiB7XG4gICAgICAgICAgb3V0cHV0c1thY3Rpdml0eUlkXSA9IG91dHB1dDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKG91dHB1dHMsIGFjdGl2aXR5T3V0cHV0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29udmVuaWVuY2UgYWxpYXMgZm9yIHRoZSBsYXN0IGFjdGl2aXR5IG91dHB1dCAoaWYgYXZhaWxhYmxlKS5cbiAgICAvLyBUaGlzIGFsbG93cyBleHByZXNzaW9ucyBsaWtlOiB7e291dHB1dHMubGFzdC5zb21lRmllbGR9fVxuICAgIGlmIChvdXRwdXRzWydsYXN0J10gPT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXN0QWN0aXZpdHlPdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0cHV0c1snbGFzdCddID0gc3RhdGUubGFzdEFjdGl2aXR5T3V0cHV0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJ1aWxkU2NvcGUoe1xuICAgICAgaW5wdXRzOiBzdGF0ZS5pbnB1dCB8fCB7fSxcbiAgICAgIHZhcmlhYmxlczogc3RhdGUudmFyaWFibGVzIHx8IHt9LFxuICAgICAgb3V0cHV0czogb3V0cHV0cyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { WorkflowExpressionScopeService } from './workflow-expression-scope.service';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Activity Executor Service\n *\n * Service for executing workflow activities via CommandBus.\n * Automatically evaluates expressions in activity inputs before execution.\n *\n * @example\n * ```typescript\n * const executor = inject(ActivityExecutor);\n *\n * // Execute activity with task and workflow state (expressions will be evaluated)\n * const result = await executor.execute(task, workflowState, activityOutputs);\n * ```\n */\nexport class ActivityExecutor {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.commandService = inject(AXPCommandService);\n this.expressionEvaluator = inject(AXPExpressionEvaluatorService);\n this.expressionScopeService = inject(WorkflowExpressionScopeService);\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Execute a workflow activity with expression evaluation.\n *\n * Evaluates expressions in activity inputs using workflow state,\n * then executes the activity via CommandBus.\n *\n * @param task - Workflow task containing activity information\n * @param workflowState - Current workflow instance state (for expression evaluation)\n * @param activityOutputs - Map of previous activity outputs (for expression evaluation)\n * @returns Execution result with output and outcome\n */\n async execute(task, workflowState, activityOutputs) {\n try {\n const activityName = task.activityType;\n debugger;\n // Evaluate inputs if workflow state is provided\n let evaluatedInputs = task.input || {};\n if (workflowState) {\n // Prefer explicit outputs, fallback to outputs stored in state\n const outputsForScope = activityOutputs ??\n workflowState.activityOutputs ??\n undefined;\n // Build expression scope from workflow state\n const scope = this.expressionScopeService.buildScopeFromState(workflowState, outputsForScope);\n // Evaluate all inputs recursively (handles nested objects and arrays)\n evaluatedInputs = await this.expressionEvaluator.evaluate(task.input || {}, scope);\n }\n // Check if command exists\n const commandExists = this.commandService.exists(activityName);\n if (!commandExists) {\n console.warn(`[ActivityExecutor] ⚠️ Activity '${activityName}' is not registered as Command. ` +\n `Skipping execution.`);\n return {\n output: null,\n outcome: 'Done'\n };\n }\n // Flatten properties if nested (workflow-studio format)\n let commandInput = evaluatedInputs;\n if (commandInput['properties'] && typeof commandInput['properties'] === 'object') {\n // Flatten: {properties: {text: \"...\"}} -> {text: \"...\"}\n commandInput = { ...commandInput['properties'] };\n }\n // Execute activity via CommandBus\n // Activities registered as AXPCommand return {output, outcomes}\n const result = await this.commandService.execute(activityName, commandInput);\n if (!result) {\n return {\n output: null,\n outcome: 'Failed',\n };\n }\n if (!result.success) {\n return {\n output: {\n error: result.message?.text,\n },\n outcome: 'Failed',\n };\n }\n const commandResult = result.data;\n const outcomes = commandResult?.outcomes ?? {};\n // Determine outcome from command results\n // Default to 'Done' if no outcomes specified\n let outcome = 'Done';\n if (Object.keys(outcomes).length > 0) {\n outcome = outcomes['Done'] ? 'Done' : Object.keys(outcomes)[0] || 'Done';\n }\n return {\n output: commandResult?.output ?? null,\n outcome,\n };\n }\n catch (error) {\n console.error(`[ActivityExecutor] ❌ Error evaluating expressions or executing activity:`, error);\n return {\n output: { error: error.message || 'Unknown error' },\n outcome: 'Failed'\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ActivityExecutor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ActivityExecutor, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ActivityExecutor, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZXhlY3V0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvcnVudGltZS9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQW1CckYsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSUUsK0NBQStDO1FBRTlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDNUQsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7S0FnSGxGO0lBOUdDLFlBQVk7SUFFWixzQ0FBc0M7SUFFdEM7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsSUFBcUIsRUFDckIsYUFBd0MsRUFDeEMsZUFBd0Q7UUFHeEQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUV2QyxRQUFRLENBQUM7WUFFVCxnREFBZ0Q7WUFDaEQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkMsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsK0RBQStEO2dCQUMvRCxNQUFNLGVBQWUsR0FDbkIs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QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ29tbWFuZFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dUYXNrLCBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUgfSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuaW1wb3J0IHsgV29ya2Zsb3dFeHByZXNzaW9uU2NvcGVTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvdy1leHByZXNzaW9uLXNjb3BlLnNlcnZpY2UnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICYgSW50ZXJmYWNlcyAgIC0tLS1cblxuLyoqXG4gKiBSZXN1bHQgb2YgZXhlY3V0aW5nIGEgd29ya2Zsb3cgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlFeGVjdXRpb25SZXN1bHQge1xuICAvKipcbiAgICogQWN0aXZpdHkgZXhlY3V0aW9uIG91dHB1dC5cbiAgICovXG4gIG91dHB1dDogYW55O1xuXG4gIC8qKlxuICAgKiBBY3Rpdml0eSBleGVjdXRpb24gb3V0Y29tZSAoZS5nLiwgJ0RvbmUnLCAnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCcsICdGYWlsZWQnKS5cbiAgICovXG4gIG91dGNvbWU6IHN0cmluZztcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogQWN0aXZpdHkgRXhlY3V0b3IgU2VydmljZVxuICogXG4gKiBTZXJ2aWNlIGZvciBleGVjdXRpbmcgd29ya2Zsb3cgYWN0aXZpdGllcyB2aWEgQ29tbWFuZEJ1cy5cbiAqIEF1dG9tYXRpY2FsbHkgZXZhbHVhdGVzIGV4cHJlc3Npb25zIGluIGFjdGl2aXR5IGlucHV0cyBiZWZvcmUgZXhlY3V0aW9uLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZXhlY3V0b3IgPSBpbmplY3QoQWN0aXZpdHlFeGVjdXRvcik7XG4gKiBcbiAqIC8vIEV4ZWN1dGUgYWN0aXZpdHkgd2l0aCB0YXNrIGFuZCB3b3JrZmxvdyBzdGF0ZSAoZXhwcmVzc2lvbnMgd2lsbCBiZSBldmFsdWF0ZWQpXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHRhc2ssIHdvcmtmbG93U3RhdGUsIGFjdGl2aXR5T3V0cHV0cyk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWN0aXZpdHlFeGVjdXRvciB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kU2VydmljZSA9IGluamVjdChBWFBDb21tYW5kU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwcmVzc2lvbkV2YWx1YXRvciA9IGluamVjdChBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwcmVzc2lvblNjb3BlU2VydmljZSA9IGluamVjdChXb3JrZmxvd0V4cHJlc3Npb25TY29wZVNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSB3b3JrZmxvdyBhY3Rpdml0eSB3aXRoIGV4cHJlc3Npb24gZXZhbHVhdGlvbi5cbiAgICogXG4gICAqIEV2YWx1YXRlcyBleHByZXNzaW9ucyBpbiBhY3Rpdml0eSBpbnB1dHMgdXNpbmcgd29ya2Zsb3cgc3RhdGUsXG4gICAqIHRoZW4gZXhlY3V0ZXMgdGhlIGFjdGl2aXR5IHZpYSBDb21tYW5kQnVzLlxuICAgKiBcbiAgICogQHBhcmFtIHRhc2sgLSBXb3JrZmxvdyB0YXNrIGNvbnRhaW5pbmcgYWN0aXZpdHkgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtIHdvcmtmbG93U3RhdGUgLSBDdXJyZW50IHdvcmtmbG93IGluc3RhbmNlIHN0YXRlIChmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uKVxuICAgKiBAcGFyYW0gYWN0aXZpdHlPdXRwdXRzIC0gTWFwIG9mIHByZXZpb3VzIGFjdGl2aXR5IG91dHB1dHMgKGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24pXG4gICAqIEByZXR1cm5zIEV4ZWN1dGlvbiByZXN1bHQgd2l0aCBvdXRwdXQgYW5kIG91dGNvbWVcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgdGFzazogQVhQV29ya2Zsb3dUYXNrLFxuICAgIHdvcmtmbG93U3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGUsXG4gICAgYWN0aXZpdHlPdXRwdXRzPzogTWFwPHN0cmluZywgYW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTxBY3Rpdml0eUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBhY3Rpdml0eU5hbWUgPSB0YXNrLmFjdGl2aXR5VHlwZTtcblxuICAgICAgZGVidWdnZXI7XG5cbiAgICAgIC8vIEV2YWx1YXRlIGlucHV0cyBpZiB3b3JrZmxvdyBzdGF0ZSBpcyBwcm92aWRlZFxuICAgICAgbGV0IGV2YWx1YXRlZElucHV0cyA9IHRhc2suaW5wdXQgfHwge307XG4gICAgICBpZiAod29ya2Zsb3dTdGF0ZSkge1xuICAgICAgICAvLyBQcmVmZXIgZXhwbGljaXQgb3V0cHV0cywgZmFsbGJhY2sgdG8gb3V0cHV0cyBzdG9yZWQgaW4gc3RhdGVcbiAgICAgICAgY29uc3Qgb3V0cHV0c0ZvclNjb3BlID1cbiAgICAgICAgICBhY3Rpdml0eU91dHB1dHMgPz9cbiAgICAgICAgICAod29ya2Zsb3dTdGF0ZS5hY3Rpdml0eU91dHB1dHMgYXMgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCkgPz9cbiAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gQnVpbGQgZXhwcmVzc2lvbiBzY29wZSBmcm9tIHdvcmtmbG93IHN0YXRlXG4gICAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5leHByZXNzaW9uU2NvcGVTZXJ2aWNlLmJ1aWxkU2NvcGVGcm9tU3RhdGUod29ya2Zsb3dTdGF0ZSwgb3V0cHV0c0ZvclNjb3BlKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEV2YWx1YXRlIGFsbCBpbnB1dHMgcmVjdXJzaXZlbHkgKGhhbmRsZXMgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cylcbiAgICAgICAgZXZhbHVhdGVkSW5wdXRzID0gYXdhaXQgdGhpcy5leHByZXNzaW9uRXZhbHVhdG9yLmV2YWx1YXRlKHRhc2suaW5wdXQgfHwge30sIHNjb3BlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgY29tbWFuZCBleGlzdHNcbiAgICAgIGNvbnN0IGNvbW1hbmRFeGlzdHMgPSB0aGlzLmNvbW1hbmRTZXJ2aWNlLmV4aXN0cyhhY3Rpdml0eU5hbWUpO1xuXG4gICAgICBpZiAoIWNvbW1hbmRFeGlzdHMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbQWN0aXZpdHlFeGVjdXRvcl0g4pqg77iPIEFjdGl2aXR5ICcke2FjdGl2aXR5TmFtZX0nIGlzIG5vdCByZWdpc3RlcmVkIGFzIENvbW1hbmQuIGAgK1xuICAgICAgICAgIGBTa2lwcGluZyBleGVjdXRpb24uYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgICAgICBvdXRjb21lOiAnRG9uZSdcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gRmxhdHRlbiBwcm9wZXJ0aWVzIGlmIG5lc3RlZCAod29ya2Zsb3ctc3R1ZGlvIGZvcm1hdClcbiAgICAgIGxldCBjb21tYW5kSW5wdXQgPSBldmFsdWF0ZWRJbnB1dHM7XG4gICAgICBpZiAoY29tbWFuZElucHV0Wydwcm9wZXJ0aWVzJ10gJiYgdHlwZW9mIGNvbW1hbmRJbnB1dFsncHJvcGVydGllcyddID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBGbGF0dGVuOiB7cHJvcGVydGllczoge3RleHQ6IFwiLi4uXCJ9fSAtPiB7dGV4dDogXCIuLi5cIn1cbiAgICAgICAgY29tbWFuZElucHV0ID0geyAuLi5jb21tYW5kSW5wdXRbJ3Byb3BlcnRpZXMnXSB9O1xuICAgICAgfVxuXG4gICAgICAvLyBFeGVjdXRlIGFjdGl2aXR5IHZpYSBDb21tYW5kQnVzXG4gICAgICAvLyBBY3Rpdml0aWVzIHJlZ2lzdGVyZWQgYXMgQVhQQ29tbWFuZCByZXR1cm4ge291dHB1dCwgb3V0Y29tZXN9XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbW1hbmRTZXJ2aWNlLmV4ZWN1dGU8UmVjb3JkPHN0cmluZywgYW55Piwge1xuICAgICAgICBvdXRwdXQ6IGFueTtcbiAgICAgICAgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICB9PihhY3Rpdml0eU5hbWUsIGNvbW1hbmRJbnB1dCk7XG4gICAgICBcbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdGYWlsZWQnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICBlcnJvcjogcmVzdWx0Lm1lc3NhZ2U/LnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lOiAnRmFpbGVkJyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tbWFuZFJlc3VsdCA9IHJlc3VsdC5kYXRhO1xuICAgICAgY29uc3Qgb3V0Y29tZXMgPSBjb21tYW5kUmVzdWx0Py5vdXRjb21lcyA/PyB7fTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIG91dGNvbWUgZnJvbSBjb21tYW5kIHJlc3VsdHNcbiAgICAgIC8vIERlZmF1bHQgdG8gJ0RvbmUnIGlmIG5vIG91dGNvbWVzIHNwZWNpZmllZFxuICAgICAgbGV0IG91dGNvbWUgPSAnRG9uZSc7XG4gICAgICBpZiAoT2JqZWN0LmtleXMob3V0Y29tZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3V0Y29tZSA9IG91dGNvbWVzWydEb25lJ10gPyAnRG9uZScgOiBPYmplY3Qua2V5cyhvdXRjb21lcylbMF0gfHwgJ0RvbmUnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IGNvbW1hbmRSZXN1bHQ/Lm91dHB1dCA/PyBudWxsLFxuICAgICAgICBvdXRjb21lLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbQWN0aXZpdHlFeGVjdXRvcl0g4p2MIEVycm9yIGV2YWx1YXRpbmcgZXhwcmVzc2lvbnMgb3IgZXhlY3V0aW5nIGFjdGl2aXR5OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogeyBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicgfSxcbiAgICAgICAgb3V0Y29tZTogJ0ZhaWxlZCdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { ActivityExecutor } from './activity-executor.service';\nimport { AXP_WORKFLOW_ENGINE } from './workflow-engine';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Workflow Manager - Facade for workflow lifecycle orchestration.\n *\n * This service is the ONLY interface the frontend uses to interact with workflows.\n * It follows Clean Architecture principles and does NOT contain execution or business logic.\n *\n * Responsibilities:\n * - Orchestrate workflow lifecycle (start, execute, complete, resume)\n * - Delegate execution to ActivityExecutor\n * - Cache workflow state in memory\n * - Expose a stable API for UI\n *\n * Rules:\n * - No HTTP calls (delegates to AXPWorkflowEngine)\n * - No CommandBus / Command execution (delegates to ActivityExecutor)\n * - No workflow branching logic (backend decides)\n * - No business validation (backend validates)\n * - No backend assumptions (uses abstract runtime service)\n */\nexport class AXPWorkflowManager {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.workflowEngine = inject(AXP_WORKFLOW_ENGINE);\n this.activityExecutor = inject(ActivityExecutor);\n //#endregion\n //#region ---- State Cache ----\n /**\n * Cache workflow states in memory for quick access.\n * Key: instanceId\n * Value: AXPWorkflowInstanceState\n */\n this.stateCache = new Map();\n /**\n * Cache TTL in milliseconds (5 minutes).\n */\n this.CACHE_TTL = 5 * 60 * 1000;\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Execute frontend activities interactively until reaching human-task or completion.\n *\n * This method handles the interactive flow between frontend and backend:\n * 1. Executes frontend activity (ui-activity)\n * 2. Sends result to backend via frontActivtyComplete\n * 3. If backend returns nextTask (frontend activity), repeats the process\n * 4. Continues until workflow completes or reaches human-task\n *\n * @param instanceId - Workflow instance ID\n * @param task - Current task to execute\n * @param state - Current workflow state\n * @param lastActivityOutput - Last activity output (for expression evaluation)\n * @returns Final result with nextTask (if human-task) or completion status\n */\n async executeInteractiveFlow(instanceId, task, state, activityOutputs) {\n // Backend decides what to execute - frontend only executes ui-activity with frontend/both executionMode\n // If backend returns a task that's not executable here, return it as-is\n let currentTask = task;\n let currentState = state;\n let currentActivityOutputs = {\n ...(currentState.activityOutputs || {}),\n ...(activityOutputs || {}),\n };\n const maxIterations = 100; // Prevent infinite loops\n let iterationCount = 0;\n while (currentTask && iterationCount < maxIterations) {\n iterationCount++;\n // Only execute if task is ui-activity with frontend/both executionMode\n // Backend decides if workflow should continue or suspend\n if (currentTask.taskType === 'ui-activity' &&\n (currentTask.executionMode === 'frontend' || currentTask.executionMode === 'both')) {\n // Execute frontend activity\n const execResult = await this.activityExecutor.execute(currentTask, currentState, currentActivityOutputs);\n // Track outputs locally (backend should also persist and return them)\n currentActivityOutputs = {\n ...currentActivityOutputs,\n [currentTask.activityId]: execResult.output,\n };\n // Send result to backend\n const completeResponse = await this.workflowEngine.frontActivtyComplete({\n instanceId,\n activityNode: currentTask.activityId,\n output: execResult.output || {},\n outcome: execResult.outcome,\n });\n // Update state cache\n if (completeResponse.state) {\n const normalizedState = { ...completeResponse.state };\n if (normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n currentState = normalizedState;\n // Prefer outputs returned by backend; fallback to local cache\n currentActivityOutputs = {\n ...currentActivityOutputs,\n ...(normalizedState.activityOutputs || {}),\n };\n this.stateCache.set(instanceId, normalizedState);\n }\n // Backend decides: if no nextTask, workflow is completed\n if (!completeResponse.nextTask) {\n return {\n nextTask: null,\n state: currentState,\n output: completeResponse.output,\n };\n }\n // Backend decides: if nextTask is not executable here (human-task or other), return it\n // Backend already set status to 'suspended' if needed\n if (completeResponse.nextTask.taskType !== 'ui-activity' ||\n (completeResponse.nextTask.executionMode !== 'frontend' && completeResponse.nextTask.executionMode !== 'both')) {\n return {\n nextTask: completeResponse.nextTask,\n state: currentState,\n };\n }\n // Continue with next executable frontend task\n currentTask = completeResponse.nextTask;\n }\n else {\n // Not a frontend ui-activity - return as-is\n return {\n nextTask: currentTask,\n state: currentState,\n };\n }\n }\n // Max iterations reached\n if (iterationCount >= maxIterations) {\n console.warn(`[AXPWorkflowManager] ⚠️ Maximum iterations (${maxIterations}) reached`);\n }\n return {\n nextTask: currentTask,\n state: currentState,\n };\n }\n /**\n * Start a new workflow instance.\n *\n * Creates a new workflow instance in backend and returns instance ID.\n * Backend decides what to do: returns pendingTask or indicates completion.\n *\n * @param workflowId - Workflow ID to start\n * @param input - Initial input data (optional)\n * @returns Start result with instanceId, state, and nextTask\n *\n * @example\n * ```typescript\n * const result = await workflowManager.start('my-workflow', { userId: '123' });\n *\n * if (result.success && result.nextTask) {\n * // Execute task if frontend\n * if (result.nextTask.executionMode === 'frontend') {\n * const execResult = await workflowManager.execute(result.nextTask);\n * await workflowManager.complete(result.instanceId!, result.nextTask, execResult.outcome, execResult.output);\n * }\n * }\n * ```\n */\n async start(workflowId, input = {}) {\n try {\n const response = await this.workflowEngine.start({\n workflowId,\n input,\n });\n // Cache state (normalize Date)\n let startNormalizedState = { ...response.state };\n if (startNormalizedState.lastUpdated && !(startNormalizedState.lastUpdated instanceof Date)) {\n startNormalizedState.lastUpdated = new Date(startNormalizedState.lastUpdated);\n }\n this.stateCache.set(response.instanceId, startNormalizedState);\n // 🎯 Interactive flow: Execute frontend activities automatically\n // Backend decides what to execute - if pendingTask is executable (ui-activity with frontend/both), execute it\n let finalNextTask = response.pendingTask || null;\n let finalOutput = startNormalizedState.output;\n // If backend returned a task that's executable here (ui-activity with frontend/both), execute it\n if (response.pendingTask &&\n response.pendingTask.taskType === 'ui-activity' &&\n (response.pendingTask.executionMode === 'frontend' || response.pendingTask.executionMode === 'both')) {\n const interactiveResult = await this.executeInteractiveFlow(response.instanceId, response.pendingTask, startNormalizedState, response.activityOutputs || response.state.activityOutputs);\n finalNextTask = interactiveResult.nextTask;\n startNormalizedState = interactiveResult.state;\n if (interactiveResult.output !== undefined) {\n finalOutput = interactiveResult.output;\n }\n // Update cache with final state\n this.stateCache.set(response.instanceId, startNormalizedState);\n }\n // If backend returned null or non-executable task, return it as-is\n // Backend already decided workflow status (suspended, completed, etc.)\n return {\n success: true,\n instanceId: response.instanceId,\n state: startNormalizedState,\n nextTask: finalNextTask,\n output: finalOutput,\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error starting workflow:', error);\n return {\n success: false,\n error: error.message || 'Failed to start workflow',\n };\n }\n }\n /**\n * Resume a suspended workflow (e.g., after user interaction).\n *\n * Backend determines nextStep based on outcome and outcomeConnections.\n * Client only provides instanceId, stepId, outcome, and optional userInput.\n *\n * @param instanceId - Workflow instance ID\n * @param stepId - Step ID that was waiting for user input\n * @param outcome - User action outcome (e.g., 'Confirmed', 'Cancelled', 'Submitted')\n * @param userInput - Optional user input data\n * @param taskToken - Secure task token (required for secure resumption)\n * @returns Resume result with next task (if any)\n */\n async resume(instanceId, stepId, outcome, userInput, taskToken) {\n try {\n // Ensure taskToken is provided for secure resumption\n if (!taskToken) {\n throw new Error('Missing taskToken for resume operation');\n }\n // Backend handles everything: checks outcomeConnections and determines nextStep\n const response = await this.workflowEngine.resume({\n instanceId,\n stepId,\n taskToken,\n outcome,\n userInput,\n });\n // Update cache with state from backend\n let normalizedState = response.state ? { ...response.state } : undefined;\n if (normalizedState && normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n if (normalizedState) {\n this.stateCache.set(instanceId, normalizedState);\n }\n // 🎯 Interactive flow: Execute frontend activities automatically\n // Backend decides what to execute - if nextTask is executable (ui-activity with frontend/both), execute it\n let finalNextTask = response.nextTask || null;\n let finalOutput = response.output;\n // If backend returned a task that's executable here (ui-activity with frontend/both), execute it\n if (response.nextTask &&\n response.nextTask.taskType === 'ui-activity' &&\n (response.nextTask.executionMode === 'frontend' || response.nextTask.executionMode === 'both')) {\n const interactiveResult = await this.executeInteractiveFlow(instanceId, response.nextTask, normalizedState, normalizedState?.activityOutputs);\n finalNextTask = interactiveResult.nextTask;\n normalizedState = interactiveResult.state;\n if (interactiveResult.output !== undefined) {\n finalOutput = interactiveResult.output;\n }\n // Update cache with final state\n this.stateCache.set(instanceId, normalizedState);\n }\n // If backend returned null or non-executable task, return it as-is\n // Backend already decided workflow status (suspended, completed, etc.)\n return {\n success: true,\n instanceId,\n state: normalizedState || response.state,\n nextTask: finalNextTask,\n output: finalOutput,\n };\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error resuming workflow:', error);\n return {\n success: false,\n instanceId,\n error: error.message || 'Failed to resume workflow',\n };\n }\n }\n /**\n * Get workflow instance state.\n *\n * Retrieves state from cache (if valid) or from backend.\n *\n * @param instanceId - Workflow instance ID\n * @returns Workflow instance state or null if not found\n */\n async getState(instanceId) {\n // Check cache first\n const cached = this.stateCache.get(instanceId);\n if (cached) {\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedCached = { ...cached };\n if (normalizedCached.lastUpdated && !(normalizedCached.lastUpdated instanceof Date)) {\n normalizedCached.lastUpdated = new Date(normalizedCached.lastUpdated);\n }\n // Validate cache age\n const cacheAge = Date.now() - normalizedCached.lastUpdated.getTime();\n if (cacheAge < this.CACHE_TTL) {\n return normalizedCached;\n }\n }\n // Fetch from backend\n try {\n const state = await this.workflowEngine.getState({\n instanceId,\n });\n // Normalize lastUpdated to Date (for cache safety)\n const normalizedState = { ...state };\n if (normalizedState.lastUpdated && !(normalizedState.lastUpdated instanceof Date)) {\n normalizedState.lastUpdated = new Date(normalizedState.lastUpdated);\n }\n // Update cache\n this.stateCache.set(instanceId, normalizedState);\n return normalizedState;\n }\n catch (error) {\n console.error('[AXPWorkflowManager] ❌ Error getting workflow state:', error);\n return null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowManager, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowManager, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQTJCLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBOEd4RCxZQUFZO0FBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUlILE1BQU0sT0FBTyxrQkFBa0I7SUFIL0I7UUFJRSwrQ0FBK0M7UUFFOUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3RCxZQUFZO1FBRVosbUNBQW1DO1FBRW5DOzs7O1dBSUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFFakU7O1dBRUc7UUFDYyxjQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7S0E4VjVDO0lBNVZDLFlBQVk7SUFFWixzQ0FBc0M7SUFFdEM7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSyxLQUFLLENBQUMsc0JBQXNCLENBQ2xDLFVBQWtCLEVBQ2xCLElBQXFCLEVBQ3JCLEtBQStCLEVBQy9CLGVBQXFDO1FBRXJDLHdHQUF3RztRQUN4Ryx3RUFBd0U7UUFFeEUsSUFBSSxXQUFXLEdBQTJCLElBQUksQ0FBQztRQUMvQyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxzQkFBc0IsR0FBd0I7WUFDaEQsR0FBRyxDQUFDLFlBQVks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SSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7WUFFRCxlQUFlO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRWpELE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0RBQXNELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0UsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQzsrR0EvV1Usa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZpdHlFeGVjdXRpb25SZXN1bHQsIEFjdGl2aXR5RXhlY3V0b3IgfSBmcm9tICcuL2FjdGl2aXR5LWV4ZWN1dG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhQX1dPUktGTE9XX0VOR0lORSB9IGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJztcbmltcG9ydCB7IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZSwgQVhQV29ya2Zsb3dUYXNrIH0gZnJvbSAnLi93b3JrZmxvdy1ydW50aW1lLnR5cGVzJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAmIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIGEgd29ya2Zsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dTdGFydFJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIEZpcnN0IHRhc2sgdG8gZXhlY3V0ZSAoaWYgYW55KS5cbiAgICovXG4gIG5leHRUYXNrPzogQVhQV29ya2Zsb3dUYXNrIHwgbnVsbDtcblxuICAvKipcbiAgICogV29ya2Zsb3cgb3V0cHV0IChpZiBjb21wbGV0ZWQgaW1tZWRpYXRlbHkpLlxuICAgKi9cbiAgb3V0cHV0PzogYW55O1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIChpZiBmYWlsZWQpLlxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNvbXBsZXRpbmcgYSB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93Q29tcGxldGVSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC5cbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IGluc3RhbmNlIElELlxuICAgKi9cbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVkIHdvcmtmbG93IHN0YXRlLlxuICAgKi9cbiAgc3RhdGU/OiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG5cbiAgLyoqXG4gICAqIE5leHQgdGFzayB0byBleGVjdXRlIChpZiBhbnkpLlxuICAgKi9cbiAgbmV4dFRhc2s/OiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBvdXRwdXQgKGlmIGNvbXBsZXRlZCkuXG4gICAqL1xuICBvdXRwdXQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgKGlmIGZhaWxlZCkuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgcmVzdW1pbmcgYSB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1Jlc3VtZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV29ya2Zsb3cgaW5zdGFuY2UgSUQuXG4gICAqL1xuICBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgd29ya2Zsb3cgc3RhdGUuXG4gICAqL1xuICBzdGF0ZT86IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZTtcblxuICAvKipcbiAgICogTmV4dCB0YXNrIHRvIGV4ZWN1dGUgKGlmIGFueSkuXG4gICAqL1xuICBuZXh0VGFzaz86IEFYUFdvcmtmbG93VGFzayB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IG91dHB1dCAoaWYgY29tcGxldGVkKS5cbiAgICovXG4gIG91dHB1dD86IGFueTtcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSAoaWYgZmFpbGVkKS5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBXb3JrZmxvdyBNYW5hZ2VyIC0gRmFjYWRlIGZvciB3b3JrZmxvdyBsaWZlY3ljbGUgb3JjaGVzdHJhdGlvbi5cbiAqXG4gKiBUaGlzIHNlcnZpY2UgaXMgdGhlIE9OTFkgaW50ZXJmYWNlIHRoZSBmcm9udGVuZCB1c2VzIHRvIGludGVyYWN0IHdpdGggd29ya2Zsb3dzLlxuICogSXQgZm9sbG93cyBDbGVhbiBBcmNoaXRlY3R1cmUgcHJpbmNpcGxlcyBhbmQgZG9lcyBOT1QgY29udGFpbiBleGVjdXRpb24gb3IgYnVzaW5lc3MgbG9naWMuXG4gKlxuICogUmVzcG9uc2liaWxpdGllczpcbiAqIC0gT3JjaGVzdHJhdGUgd29ya2Zsb3cgbGlmZWN5Y2xlIChzdGFydCwgZXhlY3V0ZSwgY29tcGxldGUsIHJlc3VtZSlcbiAqIC0gRGVsZWdhdGUgZXhlY3V0aW9uIHRvIEFjdGl2aXR5RXhlY3V0b3JcbiAqIC0gQ2FjaGUgd29ya2Zsb3cgc3RhdGUgaW4gbWVtb3J5XG4gKiAtIEV4cG9zZSBhIHN0YWJsZSBBUEkgZm9yIFVJXG4gKlxuICogUnVsZXM6XG4gKiAtIE5vIEhUVFAgY2FsbHMgKGRlbGVnYXRlcyB0byBBWFBXb3JrZmxvd0VuZ2luZSlcbiAqIC0gTm8gQ29tbWFuZEJ1cyAvIENvbW1hbmQgZXhlY3V0aW9uIChkZWxlZ2F0ZXMgdG8gQWN0aXZpdHlFeGVjdXRvcilcbiAqIC0gTm8gd29ya2Zsb3cgYnJhbmNoaW5nIGxvZ2ljIChiYWNrZW5kIGRlY2lkZXMpXG4gKiAtIE5vIGJ1c2luZXNzIHZhbGlkYXRpb24gKGJhY2tlbmQgdmFsaWRhdGVzKVxuICogLSBObyBiYWNrZW5kIGFzc3VtcHRpb25zICh1c2VzIGFic3RyYWN0IHJ1bnRpbWUgc2VydmljZSlcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93TWFuYWdlciB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd0VuZ2luZSA9IGluamVjdChBWFBfV09SS0ZMT1dfRU5HSU5FKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpdml0eUV4ZWN1dG9yID0gaW5qZWN0KEFjdGl2aXR5RXhlY3V0b3IpOyBcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFN0YXRlIENhY2hlICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDYWNoZSB3b3JrZmxvdyBzdGF0ZXMgaW4gbWVtb3J5IGZvciBxdWljayBhY2Nlc3MuXG4gICAqIEtleTogaW5zdGFuY2VJZFxuICAgKiBWYWx1ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlXG4gICAqL1xuICBwcml2YXRlIHN0YXRlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlPigpO1xuXG4gIC8qKlxuICAgKiBDYWNoZSBUVEwgaW4gbWlsbGlzZWNvbmRzICg1IG1pbnV0ZXMpLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9UVEwgPSA1ICogNjAgKiAxMDAwO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgZnJvbnRlbmQgYWN0aXZpdGllcyBpbnRlcmFjdGl2ZWx5IHVudGlsIHJlYWNoaW5nIGh1bWFuLXRhc2sgb3IgY29tcGxldGlvbi5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIGludGVyYWN0aXZlIGZsb3cgYmV0d2VlbiBmcm9udGVuZCBhbmQgYmFja2VuZDpcbiAgICogMS4gRXhlY3V0ZXMgZnJvbnRlbmQgYWN0aXZpdHkgKHVpLWFjdGl2aXR5KVxuICAgKiAyLiBTZW5kcyByZXN1bHQgdG8gYmFja2VuZCB2aWEgZnJvbnRBY3RpdnR5Q29tcGxldGVcbiAgICogMy4gSWYgYmFja2VuZCByZXR1cm5zIG5leHRUYXNrIChmcm9udGVuZCBhY3Rpdml0eSksIHJlcGVhdHMgdGhlIHByb2Nlc3NcbiAgICogNC4gQ29udGludWVzIHVudGlsIHdvcmtmbG93IGNvbXBsZXRlcyBvciByZWFjaGVzIGh1bWFuLXRhc2tcbiAgICogXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkIC0gV29ya2Zsb3cgaW5zdGFuY2UgSURcbiAgICogQHBhcmFtIHRhc2sgLSBDdXJyZW50IHRhc2sgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0gc3RhdGUgLSBDdXJyZW50IHdvcmtmbG93IHN0YXRlXG4gICAqIEBwYXJhbSBsYXN0QWN0aXZpdHlPdXRwdXQgLSBMYXN0IGFjdGl2aXR5IG91dHB1dCAoZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbilcbiAgICogQHJldHVybnMgRmluYWwgcmVzdWx0IHdpdGggbmV4dFRhc2sgKGlmIGh1bWFuLXRhc2spIG9yIGNvbXBsZXRpb24gc3RhdHVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVJbnRlcmFjdGl2ZUZsb3coXG4gICAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHRhc2s6IEFYUFdvcmtmbG93VGFzayxcbiAgICBzdGF0ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICAgIGFjdGl2aXR5T3V0cHV0cz86IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTx7IG5leHRUYXNrOiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsOyBzdGF0ZTogQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlOyBvdXRwdXQ/OiBhbnkgfT4ge1xuICAgIC8vIEJhY2tlbmQgZGVjaWRlcyB3aGF0IHRvIGV4ZWN1dGUgLSBmcm9udGVuZCBvbmx5IGV4ZWN1dGVzIHVpLWFjdGl2aXR5IHdpdGggZnJvbnRlbmQvYm90aCBleGVjdXRpb25Nb2RlXG4gICAgLy8gSWYgYmFja2VuZCByZXR1cm5zIGEgdGFzayB0aGF0J3Mgbm90IGV4ZWN1dGFibGUgaGVyZSwgcmV0dXJuIGl0IGFzLWlzXG4gICAgXG4gICAgbGV0IGN1cnJlbnRUYXNrOiBBWFBXb3JrZmxvd1Rhc2sgfCBudWxsID0gdGFzaztcbiAgICBsZXQgY3VycmVudFN0YXRlID0gc3RhdGU7XG4gICAgbGV0IGN1cnJlbnRBY3Rpdml0eU91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAuLi4oY3VycmVudFN0YXRlLmFjdGl2aXR5T3V0cHV0cyB8fCB7fSksXG4gICAgICAuLi4oYWN0aXZpdHlPdXRwdXRzIHx8IHt9KSxcbiAgICB9O1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSAxMDA7IC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcHNcbiAgICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRUYXNrICYmIGl0ZXJhdGlvbkNvdW50IDwgbWF4SXRlcmF0aW9ucykge1xuICAgICAgaXRlcmF0aW9uQ291bnQrKztcblxuICAgICAgLy8gT25seSBleGVjdXRlIGlmIHRhc2sgaXMgdWktYWN0aXZpdHkgd2l0aCBmcm9udGVuZC9ib3RoIGV4ZWN1dGlvbk1vZGVcbiAgICAgIC8vIEJhY2tlbmQgZGVjaWRlcyBpZiB3b3JrZmxvdyBzaG91bGQgY29udGludWUgb3Igc3VzcGVuZFxuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50VGFzay50YXNrVHlwZSA9PT0gJ3VpLWFjdGl2aXR5JyAmJlxuICAgICAgICAoY3VycmVudFRhc2suZXhlY3V0aW9uTW9kZSA9PT0gJ2Zyb250ZW5kJyB8fCBjdXJyZW50VGFzay5leGVjdXRpb25Nb2RlID09PSAnYm90aCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBmcm9udGVuZCBhY3Rpdml0eVxuICAgICAgICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgdGhpcy5hY3Rpdml0eUV4ZWN1dG9yLmV4ZWN1dGUoXG4gICAgICAgICAgY3VycmVudFRhc2ssXG4gICAgICAgICAgY3VycmVudFN0YXRlLFxuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eU91dHB1dHNcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBUcmFjayBvdXRwdXRzIGxvY2FsbHkgKGJhY2tlbmQgc2hvdWxkIGFsc28gcGVyc2lzdCBhbmQgcmV0dXJuIHRoZW0pXG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eU91dHB1dHMgPSB7XG4gICAgICAgICAgLi4uY3VycmVudEFjdGl2aXR5T3V0cHV0cyxcbiAgICAgICAgICBbY3VycmVudFRhc2suYWN0aXZpdHlJZF06IGV4ZWNSZXN1bHQub3V0cHV0LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFNlbmQgcmVzdWx0IHRvIGJhY2tlbmRcbiAgICAgICAgY29uc3QgY29tcGxldGVSZXNwb25zZSA9IGF3YWl0IHRoaXMud29ya2Zsb3dFbmdpbmUuZnJvbnRBY3RpdnR5Q29tcGxldGUoe1xuICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgICAgYWN0aXZpdHlOb2RlOiBjdXJyZW50VGFzay5hY3Rpdml0eUlkLFxuICAgICAgICAgIG91dHB1dDogZXhlY1Jlc3VsdC5vdXRwdXQgfHwge30sXG4gICAgICAgICAgb3V0Y29tZTogZXhlY1Jlc3VsdC5vdXRjb21lLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBVcGRhdGUgc3RhdGUgY2FjaGVcbiAgICAgICAgaWYgKGNvbXBsZXRlUmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkU3RhdGUgPSB7IC4uLmNvbXBsZXRlUmVzcG9uc2Uuc3RhdGUgfTtcbiAgICAgICAgICBpZiAobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkICYmICEobm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IG5vcm1hbGl6ZWRTdGF0ZTtcbiAgICAgICAgICAvLyBQcmVmZXIgb3V0cHV0cyByZXR1cm5lZCBieSBiYWNrZW5kOyBmYWxsYmFjayB0byBsb2NhbCBjYWNoZVxuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eU91dHB1dHMgPSB7XG4gICAgICAgICAgICAuLi5jdXJyZW50QWN0aXZpdHlPdXRwdXRzLFxuICAgICAgICAgICAgLi4uKG5vcm1hbGl6ZWRTdGF0ZS5hY3Rpdml0eU91dHB1dHMgfHwge30pLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBub3JtYWxpemVkU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja2VuZCBkZWNpZGVzOiBpZiBubyBuZXh0VGFzaywgd29ya2Zsb3cgaXMgY29tcGxldGVkXG4gICAgICAgIGlmICghY29tcGxldGVSZXNwb25zZS5uZXh0VGFzaykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0VGFzazogbnVsbCxcbiAgICAgICAgICAgIHN0YXRlOiBjdXJyZW50U3RhdGUsXG4gICAgICAgICAgICBvdXRwdXQ6IGNvbXBsZXRlUmVzcG9uc2Uub3V0cHV0LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWNrZW5kIGRlY2lkZXM6IGlmIG5leHRUYXNrIGlzIG5vdCBleGVjdXRhYmxlIGhlcmUgKGh1bWFuLXRhc2sgb3Igb3RoZXIpLCByZXR1cm4gaXRcbiAgICAgICAgLy8gQmFja2VuZCBhbHJlYWR5IHNldCBzdGF0dXMgdG8gJ3N1c3BlbmRlZCcgaWYgbmVlZGVkXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb21wbGV0ZVJlc3BvbnNlLm5leHRUYXNrLnRhc2tUeXBlICE9PSAndWktYWN0aXZpdHknIHx8XG4gICAgICAgICAgKGNvbXBsZXRlUmVzcG9uc2UubmV4dFRhc2suZXhlY3V0aW9uTW9kZSAhPT0gJ2Zyb250ZW5kJyAmJiBjb21wbGV0ZVJlc3BvbnNlLm5leHRUYXNrLmV4ZWN1dGlvbk1vZGUgIT09ICdib3RoJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHRUYXNrOiBjb21wbGV0ZVJlc3BvbnNlLm5leHRUYXNrLFxuICAgICAgICAgICAgc3RhdGU6IGN1cnJlbnRTdGF0ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udGludWUgd2l0aCBuZXh0IGV4ZWN1dGFibGUgZnJvbnRlbmQgdGFza1xuICAgICAgICBjdXJyZW50VGFzayA9IGNvbXBsZXRlUmVzcG9uc2UubmV4dFRhc2s7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb3QgYSBmcm9udGVuZCB1aS1hY3Rpdml0eSAtIHJldHVybiBhcy1pc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5leHRUYXNrOiBjdXJyZW50VGFzayxcbiAgICAgICAgICBzdGF0ZTogY3VycmVudFN0YXRlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1heCBpdGVyYXRpb25zIHJlYWNoZWRcbiAgICBpZiAoaXRlcmF0aW9uQ291bnQgPj0gbWF4SXRlcmF0aW9ucykge1xuICAgICAgY29uc29sZS53YXJuKGBbQVhQV29ya2Zsb3dNYW5hZ2VyXSDimqDvuI8gTWF4aW11bSBpdGVyYXRpb25zICgke21heEl0ZXJhdGlvbnN9KSByZWFjaGVkYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHRUYXNrOiBjdXJyZW50VGFzayxcbiAgICAgIHN0YXRlOiBjdXJyZW50U3RhdGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyB3b3JrZmxvdyBpbnN0YW5jZS5cbiAgICpcbiAgICogQ3JlYXRlcyBhIG5ldyB3b3JrZmxvdyBpbnN0YW5jZSBpbiBiYWNrZW5kIGFuZCByZXR1cm5zIGluc3RhbmNlIElELlxuICAgKiBCYWNrZW5kIGRlY2lkZXMgd2hhdCB0byBkbzogcmV0dXJucyBwZW5kaW5nVGFzayBvciBpbmRpY2F0ZXMgY29tcGxldGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHdvcmtmbG93SWQgLSBXb3JrZmxvdyBJRCB0byBzdGFydFxuICAgKiBAcGFyYW0gaW5wdXQgLSBJbml0aWFsIGlucHV0IGRhdGEgKG9wdGlvbmFsKVxuICAgKiBAcmV0dXJucyBTdGFydCByZXN1bHQgd2l0aCBpbnN0YW5jZUlkLCBzdGF0ZSwgYW5kIG5leHRUYXNrXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dNYW5hZ2VyLnN0YXJ0KCdteS13b3JrZmxvdycsIHsgdXNlcklkOiAnMTIzJyB9KTtcbiAgICpcbiAgICogaWYgKHJlc3VsdC5zdWNjZXNzICYmIHJlc3VsdC5uZXh0VGFzaykge1xuICAgKiAgIC8vIEV4ZWN1dGUgdGFzayBpZiBmcm9udGVuZFxuICAgKiAgIGlmIChyZXN1bHQubmV4dFRhc2suZXhlY3V0aW9uTW9kZSA9PT0gJ2Zyb250ZW5kJykge1xuICAgKiAgICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHdvcmtmbG93TWFuYWdlci5leGVjdXRlKHJlc3VsdC5uZXh0VGFzayk7XG4gICAqICAgICBhd2FpdCB3b3JrZmxvd01hbmFnZXIuY29tcGxldGUocmVzdWx0Lmluc3RhbmNlSWQhLCByZXN1bHQubmV4dFRhc2ssIGV4ZWNSZXN1bHQub3V0Y29tZSwgZXhlY1Jlc3VsdC5vdXRwdXQpO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHN0YXJ0KHdvcmtmbG93SWQ6IHN0cmluZywgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IFByb21pc2U8V29ya2Zsb3dTdGFydFJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud29ya2Zsb3dFbmdpbmUuc3RhcnQoe1xuICAgICAgICB3b3JrZmxvd0lkLFxuICAgICAgICBpbnB1dCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDYWNoZSBzdGF0ZSAobm9ybWFsaXplIERhdGUpXG4gICAgICBsZXQgc3RhcnROb3JtYWxpemVkU3RhdGUgPSB7IC4uLnJlc3BvbnNlLnN0YXRlIH07XG4gICAgICBpZiAoc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShzdGFydE5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIHN0YXJ0Tm9ybWFsaXplZFN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoc3RhcnROb3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChyZXNwb25zZS5pbnN0YW5jZUlkLCBzdGFydE5vcm1hbGl6ZWRTdGF0ZSk7XG5cbiAgICAgIC8vIPCfjq8gSW50ZXJhY3RpdmUgZmxvdzogRXhlY3V0ZSBmcm9udGVuZCBhY3Rpdml0aWVzIGF1dG9tYXRpY2FsbHlcbiAgICAgIC8vIEJhY2tlbmQgZGVjaWRlcyB3aGF0IHRvIGV4ZWN1dGUgLSBpZiBwZW5kaW5nVGFzayBpcyBleGVjdXRhYmxlICh1aS1hY3Rpdml0eSB3aXRoIGZyb250ZW5kL2JvdGgpLCBleGVjdXRlIGl0XG4gICAgICBsZXQgZmluYWxOZXh0VGFzayA9IHJlc3BvbnNlLnBlbmRpbmdUYXNrIHx8IG51bGw7XG4gICAgICBsZXQgZmluYWxPdXRwdXQgPSBzdGFydE5vcm1hbGl6ZWRTdGF0ZS5vdXRwdXQ7XG5cbiAgICAgIC8vIElmIGJhY2tlbmQgcmV0dXJuZWQgYSB0YXNrIHRoYXQncyBleGVjdXRhYmxlIGhlcmUgKHVpLWFjdGl2aXR5IHdpdGggZnJvbnRlbmQvYm90aCksIGV4ZWN1dGUgaXRcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UucGVuZGluZ1Rhc2sgJiZcbiAgICAgICAgcmVzcG9uc2UucGVuZGluZ1Rhc2sudGFza1R5cGUgPT09ICd1aS1hY3Rpdml0eScgJiZcbiAgICAgICAgKHJlc3BvbnNlLnBlbmRpbmdUYXNrLmV4ZWN1dGlvbk1vZGUgPT09ICdmcm9udGVuZCcgfHwgcmVzcG9uc2UucGVuZGluZ1Rhc2suZXhlY3V0aW9uTW9kZSA9PT0gJ2JvdGgnKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlUmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlSW50ZXJhY3RpdmVGbG93KFxuICAgICAgICAgIHJlc3BvbnNlLmluc3RhbmNlSWQsXG4gICAgICAgICAgcmVzcG9uc2UucGVuZGluZ1Rhc2ssXG4gICAgICAgICAgc3RhcnROb3JtYWxpemVkU3RhdGUsXG4gICAgICAgICAgcmVzcG9uc2UuYWN0aXZpdHlPdXRwdXRzIHx8IHJlc3BvbnNlLnN0YXRlLmFjdGl2aXR5T3V0cHV0c1xuICAgICAgICApO1xuXG4gICAgICAgIGZpbmFsTmV4dFRhc2sgPSBpbnRlcmFjdGl2ZVJlc3VsdC5uZXh0VGFzaztcbiAgICAgICAgc3RhcnROb3JtYWxpemVkU3RhdGUgPSBpbnRlcmFjdGl2ZVJlc3VsdC5zdGF0ZTtcbiAgICAgICAgaWYgKGludGVyYWN0aXZlUmVzdWx0Lm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZmluYWxPdXRwdXQgPSBpbnRlcmFjdGl2ZVJlc3VsdC5vdXRwdXQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgY2FjaGUgd2l0aCBmaW5hbCBzdGF0ZVxuICAgICAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KHJlc3BvbnNlLmluc3RhbmNlSWQsIHN0YXJ0Tm9ybWFsaXplZFN0YXRlKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIGJhY2tlbmQgcmV0dXJuZWQgbnVsbCBvciBub24tZXhlY3V0YWJsZSB0YXNrLCByZXR1cm4gaXQgYXMtaXNcbiAgICAgIC8vIEJhY2tlbmQgYWxyZWFkeSBkZWNpZGVkIHdvcmtmbG93IHN0YXR1cyAoc3VzcGVuZGVkLCBjb21wbGV0ZWQsIGV0Yy4pXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGluc3RhbmNlSWQ6IHJlc3BvbnNlLmluc3RhbmNlSWQsXG4gICAgICAgIHN0YXRlOiBzdGFydE5vcm1hbGl6ZWRTdGF0ZSxcbiAgICAgICAgbmV4dFRhc2s6IGZpbmFsTmV4dFRhc2ssXG4gICAgICAgIG91dHB1dDogZmluYWxPdXRwdXQsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciBzdGFydGluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzdGFydCB3b3JrZmxvdycsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgYSBzdXNwZW5kZWQgd29ya2Zsb3cgKGUuZy4sIGFmdGVyIHVzZXIgaW50ZXJhY3Rpb24pLlxuICAgKlxuICAgKiBCYWNrZW5kIGRldGVybWluZXMgbmV4dFN0ZXAgYmFzZWQgb24gb3V0Y29tZSBhbmQgb3V0Y29tZUNvbm5lY3Rpb25zLlxuICAgKiBDbGllbnQgb25seSBwcm92aWRlcyBpbnN0YW5jZUlkLCBzdGVwSWQsIG91dGNvbWUsIGFuZCBvcHRpb25hbCB1c2VySW5wdXQuXG4gICAqXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkIC0gV29ya2Zsb3cgaW5zdGFuY2UgSURcbiAgICogQHBhcmFtIHN0ZXBJZCAtIFN0ZXAgSUQgdGhhdCB3YXMgd2FpdGluZyBmb3IgdXNlciBpbnB1dFxuICAgKiBAcGFyYW0gb3V0Y29tZSAtIFVzZXIgYWN0aW9uIG91dGNvbWUgKGUuZy4sICdDb25maXJtZWQnLCAnQ2FuY2VsbGVkJywgJ1N1Ym1pdHRlZCcpXG4gICAqIEBwYXJhbSB1c2VySW5wdXQgLSBPcHRpb25hbCB1c2VyIGlucHV0IGRhdGFcbiAgICogQHBhcmFtIHRhc2tUb2tlbiAtIFNlY3VyZSB0YXNrIHRva2VuIChyZXF1aXJlZCBmb3Igc2VjdXJlIHJlc3VtcHRpb24pXG4gICAqIEByZXR1cm5zIFJlc3VtZSByZXN1bHQgd2l0aCBuZXh0IHRhc2sgKGlmIGFueSlcbiAgICovXG4gIGFzeW5jIHJlc3VtZShcbiAgICBpbnN0YW5jZUlkOiBzdHJpbmcsXG4gICAgc3RlcElkOiBzdHJpbmcsXG4gICAgb3V0Y29tZTogc3RyaW5nLFxuICAgIHVzZXJJbnB1dD86IGFueSxcbiAgICB0YXNrVG9rZW4/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8V29ya2Zsb3dSZXN1bWVSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIHRhc2tUb2tlbiBpcyBwcm92aWRlZCBmb3Igc2VjdXJlIHJlc3VtcHRpb25cbiAgICAgIGlmICghdGFza1Rva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXNrVG9rZW4gZm9yIHJlc3VtZSBvcGVyYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgLy8gQmFja2VuZCBoYW5kbGVzIGV2ZXJ5dGhpbmc6IGNoZWNrcyBvdXRjb21lQ29ubmVjdGlvbnMgYW5kIGRldGVybWluZXMgbmV4dFN0ZXBcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53b3JrZmxvd0VuZ2luZS5yZXN1bWUoe1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGVwSWQsXG4gICAgICAgIHRhc2tUb2tlbixcbiAgICAgICAgb3V0Y29tZSxcbiAgICAgICAgdXNlcklucHV0LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZSB3aXRoIHN0YXRlIGZyb20gYmFja2VuZFxuICAgICAgbGV0IG5vcm1hbGl6ZWRTdGF0ZSA9IHJlc3BvbnNlLnN0YXRlID8geyAuLi5yZXNwb25zZS5zdGF0ZSB9IDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZSAmJiBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgJiYgIShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICBub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShub3JtYWxpemVkU3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAobm9ybWFsaXplZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQoaW5zdGFuY2VJZCwgbm9ybWFsaXplZFN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgLy8g8J+OryBJbnRlcmFjdGl2ZSBmbG93OiBFeGVjdXRlIGZyb250ZW5kIGFjdGl2aXRpZXMgYXV0b21hdGljYWxseVxuICAgICAgLy8gQmFja2VuZCBkZWNpZGVzIHdoYXQgdG8gZXhlY3V0ZSAtIGlmIG5leHRUYXNrIGlzIGV4ZWN1dGFibGUgKHVpLWFjdGl2aXR5IHdpdGggZnJvbnRlbmQvYm90aCksIGV4ZWN1dGUgaXRcbiAgICAgIGxldCBmaW5hbE5leHRUYXNrID0gcmVzcG9uc2UubmV4dFRhc2sgfHwgbnVsbDtcbiAgICAgIGxldCBmaW5hbE91dHB1dCA9IHJlc3BvbnNlLm91dHB1dDtcblxuICAgICAgLy8gSWYgYmFja2VuZCByZXR1cm5lZCBhIHRhc2sgdGhhdCdzIGV4ZWN1dGFibGUgaGVyZSAodWktYWN0aXZpdHkgd2l0aCBmcm9udGVuZC9ib3RoKSwgZXhlY3V0ZSBpdFxuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5uZXh0VGFzayAmJlxuICAgICAgICByZXNwb25zZS5uZXh0VGFzay50YXNrVHlwZSA9PT0gJ3VpLWFjdGl2aXR5JyAmJlxuICAgICAgICAocmVzcG9uc2UubmV4dFRhc2suZXhlY3V0aW9uTW9kZSA9PT0gJ2Zyb250ZW5kJyB8fCByZXNwb25zZS5uZXh0VGFzay5leGVjdXRpb25Nb2RlID09PSAnYm90aCcpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVJbnRlcmFjdGl2ZUZsb3coXG4gICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICByZXNwb25zZS5uZXh0VGFzayxcbiAgICAgICAgICBub3JtYWxpemVkU3RhdGUhLFxuICAgICAgICAgIG5vcm1hbGl6ZWRTdGF0ZT8uYWN0aXZpdHlPdXRwdXRzXG4gICAgICAgICk7XG5cbiAgICAgICAgZmluYWxOZXh0VGFzayA9IGludGVyYWN0aXZlUmVzdWx0Lm5leHRUYXNrO1xuICAgICAgICBub3JtYWxpemVkU3RhdGUgPSBpbnRlcmFjdGl2ZVJlc3VsdC5zdGF0ZTtcbiAgICAgICAgaWYgKGludGVyYWN0aXZlUmVzdWx0Lm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZmluYWxPdXRwdXQgPSBpbnRlcmFjdGl2ZVJlc3VsdC5vdXRwdXQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgY2FjaGUgd2l0aCBmaW5hbCBzdGF0ZVxuICAgICAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KGluc3RhbmNlSWQsIG5vcm1hbGl6ZWRTdGF0ZSk7XG4gICAgICB9XG4gICAgICAvLyBJZiBiYWNrZW5kIHJldHVybmVkIG51bGwgb3Igbm9uLWV4ZWN1dGFibGUgdGFzaywgcmV0dXJuIGl0IGFzLWlzXG4gICAgICAvLyBCYWNrZW5kIGFscmVhZHkgZGVjaWRlZCB3b3JrZmxvdyBzdGF0dXMgKHN1c3BlbmRlZCwgY29tcGxldGVkLCBldGMuKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBzdGF0ZTogbm9ybWFsaXplZFN0YXRlIHx8IHJlc3BvbnNlLnN0YXRlLFxuICAgICAgICBuZXh0VGFzazogZmluYWxOZXh0VGFzayxcbiAgICAgICAgb3V0cHV0OiBmaW5hbE91dHB1dCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcignW0FYUFdvcmtmbG93TWFuYWdlcl0g4p2MIEVycm9yIHJlc3VtaW5nIHdvcmtmbG93OicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJlc3VtZSB3b3JrZmxvdycsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ya2Zsb3cgaW5zdGFuY2Ugc3RhdGUuXG4gICAqXG4gICAqIFJldHJpZXZlcyBzdGF0ZSBmcm9tIGNhY2hlIChpZiB2YWxpZCkgb3IgZnJvbSBiYWNrZW5kLlxuICAgKlxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCAtIFdvcmtmbG93IGluc3RhbmNlIElEXG4gICAqIEByZXR1cm5zIFdvcmtmbG93IGluc3RhbmNlIHN0YXRlIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBhc3luYyBnZXRTdGF0ZShpbnN0YW5jZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZSB8IG51bGw+IHtcbiAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc3RhdGVDYWNoZS5nZXQoaW5zdGFuY2VJZCk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgLy8gTm9ybWFsaXplIGxhc3RVcGRhdGVkIHRvIERhdGUgKGZvciBjYWNoZSBzYWZldHkpXG4gICAgICBjb25zdCBub3JtYWxpemVkQ2FjaGVkID0geyAuLi5jYWNoZWQgfTtcbiAgICAgIGlmIChub3JtYWxpemVkQ2FjaGVkLmxhc3RVcGRhdGVkICYmICEobm9ybWFsaXplZENhY2hlZC5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRDYWNoZWQubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZShub3JtYWxpemVkQ2FjaGVkLmxhc3RVcGRhdGVkKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgY2FjaGUgYWdlXG4gICAgICBjb25zdCBjYWNoZUFnZSA9IERhdGUubm93KCkgLSBub3JtYWxpemVkQ2FjaGVkLmxhc3RVcGRhdGVkLmdldFRpbWUoKTtcbiAgICAgIGlmIChjYWNoZUFnZSA8IHRoaXMuQ0FDSEVfVFRMKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVkQ2FjaGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZldGNoIGZyb20gYmFja2VuZFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHRoaXMud29ya2Zsb3dFbmdpbmUuZ2V0U3RhdGUoe1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBsYXN0VXBkYXRlZCB0byBEYXRlIChmb3IgY2FjaGUgc2FmZXR5KVxuICAgICAgY29uc3Qgbm9ybWFsaXplZFN0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKG5vcm1hbGl6ZWRTdGF0ZS5sYXN0VXBkYXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChpbnN0YW5jZUlkLCBub3JtYWxpemVkU3RhdGUpO1xuXG4gICAgICByZXR1cm4gbm9ybWFsaXplZFN0YXRlO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBWFBXb3JrZmxvd01hbmFnZXJdIOKdjCBFcnJvciBnZXR0aW5nIHdvcmtmbG93IHN0YXRlOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19","import { InjectionToken } from '@angular/core';\nexport const AXP_WORKFLOW_PROVIDER = new InjectionToken('AXP_WORKFLOW_PROVIDER', {\n factory: () => [],\n});\nexport const AXP_WORKFLOW_CATEGORY_PROVIDER = new InjectionToken('AXP_WORKFLOW_CATEGORY_PROVIDER', {\n factory: () => [],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd29ya2Zsb3cvc3JjL2xpYi9lbmdpbmUvd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMkIvQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsdUJBQXVCLEVBQUU7SUFDekcsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDO0FBdUJILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUFxQyxnQ0FBZ0MsRUFBRTtJQUNuSSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtDQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVmaW5pdGlvbi50eXBlcyc7XG5cbi8qKlxuICogV29ya2Zsb3cgQ2F0ZWdvcnkgLSBFeHRlbmRzIEFYUENhdGVnb3J5RW50aXR5IGZvciBjb25zaXN0ZW5jeSBhbmQgcGVyZm9ybWFuY2VcbiAqIFxuICogSW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBBWFBDYXRlZ29yeUVudGl0eTpcbiAqIC0gaWQ6IHN0cmluZyAgICAgICAgICAgICAgICAgICAtIFVuaXF1ZSBpZGVudGlmaWVyXG4gKiAtIHRpdGxlOiBzdHJpbmcgICAgICAgICAgICAgICAgLSBEaXNwbGF5IG5hbWVcbiAqIC0gZGVzY3JpcHRpb24/OiBzdHJpbmcgICAgICAgICAtIENhdGVnb3J5IGRlc2NyaXB0aW9uXG4gKiAtIHBhcmVudElkPzogc3RyaW5nICAgICAgICAgICAgLSBQYXJlbnQgY2F0ZWdvcnkgSURcbiAqIC0gY2hpbGRyZW5Db3VudDogbnVtYmVyICAgICAgICAtIERpcmVjdCBjaGlsZCBjYXRlZ29yaWVzIGNvdW50IChlbmFibGVzIGxhenkgbG9hZGluZylcbiAqIC0gaXRlbXNDb3VudD86IG51bWJlciAgICAgICAgICAtIERpcmVjdCB3b3JrZmxvd3MgY291bnRcbiAqIC0gdG90YWxDaGlsZHJlbkNvdW50PzogbnVtYmVyICAtIFRvdGFsIG5lc3RlZCBjYXRlZ29yaWVzIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqIC0gdG90YWxJdGVtc0NvdW50PzogbnVtYmVyICAgICAtIFRvdGFsIHdvcmtmbG93cyBpbiB0cmVlIChvcHRpb25hbCwgZm9yIGFuYWx5dGljcylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBXb3JrZmxvd0NhdGVnb3J5IGV4dGVuZHMgQVhQQ2F0ZWdvcnlFbnRpdHkge1xuICAgIC8vIE5vIGFkZGl0aW9uYWwgcHJvcGVydGllcyBuZWVkZWQgLSBhbGwgaW5oZXJpdGVkIGZyb20gQVhQQ2F0ZWdvcnlFbnRpdHlcbiAgICAvLyBVc2U6IGNoaWxkcmVuQ291bnQgaW5zdGVhZCBvZiBoYXNDaGlsZFxuICAgIC8vIFVzZTogaXRlbXNDb3VudCBpbnN0ZWFkIG9mIGhhc1dvcmtmbG93XG59XG5cbmV4cG9ydCB0eXBlIEFYUFdvcmtmbG93UHJvdmlkZXJUb2tlbiA9XG4gICAgfCBBWFBXb3JrZmxvd1Byb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUFdvcmtmbG93UHJvdmlkZXI+O1xuXG5leHBvcnQgY29uc3QgQVhQX1dPUktGTE9XX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPEFYUFdvcmtmbG93UHJvdmlkZXJUb2tlbltdPignQVhQX1dPUktGTE9XX1BST1ZJREVSJywge1xuICAgIGZhY3Rvcnk6ICgpID0+IFtdLFxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dQcm92aWRlciB7XG4gICAgLyoqXG4gICAgICogR2V0IGxpc3Qgb2Ygd29ya2Zsb3cgZGVmaW5pdGlvbnMgZm9yIGEgY2F0ZWdvcnkuXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBmaWx0ZXIgd29ya2Zsb3dzXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiB3b3JrZmxvdyBkZWZpbml0aW9uIGFycmF5XG4gICAgICovXG4gICAgZ2V0TGlzdChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPjtcbiAgICBcbiAgICAvKipcbiAgICAgKiBHZXQgZnVsbCB3b3JrZmxvdyBkZWZpbml0aW9uIGJ5IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyKS5cbiAgICAgKiBVc2VkIGJ5IHdvcmtmbG93IGVuZ2luZXMgZm9yIGV4ZWN1dGlvbiBhbmQgVUkgZm9yIG1ldGFkYXRhLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gV29ya2Zsb3cgbmFtZSAodW5pcXVlIGlkZW50aWZpZXIpXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBvZiBmdWxsIHdvcmtmbG93IGRlZmluaXRpb24gb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCBudWxsPjtcbn1cblxuZXhwb3J0IHR5cGUgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyVG9rZW4gPVxuICAgIHwgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyXG4gICAgfCBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlcj47XG5cbmV4cG9ydCBjb25zdCBBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyVG9rZW5bXT4oJ0FYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUicsIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPjtcbiAgICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+O1xufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXP_WORKFLOW_PROVIDER, } from '../workflow/workflow-definition.provider';\nimport { AXPActivityDefinitionService } from '../activity/activity-definition.service';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Local engine implementation that manages workflow progression and state.\n *\n * This engine:\n * - Returns frontend/both activities as pendingTask (does NOT execute them)\n * - Skips backend activities (does not error, continues execution)\n * - Maintains workflow state in memory\n * - Does not require backend API calls\n *\n * Execution of frontend tasks is handled by AXPWorkflowManager via ActivityExecutor.\n * This engine only manages workflow progression and state storage.\n *\n * This is the DEFAULT engine provider. Applications can override it with\n * an API-based engine implementation.\n */\nexport class AXPWorkflowLocalEngine {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.activityDefinitionService = inject(AXPActivityDefinitionService);\n this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Instance Storage ----\n /**\n * In-memory storage for workflow instances.\n * Key: instanceId\n * Value: LocalWorkflowState\n */\n this.instances = new Map();\n /**\n * Task token storage for secure resume operations.\n * Key: taskToken\n * Value: { instanceId, activityId }\n */\n this.taskTokens = new Map();\n }\n //#endregion\n //#region ---- Public Methods (AXPWorkflowEngine) ----\n /**\n * Start a new workflow instance.\n *\n * Creates an in-memory workflow instance and progresses it.\n * Frontend/both activities are returned as pendingTask for external execution.\n * Backend activities are skipped.\n */\n async start(request) {\n console.log(`[WorkflowLocalEngine] 🚀 Starting workflow: ${request.workflowId}`, request);\n // Generate instance ID\n const instanceId = AXPDataGenerator.uuid();\n const now = new Date();\n // Load workflow definition\n console.log(`[WorkflowLocalEngine] 📥 Loading workflow definition: ${request.workflowId}`);\n const definition = await this.getDefinition(request.workflowId);\n if (!definition) {\n console.error(`[WorkflowLocalEngine] ❌ Workflow definition not found: ${request.workflowId}`);\n throw new Error(`Workflow definition not found: ${request.workflowId}`);\n }\n console.log(`[WorkflowLocalEngine] ✅ Definition loaded:`, {\n name: definition.name,\n activitiesCount: definition.graph?.activities?.length || 0,\n connectionsCount: definition.graph?.connections?.length || 0,\n });\n // Initialize workflow state\n const state = {\n instanceId,\n workflowId: request.workflowId,\n status: 'running',\n variables: {},\n activityOutputs: {},\n lastActivityOutput: undefined,\n input: request.input || {},\n output: undefined,\n lastUpdated: now,\n };\n // Create local state\n const localState = {\n instanceId,\n workflowId: request.workflowId,\n definition,\n state,\n completedActivities: new Set(),\n activityResults: new Map(),\n };\n // Store instance\n this.instances.set(instanceId, localState);\n // Execute workflow steps\n console.log(`[WorkflowLocalEngine] ⚙️ Executing workflow steps...`);\n const pendingTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n console.log(`[WorkflowLocalEngine] ✅ Workflow started:`, {\n instanceId,\n status: localState.state.status,\n hasPendingTask: !!pendingTask,\n pendingTaskType: pendingTask?.activityType,\n });\n return {\n instanceId,\n state: localState.state,\n pendingTask: pendingTask || null,\n activityOutputs: localState.state.activityOutputs,\n lastActivityOutput: localState.state.lastActivityOutput,\n };\n }\n /**\n * Resume a suspended workflow instance.\n *\n * Validates task token, applies externally executed result,\n * and continues progressing workflow steps.\n */\n async resume(request) {\n // Validate task token\n const tokenInfo = this.taskTokens.get(request.taskToken);\n if (!tokenInfo || tokenInfo.instanceId !== request.instanceId || tokenInfo.activityId !== request.stepId) {\n throw new Error('Invalid task token');\n }\n // Get instance\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Store activity result (from external execution)\n localState.activityResults.set(request.stepId, {\n output: request.userInput || {},\n outcome: request.outcome,\n });\n localState.completedActivities.add(request.stepId);\n // Store activity output for expression evaluation\n localState.state.activityOutputs = {\n ...(localState.state.activityOutputs || {}),\n [request.stepId]: request.userInput || {},\n };\n localState.state.lastActivityOutput = request.userInput || {};\n // Merge output/userInput into state variables\n if (request.userInput) {\n localState.state.variables = {\n ...localState.state.variables,\n ...(request.userInput || {}),\n };\n }\n // Mark activity as completed and continue progression\n // Continue progressing workflow steps (skipping backend activities)\n const nextTask = await this.executeWorkflowSteps(localState);\n // Update state\n localState.state.lastUpdated = new Date();\n // Determine final status\n if (!nextTask && localState.state.status === 'running') {\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n }\n return {\n output: request.userInput || {},\n outcomes: { [request.outcome]: true },\n state: localState.state,\n nextTask: nextTask || null,\n };\n }\n /**\n * Get current workflow instance state.\n */\n async getState(request) {\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Normalize lastUpdated to Date (for cache safety)\n const state = { ...localState.state };\n if (state.lastUpdated && !(state.lastUpdated instanceof Date)) {\n state.lastUpdated = new Date(state.lastUpdated);\n }\n return state;\n }\n //#endregion\n //#region ---- Private Methods ----\n /**\n * Get workflow definition from available providers.\n */\n async getDefinition(workflowId) {\n // Try all providers in order\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value) {\n const provider = p.value;\n // Check if provider has getByName method\n if (typeof provider.getByName === 'function') {\n try {\n const definition = await provider.getByName(workflowId);\n if (definition) {\n return definition;\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n }\n return null;\n }\n /**\n * Progress workflow steps starting from the current position.\n *\n * For frontend/both activities: returns task immediately (suspends workflow).\n * For backend activities: skips and continues.\n *\n * Returns the next pending task (if frontend activity found) or null (if completed).\n */\n async executeWorkflowSteps(localState) {\n const graph = localState.definition.graph;\n const activities = graph.activities || [];\n const connections = graph.connections || [];\n // Build activity map\n const activityMap = new Map();\n activities.forEach(activity => {\n activityMap.set(activity.id, activity);\n });\n // Build connection graph\n const outgoingConnections = new Map();\n const incomingConnections = new Map();\n connections.forEach(conn => {\n const sourceId = conn.source.activtyName;\n const targetId = conn.target.activtyName;\n if (!outgoingConnections.has(sourceId)) {\n outgoingConnections.set(sourceId, []);\n }\n outgoingConnections.get(sourceId).push(conn);\n if (!incomingConnections.has(targetId)) {\n incomingConnections.set(targetId, []);\n }\n incomingConnections.get(targetId).push(conn);\n });\n // Find starting activity (use startActivityId or no incoming connections, or first activity)\n let currentActivityId = localState.currentActivityId;\n if (!currentActivityId) {\n // Use startActivityId if available\n if (graph.startActivityId) {\n currentActivityId = graph.startActivityId;\n }\n else {\n // Find root activity (no incoming connections)\n for (const activity of activities) {\n if (!incomingConnections.has(activity.id)) {\n currentActivityId = activity.id;\n break;\n }\n }\n // If no root found, use first activity\n if (!currentActivityId && activities.length > 0) {\n currentActivityId = activities[0].id;\n }\n }\n }\n // Execute workflow steps\n while (currentActivityId) {\n const activity = activityMap.get(currentActivityId);\n if (!activity) {\n break;\n }\n // Skip if already completed\n if (localState.completedActivities.has(currentActivityId)) {\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n continue;\n }\n // Get activity definition to retrieve executionMode and title\n console.log(`[WorkflowLocalEngine] 🔍 Getting activity definition for: ${activity.name}`);\n const activityDefinition = await this.activityDefinitionService.getActivityByName(activity.name);\n console.log(`[WorkflowLocalEngine] 📋 Activity definition:`, {\n name: activityDefinition?.name,\n type: activityDefinition?.type,\n executionMode: activityDefinition?.executionMode,\n title: activityDefinition?.title,\n found: !!activityDefinition,\n });\n const executionMode = activityDefinition?.executionMode || 'frontend';\n const activityTitle = activityDefinition?.title;\n // Handle backend activities: skip\n if (executionMode === 'backend') {\n console.log(`[WorkflowLocalEngine] ⏭️ Skipping backend activity: ${activity.name} (${activity.id})`);\n localState.completedActivities.add(currentActivityId);\n localState.activityResults.set(currentActivityId, {\n output: null,\n outcome: 'Done',\n });\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n continue;\n }\n // Handle frontend/both activities: return as pendingTask (do NOT execute)\n if (executionMode === 'frontend' || executionMode === 'both') {\n // Create task for external execution\n // Note: Expression evaluation will be done by ActivityExecutor\n const task = {\n taskToken: AXPDataGenerator.uuid(),\n activityId: activity.id,\n activityType: activity.name,\n activityName: activityTitle || undefined,\n executionMode: executionMode,\n input: activity.inputs || {}, // Pass raw inputs - executor will evaluate\n config: activity.customProperties || {},\n };\n // Store task token for secure resume\n this.taskTokens.set(task.taskToken, {\n instanceId: localState.instanceId,\n activityId: activity.id,\n });\n // Update state to indicate suspension\n localState.currentActivityId = currentActivityId;\n localState.state.status = 'suspended';\n localState.state.currentStepId = currentActivityId;\n // Return task immediately - AXPWorkflowManager will execute it\n return task;\n }\n // Move to next activity\n const nextId = this.getNextActivityId(currentActivityId, outgoingConnections, localState.activityResults);\n currentActivityId = nextId ?? undefined;\n }\n // Workflow completed\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n localState.currentActivityId = undefined;\n return null;\n }\n /**\n * Get next activity ID based on connections and outcomes.\n */\n getNextActivityId(currentActivityId, outgoingConnections, activityResults) {\n const connections = outgoingConnections.get(currentActivityId) || [];\n if (connections.length === 0) {\n return null; // No outgoing connections - workflow ends\n }\n // Get current activity result\n const result = activityResults.get(currentActivityId);\n const outcome = result?.outcome || 'Done';\n // Find connection matching outcome\n // Outcome matching is typically done via port name (e.g., \"Done\", \"Failed\")\n for (const conn of connections) {\n const sourcePort = conn.source.port || 'Done';\n if (sourcePort === outcome) {\n return conn.target.activtyName;\n }\n }\n // If no matching outcome, use first connection (default path)\n if (connections.length > 0) {\n return connections[0].target.activtyName;\n }\n return null;\n }\n async frontActivtyComplete(request) {\n const localState = this.instances.get(request.instanceId);\n if (!localState) {\n throw new Error(`Workflow instance not found: ${request.instanceId}`);\n }\n // Store activity result\n localState.activityResults.set(request.activityNode, {\n output: request.output || {},\n outcome: request.outcome,\n });\n localState.completedActivities.add(request.activityNode);\n // Store outputs for expression evaluation\n localState.state.activityOutputs = {\n ...(localState.state.activityOutputs || {}),\n [request.activityNode]: request.output || {},\n };\n localState.state.lastActivityOutput = request.output || {};\n // Merge output into workflow variables\n localState.state.variables = {\n ...localState.state.variables,\n ...(request.output || {}),\n };\n // Continue workflow progression\n const nextTask = await this.executeWorkflowSteps(localState);\n // Update state timestamp\n localState.state.lastUpdated = new Date();\n // Determine final status\n if (!nextTask && localState.state.status === 'running') {\n localState.state.status = 'completed';\n localState.state.output = localState.state.variables;\n }\n return {\n output: request.output || {},\n outcomes: { [request.outcome]: true },\n nextTask: nextTask || null,\n state: localState.state,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowLocalEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowLocalEngine }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowLocalEngine, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbG9jYWwtZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS9ydW50aW1lL3dvcmtmbG93LWxvY2FsLWVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW1CbkQsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWlCekQsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQURuQztRQUVFLCtDQUErQztRQUU5Qiw4QkFBeUIsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNqRSxzQkFBaUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFN0YsWUFBWTtRQUVaLHdDQUF3QztRQUV4Qzs7OztXQUlHO1FBQ0ssY0FBUyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBRTFEOzs7O1dBSUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXNELENBQUM7S0FtYnBGO0lBamJDLFlBQVk7SUFFWiwwREFBMEQ7SUFFMUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFnQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUYsdUJBQXVCO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLGdCQUFn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QUMsS0FBSyxDQUFDLFNBQVM7WUFDN0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1NBQzFCLENBQUM7UUFFRixnQ0FBZ0M7UUFDaEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFN0QseUJBQXlCO1FBQ3pCLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFMUMseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkQsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRTtZQUM1QixRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUU7WUFDckMsUUFBUSxFQUFFLFFBQVEsSUFBSSxJQUFJO1lBQzFCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztTQUN4QixDQUFDO0lBQ0osQ0FBQzsrR0FyY1Usc0JBQXNCO21IQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RW5naW5lIH0gZnJvbSAnLi93b3JrZmxvdy1lbmdpbmUnO1xuaW1wb3J0IHtcbiAgQVhQU3RhcnRXb3JrZmxvd1JlcXVlc3QsXG4gIEFYUFN0YXJ0V29ya2Zsb3dSZXNwb25zZSxcbiAgQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0LFxuICBBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlLFxuICBBWFBHZXRXb3JrZmxvd1N0YXRlUmVxdWVzdCxcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZVN0YXRlLFxuICBBWFBXb3JrZmxvd1Rhc2ssXG4gIEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlcXVlc3QsXG4gIEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlc3BvbnNlLFxufSBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuaW1wb3J0IHtcbiAgQVhQV29ya2Zsb3dEZWZpbml0aW9uLFxuICBBWFBXb3JrZmxvd0dyYXBoLFxuICBBWFBXb3JrZmxvd0FjdGl2aXR5SW5zdGFuY2UsXG4gIEFYUENvbm5lY3Rpb24sXG59IGZyb20gJy4uL3dvcmtmbG93LWRlZmluaXRpb24udHlwZXMnO1xuaW1wb3J0IHtcbiAgQVhQX1dPUktGTE9XX1BST1ZJREVSLFxuICBBWFBXb3JrZmxvd1Byb3ZpZGVyLFxufSBmcm9tICcuLi93b3JrZmxvdy93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcbmltcG9ydCB7IEFYUEFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hY3Rpdml0eS9hY3Rpdml0eS1kZWZpbml0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhQRGF0YUdlbmVyYXRvciB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgJiBJbnRlcmZhY2VzICAgLS0tLVxuXG4vKipcbiAqIEludGVybmFsIHdvcmtmbG93IGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuaW50ZXJmYWNlIExvY2FsV29ya2Zsb3dTdGF0ZSB7XG4gIGluc3RhbmNlSWQ6IHN0cmluZztcbiAgd29ya2Zsb3dJZDogc3RyaW5nO1xuICBkZWZpbml0aW9uOiBBWFBXb3JrZmxvd0RlZmluaXRpb247XG4gIHN0YXRlOiBBWFBXb3JrZmxvd0luc3RhbmNlU3RhdGU7XG4gIGN1cnJlbnRBY3Rpdml0eUlkPzogc3RyaW5nO1xuICBjb21wbGV0ZWRBY3Rpdml0aWVzOiBTZXQ8c3RyaW5nPjtcbiAgYWN0aXZpdHlSZXN1bHRzOiBNYXA8c3RyaW5nLCB7IG91dHB1dDogYW55OyBvdXRjb21lOiBzdHJpbmcgfT47XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIExvY2FsIGVuZ2luZSBpbXBsZW1lbnRhdGlvbiB0aGF0IG1hbmFnZXMgd29ya2Zsb3cgcHJvZ3Jlc3Npb24gYW5kIHN0YXRlLlxuICogXG4gKiBUaGlzIGVuZ2luZTpcbiAqIC0gUmV0dXJucyBmcm9udGVuZC9ib3RoIGFjdGl2aXRpZXMgYXMgcGVuZGluZ1Rhc2sgKGRvZXMgTk9UIGV4ZWN1dGUgdGhlbSlcbiAqIC0gU2tpcHMgYmFja2VuZCBhY3Rpdml0aWVzIChkb2VzIG5vdCBlcnJvciwgY29udGludWVzIGV4ZWN1dGlvbilcbiAqIC0gTWFpbnRhaW5zIHdvcmtmbG93IHN0YXRlIGluIG1lbW9yeVxuICogLSBEb2VzIG5vdCByZXF1aXJlIGJhY2tlbmQgQVBJIGNhbGxzXG4gKiBcbiAqIEV4ZWN1dGlvbiBvZiBmcm9udGVuZCB0YXNrcyBpcyBoYW5kbGVkIGJ5IEFYUFdvcmtmbG93TWFuYWdlciB2aWEgQWN0aXZpdHlFeGVjdXRvci5cbiAqIFRoaXMgZW5naW5lIG9ubHkgbWFuYWdlcyB3b3JrZmxvdyBwcm9ncmVzc2lvbiBhbmQgc3RhdGUgc3RvcmFnZS5cbiAqIFxuICogVGhpcyBpcyB0aGUgREVGQVVMVCBlbmdpbmUgcHJvdmlkZXIuIEFwcGxpY2F0aW9ucyBjYW4gb3ZlcnJpZGUgaXQgd2l0aFxuICogYW4gQVBJLWJhc2VkIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93TG9jYWxFbmdpbmUgaW1wbGVtZW50cyBBWFBXb3JrZmxvd0VuZ2luZSB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYUEFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93UHJvdmlkZXJzID0gaW5qZWN0KEFYUF9XT1JLRkxPV19QUk9WSURFUiwgeyBvcHRpb25hbDogdHJ1ZSB9KSB8fCBbXTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEluc3RhbmNlIFN0b3JhZ2UgICAtLS0tXG5cbiAgLyoqXG4gICAqIEluLW1lbW9yeSBzdG9yYWdlIGZvciB3b3JrZmxvdyBpbnN0YW5jZXMuXG4gICAqIEtleTogaW5zdGFuY2VJZFxuICAgKiBWYWx1ZTogTG9jYWxXb3JrZmxvd1N0YXRlXG4gICAqL1xuICBwcml2YXRlIGluc3RhbmNlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2NhbFdvcmtmbG93U3RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIFRhc2sgdG9rZW4gc3RvcmFnZSBmb3Igc2VjdXJlIHJlc3VtZSBvcGVyYXRpb25zLlxuICAgKiBLZXk6IHRhc2tUb2tlblxuICAgKiBWYWx1ZTogeyBpbnN0YW5jZUlkLCBhY3Rpdml0eUlkIH1cbiAgICovXG4gIHByaXZhdGUgdGFza1Rva2VucyA9IG5ldyBNYXA8c3RyaW5nLCB7IGluc3RhbmNlSWQ6IHN0cmluZzsgYWN0aXZpdHlJZDogc3RyaW5nIH0+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAoQVhQV29ya2Zsb3dFbmdpbmUpICAgLS0tLVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyB3b3JrZmxvdyBpbnN0YW5jZS5cbiAgICogXG4gICAqIENyZWF0ZXMgYW4gaW4tbWVtb3J5IHdvcmtmbG93IGluc3RhbmNlIGFuZCBwcm9ncmVzc2VzIGl0LlxuICAgKiBGcm9udGVuZC9ib3RoIGFjdGl2aXRpZXMgYXJlIHJldHVybmVkIGFzIHBlbmRpbmdUYXNrIGZvciBleHRlcm5hbCBleGVjdXRpb24uXG4gICAqIEJhY2tlbmQgYWN0aXZpdGllcyBhcmUgc2tpcHBlZC5cbiAgICovXG4gIGFzeW5jIHN0YXJ0KHJlcXVlc3Q6IEFYUFN0YXJ0V29ya2Zsb3dSZXF1ZXN0KTogUHJvbWlzZTxBWFBTdGFydFdvcmtmbG93UmVzcG9uc2U+IHtcbiAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIPCfmoAgU3RhcnRpbmcgd29ya2Zsb3c6ICR7cmVxdWVzdC53b3JrZmxvd0lkfWAsIHJlcXVlc3QpO1xuICAgIFxuICAgIC8vIEdlbmVyYXRlIGluc3RhbmNlIElEXG4gICAgY29uc3QgaW5zdGFuY2VJZCA9IEFYUERhdGFHZW5lcmF0b3IudXVpZCgpO1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgICAvLyBMb2FkIHdvcmtmbG93IGRlZmluaXRpb25cbiAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIPCfk6UgTG9hZGluZyB3b3JrZmxvdyBkZWZpbml0aW9uOiAke3JlcXVlc3Qud29ya2Zsb3dJZH1gKTtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgdGhpcy5nZXREZWZpbml0aW9uKHJlcXVlc3Qud29ya2Zsb3dJZCk7XG4gICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g4p2MIFdvcmtmbG93IGRlZmluaXRpb24gbm90IGZvdW5kOiAke3JlcXVlc3Qud29ya2Zsb3dJZH1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgZGVmaW5pdGlvbiBub3QgZm91bmQ6ICR7cmVxdWVzdC53b3JrZmxvd0lkfWApO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g4pyFIERlZmluaXRpb24gbG9hZGVkOmAsIHtcbiAgICAgIG5hbWU6IGRlZmluaXRpb24ubmFtZSxcbiAgICAgIGFjdGl2aXRpZXNDb3VudDogZGVmaW5pdGlvbi5ncmFwaD8uYWN0aXZpdGllcz8ubGVuZ3RoIHx8IDAsXG4gICAgICBjb25uZWN0aW9uc0NvdW50OiBkZWZpbml0aW9uLmdyYXBoPy5jb25uZWN0aW9ucz8ubGVuZ3RoIHx8IDAsXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHdvcmtmbG93IHN0YXRlXG4gICAgY29uc3Qgc3RhdGU6IEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZSA9IHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICB3b3JrZmxvd0lkOiByZXF1ZXN0LndvcmtmbG93SWQsXG4gICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICBhY3Rpdml0eU91dHB1dHM6IHt9LFxuICAgICAgbGFzdEFjdGl2aXR5T3V0cHV0OiB1bmRlZmluZWQsXG4gICAgICBpbnB1dDogcmVxdWVzdC5pbnB1dCB8fCB7fSxcbiAgICAgIG91dHB1dDogdW5kZWZpbmVkLFxuICAgICAgbGFzdFVwZGF0ZWQ6IG5vdyxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGxvY2FsIHN0YXRlXG4gICAgY29uc3QgbG9jYWxTdGF0ZTogTG9jYWxXb3JrZmxvd1N0YXRlID0ge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIHdvcmtmbG93SWQ6IHJlcXVlc3Qud29ya2Zsb3dJZCxcbiAgICAgIGRlZmluaXRpb24sXG4gICAgICBzdGF0ZSxcbiAgICAgIGNvbXBsZXRlZEFjdGl2aXRpZXM6IG5ldyBTZXQoKSxcbiAgICAgIGFjdGl2aXR5UmVzdWx0czogbmV3IE1hcCgpLFxuICAgIH07XG5cbiAgICAvLyBTdG9yZSBpbnN0YW5jZVxuICAgIHRoaXMuaW5zdGFuY2VzLnNldChpbnN0YW5jZUlkLCBsb2NhbFN0YXRlKTtcblxuICAgIC8vIEV4ZWN1dGUgd29ya2Zsb3cgc3RlcHNcbiAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIOKame+4jyBFeGVjdXRpbmcgd29ya2Zsb3cgc3RlcHMuLi5gKTtcbiAgICBjb25zdCBwZW5kaW5nVGFzayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVdvcmtmbG93U3RlcHMobG9jYWxTdGF0ZSk7XG5cbiAgICAvLyBVcGRhdGUgc3RhdGVcbiAgICBsb2NhbFN0YXRlLnN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcblxuICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g4pyFIFdvcmtmbG93IHN0YXJ0ZWQ6YCwge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIHN0YXR1czogbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMsXG4gICAgICBoYXNQZW5kaW5nVGFzazogISFwZW5kaW5nVGFzayxcbiAgICAgIHBlbmRpbmdUYXNrVHlwZTogcGVuZGluZ1Rhc2s/LmFjdGl2aXR5VHlwZSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgc3RhdGU6IGxvY2FsU3RhdGUuc3RhdGUsXG4gICAgICBwZW5kaW5nVGFzazogcGVuZGluZ1Rhc2sgfHwgbnVsbCxcbiAgICAgIGFjdGl2aXR5T3V0cHV0czogbG9jYWxTdGF0ZS5zdGF0ZS5hY3Rpdml0eU91dHB1dHMsXG4gICAgICBsYXN0QWN0aXZpdHlPdXRwdXQ6IGxvY2FsU3RhdGUuc3RhdGUubGFzdEFjdGl2aXR5T3V0cHV0LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIGEgc3VzcGVuZGVkIHdvcmtmbG93IGluc3RhbmNlLlxuICAgKiBcbiAgICogVmFsaWRhdGVzIHRhc2sgdG9rZW4sIGFwcGxpZXMgZXh0ZXJuYWxseSBleGVjdXRlZCByZXN1bHQsXG4gICAqIGFuZCBjb250aW51ZXMgcHJvZ3Jlc3Npbmcgd29ya2Zsb3cgc3RlcHMuXG4gICAqL1xuICBhc3luYyByZXN1bWUocmVxdWVzdDogQVhQUmVzdW1lV29ya2Zsb3dSZXF1ZXN0KTogUHJvbWlzZTxBWFBSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlPiB7XG4gICAgLy8gVmFsaWRhdGUgdGFzayB0b2tlblxuICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMudGFza1Rva2Vucy5nZXQocmVxdWVzdC50YXNrVG9rZW4pO1xuICAgIGlmICghdG9rZW5JbmZvIHx8IHRva2VuSW5mby5pbnN0YW5jZUlkICE9PSByZXF1ZXN0Lmluc3RhbmNlSWQgfHwgdG9rZW5JbmZvLmFjdGl2aXR5SWQgIT09IHJlcXVlc3Quc3RlcElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGFzayB0b2tlbicpO1xuICAgIH1cblxuICAgIC8vIEdldCBpbnN0YW5jZVxuICAgIGNvbnN0IGxvY2FsU3RhdGUgPSB0aGlzLmluc3RhbmNlcy5nZXQocmVxdWVzdC5pbnN0YW5jZUlkKTtcbiAgICBpZiAoIWxvY2FsU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgaW5zdGFuY2Ugbm90IGZvdW5kOiAke3JlcXVlc3QuaW5zdGFuY2VJZH1gKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBhY3Rpdml0eSByZXN1bHQgKGZyb20gZXh0ZXJuYWwgZXhlY3V0aW9uKVxuICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzLnNldChyZXF1ZXN0LnN0ZXBJZCwge1xuICAgICAgb3V0cHV0OiByZXF1ZXN0LnVzZXJJbnB1dCB8fCB7fSxcbiAgICAgIG91dGNvbWU6IHJlcXVlc3Qub3V0Y29tZSxcbiAgICB9KTtcbiAgICBsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuYWRkKHJlcXVlc3Quc3RlcElkKTtcblxuICAgIC8vIFN0b3JlIGFjdGl2aXR5IG91dHB1dCBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uXG4gICAgbG9jYWxTdGF0ZS5zdGF0ZS5hY3Rpdml0eU91dHB1dHMgPSB7XG4gICAgICAuLi4obG9jYWxTdGF0ZS5zdGF0ZS5hY3Rpdml0eU91dHB1dHMgfHwge30pLFxuICAgICAgW3JlcXVlc3Quc3RlcElkXTogcmVxdWVzdC51c2VySW5wdXQgfHwge30sXG4gICAgfTtcbiAgICBsb2NhbFN0YXRlLnN0YXRlLmxhc3RBY3Rpdml0eU91dHB1dCA9IHJlcXVlc3QudXNlcklucHV0IHx8IHt9O1xuXG4gICAgLy8gTWVyZ2Ugb3V0cHV0L3VzZXJJbnB1dCBpbnRvIHN0YXRlIHZhcmlhYmxlc1xuICAgIGlmIChyZXF1ZXN0LnVzZXJJbnB1dCkge1xuICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXMgPSB7XG4gICAgICAgIC4uLmxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzLFxuICAgICAgICAuLi4ocmVxdWVzdC51c2VySW5wdXQgfHwge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFjdGl2aXR5IGFzIGNvbXBsZXRlZCBhbmQgY29udGludWUgcHJvZ3Jlc3Npb25cbiAgICAvLyBDb250aW51ZSBwcm9ncmVzc2luZyB3b3JrZmxvdyBzdGVwcyAoc2tpcHBpbmcgYmFja2VuZCBhY3Rpdml0aWVzKVxuICAgIGNvbnN0IG5leHRUYXNrID0gYXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3dTdGVwcyhsb2NhbFN0YXRlKTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZVxuICAgIGxvY2FsU3RhdGUuc3RhdGUubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGZpbmFsIHN0YXR1c1xuICAgIGlmICghbmV4dFRhc2sgJiYgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgbG9jYWxTdGF0ZS5zdGF0ZS5zdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUub3V0cHV0ID0gbG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDogcmVxdWVzdC51c2VySW5wdXQgfHwge30sXG4gICAgICBvdXRjb21lczogeyBbcmVxdWVzdC5vdXRjb21lXTogdHJ1ZSB9LFxuICAgICAgc3RhdGU6IGxvY2FsU3RhdGUuc3RhdGUsXG4gICAgICBuZXh0VGFzazogbmV4dFRhc2sgfHwgbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHdvcmtmbG93IGluc3RhbmNlIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdGUocmVxdWVzdDogQVhQR2V0V29ya2Zsb3dTdGF0ZVJlcXVlc3QpOiBQcm9taXNlPEFYUFdvcmtmbG93SW5zdGFuY2VTdGF0ZT4ge1xuICAgIGNvbnN0IGxvY2FsU3RhdGUgPSB0aGlzLmluc3RhbmNlcy5nZXQocmVxdWVzdC5pbnN0YW5jZUlkKTtcbiAgICBpZiAoIWxvY2FsU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgaW5zdGFuY2Ugbm90IGZvdW5kOiAke3JlcXVlc3QuaW5zdGFuY2VJZH1gKTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemUgbGFzdFVwZGF0ZWQgdG8gRGF0ZSAoZm9yIGNhY2hlIHNhZmV0eSlcbiAgICBjb25zdCBzdGF0ZSA9IHsgLi4ubG9jYWxTdGF0ZS5zdGF0ZSB9O1xuICAgIGlmIChzdGF0ZS5sYXN0VXBkYXRlZCAmJiAhKHN0YXRlLmxhc3RVcGRhdGVkIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIHN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoc3RhdGUubGFzdFVwZGF0ZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZSBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgd29ya2Zsb3cgZGVmaW5pdGlvbiBmcm9tIGF2YWlsYWJsZSBwcm92aWRlcnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERlZmluaXRpb24od29ya2Zsb3dJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCBudWxsPiB7XG4gICAgLy8gVHJ5IGFsbCBwcm92aWRlcnMgaW4gb3JkZXJcbiAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgIGlmIChwLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiYgcC52YWx1ZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHAudmFsdWU7XG4gICAgICAgIC8vIENoZWNrIGlmIHByb3ZpZGVyIGhhcyBnZXRCeU5hbWUgbWV0aG9kXG4gICAgICAgIGlmICh0eXBlb2YgcHJvdmlkZXIuZ2V0QnlOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCBwcm92aWRlci5nZXRCeU5hbWUod29ya2Zsb3dJZCk7XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yIC0gdHJ5IG90aGVyIHByb3ZpZGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2dyZXNzIHdvcmtmbG93IHN0ZXBzIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAqIFxuICAgKiBGb3IgZnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzOiByZXR1cm5zIHRhc2sgaW1tZWRpYXRlbHkgKHN1c3BlbmRzIHdvcmtmbG93KS5cbiAgICogRm9yIGJhY2tlbmQgYWN0aXZpdGllczogc2tpcHMgYW5kIGNvbnRpbnVlcy5cbiAgICogXG4gICAqIFJldHVybnMgdGhlIG5leHQgcGVuZGluZyB0YXNrIChpZiBmcm9udGVuZCBhY3Rpdml0eSBmb3VuZCkgb3IgbnVsbCAoaWYgY29tcGxldGVkKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVdvcmtmbG93U3RlcHMobG9jYWxTdGF0ZTogTG9jYWxXb3JrZmxvd1N0YXRlKTogUHJvbWlzZTxBWFBXb3JrZmxvd1Rhc2sgfCBudWxsPiB7XG4gICAgY29uc3QgZ3JhcGggPSBsb2NhbFN0YXRlLmRlZmluaXRpb24uZ3JhcGg7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IGdyYXBoLmFjdGl2aXRpZXMgfHwgW107XG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSBncmFwaC5jb25uZWN0aW9ucyB8fCBbXTtcblxuICAgIC8vIEJ1aWxkIGFjdGl2aXR5IG1hcFxuICAgIGNvbnN0IGFjdGl2aXR5TWFwID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZT4oKTtcbiAgICBhY3Rpdml0aWVzLmZvckVhY2goYWN0aXZpdHkgPT4ge1xuICAgICAgYWN0aXZpdHlNYXAuc2V0KGFjdGl2aXR5LmlkLCBhY3Rpdml0eSk7XG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZCBjb25uZWN0aW9uIGdyYXBoXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+KCk7XG4gICAgY29uc3QgaW5jb21pbmdDb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBBWFBDb25uZWN0aW9uW10+KCk7XG5cbiAgICBjb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xuICAgICAgY29uc3Qgc291cmNlSWQgPSBjb25uLnNvdXJjZS5hY3RpdnR5TmFtZTtcbiAgICAgIGNvbnN0IHRhcmdldElkID0gY29ubi50YXJnZXQuYWN0aXZ0eU5hbWU7XG5cbiAgICAgIGlmICghb3V0Z29pbmdDb25uZWN0aW9ucy5oYXMoc291cmNlSWQpKSB7XG4gICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMuc2V0KHNvdXJjZUlkLCBbXSk7XG4gICAgICB9XG4gICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLmdldChzb3VyY2VJZCkhLnB1c2goY29ubik7XG5cbiAgICAgIGlmICghaW5jb21pbmdDb25uZWN0aW9ucy5oYXModGFyZ2V0SWQpKSB7XG4gICAgICAgIGluY29taW5nQ29ubmVjdGlvbnMuc2V0KHRhcmdldElkLCBbXSk7XG4gICAgICB9XG4gICAgICBpbmNvbWluZ0Nvbm5lY3Rpb25zLmdldCh0YXJnZXRJZCkhLnB1c2goY29ubik7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5kIHN0YXJ0aW5nIGFjdGl2aXR5ICh1c2Ugc3RhcnRBY3Rpdml0eUlkIG9yIG5vIGluY29taW5nIGNvbm5lY3Rpb25zLCBvciBmaXJzdCBhY3Rpdml0eSlcbiAgICBsZXQgY3VycmVudEFjdGl2aXR5SWQgPSBsb2NhbFN0YXRlLmN1cnJlbnRBY3Rpdml0eUlkO1xuICAgIGlmICghY3VycmVudEFjdGl2aXR5SWQpIHtcbiAgICAgIC8vIFVzZSBzdGFydEFjdGl2aXR5SWQgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoZ3JhcGguc3RhcnRBY3Rpdml0eUlkKSB7XG4gICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gZ3JhcGguc3RhcnRBY3Rpdml0eUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmluZCByb290IGFjdGl2aXR5IChubyBpbmNvbWluZyBjb25uZWN0aW9ucylcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpdml0eSBvZiBhY3Rpdml0aWVzKSB7XG4gICAgICAgICAgaWYgKCFpbmNvbWluZ0Nvbm5lY3Rpb25zLmhhcyhhY3Rpdml0eS5pZCkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkID0gYWN0aXZpdHkuaWQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbm8gcm9vdCBmb3VuZCwgdXNlIGZpcnN0IGFjdGl2aXR5XG4gICAgICAgIGlmICghY3VycmVudEFjdGl2aXR5SWQgJiYgYWN0aXZpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBhY3Rpdml0aWVzWzBdLmlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3b3JrZmxvdyBzdGVwc1xuICAgIHdoaWxlIChjdXJyZW50QWN0aXZpdHlJZCkge1xuICAgICAgY29uc3QgYWN0aXZpdHkgPSBhY3Rpdml0eU1hcC5nZXQoY3VycmVudEFjdGl2aXR5SWQpO1xuICAgICAgaWYgKCFhY3Rpdml0eSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiBhbHJlYWR5IGNvbXBsZXRlZFxuICAgICAgaWYgKGxvY2FsU3RhdGUuY29tcGxldGVkQWN0aXZpdGllcy5oYXMoY3VycmVudEFjdGl2aXR5SWQpKSB7XG4gICAgICAgIC8vIE1vdmUgdG8gbmV4dCBhY3Rpdml0eVxuICAgICAgICBjb25zdCBuZXh0SWQgPSB0aGlzLmdldE5leHRBY3Rpdml0eUlkKFxuICAgICAgICAgIGN1cnJlbnRBY3Rpdml0eUlkLFxuICAgICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMsXG4gICAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHNcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBuZXh0SWQgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IGFjdGl2aXR5IGRlZmluaXRpb24gdG8gcmV0cmlldmUgZXhlY3V0aW9uTW9kZSBhbmQgdGl0bGVcbiAgICAgIGNvbnNvbGUubG9nKGBbV29ya2Zsb3dMb2NhbEVuZ2luZV0g8J+UjSBHZXR0aW5nIGFjdGl2aXR5IGRlZmluaXRpb24gZm9yOiAke2FjdGl2aXR5Lm5hbWV9YCk7XG4gICAgICBjb25zdCBhY3Rpdml0eURlZmluaXRpb24gPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UuZ2V0QWN0aXZpdHlCeU5hbWUoYWN0aXZpdHkubmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhgW1dvcmtmbG93TG9jYWxFbmdpbmVdIPCfk4sgQWN0aXZpdHkgZGVmaW5pdGlvbjpgLCB7XG4gICAgICAgIG5hbWU6IGFjdGl2aXR5RGVmaW5pdGlvbj8ubmFtZSxcbiAgICAgICAgdHlwZTogYWN0aXZpdHlEZWZpbml0aW9uPy50eXBlLFxuICAgICAgICBleGVjdXRpb25Nb2RlOiBhY3Rpdml0eURlZmluaXRpb24/LmV4ZWN1dGlvbk1vZGUsXG4gICAgICAgIHRpdGxlOiBhY3Rpdml0eURlZmluaXRpb24/LnRpdGxlLFxuICAgICAgICBmb3VuZDogISFhY3Rpdml0eURlZmluaXRpb24sXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgZXhlY3V0aW9uTW9kZSA9IGFjdGl2aXR5RGVmaW5pdGlvbj8uZXhlY3V0aW9uTW9kZSB8fCAnZnJvbnRlbmQnO1xuICAgICAgY29uc3QgYWN0aXZpdHlUaXRsZSA9IGFjdGl2aXR5RGVmaW5pdGlvbj8udGl0bGU7XG5cbiAgICAgIC8vIEhhbmRsZSBiYWNrZW5kIGFjdGl2aXRpZXM6IHNraXBcbiAgICAgIGlmIChleGVjdXRpb25Nb2RlID09PSAnYmFja2VuZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFtXb3JrZmxvd0xvY2FsRW5naW5lXSDij63vuI8gU2tpcHBpbmcgYmFja2VuZCBhY3Rpdml0eTogJHthY3Rpdml0eS5uYW1lfSAoJHthY3Rpdml0eS5pZH0pYFxuICAgICAgICApO1xuICAgICAgICBsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuYWRkKGN1cnJlbnRBY3Rpdml0eUlkKTtcbiAgICAgICAgbG9jYWxTdGF0ZS5hY3Rpdml0eVJlc3VsdHMuc2V0KGN1cnJlbnRBY3Rpdml0eUlkLCB7XG4gICAgICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgICAgIG91dGNvbWU6ICdEb25lJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTW92ZSB0byBuZXh0IGFjdGl2aXR5XG4gICAgICAgIGNvbnN0IG5leHRJZCA9IHRoaXMuZ2V0TmV4dEFjdGl2aXR5SWQoXG4gICAgICAgICAgY3VycmVudEFjdGl2aXR5SWQsXG4gICAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucyxcbiAgICAgICAgICBsb2NhbFN0YXRlLmFjdGl2aXR5UmVzdWx0c1xuICAgICAgICApO1xuICAgICAgICBjdXJyZW50QWN0aXZpdHlJZCA9IG5leHRJZCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZnJvbnRlbmQvYm90aCBhY3Rpdml0aWVzOiByZXR1cm4gYXMgcGVuZGluZ1Rhc2sgKGRvIE5PVCBleGVjdXRlKVxuICAgICAgaWYgKGV4ZWN1dGlvbk1vZGUgPT09ICdmcm9udGVuZCcgfHwgZXhlY3V0aW9uTW9kZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIC8vIENyZWF0ZSB0YXNrIGZvciBleHRlcm5hbCBleGVjdXRpb25cbiAgICAgICAgLy8gTm90ZTogRXhwcmVzc2lvbiBldmFsdWF0aW9uIHdpbGwgYmUgZG9uZSBieSBBY3Rpdml0eUV4ZWN1dG9yXG4gICAgICAgIGNvbnN0IHRhc2s6IEFYUFdvcmtmbG93VGFzayA9IHtcbiAgICAgICAgICB0YXNrVG9rZW46IEFYUERhdGFHZW5lcmF0b3IudXVpZCgpLFxuICAgICAgICAgIGFjdGl2aXR5SWQ6IGFjdGl2aXR5LmlkLFxuICAgICAgICAgIGFjdGl2aXR5VHlwZTogYWN0aXZpdHkubmFtZSxcbiAgICAgICAgICBhY3Rpdml0eU5hbWU6IGFjdGl2aXR5VGl0bGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGV4ZWN1dGlvbk1vZGU6IGV4ZWN1dGlvbk1vZGUgYXMgJ2Zyb250ZW5kJyB8ICdiYWNrZW5kJyB8ICdib3RoJyxcbiAgICAgICAgICBpbnB1dDogYWN0aXZpdHkuaW5wdXRzIHx8IHt9LCAvLyBQYXNzIHJhdyBpbnB1dHMgLSBleGVjdXRvciB3aWxsIGV2YWx1YXRlXG4gICAgICAgICAgY29uZmlnOiBhY3Rpdml0eS5jdXN0b21Qcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN0b3JlIHRhc2sgdG9rZW4gZm9yIHNlY3VyZSByZXN1bWVcbiAgICAgICAgdGhpcy50YXNrVG9rZW5zLnNldCh0YXNrLnRhc2tUb2tlbiwge1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGxvY2FsU3RhdGUuaW5zdGFuY2VJZCxcbiAgICAgICAgICBhY3Rpdml0eUlkOiBhY3Rpdml0eS5pZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHN0YXRlIHRvIGluZGljYXRlIHN1c3BlbnNpb25cbiAgICAgICAgbG9jYWxTdGF0ZS5jdXJyZW50QWN0aXZpdHlJZCA9IGN1cnJlbnRBY3Rpdml0eUlkO1xuICAgICAgICBsb2NhbFN0YXRlLnN0YXRlLnN0YXR1cyA9ICdzdXNwZW5kZWQnO1xuICAgICAgICBsb2NhbFN0YXRlLnN0YXRlLmN1cnJlbnRTdGVwSWQgPSBjdXJyZW50QWN0aXZpdHlJZDtcblxuICAgICAgICAvLyBSZXR1cm4gdGFzayBpbW1lZGlhdGVseSAtIEFYUFdvcmtmbG93TWFuYWdlciB3aWxsIGV4ZWN1dGUgaXRcbiAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vdmUgdG8gbmV4dCBhY3Rpdml0eVxuICAgICAgY29uc3QgbmV4dElkID0gdGhpcy5nZXROZXh0QWN0aXZpdHlJZChcbiAgICAgICAgY3VycmVudEFjdGl2aXR5SWQsXG4gICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbnMsXG4gICAgICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzXG4gICAgICApO1xuICAgICAgY3VycmVudEFjdGl2aXR5SWQgPSBuZXh0SWQgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFdvcmtmbG93IGNvbXBsZXRlZFxuICAgIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgbG9jYWxTdGF0ZS5zdGF0ZS5vdXRwdXQgPSBsb2NhbFN0YXRlLnN0YXRlLnZhcmlhYmxlcztcbiAgICBsb2NhbFN0YXRlLmN1cnJlbnRBY3Rpdml0eUlkID0gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5leHQgYWN0aXZpdHkgSUQgYmFzZWQgb24gY29ubmVjdGlvbnMgYW5kIG91dGNvbWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXh0QWN0aXZpdHlJZChcbiAgICBjdXJyZW50QWN0aXZpdHlJZDogc3RyaW5nLFxuICAgIG91dGdvaW5nQ29ubmVjdGlvbnM6IE1hcDxzdHJpbmcsIEFYUENvbm5lY3Rpb25bXT4sXG4gICAgYWN0aXZpdHlSZXN1bHRzOiBNYXA8c3RyaW5nLCB7IG91dHB1dDogYW55OyBvdXRjb21lOiBzdHJpbmcgfT5cbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zLmdldChjdXJyZW50QWN0aXZpdHlJZCkgfHwgW107XG5cbiAgICBpZiAoY29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gTm8gb3V0Z29pbmcgY29ubmVjdGlvbnMgLSB3b3JrZmxvdyBlbmRzXG4gICAgfVxuXG4gICAgLy8gR2V0IGN1cnJlbnQgYWN0aXZpdHkgcmVzdWx0XG4gICAgY29uc3QgcmVzdWx0ID0gYWN0aXZpdHlSZXN1bHRzLmdldChjdXJyZW50QWN0aXZpdHlJZCk7XG4gICAgY29uc3Qgb3V0Y29tZSA9IHJlc3VsdD8ub3V0Y29tZSB8fCAnRG9uZSc7XG5cbiAgICAvLyBGaW5kIGNvbm5lY3Rpb24gbWF0Y2hpbmcgb3V0Y29tZVxuICAgIC8vIE91dGNvbWUgbWF0Y2hpbmcgaXMgdHlwaWNhbGx5IGRvbmUgdmlhIHBvcnQgbmFtZSAoZS5nLiwgXCJEb25lXCIsIFwiRmFpbGVkXCIpXG4gICAgZm9yIChjb25zdCBjb25uIG9mIGNvbm5lY3Rpb25zKSB7XG4gICAgICBjb25zdCBzb3VyY2VQb3J0ID0gY29ubi5zb3VyY2UucG9ydCB8fCAnRG9uZSc7XG4gICAgICBpZiAoc291cmNlUG9ydCA9PT0gb3V0Y29tZSkge1xuICAgICAgICByZXR1cm4gY29ubi50YXJnZXQuYWN0aXZ0eU5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gbWF0Y2hpbmcgb3V0Y29tZSwgdXNlIGZpcnN0IGNvbm5lY3Rpb24gKGRlZmF1bHQgcGF0aClcbiAgICBpZiAoY29ubmVjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGNvbm5lY3Rpb25zWzBdLnRhcmdldC5hY3RpdnR5TmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGZyb250QWN0aXZ0eUNvbXBsZXRlKHJlcXVlc3Q6IEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlcXVlc3QpOiBQcm9taXNlPEFYUEZyb250QWN0aXZpdHlDb21wbGV0ZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgbG9jYWxTdGF0ZSA9IHRoaXMuaW5zdGFuY2VzLmdldChyZXF1ZXN0Lmluc3RhbmNlSWQpO1xuICAgIGlmICghbG9jYWxTdGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyBpbnN0YW5jZSBub3QgZm91bmQ6ICR7cmVxdWVzdC5pbnN0YW5jZUlkfWApO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIGFjdGl2aXR5IHJlc3VsdFxuICAgIGxvY2FsU3RhdGUuYWN0aXZpdHlSZXN1bHRzLnNldChyZXF1ZXN0LmFjdGl2aXR5Tm9kZSwge1xuICAgICAgb3V0cHV0OiByZXF1ZXN0Lm91dHB1dCB8fCB7fSxcbiAgICAgIG91dGNvbWU6IHJlcXVlc3Qub3V0Y29tZSxcbiAgICB9KTtcbiAgICBsb2NhbFN0YXRlLmNvbXBsZXRlZEFjdGl2aXRpZXMuYWRkKHJlcXVlc3QuYWN0aXZpdHlOb2RlKTtcblxuICAgIC8vIFN0b3JlIG91dHB1dHMgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvblxuICAgIGxvY2FsU3RhdGUuc3RhdGUuYWN0aXZpdHlPdXRwdXRzID0ge1xuICAgICAgLi4uKGxvY2FsU3RhdGUuc3RhdGUuYWN0aXZpdHlPdXRwdXRzIHx8IHt9KSxcbiAgICAgIFtyZXF1ZXN0LmFjdGl2aXR5Tm9kZV06IHJlcXVlc3Qub3V0cHV0IHx8IHt9LFxuICAgIH07XG4gICAgbG9jYWxTdGF0ZS5zdGF0ZS5sYXN0QWN0aXZpdHlPdXRwdXQgPSByZXF1ZXN0Lm91dHB1dCB8fCB7fTtcblxuICAgIC8vIE1lcmdlIG91dHB1dCBpbnRvIHdvcmtmbG93IHZhcmlhYmxlc1xuICAgIGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzID0ge1xuICAgICAgLi4ubG9jYWxTdGF0ZS5zdGF0ZS52YXJpYWJsZXMsXG4gICAgICAuLi4ocmVxdWVzdC5vdXRwdXQgfHwge30pLFxuICAgIH07XG5cbiAgICAvLyBDb250aW51ZSB3b3JrZmxvdyBwcm9ncmVzc2lvblxuICAgIGNvbnN0IG5leHRUYXNrID0gYXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3dTdGVwcyhsb2NhbFN0YXRlKTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB0aW1lc3RhbXBcbiAgICBsb2NhbFN0YXRlLnN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcblxuICAgIC8vIERldGVybWluZSBmaW5hbCBzdGF0dXNcbiAgICBpZiAoIW5leHRUYXNrICYmIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgIGxvY2FsU3RhdGUuc3RhdGUuc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICBsb2NhbFN0YXRlLnN0YXRlLm91dHB1dCA9IGxvY2FsU3RhdGUuc3RhdGUudmFyaWFibGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXQ6IHJlcXVlc3Qub3V0cHV0IHx8IHt9LFxuICAgICAgb3V0Y29tZXM6IHsgW3JlcXVlc3Qub3V0Y29tZV06IHRydWUgfSxcbiAgICAgIG5leHRUYXNrOiBuZXh0VGFzayB8fCBudWxsLFxuICAgICAgc3RhdGU6IGxvY2FsU3RhdGUuc3RhdGUsXG4gICAgfTtcbiAgfVxuXG5cbiAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","// Workflow Runtime Services\nexport * from './workflow-engine';\nexport * from './workflow-runtime.types';\nexport * from './workflow-manager.service';\nexport * from './workflow-local-engine';\nexport * from './activity-executor.service';\nexport * from './workflow-expression-scope.service';\nexport * from './workflow-engine';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL3J1bnRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXb3JrZmxvdyBSdW50aW1lIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWVuZ2luZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LXJ1bnRpbWUudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1sb2NhbC1lbmdpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpdml0eS1leGVjdXRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZXhwcmVzc2lvbi1zY29wZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3ctZW5naW5lJzsiXX0=","//#region ---- Imports ----\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_PROVIDER } from './workflow-definition.provider';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Optimized Workflow Definition Service\n *\n * Manages workflow definitions (metadata) for UI and tooling.\n * Similar to AXPActivityDefinitionService - only handles metadata, not execution.\n *\n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has workflows (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\nexport class AXPWorkflowDefinitionService {\n constructor() {\n //#region ---- Providers & Caches ----\n this.categoryProviders = inject(AXP_WORKFLOW_CATEGORY_PROVIDER, { optional: true }) || [];\n this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];\n //#endregion\n //#region ---- Cache Storage ----\n /** Cache for categories by id - O(1) lookup */\n this.categoriesById = new Map();\n /** Cache for categories by parentId - O(1) lookup */\n this.categoriesByParentId = new Map();\n /** Cache for workflow definitions by categoryId - O(1) lookup */\n this.workflowsByCategory = new Map();\n /** Cache for individual workflow definitions by name - O(1) lookup */\n this.workflowsByName = new Map();\n /** Track which provider index owns each category (by category ID) */\n this.categoryOwnership = new Map(); // Maps categoryId → provider index\n /** Pending API requests to prevent duplicate calls */\n this.pendingCategoriesRequests = new Map();\n this.pendingWorkflowsRequests = new Map();\n this.pendingWorkflowRequests = new Map();\n }\n //#endregion\n //#region ---- Public API: Categories ----\n /**\n * Get categories by parentId with aggressive caching\n *\n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n *\n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId) {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId);\n }\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId);\n }\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategoriesFromProviders(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single category by ID with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n /**\n * Get category path from root to specified category\n *\n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId) {\n const path = [];\n let currentCategoryId = categoryId;\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n return path;\n }\n //#endregion\n //#region ---- Public API: Workflow Definitions ----\n /**\n * Get workflow definitions for a category with smart caching\n *\n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches workflow definitions\n * - Returns cached result on subsequent calls\n *\n * @param categoryId - Category ID to get workflow definitions from\n * @returns Array of workflow definitions\n */\n async getWorkflowsByCategoryId(categoryId) {\n // ✅ Fast path: Return cached result\n if (this.workflowsByCategory.has(categoryId)) {\n return this.workflowsByCategory.get(categoryId);\n }\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no workflows - cache empty array and skip API call\n const emptyArray = [];\n this.workflowsByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n // ✅ Prevent duplicate requests\n if (this.pendingWorkflowsRequests.has(categoryId)) {\n return this.pendingWorkflowsRequests.get(categoryId);\n }\n // ✅ Load from providers\n const requestPromise = this.loadWorkflowsFromProviders(categoryId);\n this.pendingWorkflowsRequests.set(categoryId, requestPromise);\n return requestPromise;\n }\n /**\n * Get single workflow definition by name with O(1) lookup\n *\n * Optimization: Uses Map for instant retrieval\n *\n * @param name - Workflow name (unique identifier)\n * @returns Workflow definition or undefined if not found\n */\n async getWorkflowByName(name) {\n // ✅ Fast path: O(1) lookup in cache\n if (this.workflowsByName.has(name)) {\n return this.workflowsByName.get(name);\n }\n // ✅ Prevent duplicate requests\n if (this.pendingWorkflowRequests.has(name)) {\n return this.pendingWorkflowRequests.get(name);\n }\n // ✅ Load from providers\n const requestPromise = this.loadWorkflowFromProviders(name);\n this.pendingWorkflowRequests.set(name, requestPromise);\n return requestPromise;\n }\n /**\n * Get category ID containing a specific workflow definition\n *\n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByWorkflowName(workflowName) {\n // ✅ Search in cached workflow definitions\n for (const [categoryId, definitions] of this.workflowsByCategory.entries()) {\n if (definitions.some(def => def.name === workflowName)) {\n return categoryId;\n }\n }\n // ✅ Try loading the workflow definition to find its category\n // Note: AXPWorkflowDefinition doesn't have category field\n // Category is managed separately through category providers\n // This method searches through cached categories\n const definition = await this.getWorkflowByName(workflowName);\n if (definition) {\n // Search through all categories to find which one contains this workflow\n const categories = await this.getCategories();\n for (const category of categories) {\n const workflows = await this.getWorkflowsByCategoryId(category.id);\n if (workflows.some(w => w.name === workflowName)) {\n return category.id;\n }\n }\n }\n return undefined;\n }\n /**\n * Get category path for a workflow\n */\n async getCategoriesPathByWorkflowName(workflowName) {\n const categoryId = await this.getCategoryIdByWorkflowName(workflowName);\n if (!categoryId) {\n throw new Error(`Workflow '${workflowName}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n //#endregion\n //#region ---- Private: Data Loading ----\n /**\n * Load categories from providers and cache results\n *\n * Optimization: Tracks provider ownership to avoid unnecessary API calls\n * - For root (parentId = undefined): Query ALL providers\n * - For children: Only query the provider that owns the parent\n */\n async loadCategoriesFromProviders(parentId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.categoryProviders);\n const categories = [];\n // Determine which provider(s) to query\n const providerIndicesToQuery = parentId\n ? this.getProviderIndexForCategory(parentId)\n : null; // Root: query all providers\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const cats = await p.value.getList(parentId);\n if (Array.isArray(cats) && cats.length > 0) {\n categories.push(...cats);\n // ✅ Track ownership: This provider INDEX owns these categories\n cats.forEach(cat => this.categoryOwnership.set(cat.id, i));\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, categories);\n categories.forEach(cat => this.categoriesById.set(cat.id, cat));\n return categories;\n }\n finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n /**\n * Get the provider index that owns a specific category\n *\n * @returns Array with provider index, or null if ownership unknown (query all)\n */\n getProviderIndexForCategory(categoryId) {\n const ownerIndex = this.categoryOwnership.get(categoryId);\n if (ownerIndex !== undefined) {\n return [ownerIndex];\n }\n // Ownership unknown - will query all providers (fallback)\n return null;\n }\n /**\n * Load workflow definitions from providers and cache results\n *\n * Optimization: Only queries the provider that owns the category\n * Uses provider INDEX to match category provider with workflow provider\n */\n async loadWorkflowsFromProviders(categoryId) {\n try {\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n const definitions = [];\n // ✅ Smart routing: Get provider INDEX that owns this category\n const ownerIndex = this.categoryOwnership.get(categoryId);\n const providerIndicesToQuery = ownerIndex !== undefined ? [ownerIndex] : null;\n for (let i = 0; i < resolvedProviders.length; i++) {\n const p = resolvedProviders[i];\n // Skip if we have a specific provider index and this isn't it\n if (providerIndicesToQuery !== null && !providerIndicesToQuery.includes(i)) {\n continue;\n }\n if (p.status === 'fulfilled' && p.value && typeof p.value.getList === 'function') {\n try {\n const defs = await p.value.getList(categoryId);\n if (Array.isArray(defs)) {\n definitions.push(...defs);\n }\n }\n catch {\n // Continue on error - try other providers\n }\n }\n }\n // ✅ Cache results for fast subsequent access\n this.workflowsByCategory.set(categoryId, definitions);\n definitions.forEach(def => {\n if (def.name) {\n this.workflowsByName.set(def.name, def);\n }\n });\n return definitions;\n }\n finally {\n this.pendingWorkflowsRequests.delete(categoryId);\n }\n }\n /**\n * Load single workflow definition from providers and cache result\n */\n async loadWorkflowFromProviders(name) {\n try {\n const resolvedProviders = await Promise.allSettled(this.workflowProviders);\n // Try providers first\n for (const p of resolvedProviders) {\n if (p.status === 'fulfilled' && p.value && typeof p.value.getByName === 'function') {\n try {\n const definition = await p.value.getByName(name);\n if (definition) {\n this.workflowsByName.set(name, definition);\n return definition;\n }\n }\n catch {\n // Continue on error\n }\n }\n }\n // Fallback: Search in cached workflow definitions\n for (const definitions of this.workflowsByCategory.values()) {\n const found = definitions.find(def => def.name === name);\n if (found) {\n this.workflowsByName.set(name, found);\n return found;\n }\n }\n return undefined;\n }\n finally {\n this.pendingWorkflowRequests.delete(name);\n }\n }\n /**\n * Breadth-first search through category hierarchy\n */\n async searchCategoryInHierarchy(categoryId) {\n const searchQueue = [undefined];\n const searched = new Set();\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift();\n if (searched.has(parentId))\n continue;\n searched.add(parentId);\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n return found;\n }\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n return undefined;\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n /**\n * Check if category has workflows (uses cached count)\n */\n categoryHasWorkflows(categoryId) {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n /**\n * Clear all caches\n */\n clearAllCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.workflowsByCategory.clear();\n this.workflowsByName.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingWorkflowsRequests.clear();\n this.pendingWorkflowRequests.clear();\n }\n /**\n * Clear categories cache only\n */\n clearCategoriesCache() {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.categoryOwnership.clear();\n this.pendingCategoriesRequests.clear();\n }\n /**\n * Clear workflows cache only\n */\n clearWorkflowsCache() {\n this.workflowsByCategory.clear();\n this.workflowsByName.clear();\n this.pendingWorkflowsRequests.clear();\n this.pendingWorkflowRequests.clear();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowDefinitionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL2VuZ2luZS93b3JrZmxvdy93b3JrZmxvdy1kZWZpbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUV2RyxZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUh6QztRQUlJLDBDQUEwQztRQUV6QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsOEJBQThCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckYsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckMsK0NBQStDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFFaEUscURBQXFEO1FBQzdDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO1FBRXBGLGlFQUFpRTtRQUN6RCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUV6RSxzRUFBc0U7UUFDOUQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztRQUVuRSxxRUFBcUU7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUMsQ0FBQyxtQ0FBbUM7UUFFMUYsc0RBQXNEO1FBQzlDLDhCQUF5QixHQUFHLElBQUks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Q0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pDLENBQUM7K0dBaGRRLDRCQUE0QjttSEFBNUIsNEJBQTRCLGNBRnpCLE1BQU07OzRGQUVULDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dDYXRlZ29yeSB9IGZyb20gJy4vd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tICcuLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUF9XT1JLRkxPV19DQVRFR09SWV9QUk9WSURFUiwgQVhQX1dPUktGTE9XX1BST1ZJREVSIH0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogT3B0aW1pemVkIFdvcmtmbG93IERlZmluaXRpb24gU2VydmljZVxuICogXG4gKiBNYW5hZ2VzIHdvcmtmbG93IGRlZmluaXRpb25zIChtZXRhZGF0YSkgZm9yIFVJIGFuZCB0b29saW5nLlxuICogU2ltaWxhciB0byBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIC0gb25seSBoYW5kbGVzIG1ldGFkYXRhLCBub3QgZXhlY3V0aW9uLlxuICogXG4gKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zOlxuICogMS4gVXNlcyBjaGlsZHJlbkNvdW50IHRvIGRldGVybWluZSBpZiBjYXRlZ29yeSBoYXMgY2hpbGRyZW4gKG5vIHF1ZXJ5IG5lZWRlZClcbiAqIDIuIFVzZXMgaXRlbXNDb3VudCB0byBkZXRlcm1pbmUgaWYgY2F0ZWdvcnkgaGFzIHdvcmtmbG93cyAobm8gcXVlcnkgbmVlZGVkKVxuICogMy4gQWdncmVzc2l2ZSBjYWNoaW5nIHByZXZlbnRzIGR1cGxpY2F0ZSBBUEkgY2FsbHNcbiAqIDQuIFNpbmdsZSBwZW5kaW5nIHJlcXVlc3QgcGVyIHJlc291cmNlIHByZXZlbnRzIHJhY2UgY29uZGl0aW9uc1xuICogNS4gTGF6eSBsb2FkaW5nIC0gb25seSBsb2FkcyBkYXRhIHdoZW4gbmVlZGVkXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2Uge1xuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJvdmlkZXJzICYgQ2FjaGVzICAgLS0tLVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVByb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd1Byb3ZpZGVycyA9IGluamVjdChBWFBfV09SS0ZMT1dfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgW107XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgU3RvcmFnZSAgIC0tLS1cblxuICAgIC8qKiBDYWNoZSBmb3IgY2F0ZWdvcmllcyBieSBpZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSBjYXRlZ29yaWVzQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBBWFBXb3JrZmxvd0NhdGVnb3J5PigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBjYXRlZ29yaWVzIGJ5IHBhcmVudElkIC0gTygxKSBsb29rdXAgKi9cbiAgICBwcml2YXRlIGNhdGVnb3JpZXNCeVBhcmVudElkID0gbmV3IE1hcDxzdHJpbmcgfCB1bmRlZmluZWQsIEFYUFdvcmtmbG93Q2F0ZWdvcnlbXT4oKTtcblxuICAgIC8qKiBDYWNoZSBmb3Igd29ya2Zsb3cgZGVmaW5pdGlvbnMgYnkgY2F0ZWdvcnlJZCAtIE8oMSkgbG9va3VwICovXG4gICAgcHJpdmF0ZSB3b3JrZmxvd3NCeUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPigpO1xuXG4gICAgLyoqIENhY2hlIGZvciBpbmRpdmlkdWFsIHdvcmtmbG93IGRlZmluaXRpb25zIGJ5IG5hbWUgLSBPKDEpIGxvb2t1cCAqL1xuICAgIHByaXZhdGUgd29ya2Zsb3dzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdvcmtmbG93RGVmaW5pdGlvbj4oKTtcblxuICAgIC8qKiBUcmFjayB3aGljaCBwcm92aWRlciBpbmRleCBvd25zIGVhY2ggY2F0ZWdvcnkgKGJ5IGNhdGVnb3J5IElEKSAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlPd25lcnNoaXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBNYXBzIGNhdGVnb3J5SWQg4oaSIHByb3ZpZGVyIGluZGV4XG5cbiAgICAvKiogUGVuZGluZyBBUEkgcmVxdWVzdHMgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMgKi9cbiAgICBwcml2YXRlIHBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZyB8IHVuZGVmaW5lZCwgUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93c1JlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uW10+PigpO1xuICAgIHByaXZhdGUgcGVuZGluZ1dvcmtmbG93UmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCB1bmRlZmluZWQ+PigpO1xuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBBUEk6IENhdGVnb3JpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcmllcyBieSBwYXJlbnRJZCB3aXRoIGFnZ3Jlc3NpdmUgY2FjaGluZ1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogUmV0dXJucyBjYWNoZWQgcmVzdWx0IGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSxcbiAgICAgKiBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IEFQSSBjYWxscyBkdXJpbmcgbmF2aWdhdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXJlbnRJZCAtIFBhcmVudCBjYXRlZ29yeSBJRCAodW5kZWZpbmVkID0gcm9vdCBjYXRlZ29yaWVzKVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGNhdGVnb3JpZXMgd2l0aCBjb3VudCBtZXRhZGF0YSAoY2hpbGRyZW5Db3VudCwgaXRlbXNDb3VudClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDYXRlZ29yaWVzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuaGFzKHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuZ2V0KHBhcmVudElkKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHM6IFJldHVybiBwZW5kaW5nIHByb21pc2VcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2F0ZWdvcmllc1JlcXVlc3RzLmdldChwYXJlbnRJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIENyZWF0ZSBzaW5nbGUgcmVxdWVzdCBhbmQgY2FjaGUgaXRcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRDYXRlZ29yaWVzRnJvbVByb3ZpZGVycyhwYXJlbnRJZCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5zZXQocGFyZW50SWQsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpbmdsZSBjYXRlZ29yeSBieSBJRCB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWwsIGZhbGxzIGJhY2sgdG9cbiAgICAgKiBzZWFyY2hpbmcgY2FjaGUsIHRoZW4gcHJvdmlkZXJzIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogTygxKSBsb29rdXAgaW4gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllc0J5SWQuaGFzKGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgU2VhcmNoIGluIGNhY2hlZCBwYXJlbnQtY2hpbGQgbGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yaWVzIG9mIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZC5zZXQoY2F0ZWdvcnlJZCwgZm91bmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBMb2FkIHJvb3QgY2F0ZWdvcmllcyBpZiBub3QgbG9hZGVkXG4gICAgICAgIGlmICghdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5oYXModW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzQnlJZC5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzQnlJZC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBoaWVyYXJjaHlcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnlJbkhpZXJhcmNoeShjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2F0ZWdvcnkgcGF0aCBmcm9tIHJvb3QgdG8gc3BlY2lmaWVkIGNhdGVnb3J5XG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBCdWlsZHMgcGF0aCB1c2luZyBjYWNoZWQgY2F0ZWdvcmllcyBvbmx5XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IHBhdGg6IEFYUFdvcmtmbG93Q2F0ZWdvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGNhdGVnb3J5SWQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGF3YWl0IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGN1cnJlbnRDYXRlZ29yeUlkKTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhdGVnb3J5ICcke2N1cnJlbnRDYXRlZ29yeUlkfScgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgY3VycmVudENhdGVnb3J5SWQgPSBjYXRlZ29yeS5wYXJlbnRJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgQVBJOiBXb3JrZmxvdyBEZWZpbml0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmb3IgYSBjYXRlZ29yeSB3aXRoIHNtYXJ0IGNhY2hpbmdcbiAgICAgKiBcbiAgICAgKiBPcHRpbWl6YXRpb246IENoZWNrcyBpdGVtc0NvdW50IGJlZm9yZSBxdWVyeWluZ1xuICAgICAqIC0gSWYgaXRlbXNDb3VudCA9IDAsIHJldHVybnMgZW1wdHkgYXJyYXkgKG5vIEFQSSBjYWxsKVxuICAgICAqIC0gSWYgaXRlbXNDb3VudCA+IDAsIGxvYWRzIGFuZCBjYWNoZXMgd29ya2Zsb3cgZGVmaW5pdGlvbnNcbiAgICAgKiAtIFJldHVybnMgY2FjaGVkIHJlc3VsdCBvbiBzdWJzZXF1ZW50IGNhbGxzXG4gICAgICogXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWQgLSBDYXRlZ29yeSBJRCB0byBnZXQgd29ya2Zsb3cgZGVmaW5pdGlvbnMgZnJvbVxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICovXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dzQnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQ6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uW10+IHtcbiAgICAgICAgLy8g4pyFIEZhc3QgcGF0aDogUmV0dXJuIGNhY2hlZCByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5SWQpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBTbWFydCBvcHRpbWl6YXRpb246IENoZWNrIGl0ZW1zQ291bnQgYmVmb3JlIHF1ZXJ5aW5nXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgIGlmIChjYXRlZ29yeSAmJiBjYXRlZ29yeS5pdGVtc0NvdW50ICE9PSB1bmRlZmluZWQgJiYgY2F0ZWdvcnkuaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2F0ZWdvcnkgaGFzIG5vIHdvcmtmbG93cyAtIGNhY2hlIGVtcHR5IGFycmF5IGFuZCBza2lwIEFQSSBjYWxsXG4gICAgICAgICAgICBjb25zdCBlbXB0eUFycmF5OiBBWFBXb3JrZmxvd0RlZmluaXRpb25bXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeUNhdGVnb3J5LnNldChjYXRlZ29yeUlkLCBlbXB0eUFycmF5KTtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eUFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIFByZXZlbnQgZHVwbGljYXRlIHJlcXVlc3RzXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5oYXMoY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5nZXQoY2F0ZWdvcnlJZCkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRXb3JrZmxvd3NGcm9tUHJvdmlkZXJzKGNhdGVnb3J5SWQpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5zZXQoY2F0ZWdvcnlJZCwgcmVxdWVzdFByb21pc2UpO1xuXG4gICAgICAgIHJldHVybiByZXF1ZXN0UHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2luZ2xlIHdvcmtmbG93IGRlZmluaXRpb24gYnkgbmFtZSB3aXRoIE8oMSkgbG9va3VwXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBVc2VzIE1hcCBmb3IgaW5zdGFudCByZXRyaWV2YWxcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFdvcmtmbG93IG5hbWUgKHVuaXF1ZSBpZGVudGlmaWVyKVxuICAgICAqIEByZXR1cm5zIFdvcmtmbG93IGRlZmluaXRpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGFzeW5jIGdldFdvcmtmbG93QnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBGYXN0IHBhdGg6IE8oMSkgbG9va3VwIGluIGNhY2hlXG4gICAgICAgIGlmICh0aGlzLndvcmtmbG93c0J5TmFtZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndvcmtmbG93c0J5TmFtZS5nZXQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDinIUgUHJldmVudCBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5nZXQobmFtZSkhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pyFIExvYWQgZnJvbSBwcm92aWRlcnNcbiAgICAgICAgY29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmxvYWRXb3JrZmxvd0Zyb21Qcm92aWRlcnMobmFtZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuc2V0KG5hbWUsIHJlcXVlc3RQcm9taXNlKTtcblxuICAgICAgICByZXR1cm4gcmVxdWVzdFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhdGVnb3J5IElEIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyB3b3JrZmxvdyBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBTZWFyY2hlcyBjYWNoZSBmaXJzdCwgbG9hZHMgb24tZGVtYW5kIGlmIG5lZWRlZFxuICAgICAqL1xuICAgIGFzeW5jIGdldENhdGVnb3J5SWRCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIOKchSBTZWFyY2ggaW4gY2FjaGVkIHdvcmtmbG93IGRlZmluaXRpb25zXG4gICAgICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGRlZmluaXRpb25zXSBvZiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnMuc29tZShkZWYgPT4gZGVmLm5hbWUgPT09IHdvcmtmbG93TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2F0ZWdvcnlJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBUcnkgbG9hZGluZyB0aGUgd29ya2Zsb3cgZGVmaW5pdGlvbiB0byBmaW5kIGl0cyBjYXRlZ29yeVxuICAgICAgICAvLyBOb3RlOiBBWFBXb3JrZmxvd0RlZmluaXRpb24gZG9lc24ndCBoYXZlIGNhdGVnb3J5IGZpZWxkXG4gICAgICAgIC8vIENhdGVnb3J5IGlzIG1hbmFnZWQgc2VwYXJhdGVseSB0aHJvdWdoIGNhdGVnb3J5IHByb3ZpZGVyc1xuICAgICAgICAvLyBUaGlzIG1ldGhvZCBzZWFyY2hlcyB0aHJvdWdoIGNhY2hlZCBjYXRlZ29yaWVzXG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93QnlOYW1lKHdvcmtmbG93TmFtZSk7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAvLyBTZWFyY2ggdGhyb3VnaCBhbGwgY2F0ZWdvcmllcyB0byBmaW5kIHdoaWNoIG9uZSBjb250YWlucyB0aGlzIHdvcmtmbG93XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93c0J5Q2F0ZWdvcnlJZChjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHdvcmtmbG93cy5zb21lKHcgPT4gdy5uYW1lID09PSB3b3JrZmxvd05hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXRlZ29yeS5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXRlZ29yeSBwYXRoIGZvciBhIHdvcmtmbG93XG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2F0ZWdvcmllc1BhdGhCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBhd2FpdCB0aGlzLmdldENhdGVnb3J5SWRCeVdvcmtmbG93TmFtZSh3b3JrZmxvd05hbWUpO1xuICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV29ya2Zsb3cgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kIGluIGFueSBjYXRlZ29yeWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldENhdGVnb3JpZXNQYXRoQnlJZChjYXRlZ29yeUlkKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZTogRGF0YSBMb2FkaW5nICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBjYXRlZ29yaWVzIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRzXG4gICAgICogXG4gICAgICogT3B0aW1pemF0aW9uOiBUcmFja3MgcHJvdmlkZXIgb3duZXJzaGlwIHRvIGF2b2lkIHVubmVjZXNzYXJ5IEFQSSBjYWxsc1xuICAgICAqIC0gRm9yIHJvb3QgKHBhcmVudElkID0gdW5kZWZpbmVkKTogUXVlcnkgQUxMIHByb3ZpZGVyc1xuICAgICAqIC0gRm9yIGNoaWxkcmVuOiBPbmx5IHF1ZXJ5IHRoZSBwcm92aWRlciB0aGF0IG93bnMgdGhlIHBhcmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgbG9hZENhdGVnb3JpZXNGcm9tUHJvdmlkZXJzKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuY2F0ZWdvcnlQcm92aWRlcnMpO1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllczogQVhQV29ya2Zsb3dDYXRlZ29yeVtdID0gW107XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGljaCBwcm92aWRlcihzKSB0byBxdWVyeVxuICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbmRpY2VzVG9RdWVyeSA9IHBhcmVudElkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmdldFByb3ZpZGVySW5kZXhGb3JDYXRlZ29yeShwYXJlbnRJZClcbiAgICAgICAgICAgICAgICA6IG51bGw7IC8vIFJvb3Q6IHF1ZXJ5IGFsbCBwcm92aWRlcnNcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdHMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2F0cykgJiYgY2F0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKC4uLmNhdHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g4pyFIFRyYWNrIG93bmVyc2hpcDogVGhpcyBwcm92aWRlciBJTkRFWCBvd25zIHRoZXNlIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRzLmZvckVhY2goY2F0ID0+IHRoaXMuY2F0ZWdvcnlPd25lcnNoaXAuc2V0KGNhdC5pZCwgaSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIG9uIGVycm9yIC0gdHJ5IG90aGVyIHByb3ZpZGVyc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDinIUgQ2FjaGUgcmVzdWx0cyBmb3IgZmFzdCBzdWJzZXF1ZW50IGFjY2Vzc1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5zZXQocGFyZW50SWQsIGNhdGVnb3JpZXMpO1xuICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKGNhdCA9PiB0aGlzLmNhdGVnb3JpZXNCeUlkLnNldChjYXQuaWQsIGNhdCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NhdGVnb3JpZXNSZXF1ZXN0cy5kZWxldGUocGFyZW50SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwcm92aWRlciBpbmRleCB0aGF0IG93bnMgYSBzcGVjaWZpYyBjYXRlZ29yeVxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFycmF5IHdpdGggcHJvdmlkZXIgaW5kZXgsIG9yIG51bGwgaWYgb3duZXJzaGlwIHVua25vd24gKHF1ZXJ5IGFsbClcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFByb3ZpZGVySW5kZXhGb3JDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcpOiBudW1iZXJbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG5cbiAgICAgICAgaWYgKG93bmVySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtvd25lckluZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE93bmVyc2hpcCB1bmtub3duIC0gd2lsbCBxdWVyeSBhbGwgcHJvdmlkZXJzIChmYWxsYmFjaylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB3b3JrZmxvdyBkZWZpbml0aW9ucyBmcm9tIHByb3ZpZGVycyBhbmQgY2FjaGUgcmVzdWx0c1xuICAgICAqIFxuICAgICAqIE9wdGltaXphdGlvbjogT25seSBxdWVyaWVzIHRoZSBwcm92aWRlciB0aGF0IG93bnMgdGhlIGNhdGVnb3J5XG4gICAgICogVXNlcyBwcm92aWRlciBJTkRFWCB0byBtYXRjaCBjYXRlZ29yeSBwcm92aWRlciB3aXRoIHdvcmtmbG93IHByb3ZpZGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkV29ya2Zsb3dzRnJvbVByb3ZpZGVycyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVycyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLndvcmtmbG93UHJvdmlkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBBWFBXb3JrZmxvd0RlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAvLyDinIUgU21hcnQgcm91dGluZzogR2V0IHByb3ZpZGVyIElOREVYIHRoYXQgb3ducyB0aGlzIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBvd25lckluZGV4ID0gdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5nZXQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckluZGljZXNUb1F1ZXJ5ID0gb3duZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gW293bmVySW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNvbHZlZFByb3ZpZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByZXNvbHZlZFByb3ZpZGVyc1tpXTtcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBhIHNwZWNpZmljIHByb3ZpZGVyIGluZGV4IGFuZCB0aGlzIGlzbid0IGl0XG4gICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVySW5kaWNlc1RvUXVlcnkgIT09IG51bGwgJiYgIXByb3ZpZGVySW5kaWNlc1RvUXVlcnkuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiBwLnZhbHVlICYmIHR5cGVvZiBwLnZhbHVlLmdldExpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZnMgPSBhd2FpdCBwLnZhbHVlLmdldExpc3QoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLnB1c2goLi4uZGVmcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgb24gZXJyb3IgLSB0cnkgb3RoZXIgcHJvdmlkZXJzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBDYWNoZSByZXN1bHRzIGZvciBmYXN0IHN1YnNlcXVlbnQgYWNjZXNzXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuc2V0KGNhdGVnb3J5SWQsIGRlZmluaXRpb25zKTtcbiAgICAgICAgICAgIGRlZmluaXRpb25zLmZvckVhY2goZGVmID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVmLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuc2V0KGRlZi5uYW1lLCBkZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5kZWxldGUoY2F0ZWdvcnlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHNpbmdsZSB3b3JrZmxvdyBkZWZpbml0aW9uIGZyb20gcHJvdmlkZXJzIGFuZCBjYWNoZSByZXN1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRXb3JrZmxvd0Zyb21Qcm92aWRlcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0RlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvdmlkZXJzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMud29ya2Zsb3dQcm92aWRlcnMpO1xuXG4gICAgICAgICAgICAvLyBUcnkgcHJvdmlkZXJzIGZpcnN0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzb2x2ZWRQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHAudmFsdWUgJiYgdHlwZW9mIHAudmFsdWUuZ2V0QnlOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgcC52YWx1ZS5nZXRCeU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dzQnlOYW1lLnNldChuYW1lLCBkZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSBvbiBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGYWxsYmFjazogU2VhcmNoIGluIGNhY2hlZCB3b3JrZmxvdyBkZWZpbml0aW9uc1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9ucyBvZiB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGRlZmluaXRpb25zLmZpbmQoZGVmID0+IGRlZi5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuc2V0KG5hbWUsIGZvdW5kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1dvcmtmbG93UmVxdWVzdHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJlYWR0aC1maXJzdCBzZWFyY2ggdGhyb3VnaCBjYXRlZ29yeSBoaWVyYXJjaHlcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIHNlYXJjaENhdGVnb3J5SW5IaWVyYXJjaHkoY2F0ZWdvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NhdGVnb3J5IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFF1ZXVlOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW3VuZGVmaW5lZF07XG4gICAgICAgIGNvbnN0IHNlYXJjaGVkID0gbmV3IFNldDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAgICAgd2hpbGUgKHNlYXJjaFF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc2VhcmNoUXVldWUuc2hpZnQoKSE7XG4gICAgICAgICAgICBpZiAoc2VhcmNoZWQuaGFzKHBhcmVudElkKSkgY29udGludWU7XG4gICAgICAgICAgICBzZWFyY2hlZC5hZGQocGFyZW50SWQpO1xuXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yaWVzKHBhcmVudElkKTtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpO1xuXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOKchSBPcHRpbWl6YXRpb246IE9ubHkgc2VhcmNoIGNoaWxkcmVuIGlmIGNoaWxkcmVuQ291bnQgPiAwXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkuY2hpbGRyZW5Db3VudCA+IDAgJiYgIXNlYXJjaGVkLmhhcyhjYXRlZ29yeS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoUXVldWUucHVzaChjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGNhdGVnb3J5IGhhcyBjaGlsZHJlbiAodXNlcyBjYWNoZWQgY291bnQpXG4gICAgICovXG4gICAgY2F0ZWdvcnlIYXNDaGlsZHJlbihjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gY2F0ZWdvcnkuY2hpbGRyZW5Db3VudCA+IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBjYXRlZ29yeSBoYXMgd29ya2Zsb3dzICh1c2VzIGNhY2hlZCBjb3VudClcbiAgICAgKi9cbiAgICBjYXRlZ29yeUhhc1dvcmtmbG93cyhjYXRlZ29yeUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNCeUlkLmdldChjYXRlZ29yeUlkKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5ID8gKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCkgPiAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIGNhY2hlc1xuICAgICAqL1xuICAgIGNsZWFyQWxsQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlQYXJlbnRJZC5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5Q2F0ZWdvcnkuY2xlYXIoKTtcbiAgICAgICAgdGhpcy53b3JrZmxvd3NCeU5hbWUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV29ya2Zsb3dSZXF1ZXN0cy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGNhdGVnb3JpZXMgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyQ2F0ZWdvcmllc0NhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNCeUlkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0J5UGFyZW50SWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yeU93bmVyc2hpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYXRlZ29yaWVzUmVxdWVzdHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB3b3JrZmxvd3MgY2FjaGUgb25seVxuICAgICAqL1xuICAgIGNsZWFyV29ya2Zsb3dzQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzQnlDYXRlZ29yeS5jbGVhcigpO1xuICAgICAgICB0aGlzLndvcmtmbG93c0J5TmFtZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd3NSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnBlbmRpbmdXb3JrZmxvd1JlcXVlc3RzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","// Workflow Instance Types (Storage/Database)\nexport * from './workflow-instance.types';\n// Activity System Types (Simplified)\nexport * from './activity/activity.types';\nexport * from './activity';\n// Simple Runtime (Coordinator only)\nexport * from './runtime';\n// Workflow Definition System (Category + Metadata)\nexport * from './workflow/workflow-definition.provider';\nexport * from './workflow/workflow-definition.service';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3dvcmtmbG93L3NyYy9saWIvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLDZDQUE2QztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBbUIxQyxxQ0FBcUM7QUFDckMsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxjQUFjLFlBQVksQ0FBQztBQUUzQixvQ0FBb0M7QUFDcEMsY0FBYyxXQUFXLENBQUM7QUFFMUIsbURBQW1EO0FBQ25ELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtmbG93IERlZmluaXRpb24gVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG4vLyBFeHBvcnQgd29ya2Zsb3cgZGVmaW5pdGlvbiB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBBWFBXb3JrZmxvd0RlZmluaXRpb24sXG4gIEFYUFdvcmtmbG93R3JhcGgsXG4gIEFYUFdvcmtmbG93QWN0aXZpdHlJbnN0YW5jZSxcbiAgQVhQQ29ubmVjdGlvbixcbiAgQVhQVmFyaWFibGVEZWZpbml0aW9uLFxuICBBWFBXb3JrZmxvd0lucHV0RGVzY3JpcHRvcixcbiAgQVhQV29ya2Zsb3dPdXRwdXREZXNjcmlwdG9yLFxuICBBWFBXb3JrZmxvd0V4dGVuc2lvbnMsXG4gIEFYUEVsc2FXb3JrZmxvd0V4dGVuc2lvbnMsXG4gIEFYUFdvcmtmbG93QmluZGluZyxcbn0gZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uLnR5cGVzJztcblxuLy8gV29ya2Zsb3cgSW5zdGFuY2UgVHlwZXMgKFN0b3JhZ2UvRGF0YWJhc2UpXG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzJztcblxuXG4vLyBSZS1leHBvcnQgV29ya2Zsb3cgSW5zdGFuY2UgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQVhQV29ya2Zsb3dJbnN0YW5jZSxcbiAgQVhQV29ya2Zsb3dTdGF0ZSxcbiAgQVhQV29ya2Zsb3dTdGF0dXMsXG4gIEFYUFdvcmtmbG93U3ViU3RhdHVzLFxuICBBWFBBY3Rpdml0eVN0YXR1cyxcbiAgQVhQRXhjZXB0aW9uU3RhdGUsXG4gIEFYUEFjdGl2aXR5SW5jaWRlbnQsXG4gIEFYUFdvcmtmbG93RmF1bHRTdGF0ZSxcbiAgQVhQQm9va21hcmssXG4gIEFYUENvbXBsZXRpb25DYWxsYmFja1N0YXRlLFxuICBBWFBBY3Rpdml0eVZhcmlhYmxlLFxuICBBWFBBY3Rpdml0eUV4ZWN1dGlvbkNvbnRleHRTdGF0ZSxcbn0gZnJvbSAnLi93b3JrZmxvdy1pbnN0YW5jZS50eXBlcyc7XG5cbi8vIEFjdGl2aXR5IFN5c3RlbSBUeXBlcyAoU2ltcGxpZmllZClcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHkvYWN0aXZpdHkudHlwZXMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2FjdGl2aXR5JztcblxuLy8gU2ltcGxlIFJ1bnRpbWUgKENvb3JkaW5hdG9yIG9ubHkpXG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUnO1xuXG4vLyBXb3JrZmxvdyBEZWZpbml0aW9uIFN5c3RlbSAoQ2F0ZWdvcnkgKyBNZXRhZGF0YSlcbmV4cG9ydCAqIGZyb20gJy4vd29ya2Zsb3cvd29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtmbG93L3dvcmtmbG93LWRlZmluaXRpb24uc2VydmljZSc7Il19","import { Inject, NgModule, Optional } from '@angular/core';\nimport { AXPWorkflowDecideAction } from './actions/decide.action';\nimport { AXPStartWorkflowAction } from './actions/start-workflow.action';\nimport { AXPWorkflowRegistryService } from './workflow-registery.service';\nimport { AXP_WORKFLOW_ENGINE, AXPWorkflowLocalEngine } from './engine';\nimport { AXPWorkflowManager } from './engine/runtime/workflow-manager.service';\nimport * as i0 from \"@angular/core\";\nexport class AXPWorkflowModule {\n static forRoot(config) {\n return {\n ngModule: AXPWorkflowModule,\n providers: [\n {\n provide: 'AXPWorkflowModuleFactory',\n useFactory: (registry) => () => {\n registry.registerAction('start-workflow', AXPStartWorkflowAction);\n registry.registerAction('decide', AXPWorkflowDecideAction);\n //\n if (config?.functions) {\n for (const [key, type] of Object.entries(config.functions)) {\n registry.registerFunction(key, type);\n }\n }\n //\n if (config?.actions) {\n for (const [key, type] of Object.entries(config.actions)) {\n registry.registerAction(key, type);\n }\n }\n //\n if (config?.workflows) {\n for (const [key, type] of Object.entries(config.workflows)) {\n registry.registerWorkflow(key, type);\n }\n }\n },\n deps: [AXPWorkflowRegistryService],\n multi: true,\n },\n ...Object.values(config?.actions ?? { AXPStartWorkflowAction }),\n ...Object.values(config?.functions ?? {}),\n ],\n };\n }\n static forChild(config) {\n return {\n ngModule: AXPWorkflowModule,\n providers: [\n // Built-in activities are already registered in forRoot via @NgModule providers\n // No need to register again in forChild\n {\n provide: 'AXPWorkflowModuleFactory',\n useFactory: (registry) => () => {\n registry.registerAction('start-workflow', AXPStartWorkflowAction);\n registry.registerAction('decide', AXPWorkflowDecideAction);\n //\n if (config?.functions) {\n for (const [key, type] of Object.entries(config.functions)) {\n registry.registerFunction(key, type);\n }\n }\n //\n if (config?.actions) {\n for (const [key, type] of Object.entries(config.actions)) {\n registry.registerAction(key, type);\n }\n }\n //\n if (config?.workflows) {\n for (const [key, type] of Object.entries(config.workflows)) {\n registry.registerWorkflow(key, type);\n }\n }\n },\n deps: [AXPWorkflowRegistryService],\n multi: true,\n },\n ...Object.values(config?.actions ?? {}),\n ...Object.values(config?.functions ?? {}),\n ],\n };\n }\n /**\n * @ignore\n */\n constructor(instances) {\n instances?.forEach((f) => {\n f();\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowModule, deps: [{ token: 'AXPWorkflowModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowModule, providers: [\n AXPWorkflowLocalEngine,\n {\n provide: AXP_WORKFLOW_ENGINE,\n useExisting: AXPWorkflowLocalEngine,\n },\n AXPWorkflowManager,\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPWorkflowModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n AXPWorkflowLocalEngine,\n {\n provide: AXP_WORKFLOW_ENGINE,\n useExisting: AXPWorkflowLocalEngine,\n },\n AXPWorkflowManager,\n ],\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: ['AXPWorkflowModuleFactory']\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvbGliL3dvcmtmbG93Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUF1QixRQUFRLEVBQUUsUUFBUSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0FBMEIvRSxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaUM7UUFDOUMsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSwwQkFBMEI7b0JBQ25DLFVBQVUsRUFBRSxDQUFDLFFBQW9DLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTt3QkFDekQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO3dCQUNsRSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO3dCQUMzRCxFQUFFO3dCQUNGLElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDOzRCQUN0QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FB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TSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO2FBQzFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQTRELFNBQWdCO1FBQzFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QixDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FyRlUsaUJBQWlCLGtCQWlGSSwwQkFBMEI7Z0hBakYvQyxpQkFBaUI7Z0hBQWpCLGlCQUFpQixhQVRqQjtZQUNULHNCQUFzQjtZQUN0QjtnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsc0JBQXNCO2FBQ3BDO1lBQ0Qsa0JBQWtCO1NBQ25COzs0RkFFVSxpQkFBaUI7a0JBYjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVCxzQkFBc0I7d0JBQ3RCOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxzQkFBc0I7eUJBQ3BDO3dCQUNELGtCQUFrQjtxQkFDbkI7aUJBQ0Y7OzBCQWtGYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIE9wdGlvbmFsLCBUeXBlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93RGVjaWRlQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb25zL2RlY2lkZS5hY3Rpb24nO1xuaW1wb3J0IHsgQVhQU3RhcnRXb3JrZmxvd0FjdGlvbiB9IGZyb20gJy4vYWN0aW9ucy9zdGFydC13b3JrZmxvdy5hY3Rpb24nO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuL3dvcmtmbG93LXJlZ2lzdGVyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUFdvcmtmbG93LCBBWFBXb3JrZmxvd0FjdGlvbiwgQVhQV29ya2Zsb3dGdW5jdGlvbiB9IGZyb20gJy4vd29ya2Zsb3cudHlwZXMnO1xuaW1wb3J0IHsgQVhQX1dPUktGTE9XX0VOR0lORSwgQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSB9IGZyb20gJy4vZW5naW5lJztcbmltcG9ydCB7IEFYUFdvcmtmbG93TWFuYWdlciB9IGZyb20gJy4vZW5naW5lL3J1bnRpbWUvd29ya2Zsb3ctbWFuYWdlci5zZXJ2aWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgQVhQV29ya2Zsb3dNb2R1bGVDb25maWdzIHtcbiAgZnVuY3Rpb25zPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUeXBlPEFYUFdvcmtmbG93RnVuY3Rpb24+O1xuICB9O1xuICBhY3Rpb25zPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUeXBlPEFYUFdvcmtmbG93QWN0aW9uPjtcbiAgfTtcbiAgd29ya2Zsb3dzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBBWFBXb3JrZmxvdztcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW10sXG4gIGV4cG9ydHM6IFtdLFxuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBWFBXb3JrZmxvd0xvY2FsRW5naW5lLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9XT1JLRkxPV19FTkdJTkUsXG4gICAgICB1c2VFeGlzdGluZzogQVhQV29ya2Zsb3dMb2NhbEVuZ2luZSxcbiAgICB9LFxuICAgIEFYUFdvcmtmbG93TWFuYWdlcixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQV29ya2Zsb3dNb2R1bGUge1xuXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEFYUFdvcmtmbG93TW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQV29ya2Zsb3dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUFdvcmtmbG93TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiAnQVhQV29ya2Zsb3dNb2R1bGVGYWN0b3J5JyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiAocmVnaXN0cnk6IEFYUFdvcmtmbG93UmVnaXN0cnlTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbignc3RhcnQtd29ya2Zsb3cnLCBBWFBTdGFydFdvcmtmbG93QWN0aW9uKTtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKCdkZWNpZGUnLCBBWFBXb3JrZmxvd0RlY2lkZUFjdGlvbik7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8uZnVuY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckZ1bmN0aW9uKGtleSwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmFjdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oa2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGlmIChjb25maWc/LndvcmtmbG93cykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy53b3JrZmxvd3MpKSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJXb3JrZmxvdyhrZXksIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXBzOiBbQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2VdLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAuLi5PYmplY3QudmFsdWVzKGNvbmZpZz8uYWN0aW9ucyA/PyB7IEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24gfSksXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoY29uZmlnPy5mdW5jdGlvbnMgPz8ge30pLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKGNvbmZpZz86IEFYUFdvcmtmbG93TW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQV29ya2Zsb3dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUFdvcmtmbG93TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC8vIEJ1aWx0LWluIGFjdGl2aXRpZXMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiBmb3JSb290IHZpYSBATmdNb2R1bGUgcHJvdmlkZXJzXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcmVnaXN0ZXIgYWdhaW4gaW4gZm9yQ2hpbGRcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6ICdBWFBXb3JrZmxvd01vZHVsZUZhY3RvcnknLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogQVhQV29ya2Zsb3dSZWdpc3RyeVNlcnZpY2UpID0+ICgpID0+IHtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQWN0aW9uKCdzdGFydC13b3JrZmxvdycsIEFYUFN0YXJ0V29ya2Zsb3dBY3Rpb24pO1xuICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBY3Rpb24oJ2RlY2lkZScsIEFYUFdvcmtmbG93RGVjaWRlQWN0aW9uKTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAoY29uZmlnPy5mdW5jdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRnVuY3Rpb24oa2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGlmIChjb25maWc/LmFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuYWN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFjdGlvbihrZXksIHR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgaWYgKGNvbmZpZz8ud29ya2Zsb3dzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLndvcmtmbG93cykpIHtcbiAgICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlcldvcmtmbG93KGtleSwgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcHM6IFtBWFBXb3JrZmxvd1JlZ2lzdHJ5U2VydmljZV0sXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLk9iamVjdC52YWx1ZXMoY29uZmlnPy5hY3Rpb25zID8/IHt9KSxcbiAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhjb25maWc/LmZ1bmN0aW9ucyA/PyB7fSksXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdCgnQVhQV29ya2Zsb3dNb2R1bGVGYWN0b3J5JykgaW5zdGFuY2VzOiBhbnlbXSkge1xuICAgIGluc3RhbmNlcz8uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgZigpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93b3JrZmxvdy9zcmMvYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1.AXPWorkflowRegistryService"],"mappings":"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"}