@envive-ai/react-hooks 0.3.9 → 0.3.11
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/dist/application/commerce-api.cjs +14 -14
- package/dist/application/commerce-api.d.cts +58 -0
- package/dist/application/commerce-api.d.ts +59 -0
- package/dist/application/commerce-api.js +3 -3
- package/dist/application/models/api/widgetText.d.cts +14 -0
- package/dist/application/models/api/widgetText.d.ts +14 -0
- package/dist/application/models/api/widgetTextRequest.d.cts +15 -0
- package/dist/application/models/api/widgetTextRequest.d.ts +15 -0
- package/dist/application/models/chatElementDisplayLocationV3.cjs +2 -1
- package/dist/application/models/chatElementDisplayLocationV3.d.cts +2 -1
- package/dist/application/models/chatElementDisplayLocationV3.d.ts +2 -1
- package/dist/application/models/chatElementDisplayLocationV3.js +2 -1
- package/dist/application/models/guards/api/index.cjs +4 -4
- package/dist/application/models/guards/api/index.js +4 -4
- package/dist/application/models/guards/api/isApiFormResponse.cjs +1 -1
- package/dist/application/models/guards/api/isApiFormResponse.js +1 -1
- package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.cjs +1 -1
- package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +1 -1
- package/dist/application/models/guards/api/isApiOrderResponseAttributes.cjs +1 -1
- package/dist/application/models/guards/api/isApiOrderResponseAttributes.js +1 -1
- package/dist/application/models/guards/api/isApiProductResponseAttributes.cjs +1 -1
- package/dist/application/models/guards/api/isApiProductResponseAttributes.js +1 -1
- package/dist/application/models/guards/api/isApiResponse.cjs +1 -1
- package/dist/application/models/guards/api/isApiResponse.js +1 -1
- package/dist/application/models/index.cjs +12 -12
- package/dist/application/models/index.d.cts +25 -25
- package/dist/application/models/index.d.ts +25 -25
- package/dist/application/models/index.js +12 -12
- package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +1 -1
- package/dist/application/models/validators/validateGraphQLFrontendConfig.js +1 -1
- package/dist/application/models/validators/validateUserEvent.cjs +2 -2
- package/dist/application/models/validators/validateUserEvent.js +2 -2
- package/dist/application/models/variantInfo/variantInfo.cjs +2 -1
- package/dist/application/models/variantInfo/variantInfo.d.cts +6 -1
- package/dist/application/models/variantInfo/variantInfo.d.ts +6 -1
- package/dist/application/models/variantInfo/variantInfo.js +2 -1
- package/dist/application/utils/analyticsUtils.cjs +1 -1
- package/dist/application/utils/analyticsUtils.js +1 -1
- package/dist/application/utils/widgetTextFromApiWidgetTextResponse.cjs +3 -1
- package/dist/application/utils/widgetTextFromApiWidgetTextResponse.js +3 -1
- package/dist/application/utils/widgetTextRequestToApiRequest.cjs +3 -1
- package/dist/application/utils/widgetTextRequestToApiRequest.js +3 -1
- package/dist/atoms/app/index.cjs +7 -7
- package/dist/atoms/app/index.d.cts +8 -8
- package/dist/atoms/app/index.d.ts +8 -8
- package/dist/atoms/app/index.js +1 -1
- package/dist/atoms/app/variant.cjs +44 -4
- package/dist/atoms/app/variant.d.cts +8 -8
- package/dist/atoms/app/variant.d.ts +8 -8
- package/dist/atoms/app/variant.js +44 -5
- package/dist/atoms/chat/chatState.d.cts +17 -17
- package/dist/atoms/chat/chatState.d.ts +18 -18
- package/dist/atoms/chat/form.cjs +1 -1
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/form.d.ts +2 -2
- package/dist/atoms/chat/form.js +1 -1
- package/dist/atoms/chat/index.cjs +1 -1
- package/dist/atoms/chat/index.d.cts +2 -2
- package/dist/atoms/chat/index.d.ts +2 -2
- package/dist/atoms/chat/index.js +1 -1
- package/dist/atoms/chat/lastMessage.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.d.cts +6 -6
- package/dist/atoms/chat/messageQueue.d.ts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
- package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
- package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
- package/dist/atoms/chat/replies.d.cts +3 -3
- package/dist/atoms/chat/replies.d.ts +3 -3
- package/dist/atoms/chat/suggestions.d.cts +2 -2
- package/dist/atoms/chat/suggestions.d.ts +2 -2
- package/dist/atoms/envive/enviveConfig.d.cts +19 -0
- package/dist/atoms/envive/enviveConfig.d.ts +19 -0
- package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
- package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
- package/dist/atoms/org/customerService.d.cts +6 -6
- package/dist/atoms/org/customerService.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.d.cts +4 -4
- package/dist/atoms/org/graphqlConfig.d.ts +4 -4
- package/dist/atoms/org/index.cjs +1 -1
- package/dist/atoms/org/index.js +1 -1
- package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
- package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
- package/dist/atoms/search/chatSearch.cjs +2 -2
- package/dist/atoms/search/chatSearch.d.cts +17 -17
- package/dist/atoms/search/chatSearch.d.ts +17 -17
- package/dist/atoms/search/chatSearch.js +2 -2
- package/dist/atoms/search/searchAPI.cjs +1 -1
- package/dist/atoms/search/searchAPI.d.cts +13 -13
- package/dist/atoms/search/searchAPI.d.ts +13 -13
- package/dist/atoms/search/searchAPI.js +1 -1
- package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/amplitudeContext/amplitudeContext.cjs +10 -7
- package/dist/contexts/amplitudeContext/amplitudeContext.d.cts +2 -2
- package/dist/contexts/amplitudeContext/amplitudeContext.d.ts +2 -2
- package/dist/contexts/amplitudeContext/amplitudeContext.js +6 -3
- package/dist/contexts/amplitudeContext/index.cjs +1 -0
- package/dist/contexts/amplitudeContext/index.d.cts +2 -2
- package/dist/contexts/amplitudeContext/index.d.ts +2 -2
- package/dist/contexts/amplitudeContext/index.js +2 -2
- package/dist/contexts/cdnContext/cdnContext.cjs +3 -3
- package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +6 -5
- package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +2 -1
- package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +2 -1
- package/dist/contexts/enviveConfigContext/enviveConfigContext.js +3 -2
- package/dist/contexts/enviveContext/WindowChatToggleBinder.cjs +4 -3
- package/dist/contexts/enviveContext/WindowChatToggleBinder.js +4 -3
- package/dist/contexts/enviveContext/enviveContext.cjs +15 -11
- package/dist/contexts/enviveContext/enviveContext.d.cts +2 -1
- package/dist/contexts/enviveContext/enviveContext.d.ts +2 -1
- package/dist/contexts/enviveContext/enviveContext.js +15 -11
- package/dist/contexts/enviveContext/types.d.cts +1 -1
- package/dist/contexts/enviveContext/types.d.ts +1 -1
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +23 -2
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +11 -2
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +11 -2
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +23 -2
- package/dist/contexts/featureFlagServiceContext/index.d.cts +2 -2
- package/dist/contexts/featureFlagServiceContext/index.d.ts +2 -2
- package/dist/contexts/graphqlContext/graphqlContext.cjs +7 -7
- package/dist/contexts/graphqlContext/graphqlContext.d.cts +1 -1
- package/dist/contexts/graphqlContext/graphqlContext.d.ts +1 -1
- package/dist/contexts/graphqlContext/graphqlContext.js +3 -3
- package/dist/contexts/graphqlContext/mockV3Config.cjs +10 -4
- package/dist/contexts/graphqlContext/mockV3Config.js +10 -4
- package/dist/contexts/hardcopyContext/hardcopyContext.cjs +50 -5
- package/dist/contexts/hardcopyContext/hardcopyContext.d.cts +4 -1
- package/dist/contexts/hardcopyContext/hardcopyContext.d.ts +4 -1
- package/dist/contexts/hardcopyContext/hardcopyContext.js +48 -3
- package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +4 -4
- package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
- package/dist/contexts/pageContext/mapping.cjs +6 -2
- package/dist/contexts/pageContext/mapping.js +6 -2
- package/dist/contexts/pageContext/pageContext.cjs +4 -3
- package/dist/contexts/pageContext/pageContext.js +2 -1
- package/dist/contexts/pageContext/types.d.cts +7 -3
- package/dist/contexts/pageContext/types.d.ts +7 -3
- package/dist/contexts/salesAgentContext/chatAPI.cjs +103 -13
- package/dist/contexts/salesAgentContext/chatAPI.d.cts +8 -4
- package/dist/contexts/salesAgentContext/chatAPI.d.ts +8 -4
- package/dist/contexts/salesAgentContext/chatAPI.js +105 -15
- package/dist/contexts/salesAgentContext/salesAgentContext.cjs +1 -1
- package/dist/contexts/salesAgentContext/salesAgentContext.js +1 -1
- package/dist/contexts/salesAgentContext/salesAgentService.cjs +53 -11
- package/dist/contexts/salesAgentContext/salesAgentService.js +51 -9
- package/dist/contexts/searchContext/searchContext.cjs +4 -4
- package/dist/contexts/searchContext/searchContext.js +1 -1
- package/dist/contexts/systemSettingsContext/systemSettingsContext.cjs +3 -3
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
- package/dist/contexts/types.cjs +1 -1
- package/dist/contexts/types.d.cts +7 -2
- package/dist/contexts/types.d.ts +7 -2
- package/dist/contexts/types.js +1 -1
- package/dist/contexts/typesV3.cjs +2 -1
- package/dist/contexts/typesV3.d.cts +12 -7
- package/dist/contexts/typesV3.d.ts +10 -5
- package/dist/contexts/typesV3.js +2 -1
- package/dist/contexts/userIdentityContext/userIdentityContext.cjs +3 -3
- package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +1 -1
- package/dist/contexts/widgetConfigContext/widgetConfigContext.js +1 -1
- package/dist/hooks/AppDetails/useAppDetails.cjs +6 -6
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
- package/dist/hooks/ImageResolver/useImageResolver.cjs +3 -3
- package/dist/hooks/Search/useSearch.cjs +6 -6
- package/dist/hooks/Search/useSearch.d.cts +1 -1
- package/dist/hooks/Search/useSearch.d.ts +1 -1
- package/dist/hooks/Search/useSearch.js +3 -3
- package/dist/hooks/Search/useSearchInput.cjs +2 -2
- package/dist/hooks/Search/useSearchInput.js +2 -2
- package/dist/services/amplitudeService/amplitudeService.cjs +49 -11
- package/dist/services/amplitudeService/amplitudeService.d.cts +18 -3
- package/dist/services/amplitudeService/amplitudeService.d.ts +18 -3
- package/dist/services/amplitudeService/amplitudeService.js +49 -12
- package/dist/services/amplitudeService/index.cjs +1 -0
- package/dist/services/amplitudeService/index.d.cts +2 -2
- package/dist/services/amplitudeService/index.d.ts +2 -2
- package/dist/services/amplitudeService/index.js +2 -2
- package/dist/types/customerService.d.cts +3 -1
- package/dist/types/customerService.d.ts +1 -1
- package/package.json +10 -2
- package/src/application/models/api/widgetText.ts +2 -0
- package/src/application/models/api/widgetTextRequest.ts +1 -0
- package/src/application/models/chatElementDisplayLocationV3.ts +1 -0
- package/src/application/models/variantInfo/variantInfo.ts +5 -0
- package/src/application/utils/widgetTextFromApiWidgetTextResponse.ts +2 -0
- package/src/application/utils/widgetTextRequestToApiRequest.ts +4 -0
- package/src/atoms/app/variant.ts +56 -2
- package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +2 -0
- package/src/contexts/amplitudeContext/amplitudeContext.tsx +6 -1
- package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +3 -0
- package/src/contexts/enviveContext/WindowChatToggleBinder.tsx +5 -1
- package/src/contexts/enviveContext/enviveContext.tsx +5 -1
- package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +36 -0
- package/src/contexts/graphqlContext/mockV3Config.ts +13 -7
- package/src/contexts/hardcopyContext/hardcopyContext.tsx +48 -3
- package/src/contexts/pageContext/mapping.ts +13 -1
- package/src/contexts/pageContext/pageContext.tsx +1 -0
- package/src/contexts/pageContext/types.ts +7 -1
- package/src/contexts/salesAgentContext/chatAPI.ts +106 -13
- package/src/contexts/salesAgentContext/salesAgentService.ts +66 -4
- package/src/contexts/types.ts +8 -1
- package/src/contexts/typesV3.ts +24 -16
- package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +80 -0
- package/src/services/amplitudeService/amplitudeService.ts +55 -11
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
-
const require_contexts_typesV3 = require('../../contexts/typesV3.cjs');
|
|
3
|
-
const require_event_types = require('../../events/event-types.cjs');
|
|
4
|
-
const require_events_index = require('../../events/index.cjs');
|
|
5
|
-
const require_chatElementDisplayLocationV3 = require('../../application/models/chatElementDisplayLocationV3.cjs');
|
|
6
2
|
const require_logger = require('../../application/logging/logger.cjs');
|
|
3
|
+
const require_chatElementDisplayLocationV3 = require('../../application/models/chatElementDisplayLocationV3.cjs');
|
|
7
4
|
const require_localStorageContext = require('../../contexts/localStorageContext/localStorageContext.cjs');
|
|
8
5
|
require('../../contexts/localStorageContext/index.cjs');
|
|
6
|
+
const require_event_types = require('../../events/event-types.cjs');
|
|
7
|
+
const require_events_index = require('../../events/index.cjs');
|
|
8
|
+
const require_contexts_typesV3 = require('../../contexts/typesV3.cjs');
|
|
9
9
|
let __amplitude_analytics_browser = require("@amplitude/analytics-browser");
|
|
10
10
|
|
|
11
11
|
//#region src/services/amplitudeService/amplitudeService.ts
|
|
@@ -41,6 +41,18 @@ let SpiffyMetricsEventName = /* @__PURE__ */ function(SpiffyMetricsEventName$1)
|
|
|
41
41
|
SpiffyMetricsEventName$1["SearchSortClicked"] = "Search Sort Clicked";
|
|
42
42
|
return SpiffyMetricsEventName$1;
|
|
43
43
|
}({});
|
|
44
|
+
let EnviveMetricsEventName = /* @__PURE__ */ function(EnviveMetricsEventName$1) {
|
|
45
|
+
EnviveMetricsEventName$1["WidgetRendered"] = "Widget Rendered";
|
|
46
|
+
EnviveMetricsEventName$1["WidgetInteraction"] = "Widget Interaction";
|
|
47
|
+
EnviveMetricsEventName$1["ChatRequest"] = "Chat Request";
|
|
48
|
+
EnviveMetricsEventName$1["ChatResponse"] = "Chat Response";
|
|
49
|
+
EnviveMetricsEventName$1["EnviveInitialized"] = "Envive Initialized";
|
|
50
|
+
EnviveMetricsEventName$1["PageViewed"] = "Page Viewed";
|
|
51
|
+
EnviveMetricsEventName$1["WidgetTextRequest"] = "Widget Text Request";
|
|
52
|
+
EnviveMetricsEventName$1["WidgetTextResponse"] = "Widget Text Response";
|
|
53
|
+
EnviveMetricsEventName$1["WidgetTextClicked"] = "Widget Text Clicked";
|
|
54
|
+
return EnviveMetricsEventName$1;
|
|
55
|
+
}({});
|
|
44
56
|
var AmplitudeService = class AmplitudeService {
|
|
45
57
|
constructor(config) {
|
|
46
58
|
this.supplementalDefaultProps = {};
|
|
@@ -55,7 +67,7 @@ var AmplitudeService = class AmplitudeService {
|
|
|
55
67
|
if (typeof window !== "undefined" && window.localStorage) return window.localStorage.getItem(key);
|
|
56
68
|
return null;
|
|
57
69
|
}
|
|
58
|
-
getDefaultTrackingProps() {
|
|
70
|
+
getDefaultTrackingProps(eventName) {
|
|
59
71
|
const featureGates = Object.entries(this.config.featureFlagService.getFeatureFlags());
|
|
60
72
|
const gatesProps = featureGates.length > 0 ? featureGates.reduce((acc, [name, value]) => {
|
|
61
73
|
if (name && value != null) return {
|
|
@@ -65,9 +77,27 @@ var AmplitudeService = class AmplitudeService {
|
|
|
65
77
|
return acc;
|
|
66
78
|
}, {}) : {};
|
|
67
79
|
const experimentProps = {};
|
|
80
|
+
const environmentProps = {
|
|
81
|
+
"environment.execution_context": "bundle",
|
|
82
|
+
"environment.page_url": window.location.href,
|
|
83
|
+
"environment.envive_user_id": this.config.userId,
|
|
84
|
+
"environment.execution_environment": this.config.env || "unknown",
|
|
85
|
+
"environment.context_source": this.config.contextSource,
|
|
86
|
+
"environment.sales_agent_enabled": this.config.enabledFeatures?.salesAgent ?? false,
|
|
87
|
+
"environment.search_enabled": this.config.enabledFeatures?.searchAgent ?? false,
|
|
88
|
+
"environment.envive_on_query_param": this.config.enviveOn,
|
|
89
|
+
"environment.window_show": this.config.show,
|
|
90
|
+
"environment.envive_enabled": this.config.enabledFeatures?.envive
|
|
91
|
+
};
|
|
68
92
|
return {
|
|
69
|
-
...
|
|
70
|
-
|
|
93
|
+
...AmplitudeService.isEnviveEvent(eventName) ? {
|
|
94
|
+
...this.config.featureFlagService.getFullFlagValues(),
|
|
95
|
+
...experimentProps,
|
|
96
|
+
...environmentProps
|
|
97
|
+
} : {
|
|
98
|
+
...gatesProps,
|
|
99
|
+
...experimentProps
|
|
100
|
+
},
|
|
71
101
|
...this.supplementalDefaultProps,
|
|
72
102
|
app_id: "commerce-chat-react-component",
|
|
73
103
|
chat_id: this.getLocalStorageItem(require_localStorageContext.LocalStorageKeys.ChatId),
|
|
@@ -113,7 +143,7 @@ var AmplitudeService = class AmplitudeService {
|
|
|
113
143
|
...event,
|
|
114
144
|
event_properties: {
|
|
115
145
|
...event.event_properties,
|
|
116
|
-
...this.getDefaultTrackingProps(),
|
|
146
|
+
...this.getDefaultTrackingProps(event.event_type),
|
|
117
147
|
...globalProperties,
|
|
118
148
|
...enabledFeaturesProperties,
|
|
119
149
|
...timingProperties
|
|
@@ -215,10 +245,17 @@ var AmplitudeService = class AmplitudeService {
|
|
|
215
245
|
}
|
|
216
246
|
return eventProps ?? {};
|
|
217
247
|
}
|
|
248
|
+
static isEnviveEvent(eventName) {
|
|
249
|
+
return Object.values(EnviveMetricsEventName).includes(eventName);
|
|
250
|
+
}
|
|
251
|
+
static decorateEventName(eventName) {
|
|
252
|
+
if (AmplitudeService.isEnviveEvent(eventName)) return `[Envive] ${eventName}`;
|
|
253
|
+
return `[Spiffy] ${eventName}`;
|
|
254
|
+
}
|
|
218
255
|
async trackEvent({ eventName, eventProps, eventGroups, alsoSendToGoogleAnalytics = false }) {
|
|
219
256
|
require_logger.default.logDebug("Submitting event", eventName);
|
|
220
257
|
try {
|
|
221
|
-
const decoratedEventName =
|
|
258
|
+
const decoratedEventName = AmplitudeService.decorateEventName(eventName);
|
|
222
259
|
if (!this.amplitudeClient) {
|
|
223
260
|
require_logger.default.logWarn("amplitude client undefined", void 0, { event_name: decoratedEventName });
|
|
224
261
|
return;
|
|
@@ -240,7 +277,7 @@ var AmplitudeService = class AmplitudeService {
|
|
|
240
277
|
props: mappedEventProps
|
|
241
278
|
});
|
|
242
279
|
this.amplitudeClient.track(decoratedEventName, {
|
|
243
|
-
...this.getDefaultTrackingProps(),
|
|
280
|
+
...this.getDefaultTrackingProps(eventName),
|
|
244
281
|
...mappedEventProps,
|
|
245
282
|
...mappedEventProps ? this.eventPropsToPrefixedEventProps(eventName, mappedEventProps) : {}
|
|
246
283
|
}, {
|
|
@@ -268,5 +305,6 @@ var AmplitudeService = class AmplitudeService {
|
|
|
268
305
|
|
|
269
306
|
//#endregion
|
|
270
307
|
exports.AmplitudeService = AmplitudeService;
|
|
308
|
+
exports.EnviveMetricsEventName = EnviveMetricsEventName;
|
|
271
309
|
exports.SpiffyMetricsEventName = SpiffyMetricsEventName;
|
|
272
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5janMiLCJuYW1lcyI6WyJMb2NhbFN0b3JhZ2VLZXlzIiwiZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiIsImVucmljaGVkRXZlbnQ6IEV2ZW50IiwiZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsIlNwaWZmeUV2ZW50IiwiY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50IiwiV2lkZ2V0VHlwZVYzIiwiQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSW5zdGFuY2UgfSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy1icm93c2VyJztcbmltcG9ydCB7IEV2ZW50c0Rpc3BhdGNoZXIsIFNwaWZmeUV2ZW50IH0gZnJvbSAnc3JjL2V2ZW50cyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VLZXlzIH0gZnJvbSAnc3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHQnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHR5cGUge1xuICBCcm93c2VyQ2xpZW50LFxuICBFbnJpY2htZW50UGx1Z2luLFxuICBFdmVudCxcbiAgU2VydmVyWm9uZVR5cGUsXG59IGZyb20gJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLXR5cGVzJztcbmltcG9ydCB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyc7XG5cbmV4cG9ydCBlbnVtIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUge1xuICBCdW5kbGVMb2FkZWQgPSAnQnVuZGxlIExvYWRlZCcsXG4gIEVudmlyb25tZW50SW5pdGlhbGl6ZWQgPSAnRW52aXJvbm1lbnQgSW5pdGlhbGl6ZWQnLFxuICBDaGF0TGl2ZUFnZW50QnRuQ2xpY2sgPSAnQ2hhdCBMaXZlIEFnZW50IEJ0biBDbGljaycsXG4gIENoYXRGbG9hdGluZ0J1dHRvblZpc2libGUgPSAnQ2hhdCBGbG9hdGluZyBCdXR0b24gVmlzaWJsZScsXG4gIENoYXRDb21wb25lbnRWaXNpYmxlID0gJ0NoYXQgQ29tcG9uZW50IFZpc2libGUnLFxuICBDaGF0Q29tcG9uZW50RXhwYW5kZWQgPSAnQ2hhdCBDb21wb25lbnQgRXhwYW5kZWQnLFxuICBDaGF0Q29tcG9uZW50Q29sbGFwc2VkID0gJ0NoYXQgQ29tcG9uZW50IENvbGxhcHNlZCcsXG4gIENoYXRVc2VyTWVzc2FnZUlucHV0ID0gJ0NoYXQgVXNlciBNZXNzYWdlIElucHV0JyxcbiAgQ2hhdFN1Z2dlc3Rpb25DbGlja2VkID0gJ0NoYXQgU3VnZ2VzdGlvbiBDbGlja2VkJyxcbiAgQ2hhdEFzc2lzdGFudFJlc3BvbnNlID0gJ0NoYXQgQXNzaXN0YW50IFJlc3BvbnNlJyxcbiAgUHJvZHVjdENhcmRDbGlja2VkID0gJ1Byb2R1Y3QgQ2FyZCBDbGlja2VkJyxcbiAgUHJvZHVjdFJldmlld0NhcmRDbGlja2VkID0gJ1Byb2R1Y3QgUmV2aWV3IENhcmQgQ2xpY2tlZCcsXG4gIEFkZFRvQ2FydENsaWNrZWQgPSAnQWRkIFRvIENhcnQgQ2xpY2tlZCcsXG4gIFByb21wdENhcmRDbGlja2VkID0gJ1Byb21wdCBDYXJkIENsaWNrZWQnLFxuICBTdXBwb3J0ZWRFdmVudCA9ICdTdXBwb3J0ZWQgRXZlbnQnLFxuICBTZWFyY2hCYWNrVG9SZXNwb25zZUNsaWNrZWQgPSAnU2VhcmNoIEJhY2sgdG8gUmVzcG9uc2UgQ2xpY2tlZCcsXG4gIFBlcmZvcm1hbmNlTWV0cmljcyA9ICdQZXJmb3JtYW5jZSBNZXRyaWNzJyxcbiAgU2VhcmNoQmFyQ2xpY2tlZCA9ICdTZWFyY2ggQmFyIENsaWNrZWQnLFxuICBPcmRlckxvb2t1cFN0YXJ0ZWQgPSAnT3JkZXIgTG9va3VwIFN0YXJ0ZWQnLFxuICBPcmRlckxvb2t1cEZvcm1TdWJtaXR0ZWQgPSAnT3JkZXIgTG9va3VwIEZvcm0gU3VibWl0dGVkJyxcbiAgU2VhcmNoQ29tcG9uZW50VmlzaWJsZSA9ICdTZWFyY2ggQ29tcG9uZW50IFZpc2libGUnLFxuICBTZWFyY2haZXJvU3RhdGVTdWdnZXN0aW9uQ2xpY2tlZCA9ICdTZWFyY2ggWmVybyBTdGF0ZSBTdWdnZXN0aW9uIENsaWNrZWQnLCAvLyBUaGlzIGlzIHRoZSBzY3JvbGxpbmcgbGlzdCBvZiBzdWdnZXN0aW9uIGJ1dHRvbnMgaW4gZ2xvYmFsIHNlYXJjaFxuICBTZWFyY2hJbnB1dFN0YXJ0ZWQgPSAnU2VhcmNoIElucHV0IFN0YXJ0ZWQnLFxuICBTZWFyY2hRdWVyeVN1Ym1pdHRlZCA9ICdTZWFyY2ggUXVlcnkgU3VibWl0dGVkJyxcbiAgLy8gU2VhcmNoQXV0b2NvbXBsZXRlVmlld2VkID0gJ1NlYXJjaCBBdXRvY29tcGxldGUgVmlld2VkJywgLy8gVE9ETzogYWRkIHRoaXMgd2hlbiBhdXRvY29tcGxldGUgaXMgYWRkZWRcbiAgLy8gU2VhcmNoQXV0b2NvbXBsZXRlQ2xpY2tlZCA9ICdTZWFyY2ggQXV0b2NvbXBsZXRlIENsaWNrZWQnLCAvLyBUT0RPOiBhZGQgdGhpcyB3aGVuIGF1dG9jb21wbGV0ZSBpcyBhZGRlZFxuICBTZWFyY2hSZXN1bHRzVmlld2VkID0gJ1NlYXJjaCBSZXN1bHRzIFZpZXdlZCcsXG4gIFNlYXJjaFRpbWVUb0ZpcnN0Q2xpY2sgPSAnU2VhcmNoIFRpbWUgdG8gRmlyc3QgQ2xpY2snLFxuICBTZWFyY2haZXJvUmVzdWx0c1JhdGUgPSAnU2VhcmNoIFplcm8gUmVzdWx0cyBSYXRlJyxcbiAgU2VhcmNoRmlsdGVyQ2xpY2tlZCA9ICdTZWFyY2ggRmlsdGVyIENsaWNrZWQnLFxuICBTZWFyY2hTb3J0Q2xpY2tlZCA9ICdTZWFyY2ggU29ydCBDbGlja2VkJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja0V2ZW50UGFyYW1zIHtcbiAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lO1xuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV2ZW50R3JvdXBzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtcGxpdHVkZVNlcnZpY2VDb25maWcge1xuICB1c2VySWQ6IHN0cmluZztcbiAgYW1wbGl0dWRlQXBpS2V5OiBzdHJpbmc7XG4gIGRhdGFSZXNpZGVuY3k6IHN0cmluZztcbiAgZW52OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U6IHN0cmluZztcbiAgb3JnU2hvcnROYW1lOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICBvcmdHYUNvbmZpZz86IHVua25vd247XG4gIHNob3c6IGJvb2xlYW47XG4gIGVuYWJsZWRGZWF0dXJlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICBnZXRMb2NhbFN0b3JhZ2VJdGVtOiBudWxsIHwgKChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCk7XG59XG5cbmV4cG9ydCBjbGFzcyBBbXBsaXR1ZGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhbXBsaXR1ZGVDbGllbnQ6IEJyb3dzZXJDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIHByaXZhdGUgY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQW1wbGl0dWRlU2VydmljZUNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJlxuICAgICAgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5ICYmXG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbFN0b3JhZ2VJdGVtKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKGtleSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VHJhY2tpbmdQcm9wcygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgZmVhdHVyZUdhdGVzID0gT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZlYXR1cmVGbGFncygpKTtcbiAgICBjb25zdCBnYXRlc1Byb3BzID1cbiAgICAgIGZlYXR1cmVHYXRlcy5sZW5ndGggPiAwXG4gICAgICAgID8gZmVhdHVyZUdhdGVzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oKGFjYywgW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtgZmVhdHVyZV9nYXRlLiR7bmFtZX1gXTogdmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30pXG4gICAgICAgIDoge307XG4gICAgY29uc3QgZXhwZXJpbWVudFByb3BzID0ge307IC8vIE5vIGRpcmVjdCBlcXVpdmFsZW50IGZvciBleHBlcmltZW50cyBpbiBFbnZpdmVDb25maWcgeWV0XG5cbiAgICBjb25zdCBvcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMgPSB7XG4gICAgICAuLi5nYXRlc1Byb3BzLFxuICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzLFxuICAgICAgLi4udGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMsXG4gICAgICAvLyBUT0RPOiBvcmdfaWQgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBpbiBFbnZpdmVDb25maWcuIE5lZWQgdG8gZmluZCBhIG5ldyBzb3VyY2Ugb3IgZGVyaXZlIGl0LlxuICAgICAgLy8gb3JnX2lkOiBvcmdDb25maWc/Lm9yZz8ub3JnPy5pZCxcbiAgICAgIGFwcF9pZDogJ2NvbW1lcmNlLWNoYXQtcmVhY3QtY29tcG9uZW50JyxcbiAgICAgIGNoYXRfaWQ6IHRoaXMuZ2V0TG9jYWxTdG9yYWdlSXRlbShMb2NhbFN0b3JhZ2VLZXlzLkNoYXRJZCksXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICBhcHBfc291cmNlOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgb3JnX2lkOiB0aGlzLmNvbmZpZy5vcmdJZCxcbiAgICAgICdvcmcuc2hvcnRfbmFtZSc6IHRoaXMuY29uZmlnLm9yZ1Nob3J0TmFtZSxcbiAgICAgICd1c2VyLmlkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2NkcC51c2VyX2lkJzogbnVsbCxcbiAgICAgICdjZHAucHJvdmlkZXInOiBudWxsLFxuICAgICAgJ2V2ZW50LnNvdXJjZSc6ICd3ZWItYnJvd3NlcicsXG4gICAgICAnZXZlbnQudHlwZSc6ICd1c2VyLWFjdGl2aXR5JyxcbiAgICAgICdldmVudC5pZCc6IG51bGwsXG4gICAgICAnZXZlbnQuY2hhbm5lbCc6ICd3ZWInLFxuICAgICAgJ2V2ZW50LnRpbWVzdGFtcCc6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByaXZhdGUgZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbiAgICBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHByZWZpeCA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZXZlbnRQcm9wcykucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFjY1tgJHtwcmVmaXh9LiR7a2V5fWBdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQoKTogRW5yaWNobWVudFBsdWdpbiB7XG4gICAgaWYgKHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50O1xuICAgIH1cblxuICAgIGNvbnN0IGVucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gPSB7XG4gICAgICBuYW1lOiAncGFnZS12aWV3LXRyYWNraW5nLWVucmljaG1lbnQnLFxuICAgICAgdHlwZTogJ2VucmljaG1lbnQnLFxuICAgICAgc2V0dXA6IGFzeW5jICgpID0+IHVuZGVmaW5lZCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jIChldmVudDogRXZlbnQpOiBQcm9taXNlPEV2ZW50PiA9PiB7XG4gICAgICAgIGxldCBlbnJpY2hlZEV2ZW50OiBFdmVudDtcblxuICAgICAgICBjb25zdCBldmVudHNUb0VucmljaCA9IFtcbiAgICAgICAgICAnW0FtcGxpdHVkZV0gUGFnZSBWaWV3ZWQnLFxuICAgICAgICAgIGBbU3BpZmZ5XSAke1NwaWZmeU1ldHJpY3NFdmVudE5hbWUuQnVuZGxlTG9hZGVkfWAsXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGV2ZW50c1RvRW5yaWNoLmluY2x1ZGVzKGV2ZW50LmV2ZW50X3R5cGUpKSB7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNob3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1snZ2xvYmFsUHJvcGVydGllcy5zaG93J10gPSBTdHJpbmcodGhpcy5jb25maWcuc2hvdyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuZW52J10gPSBTdHJpbmcodGhpcy5jb25maWcuZW52KTtcblxuICAgICAgICAgIGNvbnN0IGVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyhcbiAgICAgICAgICAgIHRoaXMuY29uZmlnPy5lbmFibGVkRmVhdHVyZXMgPz8gKHt9IGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KSxcbiAgICAgICAgICApLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihcbiAgICAgICAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICBbYGVuYWJsZWRGZWF0dXJlcy4ke2tleX1gXTogYCR7dmFsdWV9YCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHRpbWluZ1Byb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAndGltaW5nLmVucmljaGVkX2F0X21zJzpcbiAgICAgICAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cucGVyZm9ybWFuY2U/Lm5vdygpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbnJpY2hlZEV2ZW50ID0ge1xuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBldmVudF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmV2ZW50LmV2ZW50X3Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoKSxcbiAgICAgICAgICAgICAgLi4uZ2xvYmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4uZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGltaW5nUHJvcGVydGllcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnJpY2hlZEV2ZW50ID0gZXZlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBFdmVudHNEaXNwYXRjaGVyLmRpc3BhdGNoKFNwaWZmeUV2ZW50LkFNUExJVFVERV9FVkVOVCwgZW5yaWNoZWRFdmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGVucmljaGVkRXZlbnQ7XG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ID0gZW5yaWNobWVudDtcbiAgICByZXR1cm4gZW5yaWNobWVudDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc1JlYWR5ID0gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJiB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiYgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICk7XG5cbiAgICBpZiAoIWlzUmVhZHkpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZygnQW1wbGl0dWRlU2VydmljZSBpcyBub3QgcmVhZHknLCB7XG4gICAgICAgIGlzUmVhZHksXG4gICAgICAgIHVzZXJJZDogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgICBoYXNGZWF0dXJlRmxhZ1NlcnZpY2U6ICEhdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLFxuICAgICAgICBoYXNBbXBsaXR1ZGVBcGlLZXk6ICEhdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgY29uc3QgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmFkZCh0aGlzLmdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCkpO1xuICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmluaXQodGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LCB0aGlzLmNvbmZpZy51c2VySWQsIHtcbiAgICAgICAgc2VydmVyWm9uZTogdGhpcy5jb25maWcuZGF0YVJlc2lkZW5jeSBhcyBTZXJ2ZXJab25lVHlwZSxcbiAgICAgICAgdHJhY2tpbmdPcHRpb25zOiB7XG4gICAgICAgICAgaXBBZGRyZXNzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBhdXRvY2FwdHVyZToge1xuICAgICAgICAgIGF0dHJpYnV0aW9uOiB0cnVlLFxuICAgICAgICAgIHBhZ2VWaWV3czoge1xuICAgICAgICAgICAgdHJhY2tIaXN0b3J5Q2hhbmdlczogJ3BhdGhPbmx5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb25zOiBmYWxzZSxcbiAgICAgICAgICBmb3JtSW50ZXJhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICBmaWxlRG93bmxvYWRzOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQgPSBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQod2lkZ2V0VHlwZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5GbG9hdGluZ0J1dHRvblYzOlxuICAgICAgICByZXR1cm4gJ2Zsb2F0aW5nX2J1dHRvbic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWMzpcbiAgICAgICAgcmV0dXJuICdlbWJlZGRlZF93aWRnZXQnO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVGl0bGVkUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb21wdENhcm91c2VsVjM6XG4gICAgICAgIHJldHVybiAnc3VnZ2VzdGlvbl9iYXInO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWMzpcbiAgICAgICAgcmV0dXJuICdpbWFnZV9wcm9tcHRfY2FyZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRyaWdnZXJMb2NhdGlvbikge1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ3Byb21wdF9jYXJkJztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9NUFRfQ0FST1VTRUw6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVElUTEVEX1BST01QVF9DQVJPVVNFTDpcbiAgICAgICAgcmV0dXJuICd0b3BfcmV2aWV3c19zbmlwcGV0JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5UWVBJTkdfQU5JTUFUSU9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9QUklNQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfU0VDT05EQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAnY2hhdF9wcmV2aWV3JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX09WRVJMQVk6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9DTE9TRV9CVVRUT046XG4gICAgICAgIHJldHVybiAnaW5fY2hhdCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJpZ2dlckxvY2F0aW9uIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIGFsbG93cyB1cyB0byBtYXAgdGhlIGV2ZW50IHByb3BzIHRvIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdGhlIGxlZ2FjeSBhbXBsaXR1ZGUgZXZlbnRzXG4gIHN0YXRpYyBtYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgbWVzc2FnZU1ldGFkYXRhID0gZXZlbnRQcm9wcz8ubWVzc2FnZV9tZXRhZGF0YSA/PyB7fTtcbiAgICBjb25zdCB0cmlnZ2VyTG9jYXRpb24gPVxuICAgICAgbWVzc2FnZU1ldGFkYXRhICE9PSBudWxsICYmXG4gICAgICB0eXBlb2YgbWVzc2FnZU1ldGFkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ3RyaWdnZXJfbG9jYXRpb24nIGluIG1lc3NhZ2VNZXRhZGF0YVxuICAgICAgICA/IG1lc3NhZ2VNZXRhZGF0YS50cmlnZ2VyX2xvY2F0aW9uXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50RXhwYW5kZWQpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24gPVxuICAgICAgICBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIC4uLm1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgICAgICB0cmlnZ2VyX2xvY2F0aW9uOiBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uLFxuICAgICAgICAgIGZ1bGxfdHJpZ2dlcl9sb2NhdGlvbjogdHJpZ2dlckxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRWaXNpYmxlKSB7XG4gICAgICBjb25zdCBtYXBwZWRXaWRnZXRUeXBlID0gQW1wbGl0dWRlU2VydmljZS5tYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KFxuICAgICAgICBldmVudFByb3BzPy53aWRnZXRfdHlwZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgY2hhdF9jb21wb25lbnQ6IG1hcHBlZFdpZGdldFR5cGUsXG4gICAgICAgICdjaGF0LmNvbXBvbmVudF92aXNpYmxlJzogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBldmVudFByb3BzID8/IHt9O1xuICB9XG5cbiAgYXN5bmMgdHJhY2tFdmVudCh7XG4gICAgZXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHMsXG4gICAgZXZlbnRHcm91cHMsXG4gICAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyA9IGZhbHNlLFxuICB9OiBUcmFja0V2ZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdTdWJtaXR0aW5nIGV2ZW50JywgZXZlbnROYW1lKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb3JhdGVkRXZlbnROYW1lID0gYFtTcGlmZnldICR7ZXZlbnROYW1lfWA7XG5cbiAgICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ2FtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRFdmVudFByb3BzID0gQW1wbGl0dWRlU2VydmljZS5tYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH0pO1xuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZXZlbnREYXRhKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBhIGhhc2ggb2YgdGhlIGV2ZW50IHByb3BlcnRpZXMgdG8gdXNlIGFzIHRoZSBpbnNlcnRfaWQgc28gdGhhdCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgZGF0YSk7XG4gICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnNlcnRJZCA9IGhhc2hBcnJheS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcblxuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKGBhbXBsaXR1ZGUgdHJhY2tpbmcgJHtkZWNvcmF0ZWRFdmVudE5hbWV9YCwgbnVsbCwge1xuICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LnRyYWNrKFxuICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKCksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgICAuLi4obWFwcGVkRXZlbnRQcm9wc1xuICAgICAgICAgICAgPyB0aGlzLmV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhldmVudE5hbWUsIG1hcHBlZEV2ZW50UHJvcHMpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmV2ZW50R3JvdXBzLFxuICAgICAgICAgIGluc2VydF9pZDogY3VycmVudEluc2VydElkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWYgKGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgJiYgdGhpcy5jb25maWcub3JnR2FDb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogQWRkIGluIHdpbmRvd0RhdGFMYXllclNlcnZpY2Ugb3IgY29udGV4dCBhbHRlcm5hdGl2ZSBhbmQgaG9vayBpdCB1cCBoZXJlXG4gICAgICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gR0EgdHJhY2tpbmcnLCBkZWNvcmF0ZWRFdmVudE5hbWUpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRhdGFMYXllcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55W10pLnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignW3NwaWZmeS1haV0gRXJyb3IgdHJhY2tpbmcgZXZlbnQnLCBlcnIsIHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3VwcGxlbWVudGFsIGRlZmF1bHQgcHJvcHMgYXJlIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBwcm9wc1xuICBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMgPSBwcm9wcztcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWNBLElBQVksNEVBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUF5QkYsSUFBYSxtQkFBYixNQUFhLGlCQUFpQjtDQVM1QixZQUFZLFFBQWdDO2tDQUpnQixFQUFFO0FBSzVELE9BQUssU0FBUztBQUNkLE9BQUssWUFBWTs7Q0FHbkIsSUFBSSxVQUFtQjtBQUNyQixTQUFPLFFBQ0wsS0FBSyxPQUFPLFVBQ1osS0FBSyxPQUFPLHNCQUNaLEtBQUssT0FBTyxtQkFDWixLQUFLLGdCQUNOOztDQUdILEFBQVEsb0JBQW9CLEtBQTRCO0FBQ3RELE1BQUksS0FBSyxPQUFPLG9CQUNkLFFBQU8sS0FBSyxPQUFPLG9CQUFvQixJQUFJO0FBRTdDLE1BQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxhQUMxQyxRQUFPLE9BQU8sYUFBYSxRQUFRLElBQUk7QUFFekMsU0FBTzs7Q0FHVCxBQUFRLDBCQUFtRDtFQUN6RCxNQUFNLGVBQWUsT0FBTyxRQUFRLEtBQUssT0FBTyxtQkFBbUIsaUJBQWlCLENBQUM7RUFDckYsTUFBTSxhQUNKLGFBQWEsU0FBUyxJ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
|
|
310
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5janMiLCJuYW1lcyI6WyJMb2NhbFN0b3JhZ2VLZXlzIiwiZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiIsImVucmljaGVkRXZlbnQ6IEV2ZW50IiwiZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsIlNwaWZmeUV2ZW50IiwiY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50IiwiV2lkZ2V0VHlwZVYzIiwiQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSW5zdGFuY2UgfSBmcm9tICdAYW1wbGl0dWRlL2FuYWx5dGljcy1icm93c2VyJztcbmltcG9ydCB7IEV2ZW50c0Rpc3BhdGNoZXIsIFNwaWZmeUV2ZW50IH0gZnJvbSAnc3JjL2V2ZW50cyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VLZXlzIH0gZnJvbSAnc3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHQnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHR5cGUge1xuICBCcm93c2VyQ2xpZW50LFxuICBFbnJpY2htZW50UGx1Z2luLFxuICBFdmVudCxcbiAgU2VydmVyWm9uZVR5cGUsXG59IGZyb20gJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLXR5cGVzJztcbmltcG9ydCB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyc7XG5cbmV4cG9ydCBlbnVtIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUge1xuICBCdW5kbGVMb2FkZWQgPSAnQnVuZGxlIExvYWRlZCcsXG4gIEVudmlyb25tZW50SW5pdGlhbGl6ZWQgPSAnRW52aXJvbm1lbnQgSW5pdGlhbGl6ZWQnLFxuICBDaGF0TGl2ZUFnZW50QnRuQ2xpY2sgPSAnQ2hhdCBMaXZlIEFnZW50IEJ0biBDbGljaycsXG4gIENoYXRGbG9hdGluZ0J1dHRvblZpc2libGUgPSAnQ2hhdCBGbG9hdGluZyBCdXR0b24gVmlzaWJsZScsXG4gIENoYXRDb21wb25lbnRWaXNpYmxlID0gJ0NoYXQgQ29tcG9uZW50IFZpc2libGUnLFxuICBDaGF0Q29tcG9uZW50RXhwYW5kZWQgPSAnQ2hhdCBDb21wb25lbnQgRXhwYW5kZWQnLFxuICBDaGF0Q29tcG9uZW50Q29sbGFwc2VkID0gJ0NoYXQgQ29tcG9uZW50IENvbGxhcHNlZCcsXG4gIENoYXRVc2VyTWVzc2FnZUlucHV0ID0gJ0NoYXQgVXNlciBNZXNzYWdlIElucHV0JyxcbiAgQ2hhdFN1Z2dlc3Rpb25DbGlja2VkID0gJ0NoYXQgU3VnZ2VzdGlvbiBDbGlja2VkJyxcbiAgQ2hhdEFzc2lzdGFudFJlc3BvbnNlID0gJ0NoYXQgQXNzaXN0YW50IFJlc3BvbnNlJyxcbiAgUHJvZHVjdENhcmRDbGlja2VkID0gJ1Byb2R1Y3QgQ2FyZCBDbGlja2VkJyxcbiAgUHJvZHVjdFJldmlld0NhcmRDbGlja2VkID0gJ1Byb2R1Y3QgUmV2aWV3IENhcmQgQ2xpY2tlZCcsXG4gIEFkZFRvQ2FydENsaWNrZWQgPSAnQWRkIFRvIENhcnQgQ2xpY2tlZCcsXG4gIFByb21wdENhcmRDbGlja2VkID0gJ1Byb21wdCBDYXJkIENsaWNrZWQnLFxuICBTdXBwb3J0ZWRFdmVudCA9ICdTdXBwb3J0ZWQgRXZlbnQnLFxuICBTZWFyY2hCYWNrVG9SZXNwb25zZUNsaWNrZWQgPSAnU2VhcmNoIEJhY2sgdG8gUmVzcG9uc2UgQ2xpY2tlZCcsXG4gIFBlcmZvcm1hbmNlTWV0cmljcyA9ICdQZXJmb3JtYW5jZSBNZXRyaWNzJyxcbiAgU2VhcmNoQmFyQ2xpY2tlZCA9ICdTZWFyY2ggQmFyIENsaWNrZWQnLFxuICBPcmRlckxvb2t1cFN0YXJ0ZWQgPSAnT3JkZXIgTG9va3VwIFN0YXJ0ZWQnLFxuICBPcmRlckxvb2t1cEZvcm1TdWJtaXR0ZWQgPSAnT3JkZXIgTG9va3VwIEZvcm0gU3VibWl0dGVkJyxcbiAgU2VhcmNoQ29tcG9uZW50VmlzaWJsZSA9ICdTZWFyY2ggQ29tcG9uZW50IFZpc2libGUnLFxuICBTZWFyY2haZXJvU3RhdGVTdWdnZXN0aW9uQ2xpY2tlZCA9ICdTZWFyY2ggWmVybyBTdGF0ZSBTdWdnZXN0aW9uIENsaWNrZWQnLCAvLyBUaGlzIGlzIHRoZSBzY3JvbGxpbmcgbGlzdCBvZiBzdWdnZXN0aW9uIGJ1dHRvbnMgaW4gZ2xvYmFsIHNlYXJjaFxuICBTZWFyY2hJbnB1dFN0YXJ0ZWQgPSAnU2VhcmNoIElucHV0IFN0YXJ0ZWQnLFxuICBTZWFyY2hRdWVyeVN1Ym1pdHRlZCA9ICdTZWFyY2ggUXVlcnkgU3VibWl0dGVkJyxcbiAgLy8gU2VhcmNoQXV0b2NvbXBsZXRlVmlld2VkID0gJ1NlYXJjaCBBdXRvY29tcGxldGUgVmlld2VkJywgLy8gVE9ETzogYWRkIHRoaXMgd2hlbiBhdXRvY29tcGxldGUgaXMgYWRkZWRcbiAgLy8gU2VhcmNoQXV0b2NvbXBsZXRlQ2xpY2tlZCA9ICdTZWFyY2ggQXV0b2NvbXBsZXRlIENsaWNrZWQnLCAvLyBUT0RPOiBhZGQgdGhpcyB3aGVuIGF1dG9jb21wbGV0ZSBpcyBhZGRlZFxuICBTZWFyY2hSZXN1bHRzVmlld2VkID0gJ1NlYXJjaCBSZXN1bHRzIFZpZXdlZCcsXG4gIFNlYXJjaFRpbWVUb0ZpcnN0Q2xpY2sgPSAnU2VhcmNoIFRpbWUgdG8gRmlyc3QgQ2xpY2snLFxuICBTZWFyY2haZXJvUmVzdWx0c1JhdGUgPSAnU2VhcmNoIFplcm8gUmVzdWx0cyBSYXRlJyxcbiAgU2VhcmNoRmlsdGVyQ2xpY2tlZCA9ICdTZWFyY2ggRmlsdGVyIENsaWNrZWQnLFxuICBTZWFyY2hTb3J0Q2xpY2tlZCA9ICdTZWFyY2ggU29ydCBDbGlja2VkJyxcbn1cblxuZXhwb3J0IGVudW0gRW52aXZlTWV0cmljc0V2ZW50TmFtZSB7XG4gIFdpZGdldFJlbmRlcmVkID0gJ1dpZGdldCBSZW5kZXJlZCcsXG4gIFdpZGdldEludGVyYWN0aW9uID0gJ1dpZGdldCBJbnRlcmFjdGlvbicsXG4gIENoYXRSZXF1ZXN0ID0gJ0NoYXQgUmVxdWVzdCcsXG4gIENoYXRSZXNwb25zZSA9ICdDaGF0IFJlc3BvbnNlJyxcbiAgRW52aXZlSW5pdGlhbGl6ZWQgPSAnRW52aXZlIEluaXRpYWxpemVkJyxcbiAgUGFnZVZpZXdlZCA9ICdQYWdlIFZpZXdlZCcsIC8vIFdpbGwgdGhpcyBiZSB1c2VmdWw/XG4gIFdpZGdldFRleHRSZXF1ZXN0ID0gJ1dpZGdldCBUZXh0IFJlcXVlc3QnLFxuICBXaWRnZXRUZXh0UmVzcG9uc2UgPSAnV2lkZ2V0IFRleHQgUmVzcG9uc2UnLFxuICBXaWRnZXRUZXh0Q2xpY2tlZCA9ICdXaWRnZXQgVGV4dCBDbGlja2VkJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja0V2ZW50UGFyYW1zIHtcbiAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZTtcbiAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmVudEdyb3Vwcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnIHtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGFtcGxpdHVkZUFwaUtleTogc3RyaW5nO1xuICBkYXRhUmVzaWRlbmN5OiBzdHJpbmc7XG4gIGVudjogc3RyaW5nO1xuICBjb250ZXh0U291cmNlOiBzdHJpbmc7XG4gIG9yZ1Nob3J0TmFtZTogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgb3JnR2FDb25maWc/OiB1bmtub3duO1xuICBzaG93OiBib29sZWFuO1xuICBlbnZpdmVPbjogYm9vbGVhbjtcbiAgZW5hYmxlZEZlYXR1cmVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIGdldExvY2FsU3RvcmFnZUl0ZW06IG51bGwgfCAoKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsKTtcbn1cblxuZXhwb3J0IGNsYXNzIEFtcGxpdHVkZVNlcnZpY2Uge1xuICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDogQnJvd3NlckNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJlxuICAgICAgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmXG4gICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgJiZcbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUl0ZW0oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0oa2V5KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdzKCkpO1xuICAgIGNvbnN0IGdhdGVzUHJvcHMgPVxuICAgICAgZmVhdHVyZUdhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmZWF0dXJlR2F0ZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSB7fTsgLy8gTm8gZGlyZWN0IGVxdWl2YWxlbnQgZm9yIGV4cGVyaW1lbnRzIGluIEVudml2ZUNvbmZpZyB5ZXRcblxuICAgIGNvbnN0IGVudmlyb25tZW50UHJvcHMgPSB7XG4gICAgICAnZW52aXJvbm1lbnQuZXhlY3V0aW9uX2NvbnRleHQnOiAnYnVuZGxlJyxcbiAgICAgICdlbnZpcm9ubWVudC5wYWdlX3VybCc6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV91c2VyX2lkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2Vudmlyb25tZW50LmV4ZWN1dGlvbl9lbnZpcm9ubWVudCc6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICAnZW52aXJvbm1lbnQuY29udGV4dF9zb3VyY2UnOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgJ2Vudmlyb25tZW50LnNhbGVzX2FnZW50X2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LnNhbGVzQWdlbnQgPz8gZmFsc2UsXG4gICAgICAnZW52aXJvbm1lbnQuc2VhcmNoX2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LnNlYXJjaEFnZW50ID8/IGZhbHNlLFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV9vbl9xdWVyeV9wYXJhbSc6IHRoaXMuY29uZmlnLmVudml2ZU9uLFxuICAgICAgJ2Vudmlyb25tZW50LndpbmRvd19zaG93JzogdGhpcy5jb25maWcuc2hvdyxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uZW52aXZlLFxuICAgIH07XG5cbiAgICBjb25zdCBvcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMgPSBBbXBsaXR1ZGVTZXJ2aWNlLmlzRW52aXZlRXZlbnQoZXZlbnROYW1lKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZ1bGxGbGFnVmFsdWVzKCksXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICAgIC4uLmVudmlyb25tZW50UHJvcHMsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIGFwcF9pZDogJ2NvbW1lcmNlLWNoYXQtcmVhY3QtY29tcG9uZW50JyxcbiAgICAgIGNoYXRfaWQ6IHRoaXMuZ2V0TG9jYWxTdG9yYWdlSXRlbShMb2NhbFN0b3JhZ2VLZXlzLkNoYXRJZCksXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICBhcHBfc291cmNlOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgb3JnX2lkOiB0aGlzLmNvbmZpZy5vcmdJZCxcbiAgICAgICdvcmcuc2hvcnRfbmFtZSc6IHRoaXMuY29uZmlnLm9yZ1Nob3J0TmFtZSxcbiAgICAgICd1c2VyLmlkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2NkcC51c2VyX2lkJzogbnVsbCxcbiAgICAgICdjZHAucHJvdmlkZXInOiBudWxsLFxuICAgICAgJ2V2ZW50LnNvdXJjZSc6ICd3ZWItYnJvd3NlcicsXG4gICAgICAnZXZlbnQudHlwZSc6ICd1c2VyLWFjdGl2aXR5JyxcbiAgICAgICdldmVudC5pZCc6IG51bGwsXG4gICAgICAnZXZlbnQuY2hhbm5lbCc6ICd3ZWInLFxuICAgICAgJ2V2ZW50LnRpbWVzdGFtcCc6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByaXZhdGUgZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLmVudiddID0gU3RyaW5nKHRoaXMuY29uZmlnLmVudik7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZz8uZW5hYmxlZEZlYXR1cmVzID8/ICh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiksXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0aW1pbmdQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgJ3RpbWluZy5lbnJpY2hlZF9hdF9tcyc6XG4gICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3coKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgZXZlbnRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ldmVudC5ldmVudF9wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50X3R5cGUgYXMgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IGVucmljaG1lbnQ7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiYgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBMb2dnZXIubG9nRGVidWcoJ0FtcGxpdHVkZVNlcnZpY2UgaXMgbm90IHJlYWR5Jywge1xuICAgICAgICBpc1JlYWR5LFxuICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICAgaGFzRmVhdHVyZUZsYWdTZXJ2aWNlOiAhIXRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSxcbiAgICAgICAgaGFzQW1wbGl0dWRlQXBpS2V5OiAhIXRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCA9IGNyZWF0ZUluc3RhbmNlKCk7XG5cbiAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5hZGQodGhpcy5nZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpKTtcbiAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5pbml0KHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgdGhpcy5jb25maWcudXNlcklkLCB7XG4gICAgICAgIHNlcnZlclpvbmU6IHRoaXMuY29uZmlnLmRhdGFSZXNpZGVuY3kgYXMgU2VydmVyWm9uZVR5cGUsXG4gICAgICAgIHRyYWNraW5nT3B0aW9uczoge1xuICAgICAgICAgIGlwQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b2NhcHR1cmU6IHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbjogdHJ1ZSxcbiAgICAgICAgICBwYWdlVmlld3M6IHtcbiAgICAgICAgICAgIHRyYWNrSGlzdG9yeUNoYW5nZXM6ICdwYXRoT25seScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uczogZmFsc2UsXG4gICAgICAgICAgZm9ybUludGVyYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgZmlsZURvd25sb2FkczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50ID0gY3VycmVudEFtcGxpdHVkZUluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KHdpZGdldFR5cGU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAod2lkZ2V0VHlwZSkge1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuRmxvYXRpbmdCdXR0b25WMzpcbiAgICAgICAgcmV0dXJuICdmbG9hdGluZ19idXR0b24nO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlNvY2lhbFByb29mVjM6XG4gICAgICAgIHJldHVybiAnZW1iZWRkZWRfd2lkZ2V0JztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlRpdGxlZFByb21wdENhcm91c2VsVjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Qcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgICByZXR1cm4gJ3N1Z2dlc3Rpb25fYmFyJztcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjM6XG4gICAgICAgIHJldHVybiAnaW1hZ2VfcHJvbXB0X2NhcmQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0cmlnZ2VyTG9jYXRpb24pIHtcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9EVUNUX0NBUkRfVEVYVF9GSUVMRDpcbiAgICAgICAgcmV0dXJuICdwcm9tcHRfY2FyZCc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPTVBUX0NBUk9VU0VMOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlRJVExFRF9QUk9NUFRfQ0FST1VTRUw6XG4gICAgICAgIHJldHVybiAndG9wX3Jldmlld3Nfc25pcHBldCc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVFlQSU5HX0FOSU1BVElPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfUFJJTUFSWV9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1NFQ09OREFSWV9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX0NPTVBBUklTT05fUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9URVhUX0ZJRUxEOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ2NoYXRfcHJldmlldyc7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9PVkVSTEFZOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkZMT0FUSU5HX0NIQVRfQ0xPU0VfQlVUVE9OOlxuICAgICAgICByZXR1cm4gJ2luX2NoYXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJMb2NhdGlvbiBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWFwIHRoZSBldmVudCBwcm9wcyB0byB0aGUgY29ycmVjdCBmb3JtYXQgZm9yIHRoZSBsZWdhY3kgYW1wbGl0dWRlIGV2ZW50c1xuICBzdGF0aWMgbWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9OiBUcmFja0V2ZW50UGFyYW1zKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IG1lc3NhZ2VNZXRhZGF0YSA9IGV2ZW50UHJvcHM/Lm1lc3NhZ2VfbWV0YWRhdGEgPz8ge307XG4gICAgY29uc3QgdHJpZ2dlckxvY2F0aW9uID1cbiAgICAgIG1lc3NhZ2VNZXRhZGF0YSAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIG1lc3NhZ2VNZXRhZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICd0cmlnZ2VyX2xvY2F0aW9uJyBpbiBtZXNzYWdlTWV0YWRhdGFcbiAgICAgICAgPyBtZXNzYWdlTWV0YWRhdGEudHJpZ2dlcl9sb2NhdGlvblxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudEV4cGFuZGVkKSB7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50VmlzaWJsZSkge1xuICAgICAgY29uc3QgbWFwcGVkV2lkZ2V0VHlwZSA9IEFtcGxpdHVkZVNlcnZpY2UubWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudChcbiAgICAgICAgZXZlbnRQcm9wcz8ud2lkZ2V0X3R5cGUsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGNoYXRfY29tcG9uZW50OiBtYXBwZWRXaWRnZXRUeXBlLFxuICAgICAgICAnY2hhdC5jb21wb25lbnRfdmlzaWJsZSc6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRQcm9wcyA/PyB7fTtcbiAgfVxuXG4gIHN0YXRpYyBpc0Vudml2ZUV2ZW50KGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbnZpdmVNZXRyaWNzRXZlbnROYW1lKS5pbmNsdWRlcyhldmVudE5hbWUgYXMgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZGVjb3JhdGVFdmVudE5hbWUoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IHN0cmluZyB7XG4gICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNFbnZpdmVFdmVudChldmVudE5hbWUpKSB7XG4gICAgICByZXR1cm4gYFtFbnZpdmVdICR7ZXZlbnROYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiBgW1NwaWZmeV0gJHtldmVudE5hbWV9YDtcbiAgfVxuXG4gIGFzeW5jIHRyYWNrRXZlbnQoe1xuICAgIGV2ZW50TmFtZSxcbiAgICBldmVudFByb3BzLFxuICAgIGV2ZW50R3JvdXBzLFxuICAgIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgPSBmYWxzZSxcbiAgfTogVHJhY2tFdmVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnU3VibWl0dGluZyBldmVudCcsIGV2ZW50TmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29yYXRlZEV2ZW50TmFtZSA9IEFtcGxpdHVkZVNlcnZpY2UuZGVjb3JhdGVFdmVudE5hbWUoZXZlbnROYW1lKTtcblxuICAgICAgaWYgKCF0aGlzLmFtcGxpdHVkZUNsaWVudCkge1xuICAgICAgICBMb2dnZXIubG9nV2FybignYW1wbGl0dWRlIGNsaWVudCB1bmRlZmluZWQnLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcHBlZEV2ZW50UHJvcHMgPSBBbXBsaXR1ZGVTZXJ2aWNlLm1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfSk7XG5cbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShldmVudERhdGEpO1xuICAgICAgLy8gY2FsY3VsYXRlIGEgaGFzaCBvZiB0aGUgZXZlbnQgcHJvcGVydGllcyB0byB1c2UgYXMgdGhlIGluc2VydF9pZCBzbyB0aGF0IGR1cGxpY2F0ZSBldmVudHNcbiAgICAgIC8vIGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgYnkgQW1wbGl0dWRlXG4gICAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKTtcbiAgICAgIGNvbnN0IGhhc2hBcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpO1xuICAgICAgY29uc3QgY3VycmVudEluc2VydElkID0gaGFzaEFycmF5Lm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuXG4gICAgICBMb2dnZXIubG9nRGVidWcoYGFtcGxpdHVkZSB0cmFja2luZyAke2RlY29yYXRlZEV2ZW50TmFtZX1gLCBudWxsLCB7XG4gICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgcHJvcHM6IG1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hbXBsaXR1ZGVDbGllbnQudHJhY2soXG4gICAgICAgIGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoZXZlbnROYW1lKSxcbiAgICAgICAgICAuLi5tYXBwZWRFdmVudFByb3BzLFxuICAgICAgICAgIC4uLihtYXBwZWRFdmVudFByb3BzXG4gICAgICAgICAgICA/IHRoaXMuZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKGV2ZW50TmFtZSwgbWFwcGVkRXZlbnRQcm9wcylcbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZXZlbnRHcm91cHMsXG4gICAgICAgICAgaW5zZXJ0X2lkOiBjdXJyZW50SW5zZXJ0SWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyAmJiB0aGlzLmNvbmZpZy5vcmdHYUNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBBZGQgaW4gd2luZG93RGF0YUxheWVyU2VydmljZSBvciBjb250ZXh0IGFsdGVybmF0aXZlIGFuZCBob29rIGl0IHVwIGhlcmVcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBHQSB0cmFja2luZycsIGRlY29yYXRlZEV2ZW50TmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICBldmVudDogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdbc3BpZmZ5LWFpXSBFcnJvciB0cmFja2luZyBldmVudCcsIGVyciwge1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgdGhhdCBzdXBwbGVtZW50YWwgZGVmYXVsdCBwcm9wcyBhcmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHByb3BzXG4gIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyA9IHByb3BzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBY0EsSUFBWSw0RUFBTDtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdGLElBQVksNEVBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQTBCRixJQUFhLG1CQUFiLE1BQWEsaUJBQWlCO0NBUzVCLFlBQVksUUFBZ0M7a0NBSmdCLEVBQUU7QUFLNUQsT0FBSyxTQUFTO0FBQ2QsT0FBSyxZQUFZOztDQUduQixJQUFJLFVBQW1CO0FBQ3JCLFNBQU8sUUFDTCxLQUFLLE9BQU8sVUFDWixLQUFLLE9BQU8sc0JBQ1osS0FBSyxPQUFPLG1CQUNaLEtBQUssZ0JBQ047O0NBR0gsQUFBUSxvQkFBb0IsS0FBNEI7QUFDdEQsTUFBSSxLQUFLLE9BQU8sb0JBQ2QsUUFBTyxLQUFLLE9B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
|
|
@@ -33,8 +33,20 @@ declare enum SpiffyMetricsEventName {
|
|
|
33
33
|
SearchFilterClicked = "Search Filter Clicked",
|
|
34
34
|
SearchSortClicked = "Search Sort Clicked",
|
|
35
35
|
}
|
|
36
|
+
declare enum EnviveMetricsEventName {
|
|
37
|
+
WidgetRendered = "Widget Rendered",
|
|
38
|
+
WidgetInteraction = "Widget Interaction",
|
|
39
|
+
ChatRequest = "Chat Request",
|
|
40
|
+
ChatResponse = "Chat Response",
|
|
41
|
+
EnviveInitialized = "Envive Initialized",
|
|
42
|
+
PageViewed = "Page Viewed",
|
|
43
|
+
// Will this be useful?
|
|
44
|
+
WidgetTextRequest = "Widget Text Request",
|
|
45
|
+
WidgetTextResponse = "Widget Text Response",
|
|
46
|
+
WidgetTextClicked = "Widget Text Clicked",
|
|
47
|
+
}
|
|
36
48
|
interface TrackEventParams {
|
|
37
|
-
eventName: SpiffyMetricsEventName;
|
|
49
|
+
eventName: SpiffyMetricsEventName | EnviveMetricsEventName;
|
|
38
50
|
eventProps?: Record<string, unknown>;
|
|
39
51
|
eventGroups?: Record<string, unknown>;
|
|
40
52
|
alsoSendToGoogleAnalytics?: boolean;
|
|
@@ -50,6 +62,7 @@ interface AmplitudeServiceConfig {
|
|
|
50
62
|
featureFlagService: FeatureFlagService;
|
|
51
63
|
orgGaConfig?: unknown;
|
|
52
64
|
show: boolean;
|
|
65
|
+
enviveOn: boolean;
|
|
53
66
|
enabledFeatures?: Record<string, boolean>;
|
|
54
67
|
getLocalStorageItem: null | ((key: string) => string | null);
|
|
55
68
|
}
|
|
@@ -71,6 +84,8 @@ declare class AmplitudeService {
|
|
|
71
84
|
eventName,
|
|
72
85
|
eventProps
|
|
73
86
|
}: TrackEventParams): Record<string, unknown>;
|
|
87
|
+
static isEnviveEvent(eventName: SpiffyMetricsEventName | EnviveMetricsEventName): boolean;
|
|
88
|
+
static decorateEventName(eventName: SpiffyMetricsEventName | EnviveMetricsEventName): string;
|
|
74
89
|
trackEvent({
|
|
75
90
|
eventName,
|
|
76
91
|
eventProps,
|
|
@@ -80,5 +95,5 @@ declare class AmplitudeService {
|
|
|
80
95
|
setSupplementalDefaultProps(props: Record<string, unknown>): void;
|
|
81
96
|
}
|
|
82
97
|
//#endregion
|
|
83
|
-
export { AmplitudeService, AmplitudeServiceConfig, SpiffyMetricsEventName, TrackEventParams };
|
|
84
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
98
|
+
export { AmplitudeService, AmplitudeServiceConfig, EnviveMetricsEventName, SpiffyMetricsEventName, TrackEventParams };
|
|
99
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5kLmN0cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCc7XG5leHBvcnQgZGVjbGFyZSBlbnVtIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUge1xuICAgIEJ1bmRsZUxvYWRlZCA9IFwiQnVuZGxlIExvYWRlZFwiLFxuICAgIEVudmlyb25tZW50SW5pdGlhbGl6ZWQgPSBcIkVudmlyb25tZW50IEluaXRpYWxpemVkXCIsXG4gICAgQ2hhdExpdmVBZ2VudEJ0bkNsaWNrID0gXCJDaGF0IExpdmUgQWdlbnQgQnRuIENsaWNrXCIsXG4gICAgQ2hhdEZsb2F0aW5nQnV0dG9uVmlzaWJsZSA9IFwiQ2hhdCBGbG9hdGluZyBCdXR0b24gVmlzaWJsZVwiLFxuICAgIENoYXRDb21wb25lbnRWaXNpYmxlID0gXCJDaGF0IENvbXBvbmVudCBWaXNpYmxlXCIsXG4gICAgQ2hhdENvbXBvbmVudEV4cGFuZGVkID0gXCJDaGF0IENvbXBvbmVudCBFeHBhbmRlZFwiLFxuICAgIENoYXRDb21wb25lbnRDb2xsYXBzZWQgPSBcIkNoYXQgQ29tcG9uZW50IENvbGxhcHNlZFwiLFxuICAgIENoYXRVc2VyTWVzc2FnZUlucHV0ID0gXCJDaGF0IFVzZXIgTWVzc2FnZSBJbnB1dFwiLFxuICAgIENoYXRTdWdnZXN0aW9uQ2xpY2tlZCA9IFwiQ2hhdCBTdWdnZXN0aW9uIENsaWNrZWRcIixcbiAgICBDaGF0QXNzaXN0YW50UmVzcG9uc2UgPSBcIkNoYXQgQXNzaXN0YW50IFJlc3BvbnNlXCIsXG4gICAgUHJvZHVjdENhcmRDbGlja2VkID0gXCJQcm9kdWN0IENhcmQgQ2xpY2tlZFwiLFxuICAgIFByb2R1Y3RSZXZpZXdDYXJkQ2xpY2tlZCA9IFwiUHJvZHVjdCBSZXZpZXcgQ2FyZCBDbGlja2VkXCIsXG4gICAgQWRkVG9DYXJ0Q2xpY2tlZCA9IFwiQWRkIFRvIENhcnQgQ2xpY2tlZFwiLFxuICAgIFByb21wdENhcmRDbGlja2VkID0gXCJQcm9tcHQgQ2FyZCBDbGlja2VkXCIsXG4gICAgU3VwcG9ydGVkRXZlbnQgPSBcIlN1cHBvcnRlZCBFdmVudFwiLFxuICAgIFNlYXJjaEJhY2tUb1Jlc3BvbnNlQ2xpY2tlZCA9IFwiU2VhcmNoIEJhY2sgdG8gUmVzcG9uc2UgQ2xpY2tlZFwiLFxuICAgIFBlcmZvcm1hbmNlTWV0cmljcyA9IFwiUGVyZm9ybWFuY2UgTWV0cmljc1wiLFxuICAgIFNlYXJjaEJhckNsaWNrZWQgPSBcIlNlYXJjaCBCYXIgQ2xpY2tlZFwiLFxuICAgIE9yZGVyTG9va3VwU3RhcnRlZCA9IFwiT3JkZXIgTG9va3VwIFN0YXJ0ZWRcIixcbiAgICBPcmRlckxvb2t1cEZvcm1TdWJtaXR0ZWQgPSBcIk9yZGVyIExvb2t1cCBGb3JtIFN1Ym1pdHRlZFwiLFxuICAgIFNlYXJjaENvbXBvbmVudFZpc2libGUgPSBcIlNlYXJjaCBDb21wb25lbnQgVmlzaWJsZVwiLFxuICAgIFNlYXJjaFplcm9TdGF0ZVN1Z2dlc3Rpb25DbGlja2VkID0gXCJTZWFyY2ggWmVybyBTdGF0ZSBTdWdnZXN0aW9uIENsaWNrZWRcIiwvLyBUaGlzIGlzIHRoZSBzY3JvbGxpbmcgbGlzdCBvZiBzdWdnZXN0aW9uIGJ1dHRvbnMgaW4gZ2xvYmFsIHNlYXJjaFxuICAgIFNlYXJjaElucHV0U3RhcnRlZCA9IFwiU2VhcmNoIElucHV0IFN0YXJ0ZWRcIixcbiAgICBTZWFyY2hRdWVyeVN1Ym1pdHRlZCA9IFwiU2VhcmNoIFF1ZXJ5IFN1Ym1pdHRlZFwiLFxuICAgIFNlYXJjaFJlc3VsdHNWaWV3ZWQgPSBcIlNlYXJjaCBSZXN1bHRzIFZpZXdlZFwiLFxuICAgIFNlYXJjaFRpbWVUb0ZpcnN0Q2xpY2sgPSBcIlNlYXJjaCBUaW1lIHRvIEZpcnN0IENsaWNrXCIsXG4gICAgU2VhcmNoWmVyb1Jlc3VsdHNSYXRlID0gXCJTZWFyY2ggWmVybyBSZXN1bHRzIFJhdGVcIixcbiAgICBTZWFyY2hGaWx0ZXJDbGlja2VkID0gXCJTZWFyY2ggRmlsdGVyIENsaWNrZWRcIixcbiAgICBTZWFyY2hTb3J0Q2xpY2tlZCA9IFwiU2VhcmNoIFNvcnQgQ2xpY2tlZFwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIEVudml2ZU1ldHJpY3NFdmVudE5hbWUge1xuICAgIFdpZGdldFJlbmRlcmVkID0gXCJXaWRnZXQgUmVuZGVyZWRcIixcbiAgICBXaWRnZXRJbnRlcmFjdGlvbiA9IFwiV2lkZ2V0IEludGVyYWN0aW9uXCIsXG4gICAgQ2hhdFJlcXVlc3QgPSBcIkNoYXQgUmVxdWVzdFwiLFxuICAgIENoYXRSZXNwb25zZSA9IFwiQ2hhdCBSZXNwb25zZVwiLFxuICAgIEVudml2ZUluaXRpYWxpemVkID0gXCJFbnZpdmUgSW5pdGlhbGl6ZWRcIixcbiAgICBQYWdlVmlld2VkID0gXCJQYWdlIFZpZXdlZFwiLC8vIFdpbGwgdGhpcyBiZSB1c2VmdWw/XG4gICAgV2lkZ2V0VGV4dFJlcXVlc3QgPSBcIldpZGdldCBUZXh0IFJlcXVlc3RcIixcbiAgICBXaWRnZXRUZXh0UmVzcG9uc2UgPSBcIldpZGdldCBUZXh0IFJlc3BvbnNlXCIsXG4gICAgV2lkZ2V0VGV4dENsaWNrZWQgPSBcIldpZGdldCBUZXh0IENsaWNrZWRcIlxufVxuZXhwb3J0IGludGVyZmFjZSBUcmFja0V2ZW50UGFyYW1zIHtcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lO1xuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBldmVudEdyb3Vwcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3M/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnIHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBhbXBsaXR1ZGVBcGlLZXk6IHN0cmluZztcbiAgICBkYXRhUmVzaWRlbmN5OiBzdHJpbmc7XG4gICAgZW52OiBzdHJpbmc7XG4gICAgY29udGV4dFNvdXJjZTogc3RyaW5nO1xuICAgIG9yZ1Nob3J0TmFtZTogc3RyaW5nO1xuICAgIG9yZ0lkOiBzdHJpbmc7XG4gICAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gICAgb3JnR2FDb25maWc/OiB1bmtub3duO1xuICAgIHNob3c6IGJvb2xlYW47XG4gICAgZW52aXZlT246IGJvb2xlYW47XG4gICAgZW5hYmxlZEZlYXR1cmVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQW1wbGl0dWRlU2VydmljZSB7XG4gICAgcHJpdmF0ZSBhbXBsaXR1ZGVDbGllbnQ7XG4gICAgcHJpdmF0ZSBpbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50O1xuICAgIHByaXZhdGUgc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzO1xuICAgIHByaXZhdGUgY29uZmlnO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogQW1wbGl0dWRlU2VydmljZUNvbmZpZyk7XG4gICAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUl0ZW07XG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0VHJhY2tpbmdQcm9wcztcbiAgICBwcml2YXRlIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcztcbiAgICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50O1xuICAgIHByaXZhdGUgaW5pdGlhbGl6ZTtcbiAgICBzdGF0aWMgbWFwV2lkZ2V0VHlwZVRvQ2hhdENvbXBvbmVudCh3aWRnZXRUeXBlOiB1bmtub3duKTogc3RyaW5nO1xuICAgIHN0YXRpYyBtYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uOiB1bmtub3duKTogc3RyaW5nO1xuICAgIHN0YXRpYyBtYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGF0aWMgaXNFbnZpdmVFdmVudChldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTogYm9vbGVhbjtcbiAgICBzdGF0aWMgZGVjb3JhdGVFdmVudE5hbWUoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IHN0cmluZztcbiAgICB0cmFja0V2ZW50KHsgZXZlbnROYW1lLCBldmVudFByb3BzLCBldmVudEdyb3VwcywgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcywgfTogVHJhY2tFdmVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gICAgc2V0U3VwcGxlbWVudGFsRGVmYXVsdFByb3BzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUNBLElBQVcseUJBQXlCLENBQUMsSUFBSTtBQUN6QyxJQUFXLHlCQUF1QixDQUFBLElBQUE7QUFDbEMsSUFBVyxtQkFBbUI7Q0FBQztPQUFXO09BQVk7T0FBQTtPQUFBO0NBQUE7QUFDdEQsSUFBVyx5QkFBeUI7Q0FBQztPQUFXO09BQU87Q0FBQTtBQUN2RCxJQUFXLG1CQUFtQjtDQUFDO09BQVc7T0FBb0I7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUEifQ==
|
|
@@ -33,8 +33,20 @@ declare enum SpiffyMetricsEventName {
|
|
|
33
33
|
SearchFilterClicked = "Search Filter Clicked",
|
|
34
34
|
SearchSortClicked = "Search Sort Clicked",
|
|
35
35
|
}
|
|
36
|
+
declare enum EnviveMetricsEventName {
|
|
37
|
+
WidgetRendered = "Widget Rendered",
|
|
38
|
+
WidgetInteraction = "Widget Interaction",
|
|
39
|
+
ChatRequest = "Chat Request",
|
|
40
|
+
ChatResponse = "Chat Response",
|
|
41
|
+
EnviveInitialized = "Envive Initialized",
|
|
42
|
+
PageViewed = "Page Viewed",
|
|
43
|
+
// Will this be useful?
|
|
44
|
+
WidgetTextRequest = "Widget Text Request",
|
|
45
|
+
WidgetTextResponse = "Widget Text Response",
|
|
46
|
+
WidgetTextClicked = "Widget Text Clicked",
|
|
47
|
+
}
|
|
36
48
|
interface TrackEventParams {
|
|
37
|
-
eventName: SpiffyMetricsEventName;
|
|
49
|
+
eventName: SpiffyMetricsEventName | EnviveMetricsEventName;
|
|
38
50
|
eventProps?: Record<string, unknown>;
|
|
39
51
|
eventGroups?: Record<string, unknown>;
|
|
40
52
|
alsoSendToGoogleAnalytics?: boolean;
|
|
@@ -50,6 +62,7 @@ interface AmplitudeServiceConfig {
|
|
|
50
62
|
featureFlagService: FeatureFlagService;
|
|
51
63
|
orgGaConfig?: unknown;
|
|
52
64
|
show: boolean;
|
|
65
|
+
enviveOn: boolean;
|
|
53
66
|
enabledFeatures?: Record<string, boolean>;
|
|
54
67
|
getLocalStorageItem: null | ((key: string) => string | null);
|
|
55
68
|
}
|
|
@@ -71,6 +84,8 @@ declare class AmplitudeService {
|
|
|
71
84
|
eventName,
|
|
72
85
|
eventProps
|
|
73
86
|
}: TrackEventParams): Record<string, unknown>;
|
|
87
|
+
static isEnviveEvent(eventName: SpiffyMetricsEventName | EnviveMetricsEventName): boolean;
|
|
88
|
+
static decorateEventName(eventName: SpiffyMetricsEventName | EnviveMetricsEventName): string;
|
|
74
89
|
trackEvent({
|
|
75
90
|
eventName,
|
|
76
91
|
eventProps,
|
|
@@ -80,5 +95,5 @@ declare class AmplitudeService {
|
|
|
80
95
|
setSupplementalDefaultProps(props: Record<string, unknown>): void;
|
|
81
96
|
}
|
|
82
97
|
//#endregion
|
|
83
|
-
export { AmplitudeService, AmplitudeServiceConfig, SpiffyMetricsEventName, TrackEventParams };
|
|
84
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
98
|
+
export { AmplitudeService, AmplitudeServiceConfig, EnviveMetricsEventName, SpiffyMetricsEventName, TrackEventParams };
|
|
99
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICdzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0JztcbmV4cG9ydCBkZWNsYXJlIGVudW0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB7XG4gICAgQnVuZGxlTG9hZGVkID0gXCJCdW5kbGUgTG9hZGVkXCIsXG4gICAgRW52aXJvbm1lbnRJbml0aWFsaXplZCA9IFwiRW52aXJvbm1lbnQgSW5pdGlhbGl6ZWRcIixcbiAgICBDaGF0TGl2ZUFnZW50QnRuQ2xpY2sgPSBcIkNoYXQgTGl2ZSBBZ2VudCBCdG4gQ2xpY2tcIixcbiAgICBDaGF0RmxvYXRpbmdCdXR0b25WaXNpYmxlID0gXCJDaGF0IEZsb2F0aW5nIEJ1dHRvbiBWaXNpYmxlXCIsXG4gICAgQ2hhdENvbXBvbmVudFZpc2libGUgPSBcIkNoYXQgQ29tcG9uZW50IFZpc2libGVcIixcbiAgICBDaGF0Q29tcG9uZW50RXhwYW5kZWQgPSBcIkNoYXQgQ29tcG9uZW50IEV4cGFuZGVkXCIsXG4gICAgQ2hhdENvbXBvbmVudENvbGxhcHNlZCA9IFwiQ2hhdCBDb21wb25lbnQgQ29sbGFwc2VkXCIsXG4gICAgQ2hhdFVzZXJNZXNzYWdlSW5wdXQgPSBcIkNoYXQgVXNlciBNZXNzYWdlIElucHV0XCIsXG4gICAgQ2hhdFN1Z2dlc3Rpb25DbGlja2VkID0gXCJDaGF0IFN1Z2dlc3Rpb24gQ2xpY2tlZFwiLFxuICAgIENoYXRBc3Npc3RhbnRSZXNwb25zZSA9IFwiQ2hhdCBBc3Npc3RhbnQgUmVzcG9uc2VcIixcbiAgICBQcm9kdWN0Q2FyZENsaWNrZWQgPSBcIlByb2R1Y3QgQ2FyZCBDbGlja2VkXCIsXG4gICAgUHJvZHVjdFJldmlld0NhcmRDbGlja2VkID0gXCJQcm9kdWN0IFJldmlldyBDYXJkIENsaWNrZWRcIixcbiAgICBBZGRUb0NhcnRDbGlja2VkID0gXCJBZGQgVG8gQ2FydCBDbGlja2VkXCIsXG4gICAgUHJvbXB0Q2FyZENsaWNrZWQgPSBcIlByb21wdCBDYXJkIENsaWNrZWRcIixcbiAgICBTdXBwb3J0ZWRFdmVudCA9IFwiU3VwcG9ydGVkIEV2ZW50XCIsXG4gICAgU2VhcmNoQmFja1RvUmVzcG9uc2VDbGlja2VkID0gXCJTZWFyY2ggQmFjayB0byBSZXNwb25zZSBDbGlja2VkXCIsXG4gICAgUGVyZm9ybWFuY2VNZXRyaWNzID0gXCJQZXJmb3JtYW5jZSBNZXRyaWNzXCIsXG4gICAgU2VhcmNoQmFyQ2xpY2tlZCA9IFwiU2VhcmNoIEJhciBDbGlja2VkXCIsXG4gICAgT3JkZXJMb29rdXBTdGFydGVkID0gXCJPcmRlciBMb29rdXAgU3RhcnRlZFwiLFxuICAgIE9yZGVyTG9va3VwRm9ybVN1Ym1pdHRlZCA9IFwiT3JkZXIgTG9va3VwIEZvcm0gU3VibWl0dGVkXCIsXG4gICAgU2VhcmNoQ29tcG9uZW50VmlzaWJsZSA9IFwiU2VhcmNoIENvbXBvbmVudCBWaXNpYmxlXCIsXG4gICAgU2VhcmNoWmVyb1N0YXRlU3VnZ2VzdGlvbkNsaWNrZWQgPSBcIlNlYXJjaCBaZXJvIFN0YXRlIFN1Z2dlc3Rpb24gQ2xpY2tlZFwiLC8vIFRoaXMgaXMgdGhlIHNjcm9sbGluZyBsaXN0IG9mIHN1Z2dlc3Rpb24gYnV0dG9ucyBpbiBnbG9iYWwgc2VhcmNoXG4gICAgU2VhcmNoSW5wdXRTdGFydGVkID0gXCJTZWFyY2ggSW5wdXQgU3RhcnRlZFwiLFxuICAgIFNlYXJjaFF1ZXJ5U3VibWl0dGVkID0gXCJTZWFyY2ggUXVlcnkgU3VibWl0dGVkXCIsXG4gICAgU2VhcmNoUmVzdWx0c1ZpZXdlZCA9IFwiU2VhcmNoIFJlc3VsdHMgVmlld2VkXCIsXG4gICAgU2VhcmNoVGltZVRvRmlyc3RDbGljayA9IFwiU2VhcmNoIFRpbWUgdG8gRmlyc3QgQ2xpY2tcIixcbiAgICBTZWFyY2haZXJvUmVzdWx0c1JhdGUgPSBcIlNlYXJjaCBaZXJvIFJlc3VsdHMgUmF0ZVwiLFxuICAgIFNlYXJjaEZpbHRlckNsaWNrZWQgPSBcIlNlYXJjaCBGaWx0ZXIgQ2xpY2tlZFwiLFxuICAgIFNlYXJjaFNvcnRDbGlja2VkID0gXCJTZWFyY2ggU29ydCBDbGlja2VkXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGVudW0gRW52aXZlTWV0cmljc0V2ZW50TmFtZSB7XG4gICAgV2lkZ2V0UmVuZGVyZWQgPSBcIldpZGdldCBSZW5kZXJlZFwiLFxuICAgIFdpZGdldEludGVyYWN0aW9uID0gXCJXaWRnZXQgSW50ZXJhY3Rpb25cIixcbiAgICBDaGF0UmVxdWVzdCA9IFwiQ2hhdCBSZXF1ZXN0XCIsXG4gICAgQ2hhdFJlc3BvbnNlID0gXCJDaGF0IFJlc3BvbnNlXCIsXG4gICAgRW52aXZlSW5pdGlhbGl6ZWQgPSBcIkVudml2ZSBJbml0aWFsaXplZFwiLFxuICAgIFBhZ2VWaWV3ZWQgPSBcIlBhZ2UgVmlld2VkXCIsLy8gV2lsbCB0aGlzIGJlIHVzZWZ1bD9cbiAgICBXaWRnZXRUZXh0UmVxdWVzdCA9IFwiV2lkZ2V0IFRleHQgUmVxdWVzdFwiLFxuICAgIFdpZGdldFRleHRSZXNwb25zZSA9IFwiV2lkZ2V0IFRleHQgUmVzcG9uc2VcIixcbiAgICBXaWRnZXRUZXh0Q2xpY2tlZCA9IFwiV2lkZ2V0IFRleHQgQ2xpY2tlZFwiXG59XG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrRXZlbnRQYXJhbXMge1xuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWU7XG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGV2ZW50R3JvdXBzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcz86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIEFtcGxpdHVkZVNlcnZpY2VDb25maWcge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGFtcGxpdHVkZUFwaUtleTogc3RyaW5nO1xuICAgIGRhdGFSZXNpZGVuY3k6IHN0cmluZztcbiAgICBlbnY6IHN0cmluZztcbiAgICBjb250ZXh0U291cmNlOiBzdHJpbmc7XG4gICAgb3JnU2hvcnROYW1lOiBzdHJpbmc7XG4gICAgb3JnSWQ6IHN0cmluZztcbiAgICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgICBvcmdHYUNvbmZpZz86IHVua25vd247XG4gICAgc2hvdzogYm9vbGVhbjtcbiAgICBlbnZpdmVPbjogYm9vbGVhbjtcbiAgICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICBnZXRMb2NhbFN0b3JhZ2VJdGVtOiBudWxsIHwgKChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCk7XG59XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBBbXBsaXR1ZGVTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDtcbiAgICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ7XG4gICAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM7XG4gICAgcHJpdmF0ZSBjb25maWc7XG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKTtcbiAgICBnZXQgaXNSZWFkeSgpOiBib29sZWFuO1xuICAgIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlSXRlbTtcbiAgICBwcml2YXRlIGdldERlZmF1bHRUcmFja2luZ1Byb3BzO1xuICAgIHByaXZhdGUgZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzO1xuICAgIHByaXZhdGUgZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQ7XG4gICAgcHJpdmF0ZSBpbml0aWFsaXplO1xuICAgIHN0YXRpYyBtYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KHdpZGdldFR5cGU6IHVua25vd24pOiBzdHJpbmc7XG4gICAgc3RhdGljIG1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb246IHVua25vd24pOiBzdHJpbmc7XG4gICAgc3RhdGljIG1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfTogVHJhY2tFdmVudFBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHN0YXRpYyBpc0Vudml2ZUV2ZW50KGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBib29sZWFuO1xuICAgIHN0YXRpYyBkZWNvcmF0ZUV2ZW50TmFtZShldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTogc3RyaW5nO1xuICAgIHRyYWNrRXZlbnQoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMsIGV2ZW50R3JvdXBzLCBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzLCB9OiBUcmFja0V2ZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyx5QkFBeUIsQ0FBQyxJQUFJO0FBQ3pDLElBQVcseUJBQXVCLENBQUEsSUFBQTtBQUNsQyxJQUFXLG1CQUFtQjtDQUFDO09BQVc7T0FBWTtPQUFBO09BQUE7Q0FBQTtBQUN0RCxJQUFXLHlCQUF5QjtDQUFDO09BQVc7T0FBTztDQUFBO0FBQ3ZELElBQVcsbUJBQW1CO0NBQUM7T0FBVztPQUFvQjtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
|