@veloceapps/sdk 11.0.0-99 → 12.0.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cms/vendor-map.d.ts +6 -2
- package/core/modules/configuration/services/configuration-state.service.d.ts +3 -2
- package/core/modules/configuration/services/test-mode-configuration.service.d.ts +4 -1
- package/core/modules/configuration/types/configuration.types.d.ts +4 -0
- package/core/services/flow-info.service.d.ts +5 -5
- package/core/services/flow-state-configuration.service.d.ts +7 -2
- package/core/utils/index.d.ts +1 -0
- package/core/utils/pcm.utils.d.ts +5 -0
- package/core/utils/transaction-item.utils.d.ts +5 -2
- package/esm2020/cms/vendor-map.mjs +7 -3
- package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +21 -18
- package/esm2020/core/modules/configuration/services/configuration.service.mjs +3 -5
- package/esm2020/core/modules/configuration/services/test-mode-configuration.service.mjs +32 -9
- package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
- package/esm2020/core/services/flow-info.service.mjs +14 -14
- package/esm2020/core/services/flow-state-configuration.service.mjs +70 -33
- package/esm2020/core/utils/index.mjs +2 -1
- package/esm2020/core/utils/pcm.utils.mjs +15 -0
- package/esm2020/core/utils/transaction-item.utils.mjs +82 -6
- package/esm2020/src/guards/product-unload.guard.mjs +4 -2
- package/esm2020/src/pages/product/product.component.mjs +37 -10
- package/esm2020/src/resolvers/ui-definition.resolver.mjs +7 -5
- package/esm2020/src/services/flow-router.service.mjs +10 -10
- package/fesm2015/veloceapps-sdk-cms.mjs +5 -1
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk-core.mjs +211 -67
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk.mjs +49 -19
- package/fesm2015/veloceapps-sdk.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-cms.mjs +5 -1
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-core.mjs +221 -74
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk.mjs +48 -19
- package/fesm2020/veloceapps-sdk.mjs.map +1 -1
- package/package.json +4 -4
- package/src/pages/product/product.component.d.ts +12 -3
- package/src/resolvers/ui-definition.resolver.d.ts +1 -1
- package/src/services/flow-router.service.d.ts +3 -3
package/cms/vendor-map.d.ts
CHANGED
@@ -2,10 +2,10 @@ import { DataSource } from '@angular/cdk/collections';
|
|
2
2
|
import * as angularCore from '@angular/core';
|
3
3
|
import * as angularForms from '@angular/forms';
|
4
4
|
import { ContractedPriceApiService } from '@veloceapps/api';
|
5
|
-
import { CatalogApiService, ConfigurationSettingsApiService,
|
5
|
+
import { CatalogApiService, ConfigurationSettingsApiService, DocumentAttachmentApiService, GuidedSellingApiService, SalesforceApiService, SalesTransactionApiService, ShoppingCartSettingsApiService } from '@veloceapps/api/v2';
|
6
6
|
import { ToastService, ToastType } from '@veloceapps/components';
|
7
7
|
import { Operator, parseJsonSafely, parseJwt, Predicate, TokenInfoService, UITemplateType } from '@veloceapps/core';
|
8
|
-
import { ActionCodePipe, ConfigurationService,
|
8
|
+
import { ActionCodePipe, ConfigurationService, ConfigurationStateService, DatePipe, filterSuccessfulExecute, FlowConfigurationService, FlowInfoService, FlowStateConfigurationService, FlowStateService, GuidedSellingService, IntegrationState, NumberPipe, PCMUtils, PricePipe, ProductImagesService, RuntimeSettingsService, SalesTransactionService, TransactionItemWorker } from '@veloceapps/sdk/core';
|
9
9
|
import lodash from 'lodash';
|
10
10
|
import * as rxjs from 'rxjs';
|
11
11
|
import * as rxjsOperators from 'rxjs/operators';
|
@@ -56,6 +56,10 @@ export declare const vendorMap: {
|
|
56
56
|
NumberPipe: typeof NumberPipe;
|
57
57
|
PricePipe: typeof PricePipe;
|
58
58
|
SalesTransactionService: typeof SalesTransactionService;
|
59
|
+
generateTransactionItem: (option: import("@veloceapps/core").PCMProduct, salesTransactionId?: string | undefined, qty?: number | undefined, parentTi?: import("@veloceapps/core").SalesTransactionItem | undefined) => import("@veloceapps/core").SalesTransactionItem;
|
60
|
+
updateQuantity: (ti: import("@veloceapps/core").SalesTransactionItem, qty: number, pcm: import("@veloceapps/core").PCMProduct, parentQty?: number | undefined) => import("@veloceapps/core").SalesTransactionItem;
|
61
|
+
flattenTransactionItem: (ti: import("@veloceapps/core").SalesTransactionItem) => import("@veloceapps/core").SalesTransactionItem[];
|
62
|
+
PCMUtils: typeof PCMUtils;
|
59
63
|
};
|
60
64
|
'@veloceapps/sdk/cms': {
|
61
65
|
TemplatesService: typeof TemplatesService;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { FlowStateApiService } from '@veloceapps/api';
|
2
|
-
import { SalesTransactionApiService, SalesTransactionUpsertResponse } from '@veloceapps/api/v2';
|
2
|
+
import { PCMApiService, SalesTransactionApiService, SalesTransactionUpsertResponse } from '@veloceapps/api/v2';
|
3
3
|
import { ToastService } from '@veloceapps/components';
|
4
4
|
import { FlowStateExecutionRequest, FlowStateExecutionResult, FlowStateSelectorResponse } from '@veloceapps/core';
|
5
5
|
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
@@ -19,6 +19,7 @@ export declare class ConfigurationStateService {
|
|
19
19
|
private salesTransactionService;
|
20
20
|
private salesTransactionApiService;
|
21
21
|
private toastService;
|
22
|
+
private pcmApiService;
|
22
23
|
isInitialized$: BehaviorSubject<boolean>;
|
23
24
|
canceledConfiguration$: Subject<void>;
|
24
25
|
private readonly NOT_INITIALIZED;
|
@@ -32,7 +33,7 @@ export declare class ConfigurationStateService {
|
|
32
33
|
private statefulRequestStream$;
|
33
34
|
private statefulExecutionRequest$;
|
34
35
|
private statelessExecutionRequest$;
|
35
|
-
constructor(configurationRuntimeService: ConfigurationRuntimeService, configurationService: ConfigurationService, flowStateService: FlowStateService, flowInfoService: FlowInfoService, flowConfigurationService: FlowConfigurationService, flowStateApiService: FlowStateApiService, salesTransactionService: SalesTransactionService, salesTransactionApiService: SalesTransactionApiService, toastService: ToastService);
|
36
|
+
constructor(configurationRuntimeService: ConfigurationRuntimeService, configurationService: ConfigurationService, flowStateService: FlowStateService, flowInfoService: FlowInfoService, flowConfigurationService: FlowConfigurationService, flowStateApiService: FlowStateApiService, salesTransactionService: SalesTransactionService, salesTransactionApiService: SalesTransactionApiService, toastService: ToastService, pcmApiService: PCMApiService);
|
36
37
|
get isExecutionInProgress$(): Observable<boolean>;
|
37
38
|
init$(): Observable<void>;
|
38
39
|
cleanup(): void;
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { SalesforceApiService } from '@veloceapps/api/v2';
|
1
2
|
import { UIDefinitionContainer } from '@veloceapps/core';
|
2
3
|
import { Observable } from 'rxjs';
|
3
4
|
import { FlowInfoService, RuntimeSettingsService, SalesTransactionService } from '../../../services';
|
@@ -11,11 +12,13 @@ export declare class TestModeConfigurationService {
|
|
11
12
|
private configurationRuntimeService;
|
12
13
|
private salesTransactionService;
|
13
14
|
private runtimeSettingsService;
|
15
|
+
private sfApiService;
|
14
16
|
private isInitialized;
|
15
17
|
private pcmModel?;
|
16
|
-
constructor(flowInfoService: FlowInfoService, configurationService: ConfigurationService, configurationRuntimeService: ConfigurationRuntimeService, salesTransactionService: SalesTransactionService, runtimeSettingsService: RuntimeSettingsService);
|
18
|
+
constructor(flowInfoService: FlowInfoService, configurationService: ConfigurationService, configurationRuntimeService: ConfigurationRuntimeService, salesTransactionService: SalesTransactionService, runtimeSettingsService: RuntimeSettingsService, sfApiService: SalesforceApiService);
|
17
19
|
initTestMode$(uiDefinitionContainer: UIDefinitionContainer, options?: TestModeConfigurationOptions): Observable<void>;
|
18
20
|
private initConfiguration$;
|
21
|
+
private getPriceBookId;
|
19
22
|
private getTestTransactionContext;
|
20
23
|
private checkInitialized;
|
21
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<TestModeConfigurationService, never>;
|
@@ -13,6 +13,11 @@ export declare class FlowInfoService {
|
|
13
13
|
templates$: Observable<{
|
14
14
|
[key in UITemplateType]?: UITemplate;
|
15
15
|
}>;
|
16
|
+
private readonly defaultTemplates;
|
17
|
+
private flowSubj$;
|
18
|
+
private templatesSubj$;
|
19
|
+
private contextSubj$;
|
20
|
+
constructor(runtimeSettingsService: RuntimeSettingsService, templatesAdminApiService: UITemplatesAdminApiService, customizationService?: FlowCustomization | undefined);
|
16
21
|
get flow(): Flow;
|
17
22
|
get isFlowInitialized(): boolean;
|
18
23
|
get context(): FlowContext;
|
@@ -27,11 +32,6 @@ export declare class FlowInfoService {
|
|
27
32
|
};
|
28
33
|
get isFlowEngineInitialized$(): Observable<boolean>;
|
29
34
|
get isStateful(): boolean;
|
30
|
-
private readonly defaultTemplates;
|
31
|
-
private flowSubj$;
|
32
|
-
private templatesSubj$;
|
33
|
-
private contextSubj$;
|
34
|
-
constructor(runtimeSettingsService: RuntimeSettingsService, templatesAdminApiService: UITemplatesAdminApiService, customizationService?: FlowCustomization | undefined);
|
35
35
|
reset(): void;
|
36
36
|
init$(flowId: string, routeQueryParams: Params): Observable<void>;
|
37
37
|
updateContext(update: Partial<FlowContext>): void;
|
@@ -1,6 +1,7 @@
|
|
1
|
+
import { PCMApiService } from '@veloceapps/api/v2';
|
1
2
|
import { Observable } from 'rxjs';
|
2
3
|
import { ConfigurationService } from '../modules/configuration/services/configuration.service';
|
3
|
-
import { NewConfigurationProps } from '../modules/configuration/types/configuration.types';
|
4
|
+
import { NewConfigurationProps, QuantityChangeProps } from '../modules/configuration/types/configuration.types';
|
4
5
|
import { FlowConfigurationService } from '../modules/flow-configuration/services/flow-configuration.service';
|
5
6
|
import { FlowInfoService } from './flow-info.service';
|
6
7
|
import { FlowStateService } from './flow-state.service';
|
@@ -12,9 +13,13 @@ export declare class FlowStateConfigurationService {
|
|
12
13
|
private configurationService;
|
13
14
|
private salesTransactionService;
|
14
15
|
private flowConfigurationService;
|
15
|
-
|
16
|
+
private pcmApiService;
|
17
|
+
private pcmCache;
|
18
|
+
constructor(flowInfoService: FlowInfoService, flowStateService: FlowStateService, configurationService: ConfigurationService, salesTransactionService: SalesTransactionService, flowConfigurationService: FlowConfigurationService, pcmApiService: PCMApiService);
|
19
|
+
updateQuantity$(props: QuantityChangeProps): Observable<void>;
|
16
20
|
addToCart$(props: NewConfigurationProps): Observable<void>;
|
17
21
|
private configureExternal$;
|
22
|
+
private getPCMProduct$;
|
18
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<FlowStateConfigurationService, never>;
|
19
24
|
static ɵprov: i0.ɵɵInjectableDeclaration<FlowStateConfigurationService>;
|
20
25
|
}
|
package/core/utils/index.d.ts
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
-
import { SalesTransactionItem } from '@veloceapps/core';
|
1
|
+
import { PCMModel, PCMProduct, SalesTransactionItem } from '@veloceapps/core';
|
2
2
|
export declare const findTransactionItem: (id: string, items: SalesTransactionItem[]) => SalesTransactionItem | undefined;
|
3
3
|
export declare const findTransactionItemWithComparator: (items: SalesTransactionItem[], comparator: (ti: SalesTransactionItem) => boolean) => SalesTransactionItem | undefined;
|
4
4
|
export declare const insertTransactionItem: (item: SalesTransactionItem, parentId: string, toInsert: SalesTransactionItem) => SalesTransactionItem;
|
5
5
|
export declare const removeTransactionItem: (item: SalesTransactionItem, idToRemove: string) => SalesTransactionItem;
|
6
6
|
export declare const replaceTransactionItem: (item: SalesTransactionItem, replaceTo: SalesTransactionItem) => SalesTransactionItem;
|
7
|
-
export declare const generateTransactionItem: (
|
7
|
+
export declare const generateTransactionItem: (option: PCMModel, salesTransactionId?: string, qty?: number, parentTi?: SalesTransactionItem) => SalesTransactionItem;
|
8
|
+
export declare const generateTransactionItemFromPCM: (option: PCMModel, salesTransactionId?: string, parentTi?: SalesTransactionItem) => SalesTransactionItem;
|
9
|
+
export declare const flattenTransactionItem: (ti: SalesTransactionItem) => SalesTransactionItem[];
|
10
|
+
export declare const updateQuantity: (ti: SalesTransactionItem, qty: number, pcm: PCMProduct, parentQty?: number) => SalesTransactionItem;
|
@@ -2,10 +2,10 @@ import { DataSource } from '@angular/cdk/collections';
|
|
2
2
|
import * as angularCore from '@angular/core';
|
3
3
|
import * as angularForms from '@angular/forms';
|
4
4
|
import { ContractedPriceApiService } from '@veloceapps/api';
|
5
|
-
import { CatalogApiService, ConfigurationSettingsApiService,
|
5
|
+
import { CatalogApiService, ConfigurationSettingsApiService, DocumentAttachmentApiService, GuidedSellingApiService, SalesforceApiService, SalesTransactionApiService, ShoppingCartSettingsApiService, } from '@veloceapps/api/v2';
|
6
6
|
import { ToastService, ToastType } from '@veloceapps/components';
|
7
7
|
import { isDefined, Operator, parseJsonSafely, parseJwt, Predicate, TokenInfoService, UITemplateType, } from '@veloceapps/core';
|
8
|
-
import { ActionCodePipe, ConfigurationService,
|
8
|
+
import { ActionCodePipe, ConfigurationService, ConfigurationStateService, DatePipe, filterSuccessfulExecute, flattenTransactionItem, FlowConfigurationService, FlowInfoService, FlowStateConfigurationService, FlowStateService, generateTransactionItem, GuidedSellingService, IntegrationState, NumberPipe, PCMUtils, PricePipe, ProductImagesService, RuntimeSettingsService, SalesTransactionService, TransactionItemWorker, updateQuantity, } from '@veloceapps/sdk/core';
|
9
9
|
import lodash from 'lodash';
|
10
10
|
import * as rxjs from 'rxjs';
|
11
11
|
import * as rxjsOperators from 'rxjs/operators';
|
@@ -58,6 +58,10 @@ export const vendorMap = {
|
|
58
58
|
NumberPipe,
|
59
59
|
PricePipe,
|
60
60
|
SalesTransactionService,
|
61
|
+
generateTransactionItem,
|
62
|
+
updateQuantity,
|
63
|
+
flattenTransactionItem,
|
64
|
+
PCMUtils,
|
61
65
|
},
|
62
66
|
'@veloceapps/sdk/cms': {
|
63
67
|
...cmsInjectionTokens,
|
@@ -76,4 +80,4 @@ export const vendorMap = {
|
|
76
80
|
'rxjs/operators': rxjsOperators,
|
77
81
|
lodash: lodash,
|
78
82
|
};
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL2Ntcy92ZW5kb3ItbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEtBQUssV0FBVyxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEtBQUssWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsK0JBQStCLEVBQy9CLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLDBCQUEwQixFQUMxQiw4QkFBOEIsR0FDL0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixRQUFRLEVBQ1IsU0FBUyxFQUNULGdCQUFnQixFQUNoQixjQUFjLEdBQ2YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsY0FBYyxFQUNkLG9CQUFvQixFQUNwQix5QkFBeUIsRUFDekIsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZiw2QkFBNkIsRUFDN0IsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixjQUFjLEdBQ2YsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLGFBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEtBQUssa0JBQWtCLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUN2QixrQkFBa0IsRUFBRTtRQUNsQixTQUFTO1FBQ1QsUUFBUTtRQUNSLFNBQVM7UUFDVCxlQUFlO1FBQ2YsUUFBUTtRQUNSLGdCQUFnQjtRQUNoQixjQUFjO0tBQ2Y7SUFDRCx3QkFBd0IsRUFBRTtRQUN4QixZQUFZO1FBQ1osU0FBUztLQUNWO0lBQ0QsaUJBQWlCLEVBQUU7UUFDakIseUJBQXlCO0tBQzFCO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEIsaUJBQWlCO1FBQ2pCLCtCQUErQjtRQUMvQiw0QkFBNEI7UUFDNUIsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQiwwQkFBMEI7UUFDMUIsOEJBQThCO0tBQy9CO0lBQ0Qsc0JBQXNCLEVBQUU7UUFDdEIsb0JBQW9CO1FBQ3BCLHlCQUF5QjtRQUN6QixvQkFBb0I7UUFDcEIsdUJBQXVCO1FBQ3ZCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQiw2QkFBNkI7UUFDN0IscUJBQXFCO1FBQ3JCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsY0FBYztRQUNkLFFBQVE7UUFDUixVQUFVO1FBQ1YsU0FBUztRQUNULHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsY0FBYztRQUNkLHNCQUFzQjtRQUN0QixRQUFRO0tBQ1Q7SUFDRCxxQkFBcUIsRUFBRTtRQUNyQixHQUFHLGtCQUFrQjtRQUNyQixHQUFHLFVBQVU7UUFDYixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixTQUFTO0tBQ1Y7SUFDRCxlQUFlLEVBQUUsV0FBVztJQUM1QixnQkFBZ0IsRUFBRSxZQUFZO0lBQzlCLDBCQUEwQixFQUFFO1FBQzFCLFVBQVU7S0FDWDtJQUNELElBQUksRUFBRSxJQUFJO0lBQ1YsZ0JBQWdCLEVBQUUsYUFBYTtJQUMvQixNQUFNLEVBQUUsTUFBTTtDQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCAqIGFzIGFuZ3VsYXJDb3JlIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgYW5ndWxhckZvcm1zIGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbnRyYWN0ZWRQcmljZUFwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHtcbiAgQ2F0YWxvZ0FwaVNlcnZpY2UsXG4gIENvbmZpZ3VyYXRpb25TZXR0aW5nc0FwaVNlcnZpY2UsXG4gIERvY3VtZW50QXR0YWNobWVudEFwaVNlcnZpY2UsXG4gIEd1aWRlZFNlbGxpbmdBcGlTZXJ2aWNlLFxuICBTYWxlc2ZvcmNlQXBpU2VydmljZSxcbiAgU2FsZXNUcmFuc2FjdGlvbkFwaVNlcnZpY2UsXG4gIFNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZSxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpL3YyJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSwgVG9hc3RUeXBlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBpc0RlZmluZWQsXG4gIE9wZXJhdG9yLFxuICBwYXJzZUpzb25TYWZlbHksXG4gIHBhcnNlSnd0LFxuICBQcmVkaWNhdGUsXG4gIFRva2VuSW5mb1NlcnZpY2UsXG4gIFVJVGVtcGxhdGVUeXBlLFxufSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvZGVQaXBlLFxuICBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgQ29uZmlndXJhdGlvblN0YXRlU2VydmljZSxcbiAgRGF0ZVBpcGUsXG4gIGZpbHRlclN1Y2Nlc3NmdWxFeGVjdXRlLFxuICBmbGF0dGVuVHJhbnNhY3Rpb25JdGVtLFxuICBGbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gIEZsb3dJbmZvU2VydmljZSxcbiAgRmxvd1N0YXRlQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gIEZsb3dTdGF0ZVNlcnZpY2UsXG4gIGdlbmVyYXRlVHJhbnNhY3Rpb25JdGVtLFxuICBHdWlkZWRTZWxsaW5nU2VydmljZSxcbiAgSW50ZWdyYXRpb25TdGF0ZSxcbiAgTnVtYmVyUGlwZSxcbiAgUENNVXRpbHMsXG4gIFByaWNlUGlwZSxcbiAgUHJvZHVjdEltYWdlc1NlcnZpY2UsXG4gIFJ1bnRpbWVTZXR0aW5nc1NlcnZpY2UsXG4gIFNhbGVzVHJhbnNhY3Rpb25TZXJ2aWNlLFxuICBUcmFuc2FjdGlvbkl0ZW1Xb3JrZXIsXG4gIHVwZGF0ZVF1YW50aXR5LFxufSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgbG9kYXNoIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgcnhqc09wZXJhdG9ycyBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgKiBhcyBjbXNBY3Rpb25zIGZyb20gJy4vY21zLmFjdGlvbnMnO1xuaW1wb3J0ICogYXMgY21zSW5qZWN0aW9uVG9rZW5zIGZyb20gJy4vaW5qZWN0aW9uLXRva2Vucyc7XG5pbXBvcnQgeyBSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9yZXNvdXJjZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBjbXNJbmplY3QgfSBmcm9tICcuL3V0aWxzL2luamVjdCc7XG5cbmV4cG9ydCBjb25zdCB2ZW5kb3JNYXAgPSB7XG4gICdAdmVsb2NlYXBwcy9jb3JlJzoge1xuICAgIGlzRGVmaW5lZCxcbiAgICBPcGVyYXRvcixcbiAgICBQcmVkaWNhdGUsXG4gICAgcGFyc2VKc29uU2FmZWx5LFxuICAgIHBhcnNlSnd0LFxuICAgIFRva2VuSW5mb1NlcnZpY2UsXG4gICAgVUlUZW1wbGF0ZVR5cGUsXG4gIH0sXG4gICdAdmVsb2NlYXBwcy9jb21wb25lbnRzJzoge1xuICAgIFRvYXN0U2VydmljZSxcbiAgICBUb2FzdFR5cGUsXG4gIH0sXG4gICdAdmVsb2NlYXBwcy9hcGknOiB7XG4gICAgQ29udHJhY3RlZFByaWNlQXBpU2VydmljZSxcbiAgfSxcbiAgJ0B2ZWxvY2VhcHBzL2FwaS92Mic6IHtcbiAgICBDYXRhbG9nQXBpU2VydmljZSxcbiAgICBDb25maWd1cmF0aW9uU2V0dGluZ3NBcGlTZXJ2aWNlLFxuICAgIERvY3VtZW50QXR0YWNobWVudEFwaVNlcnZpY2UsXG4gICAgR3VpZGVkU2VsbGluZ0FwaVNlcnZpY2UsXG4gICAgU2FsZXNmb3JjZUFwaVNlcnZpY2UsXG4gICAgU2FsZXNUcmFuc2FjdGlvbkFwaVNlcnZpY2UsXG4gICAgU2hvcHBpbmdDYXJ0U2V0dGluZ3NBcGlTZXJ2aWNlLFxuICB9LFxuICAnQHZlbG9jZWFwcHMvc2RrL2NvcmUnOiB7XG4gICAgQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgQ29uZmlndXJhdGlvblN0YXRlU2VydmljZSxcbiAgICBHdWlkZWRTZWxsaW5nU2VydmljZSxcbiAgICBmaWx0ZXJTdWNjZXNzZnVsRXhlY3V0ZSxcbiAgICBGbG93SW5mb1NlcnZpY2UsXG4gICAgRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIEludGVncmF0aW9uU3RhdGUsXG4gICAgRmxvd1N0YXRlU2VydmljZSxcbiAgICBGbG93U3RhdGVDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBUcmFuc2FjdGlvbkl0ZW1Xb3JrZXIsXG4gICAgUHJvZHVjdEltYWdlc1NlcnZpY2UsXG4gICAgUnVudGltZVNldHRpbmdzU2VydmljZSxcbiAgICBBY3Rpb25Db2RlUGlwZSxcbiAgICBEYXRlUGlwZSxcbiAgICBOdW1iZXJQaXBlLFxuICAgIFByaWNlUGlwZSxcbiAgICBTYWxlc1RyYW5zYWN0aW9uU2VydmljZSxcbiAgICBnZW5lcmF0ZVRyYW5zYWN0aW9uSXRlbSxcbiAgICB1cGRhdGVRdWFudGl0eSxcbiAgICBmbGF0dGVuVHJhbnNhY3Rpb25JdGVtLFxuICAgIFBDTVV0aWxzLFxuICB9LFxuICAnQHZlbG9jZWFwcHMvc2RrL2Ntcyc6IHtcbiAgICAuLi5jbXNJbmplY3Rpb25Ub2tlbnMsXG4gICAgLi4uY21zQWN0aW9ucyxcbiAgICBUZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIEludGVncmF0aW9uU3RhdGUsXG4gICAgUmVzb3VyY2VzU2VydmljZSxcbiAgICBjbXNJbmplY3QsXG4gIH0sXG4gICdAYW5ndWxhci9jb3JlJzogYW5ndWxhckNvcmUsXG4gICdAYW5ndWxhci9mb3Jtcyc6IGFuZ3VsYXJGb3JtcyxcbiAgJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc6IHtcbiAgICBEYXRhU291cmNlLFxuICB9LFxuICByeGpzOiByeGpzLFxuICAncnhqcy9vcGVyYXRvcnMnOiByeGpzT3BlcmF0b3JzLFxuICBsb2Rhc2g6IGxvZGFzaCxcbn07XG5cbmV4cG9ydCB0eXBlIFZlbmRvck1hcCA9IHR5cGVvZiB2ZW5kb3JNYXA7XG4iXX0=
|
@@ -1,15 +1,15 @@
|
|
1
1
|
import { Injectable } from '@angular/core';
|
2
2
|
import { FlowStateApiService } from '@veloceapps/api';
|
3
|
-
import { SalesTransactionApiService, } from '@veloceapps/api/v2';
|
3
|
+
import { PCMApiService, SalesTransactionApiService, } from '@veloceapps/api/v2';
|
4
4
|
import { ToastService, ToastType } from '@veloceapps/components';
|
5
5
|
import { EntityUtil, isDefined, UUID, } from '@veloceapps/core';
|
6
6
|
import { assign, cloneDeep } from 'lodash';
|
7
7
|
import { BehaviorSubject, buffer, catchError, combineLatest, debounceTime, distinctUntilChanged, filter, finalize, first, map, of, share, shareReplay, Subject, switchMap, take, takeUntil, tap, throwError, } from 'rxjs';
|
8
8
|
import { FlowInfoService, FlowStateService, SalesTransactionService } from '../../../services';
|
9
|
-
import { generateTransactionItem } from '../../../utils';
|
10
9
|
import { FlowConfigurationService } from '../../flow-configuration';
|
11
10
|
import { ConfigurationRuntimeService } from './configuration-runtime.service';
|
12
11
|
import { ConfigurationService } from './configuration.service';
|
12
|
+
import { generateTransactionItem } from '../../../utils';
|
13
13
|
import * as i0 from "@angular/core";
|
14
14
|
import * as i1 from "./configuration-runtime.service";
|
15
15
|
import * as i2 from "./configuration.service";
|
@@ -19,7 +19,7 @@ import * as i5 from "@veloceapps/api";
|
|
19
19
|
import * as i6 from "@veloceapps/api/v2";
|
20
20
|
import * as i7 from "@veloceapps/components";
|
21
21
|
export class ConfigurationStateService {
|
22
|
-
constructor(configurationRuntimeService, configurationService, flowStateService, flowInfoService, flowConfigurationService, flowStateApiService, salesTransactionService, salesTransactionApiService, toastService) {
|
22
|
+
constructor(configurationRuntimeService, configurationService, flowStateService, flowInfoService, flowConfigurationService, flowStateApiService, salesTransactionService, salesTransactionApiService, toastService, pcmApiService) {
|
23
23
|
this.configurationRuntimeService = configurationRuntimeService;
|
24
24
|
this.configurationService = configurationService;
|
25
25
|
this.flowStateService = flowStateService;
|
@@ -29,6 +29,7 @@ export class ConfigurationStateService {
|
|
29
29
|
this.salesTransactionService = salesTransactionService;
|
30
30
|
this.salesTransactionApiService = salesTransactionApiService;
|
31
31
|
this.toastService = toastService;
|
32
|
+
this.pcmApiService = pcmApiService;
|
32
33
|
this.isInitialized$ = new BehaviorSubject(false);
|
33
34
|
this.canceledConfiguration$ = new Subject();
|
34
35
|
this.NOT_INITIALIZED = Symbol();
|
@@ -146,13 +147,6 @@ export class ConfigurationStateService {
|
|
146
147
|
return of({ id: '' });
|
147
148
|
}
|
148
149
|
const { standalone } = this.flowInfoService.flow.properties;
|
149
|
-
if (standalone) {
|
150
|
-
const request = {
|
151
|
-
transactionContext: state,
|
152
|
-
flowId: this.flowInfoService.flow.id,
|
153
|
-
};
|
154
|
-
return this.salesTransactionApiService.save(request).pipe(switchMap(r => this.flowStateService.executeRequest$({}, true).pipe(map(() => r))), map(id => ({ id })));
|
155
|
-
}
|
156
150
|
const transactionContext = this.salesTransactionService.state;
|
157
151
|
const configurationRoot = this.configurationService.root;
|
158
152
|
if (!transactionContext || !configurationRoot) {
|
@@ -174,6 +168,13 @@ export class ConfigurationStateService {
|
|
174
168
|
salesTransactionItems,
|
175
169
|
},
|
176
170
|
};
|
171
|
+
if (standalone) {
|
172
|
+
const request = {
|
173
|
+
transactionContext: newState,
|
174
|
+
flowId: this.flowInfoService.flow.id,
|
175
|
+
};
|
176
|
+
return this.salesTransactionApiService.save(request).pipe(switchMap(r => this.flowStateService.executeRequest$({}, true).pipe(map(() => r))), map(id => ({ id })));
|
177
|
+
}
|
177
178
|
return this.flowConfigurationService.calculate$(newState).pipe(switchMap(() => this.flowStateService.executeRequest$({}, true)), map(() => ({ id: '' })));
|
178
179
|
}
|
179
180
|
cancelConfiguration() {
|
@@ -201,11 +202,13 @@ export class ConfigurationStateService {
|
|
201
202
|
const container = this.configurationRuntimeService.uiDefinitionContainer;
|
202
203
|
let request$;
|
203
204
|
if (!transactionItemId) {
|
204
|
-
request$ = this.
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
205
|
+
request$ = this.pcmApiService.fetchPCMByProductId(productId).pipe(switchMap(pcm => {
|
206
|
+
return this.flowStateApiService.newConfiguration(this.flowStateService.stateId || '', {
|
207
|
+
transactionItem: generateTransactionItem(pcm, this.configurationService.state?.salesTransaction.id),
|
208
|
+
actionsOverride: container?.actions?.map(processor => ({ ...processor, ownerId: this.ownerId })),
|
209
|
+
selectorsOverride: container?.selectors?.map(processor => ({ ...processor, ownerId: this.ownerId })),
|
210
|
+
});
|
211
|
+
}));
|
209
212
|
}
|
210
213
|
else {
|
211
214
|
request$ = this.flowStateApiService.startConfiguration(this.flowStateService.stateId, {
|
@@ -370,9 +373,9 @@ export class ConfigurationStateService {
|
|
370
373
|
}, { stateId: '', selectors: {} });
|
371
374
|
}
|
372
375
|
}
|
373
|
-
ConfigurationStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, deps: [{ token: i1.ConfigurationRuntimeService }, { token: i2.ConfigurationService }, { token: i3.FlowStateService }, { token: i3.FlowInfoService }, { token: i4.FlowConfigurationService }, { token: i5.FlowStateApiService }, { token: i3.SalesTransactionService }, { token: i6.SalesTransactionApiService }, { token: i7.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
|
376
|
+
ConfigurationStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, deps: [{ token: i1.ConfigurationRuntimeService }, { token: i2.ConfigurationService }, { token: i3.FlowStateService }, { token: i3.FlowInfoService }, { token: i4.FlowConfigurationService }, { token: i5.FlowStateApiService }, { token: i3.SalesTransactionService }, { token: i6.SalesTransactionApiService }, { token: i7.ToastService }, { token: i6.PCMApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
374
377
|
ConfigurationStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService });
|
375
378
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ConfigurationStateService, decorators: [{
|
376
379
|
type: Injectable
|
377
|
-
}], ctorParameters: function () { return [{ type: i1.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i3.FlowStateService }, { type: i3.FlowInfoService }, { type: i4.FlowConfigurationService }, { type: i5.FlowStateApiService }, { type: i3.SalesTransactionService }, { type: i6.SalesTransactionApiService }, { type: i7.ToastService }]; } });
|
378
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUNMLDBCQUEwQixHQUczQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUdMLFVBQVUsRUFNVixTQUFTLEVBR1QsSUFBSSxHQUNMLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWMsTUFBTSxRQUFRLENBQUM7QUFDdkQsT0FBTyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sVUFBVSxFQUNWLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLEdBQUcsRUFFSCxFQUFFLEVBQ0YsS0FBSyxFQUNMLFdBQVcsRUFDWCxPQUFPLEVBQ1AsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUs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QUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsSUFBSTtnQkFDRixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHO29CQUN0QixPQUFPLEVBQUUsSUFBSTtvQkFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztpQkFDakUsQ0FBQzthQUNIO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRztvQkFDdEIsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ3hCLENBQUM7YUFDSDtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsRUFDRCxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUMvQixDQUFDO0lBQ0osQ0FBQzs7c0hBNWVVLHlCQUF5QjswSEFBekIseUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbG93U3RhdGVBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7XG4gIFNhbGVzVHJhbnNhY3Rpb25BcGlTZXJ2aWNlLFxuICBTYWxlc1RyYW5zYWN0aW9uVXBzZXJ0UmVxdWVzdCxcbiAgU2FsZXNUcmFuc2FjdGlvblVwc2VydFJlc3BvbnNlLFxufSBmcm9tICdAdmVsb2NlYXBwcy9hcGkvdjInO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlLCBUb2FzdFR5cGUgfSBmcm9tICdAdmVsb2NlYXBwcy9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IsXG4gIENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JTY3JpcHRGbixcbiAgRW50aXR5VXRpbCxcbiAgRmxvd1N0YXRlRXhlY3V0YWJsZURUTyxcbiAgRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCxcbiAgRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTyxcbiAgRmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0LFxuICBGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlLFxuICBpc0RlZmluZWQsXG4gIFNhbGVzVHJhbnNhY3Rpb25JdGVtLFxuICBUcmFuc2FjdGlvbkNvbnRleHQsXG4gIFVVSUQsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgYXNzaWduLCBjbG9uZURlZXAsIERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBidWZmZXIsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZmluYWxpemUsXG4gIGZpcnN0LFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzaGFyZSxcbiAgc2hhcmVSZXBsYXksXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmxvd0luZm9TZXJ2aWNlLCBGbG93U3RhdGVTZXJ2aWNlLCBTYWxlc1RyYW5zYWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEZsb3dTdGF0ZVN1YnNjcmlwdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9mbG93LXN0YXRlLnR5cGVzJztcbmltcG9ydCB7IGdlbmVyYXRlVHJhbnNhY3Rpb25JdGVtIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZmxvdy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi1ydW50aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5cbnR5cGUgU3RhdGVTdWJzY3JpcHRpb24gPSB7XG4gIHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE87XG4gIGRhdGEkOiBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj47XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblN0YXRlU2VydmljZSB7XG4gIHB1YmxpYyBpc0luaXRpYWxpemVkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBjYW5jZWxlZENvbmZpZ3VyYXRpb24kOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IE5PVF9JTklUSUFMSVpFRCA9IFN5bWJvbCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IEVYRUNVVElPTl9CVUZGRVJfVElNRSA9IDEwMDtcblxuICBwcml2YXRlIGV4ZWN1dGVkRnVuY3Rpb25zOiBEaWN0aW9uYXJ5PENvbmZpZ3VyYXRpb25Qcm9jZXNzb3JTY3JpcHRGbj4gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0ZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBvd25lcklkID0gJyc7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogUmVjb3JkPHN0cmluZywgU3RhdGVTdWJzY3JpcHRpb24+ID0ge307XG4gIHByaXZhdGUgY29uZmlndXJhdGlvblN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIHByaXZhdGUgZXhlY3V0aW9uSW5Qcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0ZWZ1bFJlcXVlc3RTdHJlYW0kID0gbmV3IFN1YmplY3Q8Rmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTz4oKTtcbiAgcHJpdmF0ZSBzdGF0ZWZ1bEV4ZWN1dGlvblJlcXVlc3QkOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD47XG4gIHByaXZhdGUgc3RhdGVsZXNzRXhlY3V0aW9uUmVxdWVzdCQ6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlOiBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93U3RhdGVTZXJ2aWNlOiBGbG93U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0luZm9TZXJ2aWNlOiBGbG93SW5mb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvblNlcnZpY2U6IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZUFwaVNlcnZpY2U6IEZsb3dTdGF0ZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYWxlc1RyYW5zYWN0aW9uU2VydmljZTogU2FsZXNUcmFuc2FjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYWxlc1RyYW5zYWN0aW9uQXBpU2VydmljZTogU2FsZXNUcmFuc2FjdGlvbkFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5zdGF0ZWZ1bEV4ZWN1dGlvblJlcXVlc3QkID0gdGhpcy5pbml0QnVmZmVyZWRSZXF1ZXN0JCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0V4ZWN1dGlvbkluUHJvZ3Jlc3MkKCkge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGluaXQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGxldCByZXF1ZXN0JDtcbiAgICBpZiAodGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgJiYgdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmluaXRTdGF0ZWZ1bCQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmluaXQkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbnVwKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5zdWJzY3JpcHRpb25zKS5mb3JFYWNoKCh7IGRhdGEkIH0pID0+IGRhdGEkLmNvbXBsZXRlKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHt9O1xuXG4gICAgaWYgKHRoaXMuc3RhdGVJZCkge1xuICAgICAgdGhpcy5jYW5jZWxDb25maWd1cmF0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU3RvcmUgPSB7fTtcbiAgICB0aGlzLmV4ZWN1dGVkRnVuY3Rpb25zID0ge307XG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZSQoZXhlYzogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0WydzZWxlY3RvcnMnXT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmV4ZWNUb1JlcXVlc3QoZXhlYyk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAvLyBLZWVwIG9ubHkgcmVxdWVzdGVkIHJlc3VsdHNcbiAgICAgICAgY29uc3QgYWN0dWFsU2VsZWN0b3JzID0gT2JqZWN0LmVudHJpZXMocmVzdWx0LnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZT4sIFtyZXF1ZXN0SWQsIHJlc3VsdF0pID0+IHtcbiAgICAgICAgICAgIGlmIChleGVjLnNlbGVjdG9ycz8uW3JlcXVlc3RJZF0pIHtcbiAgICAgICAgICAgICAgdHJ1bmtbcmVxdWVzdElkXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVuaztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBhY3R1YWxTZWxlY3RvcnM7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoJChhY3Rpb25OYW1lOiBzdHJpbmcsIGlucHV0RGF0YTogdW5rbm93biA9IHt9KTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYWN0aW9uczogW3sgbmFtZTogYWN0aW9uTmFtZSwgaW5wdXREYXRhIH1dLFxuICAgIH07XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdChleGVjKTtcblxuICAgIGNvbnN0IGV4ZWN1dGlvblJlcXVlc3QkID0gdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCk7XG5cbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4ZWN1dGlvblJlcXVlc3QkO1xuICAgIH1cblxuICAgIC8vIHByZXZlbnQgcGFyYWxsZWwgY29uZmlndXJhdGlvbiByZXF1ZXN0cyBpbiBzdGF0ZWxlc3MgbW9kZVxuICAgIGlmICghdGhpcy5zdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JCkge1xuICAgICAgdGhpcy5zdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JCA9IGV4ZWN1dGlvblJlcXVlc3QkLnBpcGUoXG4gICAgICAgIHNoYXJlUmVwbGF5KCksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLnN0YXRlbGVzc0V4ZWN1dGlvblJlcXVlc3QkID0gbnVsbCkpLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVsZXNzRXhlY3V0aW9uUmVxdWVzdCQ7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0JDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNlbGVjdG9yTmFtZTogc3RyaW5nLFxuICAgIGlucHV0RGF0YTogdW5rbm93biA9IHt9LFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gVVVJRC5VVUlEKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdCh7XG4gICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICBuYW1lOiBzZWxlY3Rvck5hbWUsXG4gICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLnNlbGVjdG9yc1tyZXF1ZXN0SWRdIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZSQ8UmVzcG9uc2UgPSB1bmtub3duPihcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE6IHVua25vd24gPSB7fSxcbiAgICBvcHRpb25zPzogRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IFVVSUQuVVVJRCgpO1xuXG4gICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHtcbiAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICAgIGlucHV0RGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHN1YnNjcmlwdGlvbiA9IHtcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgZGF0YSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4odGhpcy5OT1RfSU5JVElBTElaRUQpLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdID0gc3Vic2NyaXB0aW9uO1xuXG4gICAgICBpZiAoIW9wdGlvbnM/LmNvbGQpIHtcbiAgICAgICAgdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCkuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5kYXRhJC5waXBlKFxuICAgICAgZmlsdGVyKGRhdGEgPT4gZGF0YSAhPSB0aGlzLk5PVF9JTklUSUFMSVpFRCksXG4gICAgICBtYXAoZGF0YSA9PiBkYXRhIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0/LmRhdGEkLm9ic2VydmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUNvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTxTYWxlc1RyYW5zYWN0aW9uVXBzZXJ0UmVzcG9uc2U+IHtcbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCA/PyAnJywgdGhpcy5zdGF0ZUlkID8/ICcnKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAociA9PiB0aGlzLmZsb3dTdGF0ZVNlcnZpY2UuZXhlY3V0ZVJlcXVlc3QkKHt9LCB0cnVlKS5waXBlKG1hcCgoKSA9PiByKSkpLFxuICAgICAgICBtYXAociA9PiAoeyBpZDogci5xdW90ZUlkIH0pKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNhbGVzVHJhbnNhY3Rpb25TZXJ2aWNlLnN0YXRlO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybiBvZih7IGlkOiAnJyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHN0YW5kYWxvbmUgfSA9IHRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3cucHJvcGVydGllcztcbiAgICBpZiAoc3RhbmRhbG9uZSkge1xuICAgICAgY29uc3QgcmVxdWVzdDogU2FsZXNUcmFuc2FjdGlvblVwc2VydFJlcXVlc3QgPSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQ29udGV4dDogc3RhdGUsXG4gICAgICAgIGZsb3dJZDogdGhpcy5mbG93SW5mb1NlcnZpY2UuZmxvdy5pZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLnNhbGVzVHJhbnNhY3Rpb25BcGlTZXJ2aWNlLnNhdmUocmVxdWVzdCkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHIgPT4gdGhpcy5mbG93U3RhdGVTZXJ2aWNlLmV4ZWN1dGVSZXF1ZXN0JCh7fSwgdHJ1ZSkucGlwZShtYXAoKCkgPT4gcikpKSxcbiAgICAgICAgbWFwKGlkID0+ICh7IGlkIH0pKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25Db250ZXh0ID0gdGhpcy5zYWxlc1RyYW5zYWN0aW9uU2VydmljZS5zdGF0ZTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uUm9vdCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2Uucm9vdDtcbiAgICBpZiAoIXRyYW5zYWN0aW9uQ29udGV4dCB8fCAhY29uZmlndXJhdGlvblJvb3QpIHtcbiAgICAgIHJldHVybiBvZih7IGlkOiAnJyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZUl0ZW1zID0gdHJhbnNhY3Rpb25Db250ZXh0LnNhbGVzVHJhbnNhY3Rpb24uc2FsZXNUcmFuc2FjdGlvbkl0ZW1zO1xuICAgIGNvbnN0IGlzTmV3VHJhbnNhY3Rpb25JdGVtID0gc3RhdGVJdGVtcy5ldmVyeSh0aSA9PiB0aS5pZCAhPT0gY29uZmlndXJhdGlvblJvb3QuaWQpO1xuXG4gICAgbGV0IHNhbGVzVHJhbnNhY3Rpb25JdGVtczogU2FsZXNUcmFuc2FjdGlvbkl0ZW1bXTtcbiAgICBpZiAoaXNOZXdUcmFuc2FjdGlvbkl0ZW0pIHtcbiAgICAgIHNhbGVzVHJhbnNhY3Rpb25JdGVtcyA9IFsuLi5zdGF0ZUl0ZW1zLCBjb25maWd1cmF0aW9uUm9vdF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNhbGVzVHJhbnNhY3Rpb25JdGVtcyA9IHN0YXRlSXRlbXMubWFwKHRpID0+ICh0aS5pZCA9PT0gY29uZmlndXJhdGlvblJvb3QuaWQgPyBjb25maWd1cmF0aW9uUm9vdCA6IHRpKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U3RhdGU6IFRyYW5zYWN0aW9uQ29udGV4dCA9IHtcbiAgICAgIC4uLnRyYW5zYWN0aW9uQ29udGV4dCxcbiAgICAgIHNhbGVzVHJhbnNhY3Rpb246IHtcbiAgICAgICAgLi4udHJhbnNhY3Rpb25Db250ZXh0LnNhbGVzVHJhbnNhY3Rpb24sXG4gICAgICAgIHNhbGVzVHJhbnNhY3Rpb25JdGVtcyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmZsb3dDb25maWd1cmF0aW9uU2VydmljZS5jYWxjdWxhdGUkKG5ld1N0YXRlKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZmxvd1N0YXRlU2VydmljZS5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpKSxcbiAgICAgIG1hcCgoKSA9PiAoeyBpZDogJycgfSkpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsQ29uZmlndXJhdGlvbigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCQudmFsdWUpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHRoaXMuY2FuY2VsZWRDb25maWd1cmF0aW9uJC5uZXh0KCk7XG4gICAgdGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0ge307XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQkLm5leHQoZmFsc2UpO1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkJC52YWx1ZSB8fCAhdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UuY2FuY2VsQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCA/PyAnJywgdGhpcy5zdGF0ZUlkID8/ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzU3RhdGVmdWxDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZsb3dJbmZvU2VydmljZS5mbG93Py5wcm9wZXJ0aWVzLnN0YXRlZnVsID8/IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3RhdGVmdWwkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHRoaXMub3duZXJJZCA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uaWQgPz8gJyc7XG4gICAgY29uc3QgeyBwcm9kdWN0SWQsIHRyYW5zYWN0aW9uSXRlbUlkIH0gPSB0aGlzLmZsb3dJbmZvU2VydmljZS5jb250ZXh0O1xuICAgIGlmICghcHJvZHVjdElkIHx8ICF0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UudWlEZWZpbml0aW9uQ29udGFpbmVyO1xuXG4gICAgbGV0IHJlcXVlc3QkOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD47XG5cbiAgICBpZiAoIXRyYW5zYWN0aW9uSXRlbUlkKSB7XG4gICAgICByZXF1ZXN0JCA9IHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5uZXdDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkLCB7XG4gICAgICAgIHRyYW5zYWN0aW9uSXRlbTogZ2VuZXJhdGVUcmFuc2FjdGlvbkl0ZW0ocHJvZHVjdElkKSxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBjb250YWluZXI/LmFjdGlvbnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgICBzZWxlY3RvcnNPdmVycmlkZTogY29udGFpbmVyPy5zZWxlY3RvcnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnN0YXJ0Q29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwge1xuICAgICAgICB0cmFuc2FjdGlvbkl0ZW1JZCxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBjb250YWluZXI/LmFjdGlvbnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgICBzZWxlY3RvcnNPdmVycmlkZTogY29udGFpbmVyPy5zZWxlY3RvcnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXG4gICAgICBtYXAociA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVJZCA9IHIuc3RhdGVJZDtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUb1JlcXVlc3QoZXhlYzogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCk6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8ge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25zOiBleGVjLmFjdGlvbnM/Lm1hcChhY3Rpb24gPT4gKHtcbiAgICAgICAgYXBpTmFtZTogYWN0aW9uLm5hbWUsXG4gICAgICAgIG93bmVySWQ6IHRoaXMub3duZXJJZCxcbiAgICAgICAgaW5wdXREYXRhOiBhY3Rpb24uaW5wdXREYXRhID8/IHt9LFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0b3JzOlxuICAgICAgICBleGVjLnNlbGVjdG9ycyAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhleGVjLnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlRXhlY3V0YWJsZURUTz4sIFtrZXksIHNlbGVjdG9yXSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRydW5rLFxuICAgICAgICAgICAgW2tleV06IHsgYXBpTmFtZTogc2VsZWN0b3IubmFtZSwgb3duZXJJZDogdGhpcy5vd25lcklkLCBpbnB1dERhdGE6IHNlbGVjdG9yLmlucHV0RGF0YSA/PyB7fSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTx1bmtub3duPj4pOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RvcnMpLmZvckVhY2goKFtyZXF1ZXN0SWQsIHNlbGVjdG9yUmVzdWx0XSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IHNlbGVjdG9yUmVzdWx0LmVycm9yTWVzc2FnZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uJCA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdPy5kYXRhJDtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24kKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiQubmV4dChzZWxlY3RvclJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVSZXF1ZXN0JChcbiAgICByZXE6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gICAgZm9yY2VTdWJzY3JpcHRpb25zPzogYm9vbGVhbixcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBmdWxsUmVxdWVzdCA9IGNsb25lRGVlcChyZXEpO1xuICAgIGlmIChmdWxsUmVxdWVzdC5hY3Rpb25zPy5sZW5ndGggfHwgZm9yY2VTdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgZnVsbFJlcXVlc3Quc2VsZWN0b3JzID0gYXNzaWduKGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycywgc3Vic2NyaXB0aW9uLnJlcXVlc3Quc2VsZWN0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXhlY3V0aW9uJDtcblxuICAgIGlmICh0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICBleGVjdXRpb24kID0gdGhpcy5leGVjdXRlU3RhdGVmdWwkKGZ1bGxSZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhlY3V0aW9uJCA9IHRoaXMuZXhlY3V0ZVN0YXRlbGVzcyQoZnVsbFJlcXVlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiBleGVjdXRpb24kLnBpcGUodGFwKHJlc3VsdCA9PiB0aGlzLmhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHJlc3VsdC5zZWxlY3RvcnMpKSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnN0YXRlJC5waXBlKFxuICAgICAgZmlyc3QoKSxcbiAgICAgIHN3aXRjaE1hcChzdGF0ZSA9PiB7XG4gICAgICAgIC8vIEFwcGx5IGFjdGlvbnMgYW5kIGV4ZWN1dGUgY29uZmlndXJhdGlvbi9wcmljZSBjYWxsXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcnVuIGNvbmZpZ3VyYXRpb24gaWYgbm8gYWN0aW9ucyBpbiB0aGUgcmVxdWVzdFxuICAgICAgICBpZiAoIXJlcXVlc3QuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgIHN0YXRlID0gdGhpcy5leGVjdXRlQWN0aW9uU2NyaXB0KHN0YXRlLCBhY3Rpb24pID8/IHN0YXRlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmUkKHN0YXRlKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgLy8gUnVuIHNlbGVjdG9ycyBhbmQgYXBwbHkgdGhlbSB0byB0aGUgc3RhdGVcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvblN0YXRlID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5zdGF0ZTtcbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uU3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4geyBzdGF0ZUlkOiAnJywgc2VsZWN0b3JzOiB7fSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuU3RhdGVsZXNzU2VsZWN0b3JzKHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25TdGF0ZSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uU3RhdGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnByZXZpb3VzU3RhdGU7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uU3RhdGUpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RvcnNSZXN1bHQgPSB0aGlzLnJ1blN0YXRlbGVzc1NlbGVjdG9ycyhyZXF1ZXN0LCBjb25maWd1cmF0aW9uU3RhdGUpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0b3JzUmVzcG9uc2Uoc2VsZWN0b3JzUmVzdWx0LnNlbGVjdG9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5uZXh0KGZhbHNlKTtcblxuICAgICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvblByb3BzLnN1cHByZXNzVG9hc3RNZXNzYWdlcykge1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IFN0cmluZyhlcnJvcikgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QnVmZmVyZWRSZXF1ZXN0JCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZWZ1bFJlcXVlc3RTdHJlYW0kLnBpcGUoXG4gICAgICBidWZmZXIodGhpcy5zdGF0ZWZ1bFJlcXVlc3RTdHJlYW0kLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuRVhFQ1VUSU9OX0JVRkZFUl9USU1FKSkpLFxuICAgICAgc3dpdGNoTWFwKHJlcXVlc3RzID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCB8fCAhdGhpcy5zdGF0ZUlkKSB7XG4gICAgICAgICAgdGhyb3cgJ1N0YXRlZnVsIHNlc3Npb24gaXMgbm90IGluaXRpYWxpemVkJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1lcmdlIGJ1ZmZlcmVkIHJlcXVlc3RzXG4gICAgICAgIGNvbnN0IHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8gPSB7XG4gICAgICAgICAgYWN0aW9uczogcmVxdWVzdHMuZmxhdE1hcCgoeyBhY3Rpb25zIH0pID0+IGFjdGlvbnMpLmZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgICAgIHNlbGVjdG9yczogcmVxdWVzdHNcbiAgICAgICAgICAgIC5tYXAoKHsgc2VsZWN0b3JzIH0pID0+IHNlbGVjdG9ycylcbiAgICAgICAgICAgIC5maWx0ZXIoaXNEZWZpbmVkKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBzZWxlY3RvcnNNYXApID0+IE9iamVjdC5hc3NpZ24oYWNjLCBzZWxlY3RvcnNNYXApLCB7fSksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmV4ZWN1dGVDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkLCB0aGlzLnN0YXRlSWQsIHJlcXVlc3QpO1xuICAgICAgfSksXG4gICAgICB0YXAoKHsgc3RhdGVJZCB9KSA9PiAodGhpcy5zdGF0ZUlkID0gc3RhdGVJZCkpLFxuICAgICAgc2hhcmUoKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlZnVsJChyZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5waXBlKFxuICAgICAgZmlsdGVyKGluUHJvZ3Jlc3MgPT4gIWluUHJvZ3Jlc3MpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAvLyBtYWtlIHN1cmUgc3RyZWFtIHN3aXRjaGVzIHRvIHN0YXRlZnVsRXhlY3V0aW9uUmVxdWVzdCQgYmVmb3JlIHB1c2hpbmcgYW4gZXhlY3V0aW9uIHJlcXVlc3RcbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgdGhpcy5zdGF0ZWZ1bEV4ZWN1dGlvblJlcXVlc3QkLFxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZSh0YXAoKCkgPT4gdGhpcy5zdGF0ZWZ1bFJlcXVlc3RTdHJlYW0kLm5leHQocmVxdWVzdCkpKSxcbiAgICAgICAgXSksXG4gICAgICApLFxuICAgICAgbWFwKChbcmVzcG9uc2VdKSA9PiByZXNwb25zZSksXG4gICAgICB0YWtlKDEpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVBY3Rpb25TY3JpcHQocmVxdWVzdDogVHJhbnNhY3Rpb25Db250ZXh0LCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiBUcmFuc2FjdGlvbkNvbnRleHQge1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UudWlEZWZpbml0aW9uQ29udGFpbmVyID8/IHt9O1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgPSBhY3Rpb25zPy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uYXBpTmFtZSA9PT0gcHJvY2Vzc29yLmFwaU5hbWUpO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uUHJvY2Vzc29yPy5zY3JpcHQpIHtcbiAgICAgIHRocm93IGBDb25maWd1cmF0aW9uUHJvY2Vzc29yICR7cHJvY2Vzc29yLmFwaU5hbWV9IG5vdCBmb3VuZGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBwcm9jZXNzb3IuaW5wdXREYXRhKSBhcyBUcmFuc2FjdGlvbkNvbnRleHQ7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTZWxlY3RvclNjcmlwdChyZXF1ZXN0OiBUcmFuc2FjdGlvbkNvbnRleHQsIHByb2Nlc3NvcjogRmxvd1N0YXRlRXhlY3V0YWJsZURUTyk6IHVua25vd24ge1xuICAgIGNvbnN0IHsgc2VsZWN0b3JzIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS51aURlZmluaXRpb25Db250YWluZXIgPz8ge307XG4gICAgY29uc3QgY29uZmlndXJhdGlvblByb2Nlc3NvciA9IHNlbGVjdG9ycz8uZmluZChzZWxlY3RvciA9PiBzZWxlY3Rvci5hcGlOYW1lID09PSBwcm9jZXNzb3IuYXBpTmFtZSk7XG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb25Qcm9jZXNzb3I/LnNjcmlwdCkge1xuICAgICAgdGhyb3cgYENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgJHtwcm9jZXNzb3IuYXBpTmFtZX0gbm90IGZvdW5kYDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUHJvY2Vzc29yU2NyaXB0KHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IsIHByb2Nlc3Nvci5pbnB1dERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUHJvY2Vzc29yU2NyaXB0KFxuICAgIHJlcXVlc3Q6IFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgICBjb25maWd1cmF0aW9uUHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICAgIGlucHV0RGF0YTogdW5rbm93bixcbiAgKTogdW5rbm93biB7XG4gICAgbGV0IGZ1bmN0aW9uVG9FeGVjdXRlID0gdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdO1xuICAgIGlmICghZnVuY3Rpb25Ub0V4ZWN1dGUpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGAke2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3Iuc2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YDtcbiAgICAgIGNvbnN0IHNvdXJjZU1hcCA9IGBcXG4vLyMgc291cmNlVVJMPSR7Y29uZmlndXJhdGlvblByb2Nlc3Nvci5hcGlOYW1lfS5qc2A7XG4gICAgICBmdW5jdGlvblRvRXhlY3V0ZSA9IG5ldyBGdW5jdGlvbihzY3JpcHQgKyBzb3VyY2VNYXApKCkgYXMgQ29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuO1xuICAgICAgdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdID0gZnVuY3Rpb25Ub0V4ZWN1dGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9FeGVjdXRlKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICBpbnB1dERhdGEsXG4gICAgICBmbG93U3RvcmU6IHRoaXMuZmxvd1N0YXRlU2VydmljZS5nZXRGbG93U3RvcmUoKSxcbiAgICAgIGNvbmZpZ3VyYXRpb25TdG9yZTogdGhpcy5jb25maWd1cmF0aW9uU3RvcmUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJ1blN0YXRlbGVzc1NlbGVjdG9ycyhcbiAgICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICAgIGNvbmZpZ3VyYXRpb25TdGF0ZTogVHJhbnNhY3Rpb25Db250ZXh0LFxuICApOiBGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQge1xuICAgIHJldHVybiBFbnRpdHlVdGlsLmVudHJpZXMocmVxdWVzdC5zZWxlY3RvcnMgPz8ge30pLnJlZHVjZShcbiAgICAgIChyZXN1bHQ6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCwgW2tleSwgc2VsZWN0b3JdKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIHJlc3VsdDogdGhpcy5leGVjdXRlU2VsZWN0b3JTY3JpcHQoY29uZmlndXJhdGlvblN0YXRlLCBzZWxlY3RvciksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IFN0cmluZyhlKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7IHN0YXRlSWQ6ICcnLCBzZWxlY3RvcnM6IHt9IH0sXG4gICAgKTtcbiAgfVxufVxuIl19
|
380
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigurationRuntimeService }, { type: i2.ConfigurationService }, { type: i3.FlowStateService }, { type: i3.FlowInfoService }, { type: i4.FlowConfigurationService }, { type: i5.FlowStateApiService }, { type: i3.SalesTransactionService }, { type: i6.SalesTransactionApiService }, { type: i7.ToastService }, { type: i6.PCMApiService }]; } });
|
381
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS9tb2R1bGVzL2NvbmZpZ3VyYXRpb24vc2VydmljZXMvY29uZmlndXJhdGlvbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYiwwQkFBMEIsR0FHM0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFHTCxVQUFVLEVBTVYsU0FBUyxFQUdULElBQUksR0FDTCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFjLE1BQU0sUUFBUSxDQUFDO0FBQ3ZELE9BQU8sRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxHQUFHLEVBRUgsRUFBRSxFQUNGLEtBQUssRUFDTCxXQUFXLEVBQ1gsT0FBTyxFQUNQLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFL0YsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUs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QUNULFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFO1lBQy9DLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7U0FDNUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHFCQUFxQixDQUMzQixPQUFxQyxFQUNyQyxrQkFBc0M7UUFFdEMsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLE1BQWdDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxJQUFJO2dCQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUc7b0JBQ3RCLE9BQU8sRUFBRSxJQUFJO29CQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO2lCQUNqRSxDQUFDO2FBQ0g7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHO29CQUN0QixPQUFPLEVBQUUsS0FBSztvQkFDZCxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDeEIsQ0FBQzthQUNIO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxFQUNELEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQy9CLENBQUM7SUFDSixDQUFDOztzSEFqZlUseUJBQXlCOzBIQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dTdGF0ZUFwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHtcbiAgUENNQXBpU2VydmljZSxcbiAgU2FsZXNUcmFuc2FjdGlvbkFwaVNlcnZpY2UsXG4gIFNhbGVzVHJhbnNhY3Rpb25VcHNlcnRSZXF1ZXN0LFxuICBTYWxlc1RyYW5zYWN0aW9uVXBzZXJ0UmVzcG9uc2UsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaS92Mic7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvcixcbiAgQ29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuLFxuICBFbnRpdHlVdGlsLFxuICBGbG93U3RhdGVFeGVjdXRhYmxlRFRPLFxuICBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0LFxuICBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICBGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQsXG4gIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2UsXG4gIGlzRGVmaW5lZCxcbiAgU2FsZXNUcmFuc2FjdGlvbkl0ZW0sXG4gIFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgVVVJRCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBhc3NpZ24sIGNsb25lRGVlcCwgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGJ1ZmZlcixcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmaW5hbGl6ZSxcbiAgZmlyc3QsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHNoYXJlLFxuICBzaGFyZVJlcGxheSxcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93SW5mb1NlcnZpY2UsIEZsb3dTdGF0ZVNlcnZpY2UsIFNhbGVzVHJhbnNhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2Zsb3ctc3RhdGUudHlwZXMnO1xuaW1wb3J0IHsgRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZmxvdy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi1ydW50aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBnZW5lcmF0ZVRyYW5zYWN0aW9uSXRlbSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxudHlwZSBTdGF0ZVN1YnNjcmlwdGlvbiA9IHtcbiAgcmVxdWVzdDogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdERUTztcbiAgZGF0YSQ6IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPjtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uU3RhdGVTZXJ2aWNlIHtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGNhbmNlbGVkQ29uZmlndXJhdGlvbiQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTk9UX0lOSVRJQUxJWkVEID0gU3ltYm9sKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgRVhFQ1VUSU9OX0JVRkZFUl9USU1FID0gMTAwO1xuXG4gIHByaXZhdGUgZXhlY3V0ZWRGdW5jdGlvbnM6IERpY3Rpb25hcnk8Q29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuPiA9IHt9O1xuICBwcml2YXRlIHN0YXRlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG93bmVySWQgPSAnJztcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBTdGF0ZVN1YnNjcmlwdGlvbj4gPSB7fTtcbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBleGVjdXRpb25JblByb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIHN0YXRlZnVsUmVxdWVzdFN0cmVhbSQgPSBuZXcgU3ViamVjdDxGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPPigpO1xuICBwcml2YXRlIHN0YXRlZnVsRXhlY3V0aW9uUmVxdWVzdCQ6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0PjtcbiAgcHJpdmF0ZSBzdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JDogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2U6IENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dTdGF0ZVNlcnZpY2U6IEZsb3dTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93SW5mb1NlcnZpY2U6IEZsb3dJbmZvU2VydmljZSxcbiAgICBwcml2YXRlIGZsb3dDb25maWd1cmF0aW9uU2VydmljZTogRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd1N0YXRlQXBpU2VydmljZTogRmxvd1N0YXRlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHNhbGVzVHJhbnNhY3Rpb25TZXJ2aWNlOiBTYWxlc1RyYW5zYWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNhbGVzVHJhbnNhY3Rpb25BcGlTZXJ2aWNlOiBTYWxlc1RyYW5zYWN0aW9uQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGNtQXBpU2VydmljZTogUENNQXBpU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5zdGF0ZWZ1bEV4ZWN1dGlvblJlcXVlc3QkID0gdGhpcy5pbml0QnVmZmVyZWRSZXF1ZXN0JCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0V4ZWN1dGlvbkluUHJvZ3Jlc3MkKCkge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGluaXQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGxldCByZXF1ZXN0JDtcbiAgICBpZiAodGhpcy5mbG93U3RhdGVTZXJ2aWNlLnN0YXRlSWQgJiYgdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmluaXRTdGF0ZWZ1bCQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmluaXQkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbnVwKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5zdWJzY3JpcHRpb25zKS5mb3JFYWNoKCh7IGRhdGEkIH0pID0+IGRhdGEkLmNvbXBsZXRlKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHt9O1xuXG4gICAgaWYgKHRoaXMuc3RhdGVJZCkge1xuICAgICAgdGhpcy5jYW5jZWxDb25maWd1cmF0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU3RvcmUgPSB7fTtcbiAgICB0aGlzLmV4ZWN1dGVkRnVuY3Rpb25zID0ge307XG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZSQoZXhlYzogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8Rmxvd1N0YXRlRXhlY3V0aW9uUmVzdWx0WydzZWxlY3RvcnMnXT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmV4ZWNUb1JlcXVlc3QoZXhlYyk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAvLyBLZWVwIG9ubHkgcmVxdWVzdGVkIHJlc3VsdHNcbiAgICAgICAgY29uc3QgYWN0dWFsU2VsZWN0b3JzID0gT2JqZWN0LmVudHJpZXMocmVzdWx0LnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZT4sIFtyZXF1ZXN0SWQsIHJlc3VsdF0pID0+IHtcbiAgICAgICAgICAgIGlmIChleGVjLnNlbGVjdG9ycz8uW3JlcXVlc3RJZF0pIHtcbiAgICAgICAgICAgICAgdHJ1bmtbcmVxdWVzdElkXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVuaztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBhY3R1YWxTZWxlY3RvcnM7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoJChhY3Rpb25OYW1lOiBzdHJpbmcsIGlucHV0RGF0YTogdW5rbm93biA9IHt9KTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBleGVjOiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYWN0aW9uczogW3sgbmFtZTogYWN0aW9uTmFtZSwgaW5wdXREYXRhIH1dLFxuICAgIH07XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdChleGVjKTtcblxuICAgIGNvbnN0IGV4ZWN1dGlvblJlcXVlc3QkID0gdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCk7XG5cbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4ZWN1dGlvblJlcXVlc3QkO1xuICAgIH1cblxuICAgIC8vIHByZXZlbnQgcGFyYWxsZWwgY29uZmlndXJhdGlvbiByZXF1ZXN0cyBpbiBzdGF0ZWxlc3MgbW9kZVxuICAgIGlmICghdGhpcy5zdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JCkge1xuICAgICAgdGhpcy5zdGF0ZWxlc3NFeGVjdXRpb25SZXF1ZXN0JCA9IGV4ZWN1dGlvblJlcXVlc3QkLnBpcGUoXG4gICAgICAgIHNoYXJlUmVwbGF5KCksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLnN0YXRlbGVzc0V4ZWN1dGlvblJlcXVlc3QkID0gbnVsbCkpLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVsZXNzRXhlY3V0aW9uUmVxdWVzdCQ7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0JDxSZXNwb25zZSA9IHVua25vd24+KFxuICAgIHNlbGVjdG9yTmFtZTogc3RyaW5nLFxuICAgIGlucHV0RGF0YTogdW5rbm93biA9IHt9LFxuICApOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gVVVJRC5VVUlEKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZXhlY1RvUmVxdWVzdCh7XG4gICAgICBzZWxlY3RvcnM6IHtcbiAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICBuYW1lOiBzZWxlY3Rvck5hbWUsXG4gICAgICAgICAgaW5wdXREYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0JChyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLnNlbGVjdG9yc1tyZXF1ZXN0SWRdIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZSQ8UmVzcG9uc2UgPSB1bmtub3duPihcbiAgICBzZWxlY3Rvck5hbWU6IHN0cmluZyxcbiAgICBpbnB1dERhdGE6IHVua25vd24gPSB7fSxcbiAgICBvcHRpb25zPzogRmxvd1N0YXRlU3Vic2NyaXB0aW9uT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVTZWxlY3RvclJlc3BvbnNlPFJlc3BvbnNlPj4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IFVVSUQuVVVJRCgpO1xuXG4gICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5leGVjVG9SZXF1ZXN0KHtcbiAgICAgICAgc2VsZWN0b3JzOiB7XG4gICAgICAgICAgW3JlcXVlc3RJZF06IHtcbiAgICAgICAgICAgIG5hbWU6IHNlbGVjdG9yTmFtZSxcbiAgICAgICAgICAgIGlucHV0RGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHN1YnNjcmlwdGlvbiA9IHtcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgZGF0YSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4odGhpcy5OT1RfSU5JVElBTElaRUQpLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdID0gc3Vic2NyaXB0aW9uO1xuXG4gICAgICBpZiAoIW9wdGlvbnM/LmNvbGQpIHtcbiAgICAgICAgdGhpcy5leGVjdXRlUmVxdWVzdCQocmVxdWVzdCkuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5kYXRhJC5waXBlKFxuICAgICAgZmlsdGVyKGRhdGEgPT4gZGF0YSAhPSB0aGlzLk5PVF9JTklUSUFMSVpFRCksXG4gICAgICBtYXAoZGF0YSA9PiBkYXRhIGFzIEZsb3dTdGF0ZVNlbGVjdG9yUmVzcG9uc2U8UmVzcG9uc2U+KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zW3JlcXVlc3RJZF0/LmRhdGEkLm9ic2VydmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNhbmNlbGVkQ29uZmlndXJhdGlvbiQpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUNvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTxTYWxlc1RyYW5zYWN0aW9uVXBzZXJ0UmVzcG9uc2U+IHtcbiAgICBpZiAodGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCA/PyAnJywgdGhpcy5zdGF0ZUlkID8/ICcnKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAociA9PiB0aGlzLmZsb3dTdGF0ZVNlcnZpY2UuZXhlY3V0ZVJlcXVlc3QkKHt9LCB0cnVlKS5waXBlKG1hcCgoKSA9PiByKSkpLFxuICAgICAgICBtYXAociA9PiAoeyBpZDogci5xdW90ZUlkIH0pKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNhbGVzVHJhbnNhY3Rpb25TZXJ2aWNlLnN0YXRlO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybiBvZih7IGlkOiAnJyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHN0YW5kYWxvbmUgfSA9IHRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3cucHJvcGVydGllcztcbiAgICBjb25zdCB0cmFuc2FjdGlvbkNvbnRleHQgPSB0aGlzLnNhbGVzVHJhbnNhY3Rpb25TZXJ2aWNlLnN0YXRlO1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Sb290ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5yb290O1xuICAgIGlmICghdHJhbnNhY3Rpb25Db250ZXh0IHx8ICFjb25maWd1cmF0aW9uUm9vdCkge1xuICAgICAgcmV0dXJuIG9mKHsgaWQ6ICcnIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlSXRlbXMgPSB0cmFuc2FjdGlvbkNvbnRleHQuc2FsZXNUcmFuc2FjdGlvbi5zYWxlc1RyYW5zYWN0aW9uSXRlbXM7XG4gICAgY29uc3QgaXNOZXdUcmFuc2FjdGlvbkl0ZW0gPSBzdGF0ZUl0ZW1zLmV2ZXJ5KHRpID0+IHRpLmlkICE9PSBjb25maWd1cmF0aW9uUm9vdC5pZCk7XG5cbiAgICBsZXQgc2FsZXNUcmFuc2FjdGlvbkl0ZW1zOiBTYWxlc1RyYW5zYWN0aW9uSXRlbVtdO1xuICAgIGlmIChpc05ld1RyYW5zYWN0aW9uSXRlbSkge1xuICAgICAgc2FsZXNUcmFuc2FjdGlvbkl0ZW1zID0gWy4uLnN0YXRlSXRlbXMsIGNvbmZpZ3VyYXRpb25Sb290XTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2FsZXNUcmFuc2FjdGlvbkl0ZW1zID0gc3RhdGVJdGVtcy5tYXAodGkgPT4gKHRpLmlkID09PSBjb25maWd1cmF0aW9uUm9vdC5pZCA/IGNvbmZpZ3VyYXRpb25Sb290IDogdGkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogVHJhbnNhY3Rpb25Db250ZXh0ID0ge1xuICAgICAgLi4udHJhbnNhY3Rpb25Db250ZXh0LFxuICAgICAgc2FsZXNUcmFuc2FjdGlvbjoge1xuICAgICAgICAuLi50cmFuc2FjdGlvbkNvbnRleHQuc2FsZXNUcmFuc2FjdGlvbixcbiAgICAgICAgc2FsZXNUcmFuc2FjdGlvbkl0ZW1zLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKHN0YW5kYWxvbmUpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IFNhbGVzVHJhbnNhY3Rpb25VcHNlcnRSZXF1ZXN0ID0ge1xuICAgICAgICB0cmFuc2FjdGlvbkNvbnRleHQ6IG5ld1N0YXRlLFxuICAgICAgICBmbG93SWQ6IHRoaXMuZmxvd0luZm9TZXJ2aWNlLmZsb3cuaWQsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdGhpcy5zYWxlc1RyYW5zYWN0aW9uQXBpU2VydmljZS5zYXZlKHJlcXVlc3QpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChyID0+IHRoaXMuZmxvd1N0YXRlU2VydmljZS5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpLnBpcGUobWFwKCgpID0+IHIpKSksXG4gICAgICAgIG1hcChpZCA9PiAoeyBpZCB9KSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZsb3dDb25maWd1cmF0aW9uU2VydmljZS5jYWxjdWxhdGUkKG5ld1N0YXRlKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZmxvd1N0YXRlU2VydmljZS5leGVjdXRlUmVxdWVzdCQoe30sIHRydWUpKSxcbiAgICAgIG1hcCgoKSA9PiAoeyBpZDogJycgfSkpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsQ29uZmlndXJhdGlvbigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCQudmFsdWUpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHRoaXMuY2FuY2VsZWRDb25maWd1cmF0aW9uJC5uZXh0KCk7XG4gICAgdGhpcy5jYW5jZWxlZENvbmZpZ3VyYXRpb24kLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0ge307XG5cbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQkLm5leHQoZmFsc2UpO1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkJC52YWx1ZSB8fCAhdGhpcy5pc1N0YXRlZnVsQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZsb3dTdGF0ZUFwaVNlcnZpY2UuY2FuY2VsQ29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCA/PyAnJywgdGhpcy5zdGF0ZUlkID8/ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzU3RhdGVmdWxDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZsb3dJbmZvU2VydmljZS5mbG93Py5wcm9wZXJ0aWVzLnN0YXRlZnVsID8/IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3RhdGVmdWwkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHRoaXMub3duZXJJZCA9IHRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uaWQgPz8gJyc7XG4gICAgY29uc3QgeyBwcm9kdWN0SWQsIHRyYW5zYWN0aW9uSXRlbUlkIH0gPSB0aGlzLmZsb3dJbmZvU2VydmljZS5jb250ZXh0O1xuICAgIGlmICghcHJvZHVjdElkIHx8ICF0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UudWlEZWZpbml0aW9uQ29udGFpbmVyO1xuXG4gICAgbGV0IHJlcXVlc3QkOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD47XG5cbiAgICBpZiAoIXRyYW5zYWN0aW9uSXRlbUlkKSB7XG4gICAgICByZXF1ZXN0JCA9IHRoaXMucGNtQXBpU2VydmljZS5mZXRjaFBDTUJ5UHJvZHVjdElkKHByb2R1Y3RJZCkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHBjbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmxvd1N0YXRlQXBpU2VydmljZS5uZXdDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkIHx8ICcnLCB7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbkl0ZW06IGdlbmVyYXRlVHJhbnNhY3Rpb25JdGVtKHBjbSwgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5zdGF0ZT8uc2FsZXNUcmFuc2FjdGlvbi5pZCksXG4gICAgICAgICAgICBhY3Rpb25zT3ZlcnJpZGU6IGNvbnRhaW5lcj8uYWN0aW9ucz8ubWFwKHByb2Nlc3NvciA9PiAoeyAuLi5wcm9jZXNzb3IsIG93bmVySWQ6IHRoaXMub3duZXJJZCB9KSksXG4gICAgICAgICAgICBzZWxlY3RvcnNPdmVycmlkZTogY29udGFpbmVyPy5zZWxlY3RvcnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLnN0YXJ0Q29uZmlndXJhdGlvbih0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCwge1xuICAgICAgICB0cmFuc2FjdGlvbkl0ZW1JZCxcbiAgICAgICAgYWN0aW9uc092ZXJyaWRlOiBjb250YWluZXI/LmFjdGlvbnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgICBzZWxlY3RvcnNPdmVycmlkZTogY29udGFpbmVyPy5zZWxlY3RvcnM/Lm1hcChwcm9jZXNzb3IgPT4gKHsgLi4ucHJvY2Vzc29yLCBvd25lcklkOiB0aGlzLm93bmVySWQgfSkpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXG4gICAgICBtYXAociA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVJZCA9IHIuc3RhdGVJZDtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUb1JlcXVlc3QoZXhlYzogRmxvd1N0YXRlRXhlY3V0aW9uUmVxdWVzdCk6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8ge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25zOiBleGVjLmFjdGlvbnM/Lm1hcChhY3Rpb24gPT4gKHtcbiAgICAgICAgYXBpTmFtZTogYWN0aW9uLm5hbWUsXG4gICAgICAgIG93bmVySWQ6IHRoaXMub3duZXJJZCxcbiAgICAgICAgaW5wdXREYXRhOiBhY3Rpb24uaW5wdXREYXRhID8/IHt9LFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0b3JzOlxuICAgICAgICBleGVjLnNlbGVjdG9ycyAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhleGVjLnNlbGVjdG9ycykucmVkdWNlKFxuICAgICAgICAgICh0cnVuazogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlRXhlY3V0YWJsZURUTz4sIFtrZXksIHNlbGVjdG9yXSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRydW5rLFxuICAgICAgICAgICAgW2tleV06IHsgYXBpTmFtZTogc2VsZWN0b3IubmFtZSwgb3duZXJJZDogdGhpcy5vd25lcklkLCBpbnB1dERhdGE6IHNlbGVjdG9yLmlucHV0RGF0YSA/PyB7fSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgRmxvd1N0YXRlU2VsZWN0b3JSZXNwb25zZTx1bmtub3duPj4pOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RvcnMpLmZvckVhY2goKFtyZXF1ZXN0SWQsIHNlbGVjdG9yUmVzdWx0XSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RvclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IHNlbGVjdG9yUmVzdWx0LmVycm9yTWVzc2FnZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uJCA9IHRoaXMuc3Vic2NyaXB0aW9uc1tyZXF1ZXN0SWRdPy5kYXRhJDtcbiAgICAgIGlmIChzdWJzY3JpcHRpb24kKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiQubmV4dChzZWxlY3RvclJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVSZXF1ZXN0JChcbiAgICByZXE6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8sXG4gICAgZm9yY2VTdWJzY3JpcHRpb25zPzogYm9vbGVhbixcbiAgKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBmdWxsUmVxdWVzdCA9IGNsb25lRGVlcChyZXEpO1xuICAgIGlmIChmdWxsUmVxdWVzdC5hY3Rpb25zPy5sZW5ndGggfHwgZm9yY2VTdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgZnVsbFJlcXVlc3Quc2VsZWN0b3JzID0gYXNzaWduKGZ1bGxSZXF1ZXN0LnNlbGVjdG9ycywgc3Vic2NyaXB0aW9uLnJlcXVlc3Quc2VsZWN0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXhlY3V0aW9uJDtcblxuICAgIGlmICh0aGlzLmlzU3RhdGVmdWxDb25maWd1cmF0aW9uKSB7XG4gICAgICBleGVjdXRpb24kID0gdGhpcy5leGVjdXRlU3RhdGVmdWwkKGZ1bGxSZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhlY3V0aW9uJCA9IHRoaXMuZXhlY3V0ZVN0YXRlbGVzcyQoZnVsbFJlcXVlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiBleGVjdXRpb24kLnBpcGUodGFwKHJlc3VsdCA9PiB0aGlzLmhhbmRsZVNlbGVjdG9yc1Jlc3BvbnNlKHJlc3VsdC5zZWxlY3RvcnMpKSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTdGF0ZWxlc3MkKHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8pOiBPYnNlcnZhYmxlPEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdD4ge1xuICAgIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnN0YXRlJC5waXBlKFxuICAgICAgZmlyc3QoKSxcbiAgICAgIHN3aXRjaE1hcChzdGF0ZSA9PiB7XG4gICAgICAgIC8vIEFwcGx5IGFjdGlvbnMgYW5kIGV4ZWN1dGUgY29uZmlndXJhdGlvbi9wcmljZSBjYWxsXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcnVuIGNvbmZpZ3VyYXRpb24gaWYgbm8gYWN0aW9ucyBpbiB0aGUgcmVxdWVzdFxuICAgICAgICBpZiAoIXJlcXVlc3QuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgIHN0YXRlID0gdGhpcy5leGVjdXRlQWN0aW9uU2NyaXB0KHN0YXRlLCBhY3Rpb24pID8/IHN0YXRlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmUkKHN0YXRlKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgLy8gUnVuIHNlbGVjdG9ycyBhbmQgYXBwbHkgdGhlbSB0byB0aGUgc3RhdGVcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvblN0YXRlID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5zdGF0ZTtcbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uU3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4geyBzdGF0ZUlkOiAnJywgc2VsZWN0b3JzOiB7fSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuU3RhdGVsZXNzU2VsZWN0b3JzKHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25TdGF0ZSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uU3RhdGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnByZXZpb3VzU3RhdGU7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uU3RhdGUpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RvcnNSZXN1bHQgPSB0aGlzLnJ1blN0YXRlbGVzc1NlbGVjdG9ycyhyZXF1ZXN0LCBjb25maWd1cmF0aW9uU3RhdGUpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0b3JzUmVzcG9uc2Uoc2VsZWN0b3JzUmVzdWx0LnNlbGVjdG9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5uZXh0KGZhbHNlKTtcblxuICAgICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLnVpRGVmaW5pdGlvblByb3BzLnN1cHByZXNzVG9hc3RNZXNzYWdlcykge1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IFN0cmluZyhlcnJvcikgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QnVmZmVyZWRSZXF1ZXN0JCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZWZ1bFJlcXVlc3RTdHJlYW0kLnBpcGUoXG4gICAgICBidWZmZXIodGhpcy5zdGF0ZWZ1bFJlcXVlc3RTdHJlYW0kLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuRVhFQ1VUSU9OX0JVRkZFUl9USU1FKSkpLFxuICAgICAgc3dpdGNoTWFwKHJlcXVlc3RzID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmZsb3dTdGF0ZVNlcnZpY2Uuc3RhdGVJZCB8fCAhdGhpcy5zdGF0ZUlkKSB7XG4gICAgICAgICAgdGhyb3cgJ1N0YXRlZnVsIHNlc3Npb24gaXMgbm90IGluaXRpYWxpemVkJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1lcmdlIGJ1ZmZlcmVkIHJlcXVlc3RzXG4gICAgICAgIGNvbnN0IHJlcXVlc3Q6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlcXVlc3REVE8gPSB7XG4gICAgICAgICAgYWN0aW9uczogcmVxdWVzdHMuZmxhdE1hcCgoeyBhY3Rpb25zIH0pID0+IGFjdGlvbnMpLmZpbHRlcihpc0RlZmluZWQpLFxuICAgICAgICAgIHNlbGVjdG9yczogcmVxdWVzdHNcbiAgICAgICAgICAgIC5tYXAoKHsgc2VsZWN0b3JzIH0pID0+IHNlbGVjdG9ycylcbiAgICAgICAgICAgIC5maWx0ZXIoaXNEZWZpbmVkKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBzZWxlY3RvcnNNYXApID0+IE9iamVjdC5hc3NpZ24oYWNjLCBzZWxlY3RvcnNNYXApLCB7fSksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbG93U3RhdGVBcGlTZXJ2aWNlLmV4ZWN1dGVDb25maWd1cmF0aW9uKHRoaXMuZmxvd1N0YXRlU2VydmljZS5zdGF0ZUlkLCB0aGlzLnN0YXRlSWQsIHJlcXVlc3QpO1xuICAgICAgfSksXG4gICAgICB0YXAoKHsgc3RhdGVJZCB9KSA9PiAodGhpcy5zdGF0ZUlkID0gc3RhdGVJZCkpLFxuICAgICAgc2hhcmUoKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmV4ZWN1dGlvbkluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSW5Qcm9ncmVzcyQubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVN0YXRlZnVsJChyZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPKTogT2JzZXJ2YWJsZTxGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRpb25JblByb2dyZXNzJC5waXBlKFxuICAgICAgZmlsdGVyKGluUHJvZ3Jlc3MgPT4gIWluUHJvZ3Jlc3MpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAvLyBtYWtlIHN1cmUgc3RyZWFtIHN3aXRjaGVzIHRvIHN0YXRlZnVsRXhlY3V0aW9uUmVxdWVzdCQgYmVmb3JlIHB1c2hpbmcgYW4gZXhlY3V0aW9uIHJlcXVlc3RcbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgdGhpcy5zdGF0ZWZ1bEV4ZWN1dGlvblJlcXVlc3QkLFxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZSh0YXAoKCkgPT4gdGhpcy5zdGF0ZWZ1bFJlcXVlc3RTdHJlYW0kLm5leHQocmVxdWVzdCkpKSxcbiAgICAgICAgXSksXG4gICAgICApLFxuICAgICAgbWFwKChbcmVzcG9uc2VdKSA9PiByZXNwb25zZSksXG4gICAgICB0YWtlKDEpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVBY3Rpb25TY3JpcHQocmVxdWVzdDogVHJhbnNhY3Rpb25Db250ZXh0LCBwcm9jZXNzb3I6IEZsb3dTdGF0ZUV4ZWN1dGFibGVEVE8pOiBUcmFuc2FjdGlvbkNvbnRleHQge1xuICAgIGNvbnN0IHsgYWN0aW9ucyB9ID0gdGhpcy5jb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UudWlEZWZpbml0aW9uQ29udGFpbmVyID8/IHt9O1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgPSBhY3Rpb25zPy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uYXBpTmFtZSA9PT0gcHJvY2Vzc29yLmFwaU5hbWUpO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uUHJvY2Vzc29yPy5zY3JpcHQpIHtcbiAgICAgIHRocm93IGBDb25maWd1cmF0aW9uUHJvY2Vzc29yICR7cHJvY2Vzc29yLmFwaU5hbWV9IG5vdCBmb3VuZGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVByb2Nlc3NvclNjcmlwdChyZXF1ZXN0LCBjb25maWd1cmF0aW9uUHJvY2Vzc29yLCBwcm9jZXNzb3IuaW5wdXREYXRhKSBhcyBUcmFuc2FjdGlvbkNvbnRleHQ7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTZWxlY3RvclNjcmlwdChyZXF1ZXN0OiBUcmFuc2FjdGlvbkNvbnRleHQsIHByb2Nlc3NvcjogRmxvd1N0YXRlRXhlY3V0YWJsZURUTyk6IHVua25vd24ge1xuICAgIGNvbnN0IHsgc2VsZWN0b3JzIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZS51aURlZmluaXRpb25Db250YWluZXIgPz8ge307XG4gICAgY29uc3QgY29uZmlndXJhdGlvblByb2Nlc3NvciA9IHNlbGVjdG9ycz8uZmluZChzZWxlY3RvciA9PiBzZWxlY3Rvci5hcGlOYW1lID09PSBwcm9jZXNzb3IuYXBpTmFtZSk7XG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb25Qcm9jZXNzb3I/LnNjcmlwdCkge1xuICAgICAgdGhyb3cgYENvbmZpZ3VyYXRpb25Qcm9jZXNzb3IgJHtwcm9jZXNzb3IuYXBpTmFtZX0gbm90IGZvdW5kYDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUHJvY2Vzc29yU2NyaXB0KHJlcXVlc3QsIGNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IsIHByb2Nlc3Nvci5pbnB1dERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUHJvY2Vzc29yU2NyaXB0KFxuICAgIHJlcXVlc3Q6IFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgICBjb25maWd1cmF0aW9uUHJvY2Vzc29yOiBDb25maWd1cmF0aW9uUHJvY2Vzc29yLFxuICAgIGlucHV0RGF0YTogdW5rbm93bixcbiAgKTogdW5rbm93biB7XG4gICAgbGV0IGZ1bmN0aW9uVG9FeGVjdXRlID0gdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdO1xuICAgIGlmICghZnVuY3Rpb25Ub0V4ZWN1dGUpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGAke2NvbmZpZ3VyYXRpb25Qcm9jZXNzb3Iuc2NyaXB0fVxcbnJldHVybiB0cmFuc2Zvcm07YDtcbiAgICAgIGNvbnN0IHNvdXJjZU1hcCA9IGBcXG4vLyMgc291cmNlVVJMPSR7Y29uZmlndXJhdGlvblByb2Nlc3Nvci5hcGlOYW1lfS5qc2A7XG4gICAgICBmdW5jdGlvblRvRXhlY3V0ZSA9IG5ldyBGdW5jdGlvbihzY3JpcHQgKyBzb3VyY2VNYXApKCkgYXMgQ29uZmlndXJhdGlvblByb2Nlc3NvclNjcmlwdEZuO1xuICAgICAgdGhpcy5leGVjdXRlZEZ1bmN0aW9uc1tjb25maWd1cmF0aW9uUHJvY2Vzc29yLmFwaU5hbWVdID0gZnVuY3Rpb25Ub0V4ZWN1dGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9FeGVjdXRlKHtcbiAgICAgIHJlcXVlc3QsXG4gICAgICBpbnB1dERhdGEsXG4gICAgICBmbG93U3RvcmU6IHRoaXMuZmxvd1N0YXRlU2VydmljZS5nZXRGbG93U3RvcmUoKSxcbiAgICAgIGNvbmZpZ3VyYXRpb25TdG9yZTogdGhpcy5jb25maWd1cmF0aW9uU3RvcmUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJ1blN0YXRlbGVzc1NlbGVjdG9ycyhcbiAgICByZXF1ZXN0OiBGbG93U3RhdGVFeGVjdXRpb25SZXF1ZXN0RFRPLFxuICAgIGNvbmZpZ3VyYXRpb25TdGF0ZTogVHJhbnNhY3Rpb25Db250ZXh0LFxuICApOiBGbG93U3RhdGVFeGVjdXRpb25SZXN1bHQge1xuICAgIHJldHVybiBFbnRpdHlVdGlsLmVudHJpZXMocmVxdWVzdC5zZWxlY3RvcnMgPz8ge30pLnJlZHVjZShcbiAgICAgIChyZXN1bHQ6IEZsb3dTdGF0ZUV4ZWN1dGlvblJlc3VsdCwgW2tleSwgc2VsZWN0b3JdKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIHJlc3VsdDogdGhpcy5leGVjdXRlU2VsZWN0b3JTY3JpcHQoY29uZmlndXJhdGlvblN0YXRlLCBzZWxlY3RvciksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmVzdWx0LnNlbGVjdG9yc1trZXldID0ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IFN0cmluZyhlKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7IHN0YXRlSWQ6ICcnLCBzZWxlY3RvcnM6IHt9IH0sXG4gICAgKTtcbiAgfVxufVxuIl19
|