@coolon/angular-ui-powerups 0.0.98 → 0.0.102
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/coolon-angular-ui-powerups.umd.js +2036 -1518
- package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
- package/coolon-angular-ui-powerups.d.ts +19 -19
- package/coolon-angular-ui-powerups.metadata.json +1 -1
- package/esm2015/coolon-angular-ui-powerups.js +19 -19
- package/esm2015/index.js +2 -2
- package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +20 -5
- package/esm2015/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +13 -3
- package/esm2015/lib/interaction/index.js +5 -4
- package/esm2015/lib/interaction/interaction-context-base.js +21 -8
- package/esm2015/lib/interaction/interaction-context.js +53 -46
- package/esm2015/lib/interaction/interaction.module.js +3 -3
- package/esm2015/lib/interaction/services/interaction.service.js +232 -0
- package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.js +62 -0
- package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.js +145 -0
- package/esm2015/lib/interaction/services/modal-interaction-context.factory.js +17 -0
- package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +3 -3
- package/esm2015/lib/place/guards/navigation-state.js +406 -262
- package/esm2015/lib/place/guards/place-component-deactivation-handler.js +63 -28
- package/esm2015/lib/place/guards/place.guard.js +215 -0
- package/esm2015/lib/place/index.js +2 -3
- package/esm2015/lib/place/place-router.js +161 -118
- package/esm2015/lib/place/url-snapshot.js +124 -36
- package/esm2015/public_api.js +3 -3
- package/esm5/coolon-angular-ui-powerups.js +19 -19
- package/esm5/index.js +2 -2
- package/esm5/lib/interaction/components/activity-container/activity-container.component.js +24 -14
- package/esm5/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +10 -3
- package/esm5/lib/interaction/index.js +5 -4
- package/esm5/lib/interaction/interaction-context-base.js +25 -8
- package/esm5/lib/interaction/interaction-context.js +81 -56
- package/esm5/lib/interaction/interaction.module.js +3 -3
- package/esm5/lib/interaction/services/interaction.service.js +280 -0
- package/esm5/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.js +65 -0
- package/esm5/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.js +170 -0
- package/esm5/lib/interaction/services/modal-interaction-context.factory.js +27 -0
- package/esm5/lib/place/components/place-outlet/place-outlet.component.js +3 -3
- package/esm5/lib/place/guards/navigation-state.js +552 -304
- package/esm5/lib/place/guards/place-component-deactivation-handler.js +73 -27
- package/esm5/lib/place/guards/place.guard.js +300 -0
- package/esm5/lib/place/index.js +2 -3
- package/esm5/lib/place/place-router.js +199 -137
- package/esm5/lib/place/url-snapshot.js +153 -42
- package/esm5/public_api.js +3 -3
- package/fesm2015/coolon-angular-ui-powerups.js +1636 -1300
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/fesm5/coolon-angular-ui-powerups.js +1985 -1466
- package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/interaction/components/activity-container/activity-container.component.d.ts +1 -0
- package/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.d.ts +3 -1
- package/lib/interaction/index.d.ts +4 -3
- package/lib/interaction/interaction-context-base.d.ts +3 -1
- package/lib/interaction/interaction-context.d.ts +11 -13
- package/lib/interaction/services/interaction.service.d.ts +46 -0
- package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.d.ts +15 -0
- package/lib/interaction/services/{dialog-interaction-context.d.ts → mat-dialog-interaction/dialog-interaction-context.d.ts} +2 -2
- package/lib/interaction/services/modal-interaction-context.factory.d.ts +4 -0
- package/lib/place/guards/navigation-state.d.ts +83 -49
- package/lib/place/guards/place-component-deactivation-handler.d.ts +7 -4
- package/lib/place/guards/{abstract-place.guard.d.ts → place.guard.d.ts} +9 -4
- package/lib/place/index.d.ts +1 -2
- package/lib/place/place-router.d.ts +17 -22
- package/lib/place/url-snapshot.d.ts +23 -6
- package/package.json +1 -1
- package/schematics/place-routes/place-def.js +1 -0
- package/schematics/place-routes/place-def.js.map +1 -1
- package/schematics/place-routes/templates/place-routes.ts.template +10 -11
- package/styles/styles.scss +1 -1
- package/esm2015/lib/interaction/services/dialog-interaction-context.js +0 -163
- package/esm2015/lib/interaction/services/dialog-interaction.service.js +0 -151
- package/esm2015/lib/interaction/services/modal-interaction.service.js +0 -109
- package/esm2015/lib/place/guards/abstract-place.guard.js +0 -165
- package/esm2015/lib/place/guards/interaction.guard.js +0 -113
- package/esm5/lib/interaction/services/dialog-interaction-context.js +0 -188
- package/esm5/lib/interaction/services/dialog-interaction.service.js +0 -179
- package/esm5/lib/interaction/services/modal-interaction.service.js +0 -153
- package/esm5/lib/place/guards/abstract-place.guard.js +0 -212
- package/esm5/lib/place/guards/interaction.guard.js +0 -125
- package/lib/interaction/services/dialog-interaction.service.d.ts +0 -24
- package/lib/interaction/services/modal-interaction.service.d.ts +0 -15
- package/lib/place/guards/interaction.guard.d.ts +0 -17
|
@@ -6,9 +6,9 @@ import * as tslib_1 from "tslib";
|
|
|
6
6
|
import { Location } from '@angular/common';
|
|
7
7
|
import { Injectable } from '@angular/core';
|
|
8
8
|
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router, UrlSerializer } from '@angular/router';
|
|
9
|
-
import { assert, Dsl, GarbageCollector, lang, Logger, MutableListModel, MutableValueModel } from '@coolon/pectin';
|
|
9
|
+
import { assert, Dsl, GarbageCollector, lang, Logger, MutableListModel, MutableStream, MutableValueModel } from '@coolon/pectin';
|
|
10
10
|
import _ from 'lodash';
|
|
11
|
-
import {
|
|
11
|
+
import { InteractionService } from '../interaction/services/interaction.service';
|
|
12
12
|
import { NavigationState } from './guards/navigation-state';
|
|
13
13
|
import { PlaceHistory } from './place-history';
|
|
14
14
|
import { UrlSnapshot } from './url-snapshot';
|
|
@@ -16,36 +16,40 @@ import * as i0 from "@angular/core";
|
|
|
16
16
|
import * as i1 from "@angular/router";
|
|
17
17
|
import * as i2 from "@angular/common";
|
|
18
18
|
import * as i3 from "./place-history";
|
|
19
|
-
import * as i4 from "../interaction/services/
|
|
19
|
+
import * as i4 from "../interaction/services/interaction.service";
|
|
20
20
|
export class PlaceRouter extends GarbageCollector {
|
|
21
21
|
/**
|
|
22
22
|
* @param {?} router
|
|
23
23
|
* @param {?} urlSerializer
|
|
24
24
|
* @param {?} angularLocation
|
|
25
25
|
* @param {?} placeHistory
|
|
26
|
-
* @param {?}
|
|
26
|
+
* @param {?} interactionService
|
|
27
27
|
*/
|
|
28
|
-
constructor(router, urlSerializer, angularLocation, placeHistory,
|
|
28
|
+
constructor(router, urlSerializer, angularLocation, placeHistory, interactionService) {
|
|
29
29
|
super();
|
|
30
30
|
this.router = router;
|
|
31
31
|
this.urlSerializer = urlSerializer;
|
|
32
32
|
this.angularLocation = angularLocation;
|
|
33
33
|
this.placeHistory = placeHistory;
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
36
|
-
this._navigationSessionModel = new MutableValueModel();
|
|
34
|
+
this.interactionService = interactionService;
|
|
35
|
+
this._navigationStateModel = new MutableValueModel();
|
|
37
36
|
this._activeVisits = new MutableListModel();
|
|
38
37
|
const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
|
|
39
38
|
this.activeVisitIndex = chain(this._activeVisits).indexBy('placeDefinition');
|
|
40
|
-
this.
|
|
41
|
-
this._navigationSessionContext = new NavigationState.Context(this
|
|
39
|
+
this.navigationInProgress = chain(this.navigationStateModel).pluck('isTransitional');
|
|
40
|
+
this._navigationSessionContext = new NavigationState.Context(this, this.interactionService, (/**
|
|
42
41
|
* @param {?} session
|
|
43
42
|
* @return {?}
|
|
44
43
|
*/
|
|
45
44
|
session => {
|
|
46
45
|
this.processNavigationSuccess(session);
|
|
47
46
|
}));
|
|
48
|
-
this.
|
|
47
|
+
this._navigationStateModel.value = new NavigationState.Idle(this._navigationSessionContext);
|
|
48
|
+
this._navigationStateTypeModel = chain(this._navigationStateModel).map((/**
|
|
49
|
+
* @param {?} state
|
|
50
|
+
* @return {?}
|
|
51
|
+
*/
|
|
52
|
+
state => (/** @type {?} */ (state.constructor))));
|
|
49
53
|
// TODO: make setup the callbacks in during module initiation to make this testable.
|
|
50
54
|
this.router.events.subscribe((/**
|
|
51
55
|
* @param {?} event
|
|
@@ -59,53 +63,83 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
59
63
|
// NavigationStart -> .... -> NavigationError --> navigation aborted, end session.
|
|
60
64
|
// =======================
|
|
61
65
|
if (event instanceof NavigationStart) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
if (event.navigationTrigger === 'popstate') {
|
|
67
|
+
this.runStateTransition((/**
|
|
68
|
+
* @param {?} state
|
|
69
|
+
* @return {?}
|
|
70
|
+
*/
|
|
71
|
+
state => state.onPopState(event)));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.runStateTransition((/**
|
|
75
|
+
* @param {?} state
|
|
76
|
+
* @return {?}
|
|
77
|
+
*/
|
|
78
|
+
state => state.onRouterStarted(event)));
|
|
79
|
+
}
|
|
67
80
|
}
|
|
68
81
|
if (event instanceof NavigationEnd) {
|
|
82
|
+
console.log(event);
|
|
69
83
|
this.runStateTransition((/**
|
|
70
|
-
* @param {?}
|
|
84
|
+
* @param {?} state
|
|
71
85
|
* @return {?}
|
|
72
86
|
*/
|
|
73
|
-
|
|
87
|
+
state => state.onRouterEnd(event)));
|
|
74
88
|
}
|
|
75
89
|
if (event instanceof NavigationError) {
|
|
90
|
+
console.log(event);
|
|
76
91
|
this.runStateTransition((/**
|
|
77
|
-
* @param {?}
|
|
92
|
+
* @param {?} state
|
|
78
93
|
* @return {?}
|
|
79
94
|
*/
|
|
80
|
-
|
|
95
|
+
state => state.onRouterError(event)));
|
|
81
96
|
}
|
|
82
97
|
if (event instanceof NavigationCancel) {
|
|
98
|
+
console.log(event);
|
|
83
99
|
this.runStateTransition((/**
|
|
84
|
-
* @param {?}
|
|
100
|
+
* @param {?} state
|
|
85
101
|
* @return {?}
|
|
86
102
|
*/
|
|
87
|
-
|
|
103
|
+
state => state.onRouterCancelled(event)));
|
|
88
104
|
}
|
|
89
105
|
}));
|
|
90
106
|
// Push dialog state to the url so we can capture the back button.
|
|
91
|
-
|
|
107
|
+
when.listOf(this.interactionService.activeInteractionContextIds).changes((/**
|
|
108
|
+
* @param {?} ids
|
|
109
|
+
* @param {?} previous
|
|
110
|
+
* @return {?}
|
|
111
|
+
*/
|
|
112
|
+
(ids, previous) => {
|
|
113
|
+
this.syncInteractionIdsWithRouter();
|
|
114
|
+
}), { unless: this.navigationInProgress }); // TODO: I think the exclusive interaction prevents interactions starting while it's active so we might not need this.
|
|
115
|
+
// TODO: I think the exclusive interaction prevents interactions starting while it's active so we might not need this.
|
|
116
|
+
/** @type {?} */
|
|
117
|
+
const urlChanges = new MutableStream();
|
|
92
118
|
// The angular router doesn't always fire router events when the back button is pushed while a navigation
|
|
93
119
|
// session is in progress. Sometimes we only know about it from the url change.
|
|
120
|
+
// IMPORTANT ORDER DEPENDENCY
|
|
121
|
+
// This only works because we're notified of the change after the router has started reacting to it. This
|
|
122
|
+
// we can can use our navigationState to determine things.
|
|
94
123
|
angularLocation.onUrlChange((/**
|
|
95
124
|
* @param {?} url
|
|
96
125
|
* @return {?}
|
|
97
126
|
*/
|
|
98
127
|
url => {
|
|
99
|
-
console.log(`#### url changed ->`, { url, navIsActive: this.navigationSessionActive.value });
|
|
100
128
|
/** @type {?} */
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
129
|
+
const navigationState = this._navigationStateModel.value;
|
|
130
|
+
console.log(`URLChange -> ${url}`, { state: navigationState });
|
|
131
|
+
urlChanges.publish({ url, state: navigationState });
|
|
132
|
+
// The url has changed while we're in a transitional state
|
|
133
|
+
if (navigationState.isTransitional) {
|
|
134
|
+
/** @type {?} */
|
|
135
|
+
const navigationInteraction = this.navigationState.interactionContext;
|
|
136
|
+
if (navigationInteraction && navigationInteraction.isActive()) {
|
|
137
|
+
this.runStateTransition((/**
|
|
138
|
+
* @param {?} state
|
|
139
|
+
* @return {?}
|
|
140
|
+
*/
|
|
141
|
+
state => state.onBackClickedDuringNavigationInteraction(url)));
|
|
142
|
+
}
|
|
109
143
|
}
|
|
110
144
|
}));
|
|
111
145
|
}
|
|
@@ -117,7 +151,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
117
151
|
processNavigationSuccess(session) {
|
|
118
152
|
// We need to update the visits before the session finishes. This allows the placeOutets to ignore visit
|
|
119
153
|
// changes that occur while routerNavigationActive is true.
|
|
120
|
-
assert.isTruthy(this.
|
|
154
|
+
assert.isTruthy(this.navigationInProgress.value);
|
|
121
155
|
/** @type {?} */
|
|
122
156
|
const visits = session.getVisits();
|
|
123
157
|
visits.forEach((/**
|
|
@@ -130,14 +164,14 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
130
164
|
/**
|
|
131
165
|
* @return {?}
|
|
132
166
|
*/
|
|
133
|
-
get
|
|
134
|
-
return this.
|
|
167
|
+
get navigationState() {
|
|
168
|
+
return this._navigationStateModel.value;
|
|
135
169
|
}
|
|
136
170
|
/**
|
|
137
171
|
* @return {?}
|
|
138
172
|
*/
|
|
139
|
-
get
|
|
140
|
-
return this.
|
|
173
|
+
get navigationStateModel() {
|
|
174
|
+
return this._navigationStateModel.readonly;
|
|
141
175
|
}
|
|
142
176
|
/**
|
|
143
177
|
* @return {?}
|
|
@@ -189,9 +223,9 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
189
223
|
*/
|
|
190
224
|
router => {
|
|
191
225
|
/** @type {?} */
|
|
192
|
-
const
|
|
193
|
-
console.log('### Push Changes to route Redirect', { commands });
|
|
194
|
-
return
|
|
226
|
+
const urlSnapshot = this.parseUrl(this.router.routerState.snapshot.url).updateVisitSegments(next);
|
|
227
|
+
console.log('### Push Changes to route Redirect', { commands: urlSnapshot.url });
|
|
228
|
+
return this.navigateByUrl(urlSnapshot);
|
|
195
229
|
}));
|
|
196
230
|
}
|
|
197
231
|
});
|
|
@@ -203,7 +237,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
203
237
|
*/
|
|
204
238
|
doNavigation(visit, runNavigationCommands) {
|
|
205
239
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
206
|
-
if (this.
|
|
240
|
+
if (this.navigationInProgress.value) {
|
|
207
241
|
lang.illegalState('Navigation already in progress');
|
|
208
242
|
}
|
|
209
243
|
this.runStateTransition((/**
|
|
@@ -212,7 +246,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
212
246
|
*/
|
|
213
247
|
current => {
|
|
214
248
|
/** @type {?} */
|
|
215
|
-
const session =
|
|
249
|
+
const session = this.navigationState.onPlaceNavigationStart(visit, this.getCurrentRouterUrl());
|
|
216
250
|
session.storeVisit(visit);
|
|
217
251
|
return session;
|
|
218
252
|
}));
|
|
@@ -222,16 +256,17 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
222
256
|
finally {
|
|
223
257
|
// Router has finished (since there was no router change required) so we
|
|
224
258
|
// need to end the navigation session.
|
|
225
|
-
if (this.
|
|
259
|
+
if (this.navigationState.isTransitional && !this.router.getCurrentNavigation()) {
|
|
226
260
|
this.runStateTransition((/**
|
|
227
261
|
* @param {?} session
|
|
228
262
|
* @return {?}
|
|
229
263
|
*/
|
|
230
|
-
session => session.
|
|
264
|
+
session => session.onRouterEnd(new NavigationEnd(-1, '', ''))));
|
|
231
265
|
}
|
|
232
266
|
}
|
|
233
267
|
});
|
|
234
268
|
}
|
|
269
|
+
// @Trace()
|
|
235
270
|
/**
|
|
236
271
|
* @protected
|
|
237
272
|
* @param {?} transition
|
|
@@ -239,10 +274,10 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
239
274
|
*/
|
|
240
275
|
runStateTransition(transition) {
|
|
241
276
|
/** @type {?} */
|
|
242
|
-
const previous = this.
|
|
277
|
+
const previous = this._navigationStateModel.value;
|
|
243
278
|
/** @type {?} */
|
|
244
|
-
const next = transition(this.
|
|
245
|
-
this.
|
|
279
|
+
const next = transition(this.navigationState);
|
|
280
|
+
this._navigationStateModel.value = next;
|
|
246
281
|
if (next !== previous) {
|
|
247
282
|
previous.dispose();
|
|
248
283
|
Logger.get(this).info(`Router State Transition: ${previous.toString()} -> ${next.toString()}`);
|
|
@@ -272,11 +307,76 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
272
307
|
child => child.url)));
|
|
273
308
|
}
|
|
274
309
|
/**
|
|
275
|
-
* @param {?}
|
|
310
|
+
* @param {?} url
|
|
311
|
+
* @return {?}
|
|
312
|
+
*/
|
|
313
|
+
parseUrl(url) {
|
|
314
|
+
return new UrlSnapshot(this.urlSerializer, url, {});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* @param {?} url
|
|
318
|
+
* @return {?}
|
|
319
|
+
*/
|
|
320
|
+
resetBrowserLocation(url) {
|
|
321
|
+
this.angularLocation.go(url);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* @return {?}
|
|
325
|
+
*/
|
|
326
|
+
getCurrentRouterUrl() {
|
|
327
|
+
return this.router.routerState ? this.router.routerState.snapshot.url : null;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* @return {?}
|
|
331
|
+
*/
|
|
332
|
+
getCurrentRouteSnapshot() {
|
|
333
|
+
return this.parseUrl(this.getCurrentRouterUrl());
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* @param {?} url
|
|
337
|
+
* @return {?}
|
|
338
|
+
*/
|
|
339
|
+
getActiveInteractionIdsFromUrl(url) {
|
|
340
|
+
return this.parseUrl(url).getInteractionIds();
|
|
341
|
+
}
|
|
342
|
+
// @Trace()
|
|
343
|
+
/**
|
|
344
|
+
* @param {?} url
|
|
345
|
+
* @return {?}
|
|
346
|
+
*/
|
|
347
|
+
hasActiveInteractionIds(url) {
|
|
348
|
+
return this.getActiveInteractionIdsFromUrl(url).length > 0;
|
|
349
|
+
}
|
|
350
|
+
// @Trace()
|
|
351
|
+
/**
|
|
352
|
+
* @param {?} urlSnapshot
|
|
353
|
+
* @return {?}
|
|
354
|
+
*/
|
|
355
|
+
navigateByUrl(urlSnapshot) {
|
|
356
|
+
this.router.navigateByUrl(urlSnapshot.urlTree, urlSnapshot.getNavigationExtras());
|
|
357
|
+
}
|
|
358
|
+
// @Trace()
|
|
359
|
+
/**
|
|
276
360
|
* @return {?}
|
|
277
361
|
*/
|
|
278
|
-
|
|
279
|
-
|
|
362
|
+
syncInteractionIdsWithRouter() {
|
|
363
|
+
assert.isFalsey(this.navigationInProgress.value); // Updating interaction routes during an existing navigation breaks all the things.
|
|
364
|
+
// Updating interaction routes during an existing navigation breaks all the things.
|
|
365
|
+
/** @type {?} */
|
|
366
|
+
const currentIds = this.interactionService.activeInteractionContextIds.value;
|
|
367
|
+
if (_.isEqual(currentIds, this.getActiveInteractionIdsFromUrl(this.getCurrentRouterUrl()))) {
|
|
368
|
+
console.log('activity ids were the same, skipping');
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
if (currentIds.length < 1) {
|
|
372
|
+
// no more interactions to remove from history.
|
|
373
|
+
this.navigateByUrl(this.getCurrentRouteSnapshot().removeInteractionIds());
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
// todo was or is...
|
|
377
|
+
this.navigateByUrl(this.getCurrentRouteSnapshot().updateInteractionIds(currentIds));
|
|
378
|
+
}
|
|
379
|
+
}
|
|
280
380
|
}
|
|
281
381
|
}
|
|
282
382
|
PlaceRouter.decorators = [
|
|
@@ -290,27 +390,22 @@ PlaceRouter.ctorParameters = () => [
|
|
|
290
390
|
{ type: UrlSerializer },
|
|
291
391
|
{ type: Location },
|
|
292
392
|
{ type: PlaceHistory },
|
|
293
|
-
{ type:
|
|
393
|
+
{ type: InteractionService }
|
|
294
394
|
];
|
|
295
|
-
/** @nocollapse */ PlaceRouter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i1.UrlSerializer), i0.ɵɵinject(i2.Location), i0.ɵɵinject(i3.PlaceHistory), i0.ɵɵinject(i4.
|
|
395
|
+
/** @nocollapse */ PlaceRouter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i1.UrlSerializer), i0.ɵɵinject(i2.Location), i0.ɵɵinject(i3.PlaceHistory), i0.ɵɵinject(i4.InteractionService)); }, token: PlaceRouter, providedIn: "root" });
|
|
296
396
|
if (false) {
|
|
297
397
|
/**
|
|
298
398
|
* @type {?}
|
|
299
399
|
* @private
|
|
300
400
|
*/
|
|
301
|
-
PlaceRouter.prototype.
|
|
302
|
-
/**
|
|
303
|
-
* @type {?}
|
|
304
|
-
* @private
|
|
305
|
-
*/
|
|
306
|
-
PlaceRouter.prototype._navigationSessionModel;
|
|
401
|
+
PlaceRouter.prototype._navigationStateModel;
|
|
307
402
|
/**
|
|
308
403
|
* @type {?}
|
|
309
404
|
* @private
|
|
310
405
|
*/
|
|
311
406
|
PlaceRouter.prototype._activeVisits;
|
|
312
407
|
/** @type {?} */
|
|
313
|
-
PlaceRouter.prototype.
|
|
408
|
+
PlaceRouter.prototype.navigationInProgress;
|
|
314
409
|
/** @type {?} */
|
|
315
410
|
PlaceRouter.prototype.activeVisitIndex;
|
|
316
411
|
/**
|
|
@@ -318,6 +413,11 @@ if (false) {
|
|
|
318
413
|
* @private
|
|
319
414
|
*/
|
|
320
415
|
PlaceRouter.prototype._navigationSessionContext;
|
|
416
|
+
/**
|
|
417
|
+
* @type {?}
|
|
418
|
+
* @private
|
|
419
|
+
*/
|
|
420
|
+
PlaceRouter.prototype._navigationStateTypeModel;
|
|
321
421
|
/**
|
|
322
422
|
* @type {?}
|
|
323
423
|
* @private
|
|
@@ -342,63 +442,6 @@ if (false) {
|
|
|
342
442
|
* @type {?}
|
|
343
443
|
* @private
|
|
344
444
|
*/
|
|
345
|
-
PlaceRouter.prototype.
|
|
445
|
+
PlaceRouter.prototype.interactionService;
|
|
346
446
|
}
|
|
347
|
-
(function (PlaceRouter) {
|
|
348
|
-
PlaceRouter.INTERACTION_ROUTER_OUTLET = 'aup-interaction';
|
|
349
|
-
class InteractionRouteMediator {
|
|
350
|
-
/**
|
|
351
|
-
* @param {?} navigationSessionModelActive
|
|
352
|
-
* @param {?} router
|
|
353
|
-
*/
|
|
354
|
-
constructor(navigationSessionModelActive, router) {
|
|
355
|
-
this.navigationSessionModelActive = navigationSessionModelActive;
|
|
356
|
-
this.router = router;
|
|
357
|
-
}
|
|
358
|
-
/**
|
|
359
|
-
* @return {?}
|
|
360
|
-
*/
|
|
361
|
-
get isNavigating() {
|
|
362
|
-
return this.navigationSessionModelActive.value;
|
|
363
|
-
}
|
|
364
|
-
// If we're not in a navigation we push
|
|
365
|
-
// @Trace()
|
|
366
|
-
/**
|
|
367
|
-
* @return {?}
|
|
368
|
-
*/
|
|
369
|
-
onActivityStarted() {
|
|
370
|
-
if (!this.isNavigating) {
|
|
371
|
-
this.router.navigate(['.', {
|
|
372
|
-
outlets: {
|
|
373
|
-
[PlaceRouter.INTERACTION_ROUTER_OUTLET]: ['modal'] // "open" must be a valid route for this outlet.
|
|
374
|
-
}
|
|
375
|
-
}], {
|
|
376
|
-
replaceUrl: false
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
// @Trace()
|
|
381
|
-
/**
|
|
382
|
-
* @return {?}
|
|
383
|
-
*/
|
|
384
|
-
onActivityFinished() {
|
|
385
|
-
if (!this.isNavigating) {
|
|
386
|
-
this.router.navigate(['.', {
|
|
387
|
-
outlets: {
|
|
388
|
-
[PlaceRouter.INTERACTION_ROUTER_OUTLET]: null
|
|
389
|
-
}
|
|
390
|
-
}], {
|
|
391
|
-
replaceUrl: true // remove the interaction from the history.
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
PlaceRouter.InteractionRouteMediator = InteractionRouteMediator;
|
|
397
|
-
if (false) {
|
|
398
|
-
/** @type {?} */
|
|
399
|
-
InteractionRouteMediator.prototype.navigationSessionModelActive;
|
|
400
|
-
/** @type {?} */
|
|
401
|
-
InteractionRouteMediator.prototype.router;
|
|
402
|
-
}
|
|
403
|
-
})(PlaceRouter || (PlaceRouter = {}));
|
|
404
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsTUFBTSxFQUVOLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBQ04sR0FBRyxFQUNILGdCQUFnQixFQUVoQixJQUFJLEVBRUosTUFBTSxFQUNOLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQU83QyxNQUFNLE9BQU8sV0FBWSxTQUFRLGdCQUFnQjs7Ozs7Ozs7SUFXL0MsWUFBNkIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLGVBQXlCLEVBQ3pCLFlBQTBCLEVBQzFCLHVCQUFnRDtRQUMzRSxLQUFLLEVBQUUsQ0FBQztRQUxtQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQVU7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsNEJBQXVC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eUIsR0FBRyxpQkFBaUI7SUFFMUQsTUFBYSx3QkFBd0I7Ozs7O1FBQ25DLFlBQXFCLDRCQUFpRCxFQUFXLE1BQWM7WUFBMUUsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUFxQjtZQUFXLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDL0YsQ0FBQzs7OztRQUVELElBQUksWUFBWTtZQUNkLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQztRQUNqRCxDQUFDOzs7Ozs7UUFJRCxpQkFBaUI7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUU7d0JBQ3pCLE9BQU8sRUFBRTs0QkFDUCxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsZ0RBQWdEO3lCQUNwRztxQkFDRixDQUFDLEVBQUU7b0JBQ0YsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQzs7Ozs7UUFHRCxrQkFBa0I7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFO3dCQUN6QixPQUFPLEVBQUU7NEJBQ1AsQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsRUFBRSxJQUFJO3lCQUM5QztxQkFDRixDQUFDLEVBQUU7b0JBQ0YsVUFBVSxFQUFFLElBQUksQ0FBQywyQ0FBMkM7aUJBQzdELENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztLQUVGO0lBbkNZLG9DQUF3QiwyQkFtQ3BDLENBQUE7OztRQWxDYSxnRUFBMEQ7O1FBQUUsMENBQXVCOztBQW9DbkcsQ0FBQyxFQXpDZ0IsV0FBVyxLQUFYLFdBQVcsUUF5QzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGUsXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIE5hdmlnYXRpb25DYW5jZWwsXG4gIE5hdmlnYXRpb25FbmQsXG4gIE5hdmlnYXRpb25FcnJvcixcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBSb3V0ZXIsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG4gIFVybFNlcmlhbGl6ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgRHNsLFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBIYXNPbmVJbmRleENoYWluLFxuICBsYW5nLFxuICBMaXN0TW9kZWwsXG4gIExvZ2dlcixcbiAgTXV0YWJsZUxpc3RNb2RlbCxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uQ29udGV4dCB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgTW9kYWxJbnRlcmFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9tb2RhbC1pbnRlcmFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TdGF0ZSB9IGZyb20gJy4vZ3VhcmRzL25hdmlnYXRpb24tc3RhdGUnO1xuaW1wb3J0IHsgUGxhY2VIaXN0b3J5IH0gZnJvbSAnLi9wbGFjZS1oaXN0b3J5JztcbmltcG9ydCB7IFVybFNuYXBzaG90IH0gZnJvbSAnLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuL3Zpc2l0JztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFjZVJvdXRlciBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuXG4gIHByaXZhdGUgZmlyc3RSb3V0ZSA9IHRydWU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmF2aWdhdGlvblNlc3Npb25Nb2RlbCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU3RhdGU+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVZpc2l0cyA9IG5ldyBNdXRhYmxlTGlzdE1vZGVsPFZpc2l0PigpO1xuXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25TZXNzaW9uQWN0aXZlOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuICByZWFkb25seSBhY3RpdmVWaXNpdEluZGV4OiBIYXNPbmVJbmRleENoYWluPCdwbGFjZURlZmluaXRpb24nLCBWaXNpdD47XG4gIHByaXZhdGUgX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dDogTmF2aWdhdGlvblN0YXRlLkNvbnRleHQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1cmxTZXJpYWxpemVyOiBVcmxTZXJpYWxpemVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJMb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnksXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxJbnRlcmFjdGlvblNlcnZpY2U6IE1vZGFsSW50ZXJhY3Rpb25TZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7IGNoYWluLCB2YWx1ZU9mLCBiZWZvcmUsIHdoZW4sIGFmdGVyLCBvYnNlcnZlLCBzd2l0Y2hPbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuYWN0aXZlVmlzaXRJbmRleCA9IGNoYWluKHRoaXMuX2FjdGl2ZVZpc2l0cykuaW5kZXhCeSgncGxhY2VEZWZpbml0aW9uJyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZSA9IGNoYWluKHRoaXMubmF2aWdhdGlvblNlc3Npb25Nb2RlbCkucGx1Y2soJ2FjdGl2ZScpO1xuICAgIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dCA9IG5ldyBOYXZpZ2F0aW9uU3RhdGUuQ29udGV4dCh0aGlzLnJvdXRlciwgdGhpcy5tb2RhbEludGVyYWN0aW9uU2VydmljZSwgdGhpcy5hbmd1bGFyTG9jYXRpb24sIHNlc3Npb24gPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzTmF2aWdhdGlvblN1Y2Nlc3Moc2Vzc2lvbik7XG4gICAgfSk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZSA9IG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZSh0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBzZXR1cCB0aGUgY2FsbGJhY2tzIGluIGR1cmluZyBtb2R1bGUgaW5pdGlhdGlvbiB0byBtYWtlIHRoaXMgdGVzdGFibGUuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAvLyBSb3V0aW5nIGV2ZW50IHNlcXVlbmNlXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uQ2FuY2VsIC0tPiByZWRpcmVjdCwgZ28gYXJvdW5kIGFnYWluIGluIHRoZSBzYW1lIHNlc3Npb25cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FbmQgLS0+IG5hdmlnYXRpb24gY29tcGxldGUsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVycm9yIC0tPiBuYXZpZ2F0aW9uIGFib3J0ZWQsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25TdGFydChldmVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25FbmQoZXZlbnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25FcnJvcihldmVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25DYW5jZWwoZXZlbnQpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFB1c2ggZGlhbG9nIHN0YXRlIHRvIHRoZSB1cmwgc28gd2UgY2FuIGNhcHR1cmUgdGhlIGJhY2sgYnV0dG9uLlxuICAgIHRoaXMubW9kYWxJbnRlcmFjdGlvblNlcnZpY2UuYWRkQWN0aXZpdHlMaXN0ZW5lcihuZXcgUGxhY2VSb3V0ZXIuSW50ZXJhY3Rpb25Sb3V0ZU1lZGlhdG9yKHRoaXMubmF2aWdhdGlvblNlc3Npb25BY3RpdmUsIHRoaXMucm91dGVyKSk7XG5cbiAgICAvLyBUaGUgYW5ndWxhciByb3V0ZXIgZG9lc24ndCBhbHdheXMgZmlyZSByb3V0ZXIgZXZlbnRzIHdoZW4gdGhlIGJhY2sgYnV0dG9uIGlzIHB1c2hlZCB3aGlsZSBhIG5hdmlnYXRpb25cbiAgICAvLyBzZXNzaW9uIGlzIGluIHByb2dyZXNzLiAgU29tZXRpbWVzIHdlIG9ubHkga25vdyBhYm91dCBpdCBmcm9tIHRoZSB1cmwgY2hhbmdlLlxuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSh1cmwgPT4ge1xuICAgICAgY29uc29sZS5sb2coYCMjIyMgdXJsIGNoYW5nZWQgLT5gLCB7IHVybCwgbmF2SXNBY3RpdmU6IHRoaXMubmF2aWdhdGlvblNlc3Npb25BY3RpdmUudmFsdWUgfSk7XG4gICAgICBjb25zdCBpbnRlcmFjdGlvbkNvbnRleHQgPSB0aGlzLm5hdmlnYXRpb25TZXNzaW9uQWN0aXZlLnZhbHVlICYmIHRoaXMubmF2aWdhdGlvblNlc3Npb24uaW50ZXJhY3Rpb25Db250ZXh0O1xuICAgICAgaWYgKGludGVyYWN0aW9uQ29udGV4dCAmJiBpbnRlcmFjdGlvbkNvbnRleHQuaXNBY3RpdmUoKSkge1xuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYGJhY2sgYnV0dG9uIHByZXNzZWQgZHVyaW5nIG5hdmlnYXRpb24gc2Vzc2lvbiBpbnRlcmFjdGlvbmApO1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihuYXZpZ2F0aW9uU2Vzc2lvbiA9PiBuYXZpZ2F0aW9uU2Vzc2lvbi5vbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKHVybCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzTmF2aWdhdGlvblN1Y2Nlc3Moc2Vzc2lvbjogTmF2aWdhdGlvblN0YXRlKSB7XG4gICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIHZpc2l0cyBiZWZvcmUgdGhlIHNlc3Npb24gZmluaXNoZXMuICBUaGlzIGFsbG93cyB0aGUgcGxhY2VPdXRldHMgdG8gaWdub3JlIHZpc2l0XG4gICAgLy8gY2hhbmdlcyB0aGF0IG9jY3VyIHdoaWxlIHJvdXRlck5hdmlnYXRpb25BY3RpdmUgaXMgdHJ1ZS5cbiAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZS52YWx1ZSk7XG4gICAgY29uc3QgdmlzaXRzID0gc2Vzc2lvbi5nZXRWaXNpdHMoKTtcbiAgICB2aXNpdHMuZm9yRWFjaCh2ID0+IHRoaXMucGxhY2VIaXN0b3J5LmFkZCh2KSk7XG4gICAgdGhpcy5fYWN0aXZlVmlzaXRzLnZhbHVlID0gdmlzaXRzO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uKCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWU7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblNlc3Npb25Nb2RlbCgpOiBWYWx1ZU1vZGVsPE5hdmlnYXRpb25TdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnJlYWRvbmx5O1xuICB9XG5cbiAgZ2V0IGFjdGl2ZVZpc2l0cygpOiBMaXN0TW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXRzLnJlYWRvbmx5O1xuICB9XG5cbiAgLyoqXG4gICAqICBwbGFjZVJvdXRlci5uYXZpZ2F0ZShwbGFjZURlc3RpbmF0aW9ucy5zb21lUGxhY2UuY3JlYXRlVmlzaXQocm91dGVJZCwgLi4udmlzaXRQYXJhbXMpKTtcbiAgICogQHBhcmFtIHZpc2l0XG4gICAqL1xuICBhc3luYyBuYXZpZ2F0ZSh2aXNpdDogVmlzaXQsIG9wdGlvbnM/OiB7IHJlbGF0aXZlVG86IEFjdGl2YXRlZFJvdXRlIH0pIHtcbiAgICB0aGlzLmRvTmF2aWdhdGlvbih2aXNpdCwgYXN5bmMgcm91dGVyID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgICAgICB2aXNpdC5wbGFjZURlZmluaXRpb24ucGF0aCxcbiAgICAgICAgLi4udGhpcy5jcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQpXG4gICAgICBdO1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVsYXRpdmVUbzogb3B0aW9ucyA/IG9wdGlvbnMucmVsYXRpdmVUbyA6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgYXN5bmMgcHVzaFZpc2l0Q2hhbmdlc1RvUm91dGUoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcmV2aW91czogVmlzaXQsIG5leHQ6IFZpc2l0KSB7XG4gICAgLy8gd2UgaGF2ZSB0byBwdXNoIHRvIGhpc3Rvcnkgc28gb3VyIHJlbWVtYmVyIHNhbml0aXNlcnMgZG9uJ3QgcGljayB1cCB0aGUgcHJldmlvdXMgdmFsdWVcbiAgICAvLyB3aGVuIGl0J3MgYmVlbiBjbGVhcmVkIGJ5IHRoZSB1c2VyLlxuICAgIHRoaXMucGxhY2VIaXN0b3J5LmFkZChuZXh0KTtcblxuICAgIC8vIEZJWE1FOiBubyByb3V0ZSBpZCAtPiByb3V0ZSBpZCBkdXBsaWNhdGVzIHJvdXRlIHBhcmFtZXRlcnNcbiAgICBpZiAobmV4dC5oYXNSb3V0aW5nQ2hhbmdlZEZyb20ocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24obmV4dCwgcm91dGVyID0+IHtcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSB0aGlzLnBhcnNlVXJsKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KS5jcmVhdGVSZWRpcmVjdENvbW1hbmRzRm9yKG5leHQpO1xuICAgICAgICBjb25zb2xlLmxvZygnIyMjIFB1c2ggQ2hhbmdlcyB0byByb3V0ZSBSZWRpcmVjdCcsIHsgY29tbWFuZHMgfSk7XG4gICAgICAgIHJldHVybiByb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG9OYXZpZ2F0aW9uKHZpc2l0OiBWaXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IGFueSkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXNzaW9uQWN0aXZlLnZhbHVlKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZSgnTmF2aWdhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oY3VycmVudCA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IE5hdmlnYXRpb25TdGF0ZS5BY3RpdmUodGhpcy5fbmF2aWdhdGlvblNlc3Npb25Db250ZXh0LCBmYWxzZSwgdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKTtcbiAgICAgIHNlc3Npb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuTmF2aWdhdGlvbkNvbW1hbmRzKHRoaXMucm91dGVyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUm91dGVyIGhhcyBmaW5pc2hlZCAoc2luY2UgdGhlcmUgd2FzIG5vIHJvdXRlciBjaGFuZ2UgcmVxdWlyZWQpIHNvIHdlXG4gICAgICAvLyBuZWVkIHRvIGVuZCB0aGUgbmF2aWdhdGlvbiBzZXNzaW9uLlxuICAgICAgaWYgKHRoaXMubmF2aWdhdGlvblNlc3Npb24uYWN0aXZlICYmICF0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpKSB7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHNlc3Npb24gPT4gc2Vzc2lvbi5vbkVuZChuZXcgTmF2aWdhdGlvbkVuZCgtMSwgJycsICcnKSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBydW5TdGF0ZVRyYW5zaXRpb24odHJhbnNpdGlvbjogKG5hdmlnYXRpb25TZXNzaW9uOiBOYXZpZ2F0aW9uU3RhdGUpID0+IE5hdmlnYXRpb25TdGF0ZSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZTtcbiAgICBjb25zdCBuZXh0ID0gdHJhbnNpdGlvbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnZhbHVlID0gbmV4dDtcbiAgICBpZiAobmV4dCAhPT0gcHJldmlvdXMpIHtcbiAgICAgIHByZXZpb3VzLmRpc3Bvc2UoKTtcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246ICR7cHJldmlvdXMudG9TdHJpbmcoKX0gLT4gJHtuZXh0LnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQ6IFZpc2l0KSB7XG4gICAgY29uc3QgZGVmID0gdmlzaXQucGxhY2VEZWZpbml0aW9uO1xuICAgIHJldHVybiB2aXNpdC5oYXNSb3V0ZUlkKCkgP1xuICAgICAgW2RlZi5nZXRGb3JtYXR0ZWRSb3V0ZUlkKHZpc2l0KSwgZGVmLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdCldIDpcbiAgICAgIFtkZWYuZ2V0Rm9ybWF0dGVkUm91dGVQYXJhbWV0ZXJzKHZpc2l0KV07XG4gIH1cblxuICBleHRyYWN0Q2hpbGRQYXRoKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogYW55W10ge1xuICAgIHJldHVybiBfLmZsYXR0ZW4oYWN0aXZhdGVkUm91dGUuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLnVybCkpO1xuICB9XG5cbiAgcGFyc2VVcmwoc25hcHNob3Q6IFJvdXRlclN0YXRlU25hcHNob3QpOiBVcmxTbmFwc2hvdCB7XG4gICAgcmV0dXJuIG5ldyBVcmxTbmFwc2hvdCh0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2Uoc25hcHNob3QudXJsKSk7XG4gIH1cblxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlUm91dGVyIHtcblxuICBleHBvcnQgY29uc3QgSU5URVJBQ1RJT05fUk9VVEVSX09VVExFVCA9ICdhdXAtaW50ZXJhY3Rpb24nO1xuXG4gIGV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblJvdXRlTWVkaWF0b3IgaW1wbGVtZW50cyBJbnRlcmFjdGlvbkNvbnRleHQuTGlzdGVuZXIge1xuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG5hdmlnYXRpb25TZXNzaW9uTW9kZWxBY3RpdmU6IFZhbHVlTW9kZWw8Ym9vbGVhbj4sIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyKSB7XG4gICAgfVxuXG4gICAgZ2V0IGlzTmF2aWdhdGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uTW9kZWxBY3RpdmUudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UncmUgbm90IGluIGEgbmF2aWdhdGlvbiB3ZSBwdXNoXG4gICAgLy8gQFRyYWNlKClcbiAgICBvbkFjdGl2aXR5U3RhcnRlZCgpOiB2b2lkIHtcbiAgICAgIGlmICghdGhpcy5pc05hdmlnYXRpbmcpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJywge1xuICAgICAgICAgIG91dGxldHM6IHtcbiAgICAgICAgICAgIFtQbGFjZVJvdXRlci5JTlRFUkFDVElPTl9ST1VURVJfT1VUTEVUXTogWydtb2RhbCddIC8vIFwib3BlblwiIG11c3QgYmUgYSB2YWxpZCByb3V0ZSBmb3IgdGhpcyBvdXRsZXQuXG4gICAgICAgICAgfVxuICAgICAgICB9XSwge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEBUcmFjZSgpXG4gICAgb25BY3Rpdml0eUZpbmlzaGVkKCk6IHZvaWQge1xuICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGluZykge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nLCB7XG4gICAgICAgICAgb3V0bGV0czoge1xuICAgICAgICAgICAgW1BsYWNlUm91dGVyLklOVEVSQUNUSU9OX1JPVVRFUl9PVVRMRVRdOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XSwge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUgLy8gcmVtb3ZlIHRoZSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBoaXN0b3J5LlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG59XG4iXX0=
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUNOLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBRU4sR0FBRyxFQUNILGdCQUFnQixFQUVoQixJQUFJLEVBRUosTUFBTSxFQUNOLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsaUJBQWlCLEVBSWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFPN0MsTUFBTSxPQUFPLFdBQVksU0FBUSxnQkFBZ0I7Ozs7Ozs7O0lBVS9DLFlBQTZCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixlQUF5QixFQUN6QixZQUEwQixFQUMxQixrQkFBc0M7UUFDakUsS0FBSyxFQUFFLENBQUM7UUFMbUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFVO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFabEQsMEJBQXFCLEdBQUcsSUFBSSxpQkFBaUIsRUFBbUIsQ0FBQztRQUNqRSxrQkFBYSxHQUFHLElBQUksZ0JBQWdCLEVBQVMsQ0FBQztjQWF2RCxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3hGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjs7OztRQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3BHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxDQUFDLEVBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsR0FBRzs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsbUJBQUEsS0FBSyxDQUFDLFdBQVcsRUFBa0MsRUFBQyxDQUFDO1FBRXJJLG9GQUFvRjtRQUNwRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTOzs7O1FBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMseUJBQXlCO1lBQ3pCLHlCQUF5QjtZQUN6QixnR0FBZ0c7WUFDaEcsaUZBQWlGO1lBQ2pGLGtGQUFrRjtZQUNsRiwwQkFBMEI7WUFDMUIsSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFO2dCQUNwQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxVQUFVLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxrQkFBa0I7Ozs7b0JBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7aUJBQzNEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxrQkFBa0I7Ozs7b0JBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7aUJBQ2hFO2FBQ0Y7WUFDRCxJQUFJLEtBQUssWUFBWSxhQUFhLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxrQkFBa0I7Ozs7Z0JBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7YUFDNUQ7WUFDRCxJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUU7Z0JBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxrQkFBa0I7Ozs7Z0JBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7YUFDOUQ7WUFDRCxJQUFJLEtBQUssWUFBWSxnQkFBZ0IsRUFBRTtnQkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGtCQUFrQjs7OztnQkFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDO2FBQ2xFO1FBQ0gsQ0FBQyxFQUFDLENBQUM7UUFFSCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxPQUFPOzs7OztRQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ3pGLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsR0FBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0hBQXNIOzs7Y0FFM0osVUFBVSxHQUFHLElBQUksYUFBYSxFQUEyQztRQUUvRSx5R0FBeUc7UUFDekcsZ0ZBQWdGO1FBQ2hGLDZCQUE2QjtRQUM3QiwwR0FBMEc7UUFDMUcsMERBQTBEO1FBQzFELGVBQWUsQ0FBQyxXQUFXOzs7O1FBQUMsR0FBRyxDQUFDLEVBQUU7O2tCQUMxQixlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUs7WUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUMvRCxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBRXBELDBEQUEwRDtZQUMxRCxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUU7O3NCQUM1QixxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQjtnQkFDckUsSUFBSSxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDN0QsSUFBSSxDQUFDLGtCQUFrQjs7OztvQkFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDO2lCQUN2RjthQUNGO1FBQ0gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7SUFFTyx3QkFBd0IsQ0FBQyxPQUF3QjtRQUN2RCx5R0FBeUc7UUFDekcsMkRBQTJEO1FBQzNELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDOztjQUMzQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRTtRQUNsQyxNQUFNLENBQUMsT0FBTzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDcEMsQ0FBQzs7OztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7SUFDMUMsQ0FBQzs7OztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztJQUM3QyxDQUFDOzs7O0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUNyQyxDQUFDOzs7Ozs7O0lBTUssUUFBUSxDQUFDLEtBQVksRUFBRSxPQUF3Qzs7WUFDbkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLOzs7O1lBQUUsQ0FBTSxNQUFNLEVBQUMsRUFBRTs7c0JBQ2hDLFFBQVEsR0FBRztvQkFDZixLQUFLLENBQUMsZUFBZSxDQUFDLElBQUk7b0JBQzFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztpQkFDckM7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQ25DLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7aUJBQ2hELENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQSxFQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7Ozs7Ozs7O0lBR0ssdUJBQXVCLENBQUMsY0FBOEIsRUFBRSxRQUFlLEVBQUUsSUFBVzs7WUFDeEYseUZBQXlGO1lBQ3pGLHNDQUFzQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1Qiw2REFBNkQ7WUFDN0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJOzs7O2dCQUFFLE1BQU0sQ0FBQyxFQUFFOzswQkFDaEMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztvQkFDakcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsRUFBRSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDakYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLEVBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztLQUFBOzs7Ozs7SUFFSyxZQUFZLENBQUMsS0FBWSxFQUFFLHFCQUE4Qzs7WUFDN0UsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7YUFDckQ7WUFDRCxJQUFJLENBQUMsa0JBQWtCOzs7O1lBQUMsT0FBTyxDQUFDLEVBQUU7O3NCQUMxQixPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzlGLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsRUFBQyxDQUFDO1lBQ0gsSUFBSTtnQkFDRixNQUFNLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMxQztvQkFBUztnQkFDUix3RUFBd0U7Z0JBQ3hFLHNDQUFzQztnQkFDdEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtvQkFDOUUsSUFBSSxDQUFDLGtCQUFrQjs7OztvQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQztpQkFDeEY7YUFDRjtRQUNILENBQUM7S0FBQTs7Ozs7OztJQUdTLGtCQUFrQixDQUFDLFVBQW1FOztjQUN4RixRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUs7O2NBQzNDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDckIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRztJQUNILENBQUM7Ozs7OztJQUVPLHFCQUFxQixDQUFDLEtBQVk7O2NBQ2xDLEdBQUcsR0FBRyxLQUFLLENBQUMsZUFBZTtRQUNqQyxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7OztJQUVELGdCQUFnQixDQUFDLGNBQXNDO1FBQ3JELE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUc7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Ozs7O0lBRUQsUUFBUSxDQUFDLEdBQVc7UUFDbEIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDOzs7OztJQUVELG9CQUFvQixDQUFDLEdBQVc7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7OztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0UsQ0FBQzs7OztJQUVELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDOzs7OztJQUVELDhCQUE4QixDQUFDLEdBQVc7UUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDaEQsQ0FBQzs7Ozs7O0lBSUQsdUJBQXVCLENBQUMsR0FBVztRQUNqQyxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdELENBQUM7Ozs7OztJQUdELGFBQWEsQ0FBQyxXQUF3QjtRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQzs7Ozs7SUFHRCw0QkFBNEI7UUFDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxtRkFBbUY7OztjQUMvSCxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLEtBQUs7UUFDNUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQzFGLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekIsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQzthQUMzRTtpQkFBTTtnQkFDTCxvQkFBb0I7Z0JBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzthQUNyRjtTQUNGO0lBQ0gsQ0FBQzs7O1lBak9GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQTdCQyxNQUFNO1lBQ04sYUFBYTtZQVhOLFFBQVE7WUFnQ1IsWUFBWTtZQUZaLGtCQUFrQjs7Ozs7Ozs7SUFZekIsNENBQWtGOzs7OztJQUNsRixvQ0FBK0Q7O0lBRS9ELDJDQUFtRDs7SUFDbkQsdUNBQXNFOzs7OztJQUN0RSxnREFBMkQ7Ozs7O0lBQzNELGdEQUFtRjs7Ozs7SUFFdkUsNkJBQStCOzs7OztJQUMvQixvQ0FBNkM7Ozs7O0lBQzdDLHNDQUEwQzs7Ozs7SUFDMUMsbUNBQTJDOzs7OztJQUMzQyx5Q0FBdUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZSxcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgTmF2aWdhdGlvbkNhbmNlbCxcbiAgTmF2aWdhdGlvbkVuZCxcbiAgTmF2aWdhdGlvbkVycm9yLFxuICBOYXZpZ2F0aW9uRXh0cmFzLFxuICBOYXZpZ2F0aW9uU3RhcnQsXG4gIFJvdXRlcixcbiAgVXJsU2VyaWFsaXplclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBDb25zdHJ1Y3RhYmxlLFxuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIEhhc09uZUluZGV4Q2hhaW4sXG4gIGxhbmcsXG4gIExpc3RNb2RlbCxcbiAgTG9nZ2VyLFxuICBNdXRhYmxlTGlzdE1vZGVsLFxuICBNdXRhYmxlU3RyZWFtLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgVHJhY2UsXG4gIFZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxDaGFpblxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU3RhdGUgfSBmcm9tICcuL2d1YXJkcy9uYXZpZ2F0aW9uLXN0YXRlJztcbmltcG9ydCB7IFBsYWNlSGlzdG9yeSB9IGZyb20gJy4vcGxhY2UtaGlzdG9yeSc7XG5pbXBvcnQgeyBVcmxTbmFwc2hvdCB9IGZyb20gJy4vdXJsLXNuYXBzaG90JztcbmltcG9ydCB7IFZpc2l0IH0gZnJvbSAnLi92aXNpdCc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZXIgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uYXZpZ2F0aW9uU3RhdGVNb2RlbCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU3RhdGU+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVZpc2l0cyA9IG5ldyBNdXRhYmxlTGlzdE1vZGVsPFZpc2l0PigpO1xuXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25JblByb2dyZXNzOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuICByZWFkb25seSBhY3RpdmVWaXNpdEluZGV4OiBIYXNPbmVJbmRleENoYWluPCdwbGFjZURlZmluaXRpb24nLCBWaXNpdD47XG4gIHByaXZhdGUgX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dDogTmF2aWdhdGlvblN0YXRlLkNvbnRleHQ7XG4gIHByaXZhdGUgX25hdmlnYXRpb25TdGF0ZVR5cGVNb2RlbDogVmFsdWVNb2RlbENoYWluPENvbnN0cnVjdGFibGU8TmF2aWdhdGlvblN0YXRlPj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1cmxTZXJpYWxpemVyOiBVcmxTZXJpYWxpemVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJMb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnksXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25TZXJ2aWNlOiBJbnRlcmFjdGlvblNlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHsgY2hhaW4sIHZhbHVlT2YsIGJlZm9yZSwgd2hlbiwgYWZ0ZXIsIG9ic2VydmUsIHN3aXRjaE9uIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5hY3RpdmVWaXNpdEluZGV4ID0gY2hhaW4odGhpcy5fYWN0aXZlVmlzaXRzKS5pbmRleEJ5KCdwbGFjZURlZmluaXRpb24nKTtcbiAgICB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU3RhdGVNb2RlbCkucGx1Y2soJ2lzVHJhbnNpdGlvbmFsJyk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Db250ZXh0ID0gbmV3IE5hdmlnYXRpb25TdGF0ZS5Db250ZXh0KHRoaXMsIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLCBzZXNzaW9uID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc05hdmlnYXRpb25TdWNjZXNzKHNlc3Npb24pO1xuICAgIH0pO1xuICAgIHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnZhbHVlID0gbmV3IE5hdmlnYXRpb25TdGF0ZS5JZGxlKHRoaXMuX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dCk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlVHlwZU1vZGVsID0gY2hhaW4odGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwpLm1hcChzdGF0ZSA9PiBzdGF0ZS5jb25zdHJ1Y3RvciBhcyBDb25zdHJ1Y3RhYmxlPE5hdmlnYXRpb25TdGF0ZT4pO1xuXG4gICAgLy8gVE9ETzogbWFrZSBzZXR1cCB0aGUgY2FsbGJhY2tzIGluIGR1cmluZyBtb2R1bGUgaW5pdGlhdGlvbiB0byBtYWtlIHRoaXMgdGVzdGFibGUuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAvLyBSb3V0aW5nIGV2ZW50IHNlcXVlbmNlXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uQ2FuY2VsIC0tPiByZWRpcmVjdCwgZ28gYXJvdW5kIGFnYWluIGluIHRoZSBzYW1lIHNlc3Npb25cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FbmQgLS0+IG5hdmlnYXRpb24gY29tcGxldGUsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVycm9yIC0tPiBuYXZpZ2F0aW9uIGFib3J0ZWQsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICBpZiAoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpIHtcbiAgICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vblBvcFN0YXRlKGV2ZW50KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25Sb3V0ZXJTdGFydGVkKGV2ZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vblJvdXRlckVuZChldmVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25Sb3V0ZXJFcnJvcihldmVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgICAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBQdXNoIGRpYWxvZyBzdGF0ZSB0byB0aGUgdXJsIHNvIHdlIGNhbiBjYXB0dXJlIHRoZSBiYWNrIGJ1dHRvbi5cbiAgICB3aGVuLmxpc3RPZih0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMpLmNoYW5nZXMoKGlkcywgcHJldmlvdXMpID0+IHtcbiAgICAgIHRoaXMuc3luY0ludGVyYWN0aW9uSWRzV2l0aFJvdXRlcigpO1xuICAgIH0sIHsgdW5sZXNzOiB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzIH0pOyAvLyBUT0RPOiBJIHRoaW5rIHRoZSBleGNsdXNpdmUgaW50ZXJhY3Rpb24gcHJldmVudHMgaW50ZXJhY3Rpb25zIHN0YXJ0aW5nIHdoaWxlIGl0J3MgYWN0aXZlIHNvIHdlIG1pZ2h0IG5vdCBuZWVkIHRoaXMuXG5cbiAgICBjb25zdCB1cmxDaGFuZ2VzID0gbmV3IE11dGFibGVTdHJlYW08eyB1cmw6IHN0cmluZywgc3RhdGU6IE5hdmlnYXRpb25TdGF0ZSB9PigpO1xuXG4gICAgLy8gVGhlIGFuZ3VsYXIgcm91dGVyIGRvZXNuJ3QgYWx3YXlzIGZpcmUgcm91dGVyIGV2ZW50cyB3aGVuIHRoZSBiYWNrIGJ1dHRvbiBpcyBwdXNoZWQgd2hpbGUgYSBuYXZpZ2F0aW9uXG4gICAgLy8gc2Vzc2lvbiBpcyBpbiBwcm9ncmVzcy4gIFNvbWV0aW1lcyB3ZSBvbmx5IGtub3cgYWJvdXQgaXQgZnJvbSB0aGUgdXJsIGNoYW5nZS5cbiAgICAvLyBJTVBPUlRBTlQgT1JERVIgREVQRU5ERU5DWVxuICAgIC8vIFRoaXMgb25seSB3b3JrcyBiZWNhdXNlIHdlJ3JlIG5vdGlmaWVkIG9mIHRoZSBjaGFuZ2UgYWZ0ZXIgdGhlIHJvdXRlciBoYXMgc3RhcnRlZCByZWFjdGluZyB0byBpdC4gIFRoaXNcbiAgICAvLyB3ZSBjYW4gY2FuIHVzZSBvdXIgbmF2aWdhdGlvblN0YXRlIHRvIGRldGVybWluZSB0aGluZ3MuXG4gICAgYW5ndWxhckxvY2F0aW9uLm9uVXJsQ2hhbmdlKHVybCA9PiB7XG4gICAgICBjb25zdCBuYXZpZ2F0aW9uU3RhdGUgPSB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVNb2RlbC52YWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKGBVUkxDaGFuZ2UgLT4gJHt1cmx9YCwgeyBzdGF0ZTogbmF2aWdhdGlvblN0YXRlIH0pO1xuICAgICAgdXJsQ2hhbmdlcy5wdWJsaXNoKHsgdXJsLCBzdGF0ZTogbmF2aWdhdGlvblN0YXRlIH0pO1xuXG4gICAgICAvLyBUaGUgdXJsIGhhcyBjaGFuZ2VkIHdoaWxlIHdlJ3JlIGluIGEgdHJhbnNpdGlvbmFsIHN0YXRlXG4gICAgICBpZiAobmF2aWdhdGlvblN0YXRlLmlzVHJhbnNpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnRlcmFjdGlvbiA9IHRoaXMubmF2aWdhdGlvblN0YXRlLmludGVyYWN0aW9uQ29udGV4dDtcbiAgICAgICAgaWYgKG5hdmlnYXRpb25JbnRlcmFjdGlvbiAmJiBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24uaXNBY3RpdmUoKSkge1xuICAgICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24odXJsKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc05hdmlnYXRpb25TdWNjZXNzKHNlc3Npb246IE5hdmlnYXRpb25TdGF0ZSkge1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSB2aXNpdHMgYmVmb3JlIHRoZSBzZXNzaW9uIGZpbmlzaGVzLiAgVGhpcyBhbGxvd3MgdGhlIHBsYWNlT3V0ZXRzIHRvIGlnbm9yZSB2aXNpdFxuICAgIC8vIGNoYW5nZXMgdGhhdCBvY2N1ciB3aGlsZSByb3V0ZXJOYXZpZ2F0aW9uQWN0aXZlIGlzIHRydWUuXG4gICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWUpO1xuICAgIGNvbnN0IHZpc2l0cyA9IHNlc3Npb24uZ2V0VmlzaXRzKCk7XG4gICAgdmlzaXRzLmZvckVhY2godiA9PiB0aGlzLnBsYWNlSGlzdG9yeS5hZGQodikpO1xuICAgIHRoaXMuX2FjdGl2ZVZpc2l0cy52YWx1ZSA9IHZpc2l0cztcbiAgfVxuXG4gIGdldCBuYXZpZ2F0aW9uU3RhdGUoKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWU7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblN0YXRlTW9kZWwoKTogVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXRzKCk6IExpc3RNb2RlbDxWaXNpdD4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVWaXNpdHMucmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogIHBsYWNlUm91dGVyLm5hdmlnYXRlKHBsYWNlRGVzdGluYXRpb25zLnNvbWVQbGFjZS5jcmVhdGVWaXNpdChyb3V0ZUlkLCAuLi52aXNpdFBhcmFtcykpO1xuICAgKiBAcGFyYW0gdmlzaXRcbiAgICovXG4gIGFzeW5jIG5hdmlnYXRlKHZpc2l0OiBWaXNpdCwgb3B0aW9ucz86IHsgcmVsYXRpdmVUbzogQWN0aXZhdGVkUm91dGUgfSkge1xuICAgIHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0LCBhc3luYyByb3V0ZXIgPT4ge1xuICAgICAgY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAgIHZpc2l0LnBsYWNlRGVmaW5pdGlvbi5wYXRoLFxuICAgICAgICAuLi50aGlzLmNyZWF0ZVJvdXRlUGFyYW1ldGVycyh2aXNpdClcbiAgICAgIF07XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICByZWxhdGl2ZVRvOiBvcHRpb25zID8gb3B0aW9ucy5yZWxhdGl2ZVRvIDogbnVsbFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBhc3luYyBwdXNoVmlzaXRDaGFuZ2VzVG9Sb3V0ZShhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByZXZpb3VzOiBWaXNpdCwgbmV4dDogVmlzaXQpIHtcbiAgICAvLyB3ZSBoYXZlIHRvIHB1c2ggdG8gaGlzdG9yeSBzbyBvdXIgcmVtZW1iZXIgc2FuaXRpc2VycyBkb24ndCBwaWNrIHVwIHRoZSBwcmV2aW91cyB2YWx1ZVxuICAgIC8vIHdoZW4gaXQncyBiZWVuIGNsZWFyZWQgYnkgdGhlIHVzZXIuXG4gICAgdGhpcy5wbGFjZUhpc3RvcnkuYWRkKG5leHQpO1xuXG4gICAgLy8gRklYTUU6IG5vIHJvdXRlIGlkIC0+IHJvdXRlIGlkIGR1cGxpY2F0ZXMgcm91dGUgcGFyYW1ldGVyc1xuICAgIGlmIChuZXh0Lmhhc1JvdXRpbmdDaGFuZ2VkRnJvbShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvTmF2aWdhdGlvbihuZXh0LCByb3V0ZXIgPT4ge1xuICAgICAgICBjb25zdCB1cmxTbmFwc2hvdCA9IHRoaXMucGFyc2VVcmwodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKS51cGRhdGVWaXNpdFNlZ21lbnRzKG5leHQpO1xuICAgICAgICBjb25zb2xlLmxvZygnIyMjIFB1c2ggQ2hhbmdlcyB0byByb3V0ZSBSZWRpcmVjdCcsIHsgY29tbWFuZHM6IHVybFNuYXBzaG90LnVybCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb05hdmlnYXRpb24odmlzaXQ6IFZpc2l0LCBydW5OYXZpZ2F0aW9uQ29tbWFuZHM6IChyb3V0ZXI6IFJvdXRlcikgPT4gYW55KSB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWUpIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKCdOYXZpZ2F0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTtcbiAgICB9XG4gICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oY3VycmVudCA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5uYXZpZ2F0aW9uU3RhdGUub25QbGFjZU5hdmlnYXRpb25TdGFydCh2aXNpdCwgdGhpcy5nZXRDdXJyZW50Um91dGVyVXJsKCkpO1xuICAgICAgc2Vzc2lvbi5zdG9yZVZpc2l0KHZpc2l0KTtcbiAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW5OYXZpZ2F0aW9uQ29tbWFuZHModGhpcy5yb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSb3V0ZXIgaGFzIGZpbmlzaGVkIChzaW5jZSB0aGVyZSB3YXMgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgc28gd2VcbiAgICAgIC8vIG5lZWQgdG8gZW5kIHRoZSBuYXZpZ2F0aW9uIHNlc3Npb24uXG4gICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU3RhdGUuaXNUcmFuc2l0aW9uYWwgJiYgIXRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkpIHtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc2Vzc2lvbiA9PiBzZXNzaW9uLm9uUm91dGVyRW5kKG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgJycpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgcHJvdGVjdGVkIHJ1blN0YXRlVHJhbnNpdGlvbih0cmFuc2l0aW9uOiAobmF2aWdhdGlvblNlc3Npb246IE5hdmlnYXRpb25TdGF0ZSkgPT4gTmF2aWdhdGlvblN0YXRlKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVNb2RlbC52YWx1ZTtcbiAgICBjb25zdCBuZXh0ID0gdHJhbnNpdGlvbih0aGlzLm5hdmlnYXRpb25TdGF0ZSk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWUgPSBuZXh0O1xuICAgIGlmIChuZXh0ICE9PSBwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMuZGlzcG9zZSgpO1xuICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBSb3V0ZXIgU3RhdGUgVHJhbnNpdGlvbjogJHtwcmV2aW91cy50b1N0cmluZygpfSAtPiAke25leHQudG9TdHJpbmcoKX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJvdXRlUGFyYW1ldGVycyh2aXNpdDogVmlzaXQpIHtcbiAgICBjb25zdCBkZWYgPSB2aXNpdC5wbGFjZURlZmluaXRpb247XG4gICAgcmV0dXJuIHZpc2l0Lmhhc1JvdXRlSWQoKSA/XG4gICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlSWQodmlzaXQpLCBkZWYuZ2V0Rm9ybWF0dGVkUm91dGVQYXJhbWV0ZXJzKHZpc2l0KV0gOlxuICAgICAgW2RlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXTtcbiAgfVxuXG4gIGV4dHJhY3RDaGlsZFBhdGgoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBhbnlbXSB7XG4gICAgcmV0dXJuIF8uZmxhdHRlbihhY3RpdmF0ZWRSb3V0ZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQudXJsKSk7XG4gIH1cblxuICBwYXJzZVVybCh1cmw6IHN0cmluZyk6IFVybFNuYXBzaG90IHtcbiAgICByZXR1cm4gbmV3IFVybFNuYXBzaG90KHRoaXMudXJsU2VyaWFsaXplciwgdXJsLCB7fSk7XG4gIH1cblxuICByZXNldEJyb3dzZXJMb2NhdGlvbih1cmw6IHN0cmluZykge1xuICAgIHRoaXMuYW5ndWxhckxvY2F0aW9uLmdvKHVybCk7XG4gIH1cblxuICBnZXRDdXJyZW50Um91dGVyVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnJvdXRlclN0YXRlID8gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsIDogbnVsbDtcbiAgfVxuXG4gIGdldEN1cnJlbnRSb3V0ZVNuYXBzaG90KCk6IFVybFNuYXBzaG90IHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVVybCh0aGlzLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSk7XG4gIH1cblxuICBnZXRBY3RpdmVJbnRlcmFjdGlvbklkc0Zyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VVcmwodXJsKS5nZXRJbnRlcmFjdGlvbklkcygpO1xuICB9XG5cblxuICAvLyBAVHJhY2UoKVxuICBoYXNBY3RpdmVJbnRlcmFjdGlvbklkcyh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUludGVyYWN0aW9uSWRzRnJvbVVybCh1cmwpLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBuYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QudXJsVHJlZSwgdXJsU25hcHNob3QuZ2V0TmF2aWdhdGlvbkV4dHJhcygpKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIHN5bmNJbnRlcmFjdGlvbklkc1dpdGhSb3V0ZXIoKSB7XG4gICAgYXNzZXJ0LmlzRmFsc2V5KHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWUpOyAvLyBVcGRhdGluZyBpbnRlcmFjdGlvbiByb3V0ZXMgZHVyaW5nIGFuIGV4aXN0aW5nIG5hdmlnYXRpb24gYnJlYWtzIGFsbCB0aGUgdGhpbmdzLlxuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgaWYgKF8uaXNFcXVhbChjdXJyZW50SWRzLCB0aGlzLmdldEFjdGl2ZUludGVyYWN0aW9uSWRzRnJvbVVybCh0aGlzLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSkpKSB7XG4gICAgICBjb25zb2xlLmxvZygnYWN0aXZpdHkgaWRzIHdlcmUgdGhlIHNhbWUsIHNraXBwaW5nJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXJyZW50SWRzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgLy8gbm8gbW9yZSBpbnRlcmFjdGlvbnMgdG8gcmVtb3ZlIGZyb20gaGlzdG9yeS5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ2V0Q3VycmVudFJvdXRlU25hcHNob3QoKS5yZW1vdmVJbnRlcmFjdGlvbklkcygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRvZG8gd2FzIG9yIGlzLi4uXG4gICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldEN1cnJlbnRSb3V0ZVNuYXBzaG90KCkudXBkYXRlSW50ZXJhY3Rpb25JZHMoY3VycmVudElkcykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|