@sunbird-cb/utils-v2 0.0.21 → 0.0.22-ang-9-12
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/bundles/sunbird-cb-utils-v2.umd.js +1284 -2508
- package/bundles/sunbird-cb-utils-v2.umd.js.map +1 -1
- package/bundles/sunbird-cb-utils-v2.umd.min.js +1 -1
- package/bundles/sunbird-cb-utils-v2.umd.min.js.map +1 -1
- package/esm2015/lib/components/image-crop/image-crop.component.js +19 -47
- package/esm2015/lib/components/image-crop/image-crop.module.js +8 -2
- package/esm2015/lib/constants/features.enum.js +555 -555
- package/esm2015/lib/constants/instances.enum.js +5 -5
- package/esm2015/lib/constants/misc.constants.js +1 -0
- package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +11 -21
- package/esm2015/lib/directives/default-thumbnail/default-thumbnail.directive.js +1 -7
- package/esm2015/lib/directives/image-responsive/image-responsive.directive.js +6 -11
- package/esm2015/lib/directives/in-view-port/in-view-port.directive.js +9 -12
- package/esm2015/lib/directives/navigation/navigation.directive.js +1 -6
- package/esm2015/lib/helpers/functions/getStringifiedQueryParams.js +4 -4
- package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +10 -19
- package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +4 -2
- package/esm2015/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.component.js +15 -31
- package/esm2015/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.module.js +4 -2
- package/esm2015/lib/helpers/logout/logout.component.js +11 -14
- package/esm2015/lib/helpers/logout/logout.module.js +3 -2
- package/esm2015/lib/models/profile-v3.models.js +2 -104
- package/esm2015/lib/pipes/pipe-certificate-image-URL/pipe-certimage-URL.pipe.js +4 -4
- package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +1 -7
- package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +1 -1
- package/esm2015/lib/pipes/pipe-coursename/pipe-coursename.pipe.js +1 -1
- package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +1 -11
- package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +1 -1
- package/esm2015/lib/pipes/pipe-filter/pipe-filter.pipe.js +3 -3
- package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +5 -5
- package/esm2015/lib/pipes/pipe-filter-v2/pipe-filter-v2.pipe.js +3 -3
- package/esm2015/lib/pipes/pipe-filter-v3/pipe-filter-v3.pipe.js +6 -6
- package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +1 -1
- package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +4 -4
- package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +1 -6
- package/esm2015/lib/pipes/pipe-nic-relative/pipe-nic-relative.pipe.js +4 -4
- package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +1 -4
- package/esm2015/lib/pipes/pipe-ordinal/pipe-ordinal.pipe.js +1 -1
- package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +1 -1
- package/esm2015/lib/pipes/pipe-public-URL/pipe-public-URL.pipe.js +4 -4
- package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +5 -5
- package/esm2015/lib/resolvers/explore-detail.resolver.js +17 -19
- package/esm2015/lib/resolvers/marketing-offering.resolve.js +10 -10
- package/esm2015/lib/resolvers/module-name.resolver.js +2 -5
- package/esm2015/lib/resolvers/page-name.resolver.js +2 -2
- package/esm2015/lib/resolvers/page.constant.js +1 -1
- package/esm2015/lib/resolvers/page.model.js +2 -48
- package/esm2015/lib/resolvers/page.resolver.js +16 -17
- package/esm2015/lib/resolvers/resolver.model.js +2 -6
- package/esm2015/lib/services/auth-keycloak.service.js +35 -35
- package/esm2015/lib/services/auth-microsoft.service.js +21 -17
- package/esm2015/lib/services/card-content.model.js +1 -21
- package/esm2015/lib/services/configurations.model.js +2 -551
- package/esm2015/lib/services/configurations.service.js +2 -63
- package/esm2015/lib/services/content-strip-multiple.model.js +2 -75
- package/esm2015/lib/services/event.model.js +1 -114
- package/esm2015/lib/services/event.service.js +31 -24
- package/esm2015/lib/services/logger.service.js +8 -13
- package/esm2015/lib/services/ms-office.model.js +2 -8
- package/esm2015/lib/services/multilingual-translations.service.js +11 -15
- package/esm2015/lib/services/nps-grid.service.js +6 -8
- package/esm2015/lib/services/subapplication-respond.service.js +16 -20
- package/esm2015/lib/services/telemetry.service.js +73 -80
- package/esm2015/lib/services/user-preference.model.js +2 -38
- package/esm2015/lib/services/user-preference.service.js +23 -15
- package/esm2015/lib/services/utility.service.js +16 -27
- package/esm2015/lib/services/value.service.js +8 -10
- package/esm2015/lib/services/widget-content.model.js +1 -242
- package/esm2015/lib/services/widget-content.service.js +29 -21
- package/esm2015/lib/services/widget-resolver.model.js +2 -57
- package/esm2015/lib/services/widget-search.model.js +2 -126
- package/esm2015/public-api.js +96 -88
- package/esm2015/sunbird-cb-utils-v2.js +2 -10
- package/esm5/lib/components/image-crop/image-crop.component.js +30 -48
- package/esm5/lib/components/image-crop/image-crop.module.js +8 -2
- package/esm5/lib/constants/features.enum.js +555 -555
- package/esm5/lib/constants/instances.enum.js +5 -5
- package/esm5/lib/constants/misc.constants.js +1 -0
- package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +14 -24
- package/esm5/lib/directives/default-thumbnail/default-thumbnail.directive.js +1 -7
- package/esm5/lib/directives/image-responsive/image-responsive.directive.js +6 -11
- package/esm5/lib/directives/in-view-port/in-view-port.directive.js +9 -12
- package/esm5/lib/directives/navigation/navigation.directive.js +1 -6
- package/esm5/lib/helpers/functions/getStringifiedQueryParams.js +4 -4
- package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +10 -19
- package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +4 -2
- package/esm5/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.component.js +15 -31
- package/esm5/lib/helpers/horizontal-scroller-v2/horizontal-scroller-v2.module.js +4 -2
- package/esm5/lib/helpers/logout/logout.component.js +12 -15
- package/esm5/lib/helpers/logout/logout.module.js +3 -2
- package/esm5/lib/models/profile-v3.models.js +2 -104
- package/esm5/lib/pipes/pipe-certificate-image-URL/pipe-certimage-URL.pipe.js +4 -4
- package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +1 -7
- package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +1 -1
- package/esm5/lib/pipes/pipe-coursename/pipe-coursename.pipe.js +1 -1
- package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +1 -11
- package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +1 -1
- package/esm5/lib/pipes/pipe-filter/pipe-filter.pipe.js +3 -3
- package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +5 -5
- package/esm5/lib/pipes/pipe-filter-v2/pipe-filter-v2.pipe.js +3 -3
- package/esm5/lib/pipes/pipe-filter-v3/pipe-filter-v3.pipe.js +9 -9
- package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +1 -1
- package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +4 -4
- package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +1 -6
- package/esm5/lib/pipes/pipe-nic-relative/pipe-nic-relative.pipe.js +4 -4
- package/esm5/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +1 -4
- package/esm5/lib/pipes/pipe-ordinal/pipe-ordinal.pipe.js +1 -1
- package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +13 -3
- package/esm5/lib/pipes/pipe-public-URL/pipe-public-URL.pipe.js +4 -4
- package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +5 -5
- package/esm5/lib/resolvers/explore-detail.resolver.js +17 -19
- package/esm5/lib/resolvers/marketing-offering.resolve.js +10 -10
- package/esm5/lib/resolvers/module-name.resolver.js +2 -5
- package/esm5/lib/resolvers/page-name.resolver.js +2 -2
- package/esm5/lib/resolvers/page.constant.js +1 -1
- package/esm5/lib/resolvers/page.model.js +2 -48
- package/esm5/lib/resolvers/page.resolver.js +36 -22
- package/esm5/lib/resolvers/resolver.model.js +2 -6
- package/esm5/lib/services/auth-keycloak.service.js +86 -48
- package/esm5/lib/services/auth-microsoft.service.js +55 -24
- package/esm5/lib/services/card-content.model.js +1 -21
- package/esm5/lib/services/configurations.model.js +2 -551
- package/esm5/lib/services/configurations.service.js +2 -63
- package/esm5/lib/services/content-strip-multiple.model.js +2 -75
- package/esm5/lib/services/event.model.js +1 -114
- package/esm5/lib/services/event.service.js +66 -28
- package/esm5/lib/services/logger.service.js +12 -17
- package/esm5/lib/services/ms-office.model.js +2 -8
- package/esm5/lib/services/multilingual-translations.service.js +11 -15
- package/esm5/lib/services/nps-grid.service.js +6 -8
- package/esm5/lib/services/subapplication-respond.service.js +30 -24
- package/esm5/lib/services/telemetry.service.js +94 -91
- package/esm5/lib/services/user-preference.model.js +2 -38
- package/esm5/lib/services/user-preference.service.js +63 -17
- package/esm5/lib/services/utility.service.js +23 -34
- package/esm5/lib/services/value.service.js +8 -10
- package/esm5/lib/services/widget-content.model.js +1 -242
- package/esm5/lib/services/widget-content.service.js +69 -23
- package/esm5/lib/services/widget-resolver.model.js +2 -57
- package/esm5/lib/services/widget-search.model.js +2 -126
- package/esm5/public-api.js +96 -88
- package/esm5/sunbird-cb-utils-v2.js +2 -10
- package/fesm2015/sunbird-cb-utils-v2.js +972 -2207
- package/fesm2015/sunbird-cb-utils-v2.js.map +1 -1
- package/fesm5/sunbird-cb-utils-v2.js +1262 -2264
- package/fesm5/sunbird-cb-utils-v2.js.map +1 -1
- package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts +3 -3
- package/lib/helpers/logout/logout.component.d.ts +2 -2
- package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts +4 -4
- package/lib/resolvers/page.model.d.ts +1 -1
- package/lib/services/auth-keycloak.service.d.ts +9 -9
- package/lib/services/auth-microsoft.service.d.ts +2 -2
- package/lib/services/configurations.model.d.ts +29 -27
- package/lib/services/content-strip-multiple.model.d.ts +7 -6
- package/lib/services/event.service.d.ts +2 -0
- package/lib/services/logger.service.d.ts +4 -4
- package/lib/services/telemetry.service.d.ts +3 -3
- package/lib/services/utility.service.d.ts +7 -7
- package/lib/services/widget-content.model.d.ts +21 -20
- package/package.json +12 -12
- package/public-api.d.ts +8 -0
- package/sunbird-cb-utils-v2-0.0.22-ang-9-12.tgz +0 -0
- package/sunbird-cb-utils-v2.d.ts +0 -8
- package/sunbird-cb-utils-v2.metadata.json +1 -1
|
@@ -45,7 +45,7 @@ export class TelemetryService {
|
|
|
45
45
|
this.addCustomListenerForPlatformRating();
|
|
46
46
|
}
|
|
47
47
|
navigationStart() {
|
|
48
|
-
this.router.events.subscribe((
|
|
48
|
+
this.router.events.subscribe((event) => {
|
|
49
49
|
if (event instanceof NavigationStart) {
|
|
50
50
|
if (event.url.includes('/public/') || event.url.includes('&preview=true') || event.url.includes('/certs')) {
|
|
51
51
|
this.isAnonymousTelemetry = true;
|
|
@@ -54,7 +54,7 @@ export class TelemetryService {
|
|
|
54
54
|
this.initializeConfig(instanceConfig);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
})
|
|
57
|
+
});
|
|
58
58
|
}
|
|
59
59
|
get isAnonymousTelemetryRequired() {
|
|
60
60
|
return this.isAnonymousTelemetry;
|
|
@@ -72,7 +72,7 @@ export class TelemetryService {
|
|
|
72
72
|
initializeConfig(instanceConfig) {
|
|
73
73
|
if (instanceConfig) {
|
|
74
74
|
this.telemetryConfig = instanceConfig.telemetryConfig;
|
|
75
|
-
this.telemetryConfig = Object.assign({}, this.telemetryConfig, { pdata: Object.assign({}, this.telemetryConfig.pdata, { id: `${this.environment.name}.${this.telemetryConfig.pdata.id}` }), uid: (this.configSvc.userProfile && this.configSvc.userProfile.userId) ?
|
|
75
|
+
this.telemetryConfig = Object.assign(Object.assign({}, this.telemetryConfig), { pdata: Object.assign(Object.assign({}, this.telemetryConfig.pdata), { id: `${this.environment.name}.${this.telemetryConfig.pdata.id}` }), uid: (this.configSvc.userProfile && this.configSvc.userProfile.userId) ?
|
|
76
76
|
this.configSvc.userProfile.userId : '', channel: this.rootOrgId || this.telemetryConfig.channel, sid: this.getTelemetrySessionId });
|
|
77
77
|
this.pData = this.telemetryConfig.pdata;
|
|
78
78
|
}
|
|
@@ -107,7 +107,7 @@ export class TelemetryService {
|
|
|
107
107
|
pageContext.pageId
|
|
108
108
|
: '',
|
|
109
109
|
duration: 1,
|
|
110
|
-
}, Object.assign({ context: Object.assign({ pdata: Object.assign({}, this.pData, { id: this.pData.id }) }, (pageContext && pageContext.module ? { env: pageContext.module } : null)), object: Object.assign({}, (data) && data) }, (this.configSvc.userProfile && this.configSvc.userProfile.userId ?
|
|
110
|
+
}, Object.assign({ context: Object.assign({ pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }) }, (pageContext && pageContext.module ? { env: pageContext.module } : null)), object: Object.assign({}, (data) && data) }, (this.configSvc.userProfile && this.configSvc.userProfile.userId ?
|
|
111
111
|
null : { actor: { id: '', type: 'AnonymousUser' } })));
|
|
112
112
|
}
|
|
113
113
|
else {
|
|
@@ -127,7 +127,7 @@ export class TelemetryService {
|
|
|
127
127
|
pageContext.pageId
|
|
128
128
|
: '',
|
|
129
129
|
}, {
|
|
130
|
-
context: Object.assign({ pdata: Object.assign({}, this.pData, { id: this.pData.id }) }, (pageContext && pageContext.module ? { env: pageContext.module } : null)),
|
|
130
|
+
context: Object.assign({ pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }) }, (pageContext && pageContext.module ? { env: pageContext.module } : null)),
|
|
131
131
|
object: Object.assign({}, (data) && data),
|
|
132
132
|
});
|
|
133
133
|
}
|
|
@@ -145,7 +145,7 @@ export class TelemetryService {
|
|
|
145
145
|
duration: '',
|
|
146
146
|
}, {
|
|
147
147
|
context: {
|
|
148
|
-
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
148
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }),
|
|
149
149
|
},
|
|
150
150
|
});
|
|
151
151
|
}
|
|
@@ -180,7 +180,7 @@ export class TelemetryService {
|
|
|
180
180
|
if (page.objectId) {
|
|
181
181
|
const config = {
|
|
182
182
|
context: {
|
|
183
|
-
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
183
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }),
|
|
184
184
|
env: page.module || (this.telemetryConfig && this.telemetryConfig.env),
|
|
185
185
|
},
|
|
186
186
|
object: Object.assign({ id: page.objectId, type: objectType }, (data && data.object)),
|
|
@@ -193,7 +193,7 @@ export class TelemetryService {
|
|
|
193
193
|
else {
|
|
194
194
|
$t.impression(edata, {
|
|
195
195
|
context: {
|
|
196
|
-
pdata: Object.assign({}, this.pData, { id: this.pData && this.pData.id }),
|
|
196
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData && this.pData.id }),
|
|
197
197
|
env: page.module || '',
|
|
198
198
|
},
|
|
199
199
|
object: Object.assign({}, (data && data.object)),
|
|
@@ -211,14 +211,14 @@ export class TelemetryService {
|
|
|
211
211
|
if (this.externalApps[impressionData.subApplicationName]) {
|
|
212
212
|
const externalConfig = page.objectId ? {
|
|
213
213
|
context: {
|
|
214
|
-
pdata: Object.assign({}, this.pData, { id: this.externalApps[impressionData.subApplicationName] }),
|
|
214
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.externalApps[impressionData.subApplicationName] }),
|
|
215
215
|
},
|
|
216
216
|
object: {
|
|
217
217
|
id: page.objectId,
|
|
218
218
|
},
|
|
219
219
|
} : {
|
|
220
220
|
context: {
|
|
221
|
-
pdata: Object.assign({}, this.pData, { id: this.externalApps[impressionData.subApplicationName] }),
|
|
221
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.externalApps[impressionData.subApplicationName] }),
|
|
222
222
|
},
|
|
223
223
|
};
|
|
224
224
|
$t.impression(impressionData.data, externalConfig);
|
|
@@ -230,12 +230,12 @@ export class TelemetryService {
|
|
|
230
230
|
}
|
|
231
231
|
addCustomListenerForPlatformRating() {
|
|
232
232
|
this.eventsSvc.getPREvents$
|
|
233
|
-
.pipe(filter(
|
|
233
|
+
.pipe(filter(event => event &&
|
|
234
234
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
235
235
|
event.data.eventSubType === WsEvents.EnumTelemetrySubType.PlatformRating &&
|
|
236
236
|
event.data.mode &&
|
|
237
|
-
event.data))
|
|
238
|
-
.subscribe(
|
|
237
|
+
event.data))
|
|
238
|
+
.subscribe(event => {
|
|
239
239
|
if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
|
|
240
240
|
this.start({
|
|
241
241
|
type: event.data.type || WsEvents.WsTimeSpentType.Player,
|
|
@@ -257,20 +257,20 @@ export class TelemetryService {
|
|
|
257
257
|
: '',
|
|
258
258
|
pageid: event.pageContext && event.pageContext.pageId || '',
|
|
259
259
|
}, {
|
|
260
|
-
context: Object.assign({ pdata: Object.assign({}, this.pData, { id: this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
|
|
260
|
+
context: Object.assign({ pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
|
|
261
261
|
object: Object.assign({}, event.data.object),
|
|
262
262
|
});
|
|
263
263
|
}
|
|
264
|
-
})
|
|
264
|
+
});
|
|
265
265
|
}
|
|
266
266
|
addCustomListenerForGetStart() {
|
|
267
267
|
this.eventsSvc.getStartEvents$
|
|
268
|
-
.pipe(filter(
|
|
268
|
+
.pipe(filter(event => event &&
|
|
269
269
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
270
270
|
event.data.eventSubType === WsEvents.EnumTelemetrySubType.GetStarted &&
|
|
271
271
|
event.data.mode &&
|
|
272
|
-
event.data))
|
|
273
|
-
.subscribe(
|
|
272
|
+
event.data))
|
|
273
|
+
.subscribe(event => {
|
|
274
274
|
if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
|
|
275
275
|
this.start({
|
|
276
276
|
type: event.data.type || WsEvents.WsTimeSpentType.Player,
|
|
@@ -292,20 +292,20 @@ export class TelemetryService {
|
|
|
292
292
|
: '',
|
|
293
293
|
pageid: event.pageContext && event.pageContext.pageId || '',
|
|
294
294
|
}, {
|
|
295
|
-
context: Object.assign({ pdata: Object.assign({}, this.pData, { id: this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
|
|
295
|
+
context: Object.assign({ pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
|
|
296
296
|
object: Object.assign({}, event.data.object),
|
|
297
297
|
});
|
|
298
298
|
}
|
|
299
|
-
})
|
|
299
|
+
});
|
|
300
300
|
}
|
|
301
301
|
addCustomListener() {
|
|
302
302
|
this.eventsSvc.chatbotEvents$
|
|
303
|
-
.pipe(filter(
|
|
303
|
+
.pipe(filter(event => event &&
|
|
304
304
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
305
305
|
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Chatbot &&
|
|
306
306
|
event.data.mode &&
|
|
307
|
-
event.data))
|
|
308
|
-
.subscribe(
|
|
307
|
+
event.data))
|
|
308
|
+
.subscribe(event => {
|
|
309
309
|
if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
|
|
310
310
|
this.start({
|
|
311
311
|
type: event.data.type || WsEvents.WsTimeSpentType.Player,
|
|
@@ -327,35 +327,35 @@ export class TelemetryService {
|
|
|
327
327
|
: '',
|
|
328
328
|
pageid: event.pageContext && event.pageContext.pageId || '',
|
|
329
329
|
}, {
|
|
330
|
-
context: Object.assign({ pdata: Object.assign({}, this.pData, { id: this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
|
|
330
|
+
context: Object.assign({ pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
|
|
331
331
|
object: Object.assign({}, event.data.object),
|
|
332
332
|
});
|
|
333
333
|
}
|
|
334
|
-
})
|
|
334
|
+
});
|
|
335
335
|
}
|
|
336
336
|
addCustomImpressionListener() {
|
|
337
337
|
this.eventsSvc.events$
|
|
338
|
-
.pipe(filter((
|
|
338
|
+
.pipe(filter((event) => event &&
|
|
339
339
|
event.data &&
|
|
340
340
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
341
|
-
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Impression))
|
|
342
|
-
.subscribe(
|
|
341
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Impression))
|
|
342
|
+
.subscribe(event => {
|
|
343
343
|
try {
|
|
344
344
|
this.impression(event.data);
|
|
345
345
|
}
|
|
346
346
|
catch (e) {
|
|
347
347
|
console.log('Error in telemetry impression', e);
|
|
348
348
|
}
|
|
349
|
-
})
|
|
349
|
+
});
|
|
350
350
|
}
|
|
351
351
|
addTimeSpentListener() {
|
|
352
352
|
this.eventsSvc.events$
|
|
353
|
-
.pipe(filter(
|
|
353
|
+
.pipe(filter(event => event &&
|
|
354
354
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
355
355
|
event.data.type === WsEvents.WsTimeSpentType.Page &&
|
|
356
356
|
event.data.mode &&
|
|
357
|
-
event.data))
|
|
358
|
-
.subscribe(
|
|
357
|
+
event.data))
|
|
358
|
+
.subscribe(event => {
|
|
359
359
|
if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded) {
|
|
360
360
|
this.start({
|
|
361
361
|
type: event.data.type || WsEvents.WsTimeSpentType.Player,
|
|
@@ -368,13 +368,13 @@ export class TelemetryService {
|
|
|
368
368
|
mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
|
|
369
369
|
}, {}, event.pageContext);
|
|
370
370
|
}
|
|
371
|
-
})
|
|
371
|
+
});
|
|
372
372
|
}
|
|
373
373
|
addCustomEventListener() {
|
|
374
374
|
this.eventsSvc.events$
|
|
375
|
-
.pipe(filter(
|
|
376
|
-
event.eventType === WsEvents.WsEventType.Telemetry))
|
|
377
|
-
.subscribe(
|
|
375
|
+
.pipe(filter(event => event &&
|
|
376
|
+
event.eventType === WsEvents.WsEventType.Telemetry))
|
|
377
|
+
.subscribe(event => {
|
|
378
378
|
if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded &&
|
|
379
379
|
event.data.type !== WsEvents.WsTimeSpentType.Player) {
|
|
380
380
|
this.start({
|
|
@@ -389,16 +389,16 @@ export class TelemetryService {
|
|
|
389
389
|
mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
|
|
390
390
|
}, event.data.object, event.pageContext);
|
|
391
391
|
}
|
|
392
|
-
})
|
|
392
|
+
});
|
|
393
393
|
}
|
|
394
394
|
addPlayerListener() {
|
|
395
395
|
this.eventsSvc.events$
|
|
396
|
-
.pipe(filter(
|
|
396
|
+
.pipe(filter(event => event &&
|
|
397
397
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
398
398
|
event.data.type === WsEvents.WsTimeSpentType.Player &&
|
|
399
399
|
event.data.mode &&
|
|
400
|
-
event.data))
|
|
401
|
-
.subscribe(
|
|
400
|
+
event.data))
|
|
401
|
+
.subscribe(event => {
|
|
402
402
|
const content = event.data.content;
|
|
403
403
|
if (event.data.state === WsEvents.EnumTelemetrySubType.Loaded &&
|
|
404
404
|
(!content ||
|
|
@@ -420,22 +420,22 @@ export class TelemetryService {
|
|
|
420
420
|
mode: event.data.mode || WsEvents.WsTimeSpentMode.Play,
|
|
421
421
|
}, event.data.object, event.pageContext);
|
|
422
422
|
}
|
|
423
|
-
})
|
|
423
|
+
});
|
|
424
424
|
}
|
|
425
425
|
addInteractListener() {
|
|
426
426
|
const data = this.getPageDetails();
|
|
427
427
|
this.triggerNPSUpdate(data.pageid);
|
|
428
428
|
this.eventsSvc.events$
|
|
429
|
-
.pipe(filter((
|
|
429
|
+
.pipe(filter((event) => event &&
|
|
430
430
|
event.data &&
|
|
431
431
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
432
|
-
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Interact))
|
|
433
|
-
.subscribe(
|
|
432
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Interact))
|
|
433
|
+
.subscribe(event => {
|
|
434
434
|
const page = this.getPageDetails();
|
|
435
435
|
if (typeof event.from === 'string' && this.externalApps[event.from]) {
|
|
436
436
|
const externalConfig = {
|
|
437
437
|
context: {
|
|
438
|
-
pdata: Object.assign({}, this.pData, { id: this.externalApps[event.from] }),
|
|
438
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.externalApps[event.from] }),
|
|
439
439
|
},
|
|
440
440
|
};
|
|
441
441
|
try {
|
|
@@ -455,7 +455,7 @@ export class TelemetryService {
|
|
|
455
455
|
: '',
|
|
456
456
|
pageid: event.data.pageContext && event.data.pageContext.pageId || page.pageid,
|
|
457
457
|
}, {
|
|
458
|
-
context: Object.assign({ pdata: Object.assign({}, this.pData, { id: this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
|
|
458
|
+
context: Object.assign({ pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }) }, (event.pageContext && event.pageContext.module ? { env: event.pageContext.module } : null)),
|
|
459
459
|
object: Object.assign({}, event.data.object),
|
|
460
460
|
});
|
|
461
461
|
}
|
|
@@ -463,15 +463,15 @@ export class TelemetryService {
|
|
|
463
463
|
console.log('Error in telemetry interact', e);
|
|
464
464
|
}
|
|
465
465
|
}
|
|
466
|
-
})
|
|
466
|
+
});
|
|
467
467
|
}
|
|
468
468
|
addFeedbackListener() {
|
|
469
469
|
this.eventsSvc.events$
|
|
470
|
-
.pipe(filter((
|
|
470
|
+
.pipe(filter((event) => event &&
|
|
471
471
|
event.data &&
|
|
472
472
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
473
|
-
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Feedback))
|
|
474
|
-
.subscribe(
|
|
473
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Feedback))
|
|
474
|
+
.subscribe(event => {
|
|
475
475
|
const page = this.getPageDetails();
|
|
476
476
|
try {
|
|
477
477
|
$t.feedback({
|
|
@@ -481,7 +481,7 @@ export class TelemetryService {
|
|
|
481
481
|
pageid: page.pageid,
|
|
482
482
|
}, {
|
|
483
483
|
context: {
|
|
484
|
-
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
484
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }),
|
|
485
485
|
},
|
|
486
486
|
object: {
|
|
487
487
|
id: event.data.object.contentId || event.data.object.id || '',
|
|
@@ -494,19 +494,19 @@ export class TelemetryService {
|
|
|
494
494
|
catch (e) {
|
|
495
495
|
console.log('Error in telemetry interact', e);
|
|
496
496
|
}
|
|
497
|
-
})
|
|
497
|
+
});
|
|
498
498
|
}
|
|
499
499
|
addHearbeatListener() {
|
|
500
500
|
this.eventsSvc.events$
|
|
501
|
-
.pipe(filter((
|
|
501
|
+
.pipe(filter((event) => event &&
|
|
502
502
|
event.data &&
|
|
503
503
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
504
|
-
event.data.eventSubType === WsEvents.EnumTelemetrySubType.HeartBeat))
|
|
505
|
-
.subscribe(
|
|
504
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.HeartBeat))
|
|
505
|
+
.subscribe(event => {
|
|
506
506
|
if (typeof event.from === 'string' && this.externalApps[event.from]) {
|
|
507
507
|
const externalConfig = {
|
|
508
508
|
context: {
|
|
509
|
-
pdata: Object.assign({}, this.pData, { id: this.externalApps[event.from] }),
|
|
509
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.externalApps[event.from] }),
|
|
510
510
|
},
|
|
511
511
|
};
|
|
512
512
|
try {
|
|
@@ -523,7 +523,7 @@ export class TelemetryService {
|
|
|
523
523
|
id: event.data.id,
|
|
524
524
|
}, {
|
|
525
525
|
context: {
|
|
526
|
-
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
526
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }),
|
|
527
527
|
},
|
|
528
528
|
});
|
|
529
529
|
}
|
|
@@ -531,15 +531,15 @@ export class TelemetryService {
|
|
|
531
531
|
console.log('Error in telemetry heartbeat', e);
|
|
532
532
|
}
|
|
533
533
|
}
|
|
534
|
-
})
|
|
534
|
+
});
|
|
535
535
|
}
|
|
536
536
|
addSearchListener() {
|
|
537
537
|
this.eventsSvc.events$
|
|
538
|
-
.pipe(filter((
|
|
538
|
+
.pipe(filter((event) => event &&
|
|
539
539
|
event.data &&
|
|
540
540
|
event.eventType === WsEvents.WsEventType.Telemetry &&
|
|
541
|
-
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Search))
|
|
542
|
-
.subscribe(
|
|
541
|
+
event.data.eventSubType === WsEvents.EnumTelemetrySubType.Search))
|
|
542
|
+
.subscribe(event => {
|
|
543
543
|
try {
|
|
544
544
|
$t.search({
|
|
545
545
|
query: event.data.query,
|
|
@@ -547,14 +547,14 @@ export class TelemetryService {
|
|
|
547
547
|
size: event.data.size,
|
|
548
548
|
}, {
|
|
549
549
|
context: {
|
|
550
|
-
pdata: Object.assign({}, this.pData, { id: this.pData.id }),
|
|
550
|
+
pdata: Object.assign(Object.assign({}, this.pData), { id: this.pData.id }),
|
|
551
551
|
},
|
|
552
552
|
});
|
|
553
553
|
}
|
|
554
554
|
catch (e) {
|
|
555
555
|
console.log('Error in telemetry search', e);
|
|
556
556
|
}
|
|
557
|
-
})
|
|
557
|
+
});
|
|
558
558
|
}
|
|
559
559
|
getPageDetails() {
|
|
560
560
|
const path = window.location.pathname.replace('/', '');
|
|
@@ -587,6 +587,15 @@ export class TelemetryService {
|
|
|
587
587
|
return null;
|
|
588
588
|
}
|
|
589
589
|
}
|
|
590
|
+
TelemetryService.ctorParameters = () => [
|
|
591
|
+
{ type: ConfigurationsService },
|
|
592
|
+
{ type: EventService },
|
|
593
|
+
{ type: undefined, decorators: [{ type: Inject, args: ['environment',] }] },
|
|
594
|
+
{ type: LoggerService },
|
|
595
|
+
{ type: Router },
|
|
596
|
+
{ type: NPSGridService }
|
|
597
|
+
];
|
|
598
|
+
TelemetryService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TelemetryService_Factory() { return new TelemetryService(i0.ɵɵinject(i1.ConfigurationsService), i0.ɵɵinject(i2.EventService), i0.ɵɵinject("environment"), i0.ɵɵinject(i3.LoggerService), i0.ɵɵinject(i4.Router), i0.ɵɵinject(i5.NPSGridService)); }, token: TelemetryService, providedIn: "root" });
|
|
590
599
|
TelemetryService.decorators = [
|
|
591
600
|
{ type: Injectable, args: [{
|
|
592
601
|
providedIn: 'root',
|
|
@@ -600,20 +609,4 @@ TelemetryService.ctorParameters = () => [
|
|
|
600
609
|
{ type: Router },
|
|
601
610
|
{ type: NPSGridService }
|
|
602
611
|
];
|
|
603
|
-
/** @nocollapse */ TelemetryService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function TelemetryService_Factory() { return new TelemetryService(i0.ɵɵinject(i1.ConfigurationsService), i0.ɵɵinject(i2.EventService), i0.ɵɵinject("environment"), i0.ɵɵinject(i3.LoggerService), i0.ɵɵinject(i4.Router), i0.ɵɵinject(i5.NPSGridService)); }, token: TelemetryService, providedIn: "root" });
|
|
604
|
-
if (false) {
|
|
605
|
-
TelemetryService.prototype.previousUrl;
|
|
606
|
-
TelemetryService.prototype.telemetryConfig;
|
|
607
|
-
TelemetryService.prototype.pData;
|
|
608
|
-
TelemetryService.prototype.contextCdata;
|
|
609
|
-
TelemetryService.prototype.isAnonymousTelemetry;
|
|
610
|
-
TelemetryService.prototype.telArray;
|
|
611
|
-
TelemetryService.prototype.externalApps;
|
|
612
|
-
TelemetryService.prototype.environment;
|
|
613
|
-
TelemetryService.prototype.configSvc;
|
|
614
|
-
TelemetryService.prototype.eventsSvc;
|
|
615
|
-
TelemetryService.prototype.logger;
|
|
616
|
-
TelemetryService.prototype.router;
|
|
617
|
-
TelemetryService.prototype.npsSvc;
|
|
618
|
-
}
|
|
619
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1jYi91dGlscy12Mi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFBOzs7Ozs7O0FBT25ELE1BQU0sT0FBTyxnQkFBZ0I7SUFXM0IsWUFDVSxTQUFnQyxFQUNoQyxTQUF1QixFQUNSLFdBQWdCLEVBRS9CLE1BQXFCLEVBQ3JCLE1BQWMsRUFDZCxNQUFzQjtRQU50QixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBR3ZCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBakJoQyxnQkFBVyxHQUFrQixJQUFJLENBQUE7UUFDakMsb0JBQWUsR0FBNkMsSUFBSSxDQUFBO1FBQ2hFLFVBQUssR0FBUSxJQUFJLENBQUE7UUFDakIsaUJBQVksR0FBRyxFQUFFLENBQUE7UUFDakIseUJBQW9CLEdBQUcsSUFBSSxDQUFBO1FBQzNCLGFBQVEs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RyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUU1QyxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7U0FDNUI7UUFFRCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsT0FBTyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQy9CO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDOzs7WUF4MkJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBWlEscUJBQXFCO1lBRXJCLFlBQVk7NENBeUJoQixNQUFNLFNBQUMsYUFBYTtZQXhCaEIsYUFBYTtZQUViLE1BQU07WUFDTixjQUFjOzs7O0lBUXJCLHVDQUFpQztJQUNqQywyQ0FBZ0U7SUFDaEUsaUNBQWlCO0lBQ2pCLHdDQUFpQjtJQUNqQixnREFBMkI7SUFDM0Isb0NBQWtCO0lBQ2xCLHdDQUVDO0lBQ0QsdUNBQWdCO0lBRWQscUNBQXdDO0lBQ3hDLHFDQUErQjtJQUcvQixrQ0FBNkI7SUFDN0Isa0NBQXNCO0lBQ3RCLGtDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG4vLyBpbXBvcnQgeyBBdXRoS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLWtleWNsb2FrLnNlcnZpY2UnXHJcbmltcG9ydCB7IE5zSW5zdGFuY2VDb25maWcgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb25zLm1vZGVsJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb25zLnNlcnZpY2UnXHJcbmltcG9ydCB7IFdzRXZlbnRzIH0gZnJvbSAnLi9ldmVudC5tb2RlbCdcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9ldmVudC5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSdcclxuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi93aWRnZXQtY29udGVudC5tb2RlbCdcclxuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uU3RhcnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXHJcbmltcG9ydCB7IE5QU0dyaWRTZXJ2aWNlIH0gZnJvbSAnLi9ucHMtZ3JpZC5zZXJ2aWNlJ1xyXG5cclxuZGVjbGFyZSB2YXIgJHQ6IGFueVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xyXG4gIHByZXZpb3VzVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxyXG4gIHRlbGVtZXRyeUNvbmZpZzogTnNJbnN0YW5jZUNvbmZpZy5JVGVsZW1ldHJ5Q29uZmlnIHwgbnVsbCA9IG51bGxcclxuICBwRGF0YTogYW55ID0gbnVsbFxyXG4gIGNvbnRleHRDZGF0YSA9IFtdXHJcbiAgaXNBbm9ueW1vdXNUZWxlbWV0cnkgPSB0cnVlXHJcbiAgdGVsQXJyYXk6IGFueSA9IFtdXHJcbiAgZXh0ZXJuYWxBcHBzOiBhbnkgPSB7XHJcbiAgICBSQkNQOiAncmJjcC13ZWItdWknLFxyXG4gIH1cclxuICBlbnZpcm9ubWVudDogYW55XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBldmVudHNTdmM6IEV2ZW50U2VydmljZSxcclxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcclxuICAgIC8vIHByaXZhdGUgYXV0aFN2YzogQXV0aEtleWNsb2FrU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbnBzU3ZjOiBOUFNHcmlkU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxyXG4gICAgY29uc3QgaW5zdGFuY2VDb25maWcgPSB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZ1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU3RhcnQoKVxyXG4gICAgdGhpcy5pbml0aWFsaXplQ29uZmlnKGluc3RhbmNlQ29uZmlnKVxyXG4gICAgdGhpcy5hZGRQbGF5ZXJMaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZEN1c3RvbUV2ZW50TGlzdGVuZXIoKVxyXG4gICAgdGhpcy5hZGRJbnRlcmFjdExpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkRmVlZGJhY2tMaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZFRpbWVTcGVudExpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkU2VhcmNoTGlzdGVuZXIoKVxyXG4gICAgdGhpcy5hZGRIZWFyYmVhdExpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkQ3VzdG9tSW1wcmVzc2lvbkxpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkQ3VzdG9tTGlzdGVuZXIoKVxyXG4gICAgdGhpcy5hZGRDdXN0b21MaXN0ZW5lckZvckdldFN0YXJ0KClcclxuICAgIHRoaXMuYWRkQ3VzdG9tTGlzdGVuZXJGb3JQbGF0Zm9ybVJhdGluZygpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRpb25TdGFydCgpIHtcclxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnVybC5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCBldmVudC51cmwuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKSB8fCBldmVudC51cmwuaW5jbHVkZXMoJy9jZXJ0cycpKSB7XHJcbiAgICAgICAgICB0aGlzLmlzQW5vbnltb3VzVGVsZW1ldHJ5ID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlDb25maWcoKVxyXG4gICAgICAgICAgY29uc3QgaW5zdGFuY2VDb25maWcgPSB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZ1xyXG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplQ29uZmlnKGluc3RhbmNlQ29uZmlnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBpc0Fub255bW91c1RlbGVtZXRyeVJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNBbm9ueW1vdXNUZWxlbWV0cnlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVGVsZW1ldHJ5Q29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnICYmIHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZykge1xyXG4gICAgICBpZiAodGhpcy5pc0Fub255bW91c1RlbGVtZXRyeVJlcXVpcmVkKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWcudGVsZW1ldHJ5Q29uZmlnLmVuZHBvaW50ID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWcudGVsZW1ldHJ5Q29uZmlnLnB1YmxpY0VuZHBvaW50XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWcudGVsZW1ldHJ5Q29uZmlnLmVuZHBvaW50ID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWcudGVsZW1ldHJ5Q29uZmlnLnByb3RlY3RlZEVuZHBvaW50XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbmZpZyhpbnN0YW5jZUNvbmZpZzogTnNJbnN0YW5jZUNvbmZpZy5JQ29uZmlnIHwgbnVsbCkge1xyXG4gICAgaWYgKGluc3RhbmNlQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMudGVsZW1ldHJ5Q29uZmlnID0gaW5zdGFuY2VDb25maWcudGVsZW1ldHJ5Q29uZmlnXHJcbiAgICAgIHRoaXMudGVsZW1ldHJ5Q29uZmlnID0ge1xyXG4gICAgICAgIC4uLnRoaXMudGVsZW1ldHJ5Q29uZmlnLFxyXG4gICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAuLi50aGlzLnRlbGVtZXRyeUNvbmZpZy5wZGF0YSxcclxuICAgICAgICAgIC8vIHBpZDogbmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgICAgIGlkOiBgJHt0aGlzLmVudmlyb25tZW50Lm5hbWV9LiR7dGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGEuaWR9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHVpZDogKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCkgP1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCA6ICcnLFxyXG4gICAgICAgIC8vIGF1dGh0b2tlbjogdGhpcy5hdXRoU3ZjLnRva2VuLFxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY2hhbm5lbDogdGhpcy5yb290T3JnSWQgfHwgdGhpcy50ZWxlbWV0cnlDb25maWcuY2hhbm5lbCxcclxuICAgICAgICBzaWQ6IHRoaXMuZ2V0VGVsZW1ldHJ5U2Vzc2lvbklkLFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucERhdGEgPSB0aGlzLnRlbGVtZXRyeUNvbmZpZy5wZGF0YVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFRlbGVtZXRyeVNlc3Npb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0ZWxlbWV0cnlTZXNzaW9uSWQnKSB8fCAnJ1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJvb3RPcmdJZCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIHRyaWdnZXJOUFNVcGRhdGUoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnRlbEFycmF5LnB1c2goZGF0YSlcclxuICAgIGlmICh0aGlzLnRlbEFycmF5ICYmIHRoaXMudGVsQXJyYXkubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmF0aW5nZm9ybUlEJykpIHtcclxuICAgICAgICB0aGlzLnRlbEFycmF5ID0gW11cclxuICAgICAgICB0aGlzLm5wc1N2Yy51cGRhdGVUZWxlbWV0cnlEYXRhKHRydWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0KGVkYXRhOiBhbnksIGRhdGE6IGFueSwgcGFnZUNvbnRleHQ/OiBXc0V2ZW50cy5JVGVsZW1ldHJ5UGFnZUNvbnRleHQpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnRlbGVtZXRyeUNvbmZpZykge1xyXG4gICAgICAgICR0LnN0YXJ0KFxyXG4gICAgICAgICAgdGhpcy50ZWxlbWV0cnlDb25maWcsXHJcbiAgICAgICAgICAocGFnZUNvbnRleHQgJiYgcGFnZUNvbnRleHQucGFnZUlkKSA/XHJcbiAgICAgICAgICAgIHBhZ2VDb250ZXh0LnBhZ2VJZFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgJzEuMCcsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIGlkLFxyXG4gICAgICAgICAgICB0eXBlOiBlZGF0YS50eXBlLFxyXG4gICAgICAgICAgICBtb2RlOiBlZGF0YS5tb2RlLFxyXG4gICAgICAgICAgICBwYWdlaWQ6IChwYWdlQ29udGV4dCAmJiBwYWdlQ29udGV4dC5wYWdlSWQpID9cclxuICAgICAgICAgICAgICBwYWdlQ29udGV4dC5wYWdlSWRcclxuICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgLi4uKHBhZ2VDb250ZXh0ICYmIHBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBwYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAuLi4oZGF0YSkgJiYgZGF0YSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4uKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCA/XHJcbiAgICAgICAgICAgICAgIG51bGwgOiB7IGFjdG9yOiB7IGlkOiAnJywgdHlwZTogJ0Fub255bW91c1VzZXInIH0gfSksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBJbml0aWFsaXppbmcgVGVsZW1ldHJ5LiBDb25maWcgbWlzc2luZy4nKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IHN0YXJ0JywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuZChlZGF0YTogYW55LCBkYXRhOiBhbnksIHBhZ2VDb250ZXh0PzogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAkdC5lbmQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZTogZWRhdGEudHlwZSxcclxuICAgICAgICAgIG1vZGU6IGVkYXRhLm1vZGUsXHJcbiAgICAgICAgICBwYWdlaWQ6IChwYWdlQ29udGV4dCAmJiBwYWdlQ29udGV4dC5wYWdlSWQpID9cclxuICAgICAgICAgICAgcGFnZUNvbnRleHQucGFnZUlkXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4uKHBhZ2VDb250ZXh0ICYmIHBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBwYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAuLi4oZGF0YSkgJiYgZGF0YSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBlbmQnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXVkaXQodHlwZTogc3RyaW5nLCBwcm9wczogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICR0LmF1ZGl0KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBwcm9wcyxcclxuICAgICAgICAgIC8vIGRhdGEsXHJcbiAgICAgICAgICBzdGF0ZTogZGF0YSwgLy8gT3B0aW9uYWwuIEN1cnJlbnQgU3RhdGVcclxuICAgICAgICAgIHByZXZzdGF0ZTogJycsIC8vIE9wdGlvbmFsLiBQcmV2aW91cyBTdGF0ZVxyXG4gICAgICAgICAgZHVyYXRpb246ICcnLCAvLyBPcHRpb25hbC5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICApXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGF1ZGl0JywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhlYXJ0YmVhdCh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICR0LmhlYXJ0YmVhdCh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgLy8gbW9kZSxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICB9KVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBoZWFydGJlYXQnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW1wcmVzc2lvbihkYXRhPzogYW55LCBvYmplY3RUeXBlPzogYW55KSB7XHJcbiAgICB0aGlzLnRyaWdnZXJOUFNVcGRhdGUoZGF0YSlcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VEZXRhaWxzKClcclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wYWdlQ29udGV4dCkge1xyXG4gICAgICAgIHBhZ2UucGFnZWlkID0gZGF0YS5wYWdlQ29udGV4dC5wYWdlSWRcclxuICAgICAgICBwYWdlLm1vZHVsZSA9IGRhdGEucGFnZUNvbnRleHQubW9kdWxlXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZWRhdGEgPSB7XHJcbiAgICAgICAgcGFnZWlkOiBwYWdlLnBhZ2VpZCwgLy8gUmVxdWlyZWQuIFVuaXF1ZSBwYWdlIGlkXHJcbiAgICAgICAgdHlwZTogcGFnZS5wYWdlVXJsUGFydHNbMF0sIC8vIFJlcXVpcmVkLiBJbXByZXNzaW9uIHR5cGUgKGxpc3QsIGRldGFpbCwgdmlldywgZWRpdCwgd29ya2Zsb3csIHNlYXJjaClcclxuICAgICAgICB1cmk6IHBhZ2UucGFnZVVybCxcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFnZS5vYmplY3RJZCkge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnY6IHBhZ2UubW9kdWxlIHx8ICh0aGlzLnRlbGVtZXRyeUNvbmZpZyAmJiB0aGlzLnRlbGVtZXRyeUNvbmZpZy5lbnYpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICBpZDogcGFnZS5vYmplY3RJZCxcclxuICAgICAgICAgICAgdHlwZTogb2JqZWN0VHlwZSxcclxuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG92ZXJyaWRlIGFib3ZlIGlkIGlmIHRoZSBkYXRhIGhhcyBvYmplY3QgaW4gaXQuXHJcbiAgICAgICAgICAgIC4uLihkYXRhICYmIGRhdGEub2JqZWN0KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGFnZS5vYmplY3RJZCB8fCAhb2JqZWN0VHlwZSkge1xyXG4gICAgICAgICAgY29uZmlnLm9iamVjdCA9IHt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICR0LmltcHJlc3Npb24oZWRhdGEsIGNvbmZpZylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkdC5pbXByZXNzaW9uKGVkYXRhLCB7XHJcbiAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YSAmJiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbnY6IHBhZ2UubW9kdWxlIHx8ICcnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAuLi4oZGF0YSAmJiBkYXRhLm9iamVjdCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmV2aW91c1VybCA9IHBhZ2UucGFnZVVybFxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbXByZXNzaW9uJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dGVybmFsSW1wcmVzc2lvbihpbXByZXNzaW9uRGF0YTogYW55KSB7XHJcbiAgICAvLyB0aGlzLnRyaWdnZXJOUFNVcGRhdGUoaW1wcmVzc2lvbkRhdGEpXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgIGlmICh0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSBwYWdlLm9iamVjdElkID8ge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgIGlkOiBwYWdlLm9iamVjdElkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9IDoge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2ltcHJlc3Npb25EYXRhLnN1YkFwcGxpY2F0aW9uTmFtZV0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgICAkdC5pbXByZXNzaW9uKGltcHJlc3Npb25EYXRhLmRhdGEsIGV4dGVybmFsQ29uZmlnKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGV4dGVybmFsSW1wcmVzc2lvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBmb3IgUGxhcnRmb3JtIHJhdGluZ1xyXG4gIGFkZEN1c3RvbUxpc3RlbmVyRm9yUGxhdGZvcm1SYXRpbmcoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5nZXRQUkV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgZXZlbnQgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlBsYXRmb3JtUmF0aW5nICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgJHQuaW50ZXJhY3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5lZGF0YS5zdWJUeXBlLFxyXG4gICAgICAgICAgICAgIGlkOiAoZXZlbnQuZGF0YS5lZGF0YSAmJiBldmVudC5kYXRhLmVkYXRhLmlkKSA/XHJcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmVkYXRhLmlkXHJcbiAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogZXZlbnQucGFnZUNvbnRleHQgJiYgZXZlbnQucGFnZUNvbnRleHQucGFnZUlkIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLi4uKGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21MaXN0ZW5lckZvckdldFN0YXJ0KCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZ2V0U3RhcnRFdmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5HZXRTdGFydGVkICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgJHQuaW50ZXJhY3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5lZGF0YS5zdWJUeXBlLFxyXG4gICAgICAgICAgICAgIGlkOiAoZXZlbnQuZGF0YS5lZGF0YSAmJiBldmVudC5kYXRhLmVkYXRhLmlkKSA/XHJcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmVkYXRhLmlkXHJcbiAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogZXZlbnQucGFnZUNvbnRleHQgJiYgZXZlbnQucGFnZUNvbnRleHQucGFnZUlkIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLi4uKGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21MaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmNoYXRib3RFdmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgJHQuaW50ZXJhY3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5lZGF0YS5zdWJUeXBlLFxyXG4gICAgICAgICAgICAgIGlkOiAoZXZlbnQuZGF0YS5lZGF0YSAmJiBldmVudC5kYXRhLmVkYXRhLmlkKSA/XHJcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmVkYXRhLmlkXHJcbiAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogZXZlbnQucGFnZUNvbnRleHQgJiYgZXZlbnQucGFnZUNvbnRleHQucGFnZUlkIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLi4uKGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21JbXByZXNzaW9uTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUltcHJlc3Npb24pID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkltcHJlc3Npb24sXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2V2ZW50LmRhdGE6OicsIGV2ZW50LmRhdGEpXHJcbiAgICAgICAgICB0aGlzLmltcHJlc3Npb24oZXZlbnQuZGF0YSlcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW1wcmVzc2lvbicsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkVGltZVNwZW50TGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSA9PT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBhZ2UgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZEN1c3RvbUV2ZW50TGlzdGVuZXIoKSB7XHJcblxyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICBldmVudCA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeVxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkICYmXHJcbiAgICAgICAgICBldmVudC5kYXRhLnR5cGUgIT09IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuVW5sb2FkZWQgJiZcclxuICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSAhPT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllclxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcbiAgYWRkUGxheWVyTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEudHlwZSA9PT0gV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllciAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBldmVudC5kYXRhLmNvbnRlbnRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQgJiZcclxuICAgICAgICAgICghY29udGVudCB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ21heWJlJyB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5pc0lmcmFtZVN1cHBvcnRlZCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQubWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8ICdhcHBsaWNhdGlvbi9qc29uJykpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkICYmXHJcbiAgICAgICAgICAoIWNvbnRlbnQgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdtYXliZScgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnIHx8XHJcbiAgICAgICAgICAgIChjb250ZW50Lm1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vcGRmJyB8fCAnYXBwbGljYXRpb24vanNvbicpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZEludGVyYWN0TGlzdGVuZXIoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICB0aGlzLnRyaWdnZXJOUFNVcGRhdGUoZGF0YS5wYWdlaWQpXHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUludGVyYWN0KSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VEZXRhaWxzKClcclxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmZyb20gPT09ICdzdHJpbmcnICYmIHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dKSB7XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbENvbmZpZyA9IHtcclxuICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkdC5pbnRlcmFjdChldmVudC5kYXRhLCBleHRlcm5hbENvbmZpZylcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW50ZXJhY3QnLCBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBsZXQgaW50ZXJhY3RpZFxyXG4gICAgICAgICAgLy8gaWYgKGV2ZW50LmRhdGEuZWRhdGEudHlwZSA9PT0gJ2dvYWwnKSB7XHJcbiAgICAgICAgICAvLyAgIGludGVyYWN0aWQgPSBwYWdlLnBhZ2VVcmxQYXJ0c1s0XVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgJHQuaW50ZXJhY3QoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS5lZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgICAgc3VidHlwZTogZXZlbnQuZGF0YS5lZGF0YS5zdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0OiBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICAgIGlkOiAoZXZlbnQuZGF0YS5lZGF0YSAmJiBldmVudC5kYXRhLmVkYXRhLmlkKSA/XHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuZWRhdGEuaWRcclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICAgIHBhZ2VpZDogZXZlbnQuZGF0YS5wYWdlQ29udGV4dCAmJiBldmVudC5kYXRhLnBhZ2VDb250ZXh0LnBhZ2VJZCB8fCBwYWdlLnBhZ2VpZCxcclxuICAgICAgICAgICAgICAgIC8vIHRhcmdldDogeyBwYWdlIH0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgLi4uKGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0Lm1vZHVsZSA/IHsgZW52OiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgfSA6IG51bGwpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAgICAgICAuLi5ldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW50ZXJhY3QnLCBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZEZlZWRiYWNrTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5ldmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIChldmVudDogV3NFdmVudHMuV3NFdmVudFRlbGVtZXRyeUZlZWRiYWNrKSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5GZWVkYmFjayxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2VEZXRhaWxzKClcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgJHQuZmVlZGJhY2soXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICByYXRpbmc6IGV2ZW50LmRhdGEub2JqZWN0LnJhdGluZyB8fCAwLFxyXG4gICAgICAgICAgICAgIGNvbW1lbnRpZDogZXZlbnQuZGF0YS5vYmplY3QuY29tbWVudGlkIHx8ICcnLFxyXG4gICAgICAgICAgICAgIGNvbW1lbnR0eHQ6IGV2ZW50LmRhdGEub2JqZWN0LmNvbW1lbnR0eHQgfHwgJycsXHJcbiAgICAgICAgICAgICAgcGFnZWlkOiBwYWdlLnBhZ2VpZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmRhdGEub2JqZWN0LmNvbnRlbnRJZCB8fCBldmVudC5kYXRhLm9iamVjdC5pZCB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEuZWRhdGEudHlwZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHZlcjogYCR7KGV2ZW50LmRhdGEub2JqZWN0LnZlcnNpb24gfHwgJzEnKX0keycnfWAsXHJcbiAgICAgICAgICAgICAgICByb2xsdXA6IHt9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGludGVyYWN0JywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRIZWFyYmVhdExpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlIZWFydEJlYXQpID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkhlYXJ0QmVhdCxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZnJvbSA9PT0gJ3N0cmluZycgJiYgdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0pIHtcclxuICAgICAgICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5leHRlcm5hbEFwcHNbZXZlbnQuZnJvbV0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmhlYXJ0YmVhdChldmVudC5kYXRhLCBleHRlcm5hbENvbmZpZylcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaGVhcnRiZWF0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgJHQuaGVhcnRiZWF0KFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSxcclxuICAgICAgICAgICAgICAgIC8vIHN1YnR5cGU6IGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmRhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAvLyBtaW1lVHlwZTogZXZlbnQuZGF0YS5taW1lVHlwZSxcclxuICAgICAgICAgICAgICAgIC8vIG1vZGU6IGV2ZW50LmRhdGEubW9kZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBoZWFydGJlYXQnLCBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZFNlYXJjaExpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlTZWFyY2gpID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnkgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5ldmVudFN1YlR5cGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlNlYXJjaCxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAkdC5zZWFyY2goXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBxdWVyeTogZXZlbnQuZGF0YS5xdWVyeSxcclxuICAgICAgICAgICAgICBmaWx0ZXJzOiBldmVudC5kYXRhLmZpbHRlcnMsXHJcbiAgICAgICAgICAgICAgc2l6ZTogZXZlbnQuZGF0YS5zaXplLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IHNlYXJjaCcsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZURldGFpbHMoKSB7XHJcbiAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoJy8nLCAnJylcclxuICAgIGNvbnN0IHVybCA9IHBhdGggKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoXHJcbiAgICBsZXQgbW9kdWxlVmFsdWUgPSAnJ1xyXG4gICAgaWYgKHBhdGguaW5jbHVkZXMoJ2Rpc2N1c3Npb24tZm9ydW0nKSkge1xyXG4gICAgICBtb2R1bGVWYWx1ZSA9ICdEaXNjdXNzJ1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFnZWlkOiBwYXRoLFxyXG4gICAgICBwYWdlVXJsOiB1cmwsXHJcbiAgICAgIHBhZ2VVcmxQYXJ0czogcGF0aC5zcGxpdCgnLycpLFxyXG4gICAgICByZWZmZXJVcmw6IHRoaXMucHJldmlvdXNVcmwsXHJcbiAgICAgIG9iamVjdElkOiB0aGlzLmV4dHJhY3RDb250ZW50SWRGcm9tVXJsUGFydHMocGF0aC5zcGxpdCgnLycpKSxcclxuICAgICAgbW9kdWxlOiBtb2R1bGVWYWx1ZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dHJhY3RDb250ZW50SWRGcm9tVXJsUGFydHModXJsUGFydHM6IHN0cmluZ1tdKSB7XHJcbiAgICAvLyBUT0RPOiBwaWNrIHRvYyBhbmQgdmlld2VyIHVybCBmcm9tIHNvbWUgY29uZmlndXJhdGlvblxyXG4gICAgY29uc3QgdG9jSWR4ID0gdXJsUGFydHMuaW5kZXhPZigndG9jJylcclxuICAgIGNvbnN0IHZpZXdlcklkeCA9IHVybFBhcnRzLmluZGV4T2YoJ3ZpZXdlcicpXHJcblxyXG4gICAgaWYgKHRvY0lkeCA9PT0gLTEgJiYgdmlld2VySWR4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0b2NJZHggIT09IC0xICYmIHRvY0lkeCA8IHVybFBhcnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgcmV0dXJuIHVybFBhcnRzW3RvY0lkeCArIDFdIC8vIGUuZy4gdXJsIC9hcHAvdG9jLzxjb250ZW50X2lkPlxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2aWV3ZXJJZHggIT09IC0xICYmIHZpZXdlcklkeCA8IHVybFBhcnRzLmxlbmd0aCAtIDIpIHtcclxuICAgICAgcmV0dXJuIHVybFBhcnRzW3ZpZXdlcklkeCArIDJdIC8vIGUuZy4gdXJsIC9hcHAvdmlld2VyLzxjb250ZW50X3R5cGU+Lzxjb250ZW50X2lkPlxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
612
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1jYi91dGlscy12Mi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFBOzs7Ozs7O0FBT25ELE1BQU0sT0FBTyxnQkFBZ0I7SUFXM0IsWUFDVSxTQUFnQyxFQUNoQyxTQUF1QixFQUNSLFdBQWdCLEVBRS9CLE1BQXFCLEVBQ3JCLE1BQWMsRUFDZCxNQUFzQjtRQU50QixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBR3ZCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBakJoQyxnQkFBVyxHQUFrQixJQUFJLENBQUE7UUFDakMsb0JBQWUsR0FBNkMsSUFBSSxDQUFBO1FBQ2hFLFVBQUssR0FBUSxJQUFJLENBQUE7UUFDakIsaUJBQVksR0FBRyxFQUFFLENBQUE7UUFDakIseUJBQW9CLEdBQUcsSUFBSSxDQUFBO1FBQzNCLGFBQVEs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QUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sRUFBRSxXQUFXO1NBQ3BCLENBQUE7SUFDSCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsUUFBa0I7UUFFN0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN0QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRTVDLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUM1QjtRQUVELElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2RCxPQUFPLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUE7U0FDL0I7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7OztZQXoxQm9CLHFCQUFxQjtZQUNyQixZQUFZOzRDQUM5QixNQUFNLFNBQUMsYUFBYTtZQUVMLGFBQWE7WUFDYixNQUFNO1lBQ04sY0FBYzs7OztZQXJCakMsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFaUSxxQkFBcUI7WUFFckIsWUFBWTs0Q0F5QmhCLE1BQU0sU0FBQyxhQUFhO1lBeEJoQixhQUFhO1lBRWIsTUFBTTtZQUNOLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuLy8gaW1wb3J0IHsgQXV0aEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vYXV0aC1rZXljbG9hay5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBOc0luc3RhbmNlQ29uZmlnIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5tb2RlbCdcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9ucy5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBXc0V2ZW50cyB9IGZyb20gJy4vZXZlbnQubW9kZWwnXHJcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4vZXZlbnQuc2VydmljZSdcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vbG9nZ2VyLnNlcnZpY2UnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbnRlbnQubW9kZWwnXHJcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xyXG5pbXBvcnQgeyBOUFNHcmlkU2VydmljZSB9IGZyb20gJy4vbnBzLWdyaWQuc2VydmljZSdcclxuXHJcbmRlY2xhcmUgdmFyICR0OiBhbnlcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcclxuICBwcmV2aW91c1VybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICB0ZWxlbWV0cnlDb25maWc6IE5zSW5zdGFuY2VDb25maWcuSVRlbGVtZXRyeUNvbmZpZyB8IG51bGwgPSBudWxsXHJcbiAgcERhdGE6IGFueSA9IG51bGxcclxuICBjb250ZXh0Q2RhdGEgPSBbXVxyXG4gIGlzQW5vbnltb3VzVGVsZW1ldHJ5ID0gdHJ1ZVxyXG4gIHRlbEFycmF5OiBhbnkgPSBbXVxyXG4gIGV4dGVybmFsQXBwczogYW55ID0ge1xyXG4gICAgUkJDUDogJ3JiY3Atd2ViLXVpJyxcclxuICB9XHJcbiAgZW52aXJvbm1lbnQ6IGFueVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgZXZlbnRzU3ZjOiBFdmVudFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnksXHJcbiAgICAvLyBwcml2YXRlIGF1dGhTdmM6IEF1dGhLZXljbG9ha1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIG5wc1N2YzogTlBTR3JpZFNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcclxuICAgIGNvbnN0IGluc3RhbmNlQ29uZmlnID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWdcclxuICAgIHRoaXMubmF2aWdhdGlvblN0YXJ0KClcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbmZpZyhpbnN0YW5jZUNvbmZpZylcclxuICAgIHRoaXMuYWRkUGxheWVyTGlzdGVuZXIoKVxyXG4gICAgdGhpcy5hZGRDdXN0b21FdmVudExpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkSW50ZXJhY3RMaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZEZlZWRiYWNrTGlzdGVuZXIoKVxyXG4gICAgdGhpcy5hZGRUaW1lU3BlbnRMaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZFNlYXJjaExpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkSGVhcmJlYXRMaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZEN1c3RvbUltcHJlc3Npb25MaXN0ZW5lcigpXHJcbiAgICB0aGlzLmFkZEN1c3RvbUxpc3RlbmVyKClcclxuICAgIHRoaXMuYWRkQ3VzdG9tTGlzdGVuZXJGb3JHZXRTdGFydCgpXHJcbiAgICB0aGlzLmFkZEN1c3RvbUxpc3RlbmVyRm9yUGxhdGZvcm1SYXRpbmcoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uU3RhcnQoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xyXG4gICAgICAgIGlmIChldmVudC51cmwuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgZXZlbnQudXJsLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJykgfHwgZXZlbnQudXJsLmluY2x1ZGVzKCcvY2VydHMnKSkge1xyXG4gICAgICAgICAgdGhpcy5pc0Fub255bW91c1RlbGVtZXRyeSA9IHRydWVcclxuICAgICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5Q29uZmlnKClcclxuICAgICAgICAgIGNvbnN0IGluc3RhbmNlQ29uZmlnID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWdcclxuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbmZpZyhpbnN0YW5jZUNvbmZpZylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaXNBbm9ueW1vdXNUZWxlbWV0cnlSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzQW5vbnltb3VzVGVsZW1ldHJ5XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRlbGVtZXRyeUNvbmZpZygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1N2Yy5pbnN0YW5jZUNvbmZpZy50ZWxlbWV0cnlDb25maWcpIHtcclxuICAgICAgaWYgKHRoaXMuaXNBbm9ueW1vdXNUZWxlbWV0cnlSZXF1aXJlZCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZy5lbmRwb2ludCA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZy5wdWJsaWNFbmRwb2ludFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZy5lbmRwb2ludCA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZy5wcm90ZWN0ZWRFbmRwb2ludFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVDb25maWcoaW5zdGFuY2VDb25maWc6IE5zSW5zdGFuY2VDb25maWcuSUNvbmZpZyB8IG51bGwpIHtcclxuICAgIGlmIChpbnN0YW5jZUNvbmZpZykge1xyXG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyA9IGluc3RhbmNlQ29uZmlnLnRlbGVtZXRyeUNvbmZpZ1xyXG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbmZpZyA9IHtcclxuICAgICAgICAuLi50aGlzLnRlbGVtZXRyeUNvbmZpZyxcclxuICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgLi4udGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGEsXHJcbiAgICAgICAgICAvLyBwaWQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgICAgICBpZDogYCR7dGhpcy5lbnZpcm9ubWVudC5uYW1lfS4ke3RoaXMudGVsZW1ldHJ5Q29uZmlnLnBkYXRhLmlkfWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB1aWQ6ICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQpID9cclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQgOiAnJyxcclxuICAgICAgICAvLyBhdXRodG9rZW46IHRoaXMuYXV0aFN2Yy50b2tlbixcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgIGNoYW5uZWw6IHRoaXMucm9vdE9yZ0lkIHx8IHRoaXMudGVsZW1ldHJ5Q29uZmlnLmNoYW5uZWwsXHJcbiAgICAgICAgc2lkOiB0aGlzLmdldFRlbGVtZXRyeVNlc3Npb25JZCxcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBEYXRhID0gdGhpcy50ZWxlbWV0cnlDb25maWcucGRhdGFcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBnZXRUZWxlbWV0cnlTZXNzaW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVsZW1ldHJ5U2Vzc2lvbklkJykgfHwgJydcclxuICB9XHJcblxyXG4gIGdldCByb290T3JnSWQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1N2YyAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZFxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnXHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyTlBTVXBkYXRlKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy50ZWxBcnJheS5wdXNoKGRhdGEpXHJcbiAgICBpZiAodGhpcy50ZWxBcnJheSAmJiB0aGlzLnRlbEFycmF5Lmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JhdGluZ2Zvcm1JRCcpKSB7XHJcbiAgICAgICAgdGhpcy50ZWxBcnJheSA9IFtdXHJcbiAgICAgICAgdGhpcy5ucHNTdmMudXBkYXRlVGVsZW1ldHJ5RGF0YSh0cnVlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydChlZGF0YTogYW55LCBkYXRhOiBhbnksIHBhZ2VDb250ZXh0PzogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy50ZWxlbWV0cnlDb25maWcpIHtcclxuICAgICAgICAkdC5zdGFydChcclxuICAgICAgICAgIHRoaXMudGVsZW1ldHJ5Q29uZmlnLFxyXG4gICAgICAgICAgKHBhZ2VDb250ZXh0ICYmIHBhZ2VDb250ZXh0LnBhZ2VJZCkgP1xyXG4gICAgICAgICAgICBwYWdlQ29udGV4dC5wYWdlSWRcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICcxLjAnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBpZCxcclxuICAgICAgICAgICAgdHlwZTogZWRhdGEudHlwZSxcclxuICAgICAgICAgICAgbW9kZTogZWRhdGEubW9kZSxcclxuICAgICAgICAgICAgcGFnZWlkOiAocGFnZUNvbnRleHQgJiYgcGFnZUNvbnRleHQucGFnZUlkKSA/XHJcbiAgICAgICAgICAgICAgcGFnZUNvbnRleHQucGFnZUlkXHJcbiAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgZHVyYXRpb246IDEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIC4uLihwYWdlQ29udGV4dCAmJiBwYWdlQ29udGV4dC5tb2R1bGUgPyB7IGVudjogcGFnZUNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2JqZWN0OiB7XHJcbiAgICAgICAgICAgICAgLi4uKGRhdGEpICYmIGRhdGEsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLih0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQgP1xyXG4gICAgICAgICAgICAgICBudWxsIDogeyBhY3RvcjogeyBpZDogJycsIHR5cGU6ICdBbm9ueW1vdXNVc2VyJyB9IH0pLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgSW5pdGlhbGl6aW5nIFRlbGVtZXRyeS4gQ29uZmlnIG1pc3NpbmcuJylcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBzdGFydCcsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmQoZWRhdGE6IGFueSwgZGF0YTogYW55LCBwYWdlQ29udGV4dD86IFdzRXZlbnRzLklUZWxlbWV0cnlQYWdlQ29udGV4dCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgJHQuZW5kKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHR5cGU6IGVkYXRhLnR5cGUsXHJcbiAgICAgICAgICBtb2RlOiBlZGF0YS5tb2RlLFxyXG4gICAgICAgICAgcGFnZWlkOiAocGFnZUNvbnRleHQgJiYgcGFnZUNvbnRleHQucGFnZUlkKSA/XHJcbiAgICAgICAgICAgIHBhZ2VDb250ZXh0LnBhZ2VJZFxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLihwYWdlQ29udGV4dCAmJiBwYWdlQ29udGV4dC5tb2R1bGUgPyB7IGVudjogcGFnZUNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgLi4uKGRhdGEpICYmIGRhdGEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgZW5kJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1ZGl0KHR5cGU6IHN0cmluZywgcHJvcHM6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAkdC5hdWRpdChcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgcHJvcHMsXHJcbiAgICAgICAgICAvLyBkYXRhLFxyXG4gICAgICAgICAgc3RhdGU6IGRhdGEsIC8vIE9wdGlvbmFsLiBDdXJyZW50IFN0YXRlXHJcbiAgICAgICAgICBwcmV2c3RhdGU6ICcnLCAvLyBPcHRpb25hbC4gUHJldmlvdXMgU3RhdGVcclxuICAgICAgICAgIGR1cmF0aW9uOiAnJywgLy8gT3B0aW9uYWwuXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBhdWRpdCcsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoZWFydGJlYXQodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAkdC5oZWFydGJlYXQoe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIC8vIG1vZGUsXHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgfSlcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaGVhcnRiZWF0JywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGltcHJlc3Npb24oZGF0YT86IGFueSwgb2JqZWN0VHlwZT86IGFueSkge1xyXG4gICAgdGhpcy50cmlnZ2VyTlBTVXBkYXRlKGRhdGEpXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEucGFnZUNvbnRleHQpIHtcclxuICAgICAgICBwYWdlLnBhZ2VpZCA9IGRhdGEucGFnZUNvbnRleHQucGFnZUlkXHJcbiAgICAgICAgcGFnZS5tb2R1bGUgPSBkYXRhLnBhZ2VDb250ZXh0Lm1vZHVsZVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVkYXRhID0ge1xyXG4gICAgICAgIHBhZ2VpZDogcGFnZS5wYWdlaWQsIC8vIFJlcXVpcmVkLiBVbmlxdWUgcGFnZSBpZFxyXG4gICAgICAgIHR5cGU6IHBhZ2UucGFnZVVybFBhcnRzWzBdLCAvLyBSZXF1aXJlZC4gSW1wcmVzc2lvbiB0eXBlIChsaXN0LCBkZXRhaWwsIHZpZXcsIGVkaXQsIHdvcmtmbG93LCBzZWFyY2gpXHJcbiAgICAgICAgdXJpOiBwYWdlLnBhZ2VVcmwsXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhZ2Uub2JqZWN0SWQpIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW52OiBwYWdlLm1vZHVsZSB8fCAodGhpcy50ZWxlbWV0cnlDb25maWcgJiYgdGhpcy50ZWxlbWV0cnlDb25maWcuZW52KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgaWQ6IHBhZ2Uub2JqZWN0SWQsXHJcbiAgICAgICAgICAgIHR5cGU6IG9iamVjdFR5cGUsXHJcbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBvdmVycmlkZSBhYm92ZSBpZCBpZiB0aGUgZGF0YSBoYXMgb2JqZWN0IGluIGl0LlxyXG4gICAgICAgICAgICAuLi4oZGF0YSAmJiBkYXRhLm9iamVjdCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXBhZ2Uub2JqZWN0SWQgfHwgIW9iamVjdFR5cGUpIHtcclxuICAgICAgICAgIGNvbmZpZy5vYmplY3QgPSB7fVxyXG4gICAgICAgIH1cclxuICAgICAgICAkdC5pbXByZXNzaW9uKGVkYXRhLCBjb25maWcpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJHQuaW1wcmVzc2lvbihlZGF0YSwge1xyXG4gICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEgJiYgdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW52OiBwYWdlLm1vZHVsZSB8fCAnJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgLi4uKGRhdGEgJiYgZGF0YS5vYmplY3QpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJldmlvdXNVcmwgPSBwYWdlLnBhZ2VVcmxcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaW1wcmVzc2lvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHRlcm5hbEltcHJlc3Npb24oaW1wcmVzc2lvbkRhdGE6IGFueSkge1xyXG4gICAgLy8gdGhpcy50cmlnZ2VyTlBTVXBkYXRlKGltcHJlc3Npb25EYXRhKVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgICBpZiAodGhpcy5leHRlcm5hbEFwcHNbaW1wcmVzc2lvbkRhdGEuc3ViQXBwbGljYXRpb25OYW1lXSkge1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsQ29uZmlnID0gcGFnZS5vYmplY3RJZCA/IHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICBpZDogcGFnZS5vYmplY3RJZCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSA6IHtcclxuICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcGRhdGE6IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tpbXByZXNzaW9uRGF0YS5zdWJBcHBsaWNhdGlvbk5hbWVdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgICAgJHQuaW1wcmVzc2lvbihpbXByZXNzaW9uRGF0YS5kYXRhLCBleHRlcm5hbENvbmZpZylcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBleHRlcm5hbEltcHJlc3Npb24nLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZm9yIFBsYXJ0Zm9ybSByYXRpbmdcclxuICBhZGRDdXN0b21MaXN0ZW5lckZvclBsYXRmb3JtUmF0aW5nKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZ2V0UFJFdmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5QbGF0Zm9ybVJhdGluZyAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmIChldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3RcclxuICAgICAgICApIHtcclxuICAgICAgICAgICR0LmludGVyYWN0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS5lZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgIHN1YnR5cGU6IGV2ZW50LmRhdGEuZWRhdGEuc3ViVHlwZSxcclxuICAgICAgICAgICAgICBpZDogKGV2ZW50LmRhdGEuZWRhdGEgJiYgZXZlbnQuZGF0YS5lZGF0YS5pZCkgP1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5lZGF0YS5pZFxyXG4gICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBwYWdlaWQ6IGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0LnBhZ2VJZCB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC4uLihldmVudC5wYWdlQ29udGV4dCAmJiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgPyB7IGVudjogZXZlbnQucGFnZUNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAgICAgLi4uZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkQ3VzdG9tTGlzdGVuZXJGb3JHZXRTdGFydCgpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmdldFN0YXJ0RXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICBldmVudCA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuR2V0U3RhcnRlZCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmIChldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEub2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3RcclxuICAgICAgICApIHtcclxuICAgICAgICAgICR0LmludGVyYWN0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS5lZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgIHN1YnR5cGU6IGV2ZW50LmRhdGEuZWRhdGEuc3ViVHlwZSxcclxuICAgICAgICAgICAgICBpZDogKGV2ZW50LmRhdGEuZWRhdGEgJiYgZXZlbnQuZGF0YS5lZGF0YS5pZCkgP1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5lZGF0YS5pZFxyXG4gICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBwYWdlaWQ6IGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0LnBhZ2VJZCB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC4uLihldmVudC5wYWdlQ29udGV4dCAmJiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgPyB7IGVudjogZXZlbnQucGFnZUNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAgICAgLi4uZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkQ3VzdG9tTGlzdGVuZXIoKSB7XHJcbiAgICB0aGlzLmV2ZW50c1N2Yy5jaGF0Ym90RXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICBldmVudCA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm1vZGUgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSxcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmIChldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgICBtb2RlOiBldmVudC5kYXRhLm1vZGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRNb2RlLlBsYXksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICBldmVudC5wYWdlQ29udGV4dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3RcclxuICAgICAgICApIHtcclxuICAgICAgICAgICR0LmludGVyYWN0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS5lZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgIHN1YnR5cGU6IGV2ZW50LmRhdGEuZWRhdGEuc3ViVHlwZSxcclxuICAgICAgICAgICAgICBpZDogKGV2ZW50LmRhdGEuZWRhdGEgJiYgZXZlbnQuZGF0YS5lZGF0YS5pZCkgP1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5lZGF0YS5pZFxyXG4gICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICBwYWdlaWQ6IGV2ZW50LnBhZ2VDb250ZXh0ICYmIGV2ZW50LnBhZ2VDb250ZXh0LnBhZ2VJZCB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC4uLihldmVudC5wYWdlQ29udGV4dCAmJiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgPyB7IGVudjogZXZlbnQucGFnZUNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9iamVjdDoge1xyXG4gICAgICAgICAgICAgICAgLi4uZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkQ3VzdG9tSW1wcmVzc2lvbkxpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlJbXByZXNzaW9uKSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbXByZXNzaW9uLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdldmVudC5kYXRhOjonLCBldmVudC5kYXRhKVxyXG4gICAgICAgICAgdGhpcy5pbXByZXNzaW9uKGV2ZW50LmRhdGEpXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGltcHJlc3Npb24nLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGFkZFRpbWVTcGVudExpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICBldmVudCA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnR5cGUgPT09IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QYWdlICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEubW9kZSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5lbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUgfHwgV3NFdmVudHMuV3NUaW1lU3BlbnRUeXBlLlBsYXllcixcclxuICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21FdmVudExpc3RlbmVyKCkge1xyXG5cclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgZXZlbnQgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnlcclxuICAgICAgICApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCAmJlxyXG4gICAgICAgICAgZXZlbnQuZGF0YS50eXBlICE9PSBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LmRhdGEuc3RhdGUgPT09IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkICYmXHJcbiAgICAgICAgICBldmVudC5kYXRhLnR5cGUgIT09IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXJcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZW5kKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG4gIGFkZFBsYXllckxpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICBldmVudCA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLnR5cGUgPT09IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5tb2RlICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsID0gZXZlbnQuZGF0YS5jb250ZW50XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5zdGF0ZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkICYmXHJcbiAgICAgICAgICAoIWNvbnRlbnQgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdtYXliZScgfHxcclxuICAgICAgICAgICAgKGNvbnRlbnQuaXNJZnJhbWVTdXBwb3J0ZWQgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnIHx8XHJcbiAgICAgICAgICAgIChjb250ZW50Lm1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vcGRmJyB8fCAnYXBwbGljYXRpb24vanNvbicpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEudHlwZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudFR5cGUuUGxheWVyLFxyXG4gICAgICAgICAgICAgIG1vZGU6IGV2ZW50LmRhdGEubW9kZSB8fCBXc0V2ZW50cy5Xc1RpbWVTcGVudE1vZGUuUGxheSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VDb250ZXh0XHJcblxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnN0YXRlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCAmJlxyXG4gICAgICAgICAgKCFjb250ZW50IHx8XHJcbiAgICAgICAgICAgIChjb250ZW50LmlzSWZyYW1lU3VwcG9ydGVkIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnbWF5YmUnIHx8XHJcbiAgICAgICAgICAgIChjb250ZW50LmlzSWZyYW1lU3VwcG9ydGVkIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAneWVzJyB8fFxyXG4gICAgICAgICAgICAoY29udGVudC5taW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgJ2FwcGxpY2F0aW9uL2pzb24nKSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZW5kKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQuZGF0YS50eXBlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50VHlwZS5QbGF5ZXIsXHJcbiAgICAgICAgICAgICAgbW9kZTogZXZlbnQuZGF0YS5tb2RlIHx8IFdzRXZlbnRzLldzVGltZVNwZW50TW9kZS5QbGF5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLm9iamVjdCxcclxuICAgICAgICAgICAgZXZlbnQucGFnZUNvbnRleHRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRJbnRlcmFjdExpc3RlbmVyKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGFnZURldGFpbHMoKVxyXG4gICAgdGhpcy50cmlnZ2VyTlBTVXBkYXRlKGRhdGEucGFnZWlkKVxyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdCkgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3QsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5mcm9tID09PSAnc3RyaW5nJyAmJiB0aGlzLmV4dGVybmFsQXBwc1tldmVudC5mcm9tXSkge1xyXG4gICAgICAgICAgY29uc3QgZXh0ZXJuYWxDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmV4dGVybmFsQXBwc1tldmVudC5mcm9tXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgJHQuaW50ZXJhY3QoZXZlbnQuZGF0YSwgZXh0ZXJuYWxDb25maWcpXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGludGVyYWN0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gbGV0IGludGVyYWN0aWRcclxuICAgICAgICAgIC8vIGlmIChldmVudC5kYXRhLmVkYXRhLnR5cGUgPT09ICdnb2FsJykge1xyXG4gICAgICAgICAgLy8gICBpbnRlcmFjdGlkID0gcGFnZS5wYWdlVXJsUGFydHNbNF1cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmludGVyYWN0KFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50LmRhdGEuZWRhdGEudHlwZSxcclxuICAgICAgICAgICAgICAgIHN1YnR5cGU6IGV2ZW50LmRhdGEuZWRhdGEuc3ViVHlwZSxcclxuICAgICAgICAgICAgICAgIC8vIG9iamVjdDogZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICBpZDogKGV2ZW50LmRhdGEuZWRhdGEgJiYgZXZlbnQuZGF0YS5lZGF0YS5pZCkgP1xyXG4gICAgICAgICAgICAgICAgICBldmVudC5kYXRhLmVkYXRhLmlkXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgICBwYWdlaWQ6IGV2ZW50LmRhdGEucGFnZUNvbnRleHQgJiYgZXZlbnQuZGF0YS5wYWdlQ29udGV4dC5wYWdlSWQgfHwgcGFnZS5wYWdlaWQsXHJcbiAgICAgICAgICAgICAgICAvLyB0YXJnZXQ6IHsgcGFnZSB9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucERhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIC4uLihldmVudC5wYWdlQ29udGV4dCAmJiBldmVudC5wYWdlQ29udGV4dC5tb2R1bGUgPyB7IGVudjogZXZlbnQucGFnZUNvbnRleHQubW9kdWxlIH0gOiBudWxsKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAgICAgLi4uZXZlbnQuZGF0YS5vYmplY3QsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGludGVyYWN0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRGZWVkYmFja0xpc3RlbmVyKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdmMuZXZlbnRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoXHJcbiAgICAgICAgICAoZXZlbnQ6IFdzRXZlbnRzLldzRXZlbnRUZWxlbWV0cnlGZWVkYmFjaykgPT5cclxuICAgICAgICAgICAgZXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQuZGF0YSAmJlxyXG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPT09IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSA9PT0gV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuRmVlZGJhY2ssXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRQYWdlRGV0YWlscygpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICR0LmZlZWRiYWNrKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcmF0aW5nOiBldmVudC5kYXRhLm9iamVjdC5yYXRpbmcgfHwgMCxcclxuICAgICAgICAgICAgICBjb21tZW50aWQ6IGV2ZW50LmRhdGEub2JqZWN0LmNvbW1lbnRpZCB8fCAnJyxcclxuICAgICAgICAgICAgICBjb21tZW50dHh0OiBldmVudC5kYXRhLm9iamVjdC5jb21tZW50dHh0IHx8ICcnLFxyXG4gICAgICAgICAgICAgIHBhZ2VpZDogcGFnZS5wYWdlaWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICBwZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgICAgICAgIGlkOiBldmVudC5kYXRhLm9iamVjdC5jb250ZW50SWQgfHwgZXZlbnQuZGF0YS5vYmplY3QuaWQgfHwgJycsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLmVkYXRhLnR5cGUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICB2ZXI6IGAkeyhldmVudC5kYXRhLm9iamVjdC52ZXJzaW9uIHx8ICcxJyl9JHsnJ31gLFxyXG4gICAgICAgICAgICAgICAgcm9sbHVwOiB7fSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBpbnRlcmFjdCcsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYWRkSGVhcmJlYXRMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5SGVhcnRCZWF0KSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5IZWFydEJlYXQsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmZyb20gPT09ICdzdHJpbmcnICYmIHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dKSB7XHJcbiAgICAgICAgICBjb25zdCBleHRlcm5hbENvbmZpZyA9IHtcclxuICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBEYXRhLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZXh0ZXJuYWxBcHBzW2V2ZW50LmZyb21dLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkdC5oZWFydGJlYXQoZXZlbnQuZGF0YSwgZXh0ZXJuYWxDb25maWcpXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gdGVsZW1ldHJ5IGhlYXJ0YmVhdCcsIGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICR0LmhlYXJ0YmVhdChcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBldmVudC5kYXRhLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAvLyBzdWJ0eXBlOiBldmVudC5kYXRhLmV2ZW50U3ViVHlwZSxcclxuICAgICAgICAgICAgICAgIGlkOiBldmVudC5kYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgLy8gbWltZVR5cGU6IGV2ZW50LmRhdGEubWltZVR5cGUsXHJcbiAgICAgICAgICAgICAgICAvLyBtb2RlOiBldmVudC5kYXRhLm1vZGUsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5wRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wRGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiB0ZWxlbWV0cnkgaGVhcnRiZWF0JywgZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRTZWFyY2hMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuZXZlbnRzU3ZjLmV2ZW50cyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgKGV2ZW50OiBXc0V2ZW50cy5Xc0V2ZW50VGVsZW1ldHJ5U2VhcmNoKSA9PlxyXG4gICAgICAgICAgICBldmVudCAmJlxyXG4gICAgICAgICAgICBldmVudC5kYXRhICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5ICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEuZXZlbnRTdWJUeXBlID09PSBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5TZWFyY2gsXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgJHQuc2VhcmNoKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcXVlcnk6IGV2ZW50LmRhdGEucXVlcnksXHJcbiAgICAgICAgICAgICAgZmlsdGVyczogZXZlbnQuZGF0YS5maWx0ZXJzLFxyXG4gICAgICAgICAgICAgIHNpemU6IGV2ZW50LmRhdGEuc2l6ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucERhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnBEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHRlbGVtZXRyeSBzZWFyY2gnLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGdldFBhZ2VEZXRhaWxzKCkge1xyXG4gICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKCcvJywgJycpXHJcbiAgICBjb25zdCB1cmwgPSBwYXRoICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaFxyXG4gICAgbGV0IG1vZHVsZVZhbHVlID0gJydcclxuICAgIGlmIChwYXRoLmluY2x1ZGVzKCdkaXNjdXNzaW9uLWZvcnVtJykpIHtcclxuICAgICAgbW9kdWxlVmFsdWUgPSAnRGlzY3VzcydcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhZ2VpZDogcGF0aCxcclxuICAgICAgcGFnZVVybDogdXJsLFxyXG4gICAgICBwYWdlVXJsUGFydHM6IHBhdGguc3BsaXQoJy8nKSxcclxuICAgICAgcmVmZmVyVXJsOiB0aGlzLnByZXZpb3VzVXJsLFxyXG4gICAgICBvYmplY3RJZDogdGhpcy5leHRyYWN0Q29udGVudElkRnJvbVVybFBhcnRzKHBhdGguc3BsaXQoJy8nKSksXHJcbiAgICAgIG1vZHVsZTogbW9kdWxlVmFsdWUsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHRyYWN0Q29udGVudElkRnJvbVVybFBhcnRzKHVybFBhcnRzOiBzdHJpbmdbXSkge1xyXG4gICAgLy8gVE9ETzogcGljayB0b2MgYW5kIHZpZXdlciB1cmwgZnJvbSBzb21lIGNvbmZpZ3VyYXRpb25cclxuICAgIGNvbnN0IHRvY0lkeCA9IHVybFBhcnRzLmluZGV4T2YoJ3RvYycpXHJcbiAgICBjb25zdCB2aWV3ZXJJZHggPSB1cmxQYXJ0cy5pbmRleE9mKCd2aWV3ZXInKVxyXG5cclxuICAgIGlmICh0b2NJZHggPT09IC0xICYmIHZpZXdlcklkeCA9PT0gLTEpIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodG9jSWR4ICE9PSAtMSAmJiB0b2NJZHggPCB1cmxQYXJ0cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJ0c1t0b2NJZHggKyAxXSAvLyBlLmcuIHVybCAvYXBwL3RvYy88Y29udGVudF9pZD5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmlld2VySWR4ICE9PSAtMSAmJiB2aWV3ZXJJZHggPCB1cmxQYXJ0cy5sZW5ndGggLSAyKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJ0c1t2aWV3ZXJJZHggKyAyXSAvLyBlLmcuIHVybCAvYXBwL3ZpZXdlci88Y29udGVudF90eXBlPi88Y29udGVudF9pZD5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxufVxyXG4iXX0=
|