@coolon/angular-ui-powerups 0.0.96 → 0.0.97
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 +3099 -2285
- 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 +17 -20
- package/coolon-angular-ui-powerups.metadata.json +1 -1
- package/esm2015/coolon-angular-ui-powerups.js +17 -20
- package/esm2015/index.js +2 -2
- package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +15 -51
- package/esm2015/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +15 -47
- package/esm2015/lib/interaction/index.js +4 -2
- package/esm2015/lib/interaction/interaction-context-base.js +158 -0
- package/esm2015/lib/interaction/interaction-context.js +58 -78
- package/esm2015/lib/interaction/interaction.module.js +1 -1
- package/esm2015/lib/interaction/services/dialog-interaction-context.js +163 -0
- package/esm2015/lib/interaction/services/dialog-interaction.service.js +68 -181
- package/esm2015/lib/interaction/services/modal-interaction.service.js +109 -0
- package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +9 -43
- package/esm2015/lib/place/guards/abstract-place.guard.js +165 -0
- package/esm2015/lib/place/guards/consolidated-param-map.js +133 -0
- package/esm2015/lib/place/guards/interaction.guard.js +113 -0
- package/esm2015/lib/place/guards/navigation-session.js +590 -0
- package/esm2015/lib/place/guards/place-component-deactivation-handler.js +110 -0
- package/esm2015/lib/place/index.js +7 -5
- package/esm2015/lib/place/place-component.js +1 -1
- package/esm2015/lib/place/place-router.js +205 -236
- package/esm2015/lib/place/place.module.js +2 -4
- package/esm2015/lib/place/route/visit-sanitiser.js +2 -2
- package/esm2015/lib/place/url-snapshot.js +96 -0
- package/esm2015/public_api.js +3 -3
- package/esm5/coolon-angular-ui-powerups.js +17 -20
- package/esm5/index.js +2 -2
- package/esm5/lib/interaction/components/activity-container/activity-container.component.js +22 -73
- package/esm5/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +25 -76
- package/esm5/lib/interaction/index.js +4 -2
- package/esm5/lib/interaction/interaction-context-base.js +211 -0
- package/esm5/lib/interaction/interaction-context.js +72 -94
- package/esm5/lib/interaction/interaction.module.js +1 -1
- package/esm5/lib/interaction/services/dialog-interaction-context.js +188 -0
- package/esm5/lib/interaction/services/dialog-interaction.service.js +83 -232
- package/esm5/lib/interaction/services/modal-interaction.service.js +153 -0
- package/esm5/lib/place/components/place-outlet/place-outlet.component.js +9 -43
- package/esm5/lib/place/guards/abstract-place.guard.js +212 -0
- package/esm5/lib/place/guards/consolidated-param-map.js +161 -0
- package/esm5/lib/place/guards/interaction.guard.js +125 -0
- package/esm5/lib/place/guards/navigation-session.js +741 -0
- package/esm5/lib/place/guards/place-component-deactivation-handler.js +138 -0
- package/esm5/lib/place/index.js +7 -5
- package/esm5/lib/place/place-component.js +1 -1
- package/esm5/lib/place/place-router.js +324 -295
- package/esm5/lib/place/place.module.js +2 -4
- package/esm5/lib/place/route/visit-sanitiser.js +2 -2
- package/esm5/lib/place/url-snapshot.js +120 -0
- package/esm5/public_api.js +3 -3
- package/fesm2015/coolon-angular-ui-powerups.js +2244 -1654
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/fesm5/coolon-angular-ui-powerups.js +3220 -2407
- package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/interaction/components/activity-container/activity-container.component.d.ts +5 -10
- package/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.d.ts +4 -9
- package/lib/interaction/index.d.ts +3 -1
- package/lib/interaction/interaction-context-base.d.ts +27 -0
- package/lib/interaction/interaction-context.d.ts +18 -15
- package/lib/interaction/services/dialog-interaction-context.d.ts +18 -0
- package/lib/interaction/services/dialog-interaction.service.d.ts +14 -23
- package/lib/interaction/services/modal-interaction.service.d.ts +15 -0
- package/lib/place/components/place-outlet/place-outlet.component.d.ts +1 -4
- package/lib/place/guards/abstract-place.guard.d.ts +19 -0
- package/lib/place/guards/consolidated-param-map.d.ts +14 -0
- package/lib/{interaction/guards/interaction-guard.service.d.ts → place/guards/interaction.guard.d.ts} +8 -4
- package/lib/place/guards/navigation-session.d.ts +96 -0
- package/lib/place/guards/place-component-deactivation-handler.d.ts +14 -0
- package/lib/place/index.d.ts +6 -4
- package/lib/place/place-component.d.ts +1 -1
- package/lib/place/place-router.d.ts +23 -31
- package/lib/place/url-snapshot.d.ts +16 -0
- package/package.json +1 -1
- package/schematics/place-routes/place-def.js +2 -2
- package/schematics/place-routes/templates/place-routes.ts.template +9 -16
- package/esm2015/lib/interaction/guards/interaction-guard.service.js +0 -85
- package/esm2015/lib/place/guards/abstract-enter-place.guard.js +0 -315
- package/esm2015/lib/place/guards/leave-place.guard.js +0 -47
- package/esm2015/lib/place/navigation-session.js +0 -279
- package/esm2015/lib/place/places/noop-gateway-place.component.js +0 -58
- package/esm5/lib/interaction/guards/interaction-guard.service.js +0 -94
- package/esm5/lib/place/guards/abstract-enter-place.guard.js +0 -387
- package/esm5/lib/place/guards/leave-place.guard.js +0 -55
- package/esm5/lib/place/navigation-session.js +0 -353
- package/esm5/lib/place/places/noop-gateway-place.component.js +0 -61
- package/lib/place/guards/abstract-enter-place.guard.d.ts +0 -33
- package/lib/place/guards/leave-place.guard.d.ts +0 -8
- package/lib/place/navigation-session.d.ts +0 -43
- package/lib/place/places/noop-gateway-place.component.d.ts +0 -10
|
@@ -5,46 +5,41 @@
|
|
|
5
5
|
import * as tslib_1 from "tslib";
|
|
6
6
|
import { Location } from '@angular/common';
|
|
7
7
|
import { Injectable } from '@angular/core';
|
|
8
|
-
import { NavigationEnd, NavigationError, NavigationStart, Router,
|
|
9
|
-
import {
|
|
8
|
+
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router, UrlSerializer } from '@angular/router';
|
|
9
|
+
import { Dsl, GarbageCollector, lang, Logger, MutableListModel, MutableValueModel } from '@coolon/pectin';
|
|
10
10
|
import _ from 'lodash';
|
|
11
|
-
import {
|
|
12
|
-
import { NavigationSession } from './navigation-session';
|
|
13
|
-
import { PlaceComponent } from './place-component';
|
|
11
|
+
import { ModalInteractionService } from '../interaction/services/modal-interaction.service';
|
|
12
|
+
import { NavigationSession } from './guards/navigation-session';
|
|
14
13
|
import { PlaceHistory } from './place-history';
|
|
15
|
-
import {
|
|
16
|
-
import { Visit } from './visit';
|
|
14
|
+
import { UrlSnapshot } from './url-snapshot';
|
|
17
15
|
import * as i0 from "@angular/core";
|
|
18
16
|
import * as i1 from "@angular/router";
|
|
19
|
-
import * as i2 from "
|
|
20
|
-
import * as i3 from "
|
|
21
|
-
import * as i4 from "
|
|
22
|
-
/** @type {?} */
|
|
23
|
-
var noopPlaceDef = PlaceComponent.getDefinition(NoopGatewayPlace);
|
|
17
|
+
import * as i2 from "@angular/common";
|
|
18
|
+
import * as i3 from "./place-history";
|
|
19
|
+
import * as i4 from "../interaction/services/modal-interaction.service";
|
|
24
20
|
var PlaceRouter = /** @class */ (function (_super) {
|
|
25
21
|
tslib_1.__extends(PlaceRouter, _super);
|
|
26
|
-
function PlaceRouter(router, urlSerializer,
|
|
22
|
+
function PlaceRouter(router, urlSerializer, angularLocation, placeHistory, modalInteractionService) {
|
|
27
23
|
var _this = _super.call(this) || this;
|
|
28
24
|
_this.router = router;
|
|
29
25
|
_this.urlSerializer = urlSerializer;
|
|
30
|
-
_this.interactionContext = interactionContext;
|
|
31
26
|
_this.angularLocation = angularLocation;
|
|
32
27
|
_this.placeHistory = placeHistory;
|
|
28
|
+
_this.modalInteractionService = modalInteractionService;
|
|
33
29
|
_this.firstRoute = true;
|
|
34
30
|
_this._navigationSessionModel = new MutableValueModel();
|
|
35
31
|
_this._activeVisits = new MutableListModel();
|
|
36
|
-
_this.initialRedirectStarted = false;
|
|
37
|
-
_this.initialRedirectFinished = false;
|
|
38
32
|
var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
|
|
39
33
|
_this.activeVisitIndex = chain(_this._activeVisits).indexBy('placeDefinition');
|
|
40
|
-
_this.
|
|
41
|
-
|
|
42
|
-
* @param {?}
|
|
34
|
+
_this.navigationSessionActive = chain(_this.navigationSessionModel).pluck('active');
|
|
35
|
+
_this._navigationSessionContext = new NavigationSession.Context(_this.router, _this.modalInteractionService, _this.angularLocation, (/**
|
|
36
|
+
* @param {?} session
|
|
43
37
|
* @return {?}
|
|
44
38
|
*/
|
|
45
|
-
function (
|
|
46
|
-
|
|
39
|
+
function (session) {
|
|
40
|
+
_this.processNavigationSuccess(session);
|
|
47
41
|
}));
|
|
42
|
+
_this._navigationSessionModel.value = new NavigationSession.Idle(_this._navigationSessionContext);
|
|
48
43
|
// TODO: make setup the callbacks in during module initiation to make this testable.
|
|
49
44
|
_this.router.events.subscribe((/**
|
|
50
45
|
* @param {?} event
|
|
@@ -55,30 +50,83 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
55
50
|
// ======================
|
|
56
51
|
// NavigationStart -> .... -> NavigationCancel --> redirect, go around again in the same session
|
|
57
52
|
// NavigationStart -> .... -> NavigationEnd --> navigation complete, end session.
|
|
58
|
-
// NavigationStart -> .... -> NavigationError --> navigation
|
|
53
|
+
// NavigationStart -> .... -> NavigationError --> navigation aborted, end session.
|
|
59
54
|
// =======================
|
|
60
55
|
if (event instanceof NavigationStart) {
|
|
61
|
-
_this.
|
|
56
|
+
_this.runStateTransition((/**
|
|
57
|
+
* @param {?} session
|
|
58
|
+
* @return {?}
|
|
59
|
+
*/
|
|
60
|
+
function (session) { return session.onStart(event); }));
|
|
62
61
|
}
|
|
63
62
|
if (event instanceof NavigationEnd) {
|
|
64
|
-
_this.
|
|
63
|
+
_this.runStateTransition((/**
|
|
64
|
+
* @param {?} session
|
|
65
|
+
* @return {?}
|
|
66
|
+
*/
|
|
67
|
+
function (session) { return session.onEnd(event); }));
|
|
65
68
|
}
|
|
66
69
|
if (event instanceof NavigationError) {
|
|
67
|
-
_this.
|
|
70
|
+
_this.runStateTransition((/**
|
|
71
|
+
* @param {?} session
|
|
72
|
+
* @return {?}
|
|
73
|
+
*/
|
|
74
|
+
function (session) { return session.onError(event); }));
|
|
75
|
+
}
|
|
76
|
+
if (event instanceof NavigationCancel) {
|
|
77
|
+
_this.runStateTransition((/**
|
|
78
|
+
* @param {?} session
|
|
79
|
+
* @return {?}
|
|
80
|
+
*/
|
|
81
|
+
function (session) { return session.onCancel(event); }));
|
|
68
82
|
}
|
|
69
83
|
}));
|
|
70
|
-
|
|
71
|
-
_this.
|
|
72
|
-
|
|
84
|
+
// Push dialog state to the url so we can capture the back button.
|
|
85
|
+
_this.modalInteractionService.addActivityListener(new PlaceRouter.InteractionRouteMediator(_this.navigationSessionActive, _this.router));
|
|
86
|
+
// The angular router doesn't always fire router events when the back button is pushed while a navigation
|
|
87
|
+
// session is in progress. Sometimes we only know about it from the url change.
|
|
88
|
+
angularLocation.onUrlChange((/**
|
|
89
|
+
* @param {?} url
|
|
73
90
|
* @return {?}
|
|
74
91
|
*/
|
|
75
|
-
function (
|
|
76
|
-
console.log(
|
|
92
|
+
function (url) {
|
|
93
|
+
console.log("#### url changed -> " + url);
|
|
94
|
+
/** @type {?} */
|
|
95
|
+
var interactionContext = _this.navigationSessionActive.value && _this.navigationSession.interactionContext;
|
|
96
|
+
if (interactionContext && interactionContext.isActive()) {
|
|
97
|
+
Logger.get(_this).info("back button pressed during navigation session interaction");
|
|
98
|
+
_this.runStateTransition((/**
|
|
99
|
+
* @param {?} navigationSession
|
|
100
|
+
* @return {?}
|
|
101
|
+
*/
|
|
102
|
+
function (navigationSession) { return navigationSession.onBackClickedDuringNavigationInteraction(url); }));
|
|
103
|
+
}
|
|
77
104
|
}));
|
|
78
105
|
return _this;
|
|
79
|
-
// const txo = new TransactionObserver().onEvent(e => console.log(e.toString()));
|
|
80
|
-
// txo.observe('this.navigationSessionModel', this.navigationSessionModel);
|
|
81
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* @private
|
|
109
|
+
* @param {?} session
|
|
110
|
+
* @return {?}
|
|
111
|
+
*/
|
|
112
|
+
PlaceRouter.prototype.processNavigationSuccess = /**
|
|
113
|
+
* @private
|
|
114
|
+
* @param {?} session
|
|
115
|
+
* @return {?}
|
|
116
|
+
*/
|
|
117
|
+
function (session) {
|
|
118
|
+
var _this = this;
|
|
119
|
+
/** @type {?} */
|
|
120
|
+
var visits = session.getVisits();
|
|
121
|
+
visits.forEach((/**
|
|
122
|
+
* @param {?} v
|
|
123
|
+
* @return {?}
|
|
124
|
+
*/
|
|
125
|
+
function (v) { return _this.placeHistory.add(v); }));
|
|
126
|
+
// Update visits before we end the navigation session. This allows the placeOutets to
|
|
127
|
+
// ignore visit changes that occur while the navigation is in progress
|
|
128
|
+
this._activeVisits.value = visits;
|
|
129
|
+
};
|
|
82
130
|
Object.defineProperty(PlaceRouter.prototype, "navigationSession", {
|
|
83
131
|
get: /**
|
|
84
132
|
* @return {?}
|
|
@@ -154,19 +202,6 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
154
202
|
});
|
|
155
203
|
});
|
|
156
204
|
};
|
|
157
|
-
/**
|
|
158
|
-
* @param {?} visit
|
|
159
|
-
* @param {?=} navigationExtras
|
|
160
|
-
* @return {?}
|
|
161
|
-
*/
|
|
162
|
-
PlaceRouter.prototype.createRedirectFor = /**
|
|
163
|
-
* @param {?} visit
|
|
164
|
-
* @param {?=} navigationExtras
|
|
165
|
-
* @return {?}
|
|
166
|
-
*/
|
|
167
|
-
function (visit, navigationExtras) {
|
|
168
|
-
return this.router.createUrlTree(this.createRouteParameters(visit), navigationExtras);
|
|
169
|
-
};
|
|
170
205
|
// @Trace()
|
|
171
206
|
// @Trace()
|
|
172
207
|
/**
|
|
@@ -199,15 +234,6 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
199
234
|
function (router) {
|
|
200
235
|
/** @type {?} */
|
|
201
236
|
var commands = _this.parseUrl(_this.router.routerState.snapshot).createRedirectCommandsFor(next);
|
|
202
|
-
// // we have to to use the definition for route id as our redirection always includes
|
|
203
|
-
// // the id in the url segements (but leaves it blank when there's no id). I.e. in the
|
|
204
|
-
// // no id case we're doing the following redirect [<placePath>, ""] -> ["..", <id>]
|
|
205
|
-
// const relativePath = !!previous.placeDefinition.hasRouteId() ? '..' : '.';
|
|
206
|
-
// const commands = [
|
|
207
|
-
// relativePath,
|
|
208
|
-
// ...this.createRouteParameters(next),
|
|
209
|
-
// ...this.extractChildPath(activatedRoute.snapshot)
|
|
210
|
-
// ];
|
|
211
237
|
console.log('### Push Changes to route Redirect', { commands: commands });
|
|
212
238
|
return router.navigate(commands);
|
|
213
239
|
}))];
|
|
@@ -218,32 +244,49 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
218
244
|
};
|
|
219
245
|
/**
|
|
220
246
|
* @param {?} visit
|
|
221
|
-
* @param {?}
|
|
247
|
+
* @param {?} runNavigationCommands
|
|
222
248
|
* @return {?}
|
|
223
249
|
*/
|
|
224
250
|
PlaceRouter.prototype.doNavigation = /**
|
|
225
251
|
* @param {?} visit
|
|
226
|
-
* @param {?}
|
|
252
|
+
* @param {?} runNavigationCommands
|
|
227
253
|
* @return {?}
|
|
228
254
|
*/
|
|
229
|
-
function (visit,
|
|
255
|
+
function (visit, runNavigationCommands) {
|
|
230
256
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
257
|
+
var _this = this;
|
|
231
258
|
return tslib_1.__generator(this, function (_a) {
|
|
232
259
|
switch (_a.label) {
|
|
233
260
|
case 0:
|
|
234
|
-
this.
|
|
261
|
+
if (this.navigationSessionActive.value) {
|
|
262
|
+
lang.illegalState('Navigation already in progress');
|
|
263
|
+
}
|
|
264
|
+
this.runStateTransition((/**
|
|
265
|
+
* @param {?} current
|
|
266
|
+
* @return {?}
|
|
267
|
+
*/
|
|
268
|
+
function (current) {
|
|
269
|
+
/** @type {?} */
|
|
270
|
+
var session = new NavigationSession.Active(_this._navigationSessionContext, false, _this.router.routerState.snapshot.url);
|
|
271
|
+
session.storeVisit(visit);
|
|
272
|
+
return session;
|
|
273
|
+
}));
|
|
235
274
|
_a.label = 1;
|
|
236
275
|
case 1:
|
|
237
276
|
_a.trys.push([1, , 3, 4]);
|
|
238
|
-
return [4 /*yield*/,
|
|
277
|
+
return [4 /*yield*/, runNavigationCommands(this.router)];
|
|
239
278
|
case 2:
|
|
240
279
|
_a.sent();
|
|
241
280
|
return [3 /*break*/, 4];
|
|
242
281
|
case 3:
|
|
243
282
|
// Router has finished (since there was no router change required) so we
|
|
244
283
|
// need to end the navigation session.
|
|
245
|
-
if (this.navigationSession && !this.router.getCurrentNavigation()) {
|
|
246
|
-
this.
|
|
284
|
+
if (this.navigationSession.active && !this.router.getCurrentNavigation()) {
|
|
285
|
+
this.runStateTransition((/**
|
|
286
|
+
* @param {?} session
|
|
287
|
+
* @return {?}
|
|
288
|
+
*/
|
|
289
|
+
function (session) { return session.onEnd(new NavigationEnd(-1, '', '')); }));
|
|
247
290
|
}
|
|
248
291
|
return [7 /*endfinally*/];
|
|
249
292
|
case 4: return [2 /*return*/];
|
|
@@ -252,93 +295,181 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
252
295
|
});
|
|
253
296
|
};
|
|
254
297
|
/**
|
|
255
|
-
* @
|
|
256
|
-
* @param {?}
|
|
298
|
+
* @protected
|
|
299
|
+
* @param {?} transition
|
|
257
300
|
* @return {?}
|
|
258
301
|
*/
|
|
259
|
-
PlaceRouter.prototype.
|
|
260
|
-
* @
|
|
261
|
-
* @param {?}
|
|
302
|
+
PlaceRouter.prototype.runStateTransition = /**
|
|
303
|
+
* @protected
|
|
304
|
+
* @param {?} transition
|
|
262
305
|
* @return {?}
|
|
263
306
|
*/
|
|
264
|
-
function (
|
|
307
|
+
function (transition) {
|
|
265
308
|
/** @type {?} */
|
|
266
|
-
var
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* @private
|
|
275
|
-
* @param {?} event
|
|
276
|
-
* @return {?}
|
|
277
|
-
*/
|
|
278
|
-
PlaceRouter.prototype.onAngularRouterStarted =
|
|
279
|
-
// @Trace()
|
|
280
|
-
/**
|
|
281
|
-
* @private
|
|
282
|
-
* @param {?} event
|
|
283
|
-
* @return {?}
|
|
284
|
-
*/
|
|
285
|
-
function (event) {
|
|
286
|
-
if (!this.navigationSession) { // We been activated by an external route rather than placeRouter.go(visit)
|
|
287
|
-
console.log('navigation started', { firstTime: this.firstRoute });
|
|
288
|
-
/** @type {?} */
|
|
289
|
-
var session = this.navigationSessionFactory.createExternal(this.firstRoute);
|
|
290
|
-
if (event.navigationTrigger === 'popstate') {
|
|
291
|
-
session.setPopstateReturnUrl(this.router.routerState.snapshot.url);
|
|
292
|
-
}
|
|
293
|
-
this._navigationSessionModel.value = session;
|
|
309
|
+
var previous = this._navigationSessionModel.value;
|
|
310
|
+
/** @type {?} */
|
|
311
|
+
var next = transition(this.navigationSession);
|
|
312
|
+
this._navigationSessionModel.value = next;
|
|
313
|
+
if (next !== previous) {
|
|
314
|
+
previous.dispose();
|
|
315
|
+
Logger.get(this).info("Router State Transition: " + previous.toString() + " -> " + next.toString());
|
|
294
316
|
}
|
|
295
|
-
this.firstRoute = false;
|
|
296
317
|
};
|
|
297
|
-
// @Trace()
|
|
298
|
-
// @Trace()
|
|
299
318
|
/**
|
|
300
319
|
* @private
|
|
301
|
-
* @param {?}
|
|
320
|
+
* @param {?} visit
|
|
302
321
|
* @return {?}
|
|
303
322
|
*/
|
|
304
|
-
PlaceRouter.prototype.
|
|
305
|
-
// @Trace()
|
|
306
|
-
/**
|
|
323
|
+
PlaceRouter.prototype.createRouteParameters = /**
|
|
307
324
|
* @private
|
|
308
|
-
* @param {?}
|
|
325
|
+
* @param {?} visit
|
|
309
326
|
* @return {?}
|
|
310
327
|
*/
|
|
311
|
-
function (
|
|
312
|
-
var _this = this;
|
|
328
|
+
function (visit) {
|
|
313
329
|
/** @type {?} */
|
|
314
|
-
var
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
/** @type {?} */
|
|
319
|
-
var visits = session.getVisits();
|
|
320
|
-
visits.forEach((/**
|
|
321
|
-
* @param {?} v
|
|
322
|
-
* @return {?}
|
|
323
|
-
*/
|
|
324
|
-
function (v) { return _this.placeHistory.add(v); }));
|
|
325
|
-
this._activeVisits.value = visits;
|
|
326
|
-
}
|
|
327
|
-
else {
|
|
328
|
-
// Angular doesn't preserve the url when a guard cancels the back button.
|
|
329
|
-
// See https://github.com/angular/angular/issues/13586#issuecomment-432795720
|
|
330
|
-
if (session.isPopState) {
|
|
331
|
-
console.log('cancelled during popstate');
|
|
332
|
-
this.angularLocation.go(session.popStateReturnUrl);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
this._navigationSessionModel.value = null;
|
|
330
|
+
var def = visit.placeDefinition;
|
|
331
|
+
return visit.hasRouteId() ?
|
|
332
|
+
[def.getFormattedRouteId(visit), def.getFormattedRouteParameters(visit)] :
|
|
333
|
+
[def.getFormattedRouteParameters(visit)];
|
|
336
334
|
};
|
|
335
|
+
// private onAngularRouterStarted(event: NavigationStart) {
|
|
336
|
+
// if (!this.navigationSession) {
|
|
337
|
+
// // We been activated by an external route rather than placeRouter.go(visit)
|
|
338
|
+
// this._navigationSessionModel.value = this.createExternalNavigationSession(event);
|
|
339
|
+
// }
|
|
340
|
+
// this.firstRoute = false;
|
|
341
|
+
// }
|
|
342
|
+
//
|
|
343
|
+
// private createExternalNavigationSession(event: NavigationStart) {
|
|
344
|
+
// return new NavigationSession.Active(
|
|
345
|
+
// this.modalInteractionService,
|
|
346
|
+
// this.angularLocation,
|
|
347
|
+
// // event.url,
|
|
348
|
+
// event.navigationTrigger === 'popstate'
|
|
349
|
+
// );
|
|
350
|
+
// }
|
|
351
|
+
// private onAngularRouterFinished(cancelled: boolean) {
|
|
352
|
+
// const session = this._navigationSessionModel.value;
|
|
353
|
+
// if (session.backClickedDuringCanDeactivateInteraction) {
|
|
354
|
+
// // we swallow this finished event but keep the session alive as we're going to
|
|
355
|
+
// // get another route started event, which will trigger anohter canDeactivate dialog
|
|
356
|
+
// // if we start a new session.
|
|
357
|
+
// // session.resetInteractionSession()
|
|
358
|
+
// } else {
|
|
359
|
+
// if (!cancelled) {
|
|
360
|
+
// const visits = session.getVisits();
|
|
361
|
+
// visits.forEach(v => this.placeHistory.add(v));
|
|
362
|
+
// // Update visits before we end the navigation session. This allows the placeOutets to
|
|
363
|
+
// // ignore visit changes that occur while the navigation is in progress
|
|
364
|
+
// this._activeVisits.value = visits;
|
|
365
|
+
// } else {
|
|
366
|
+
// // TODO: move this to the navigation session
|
|
367
|
+
// // Angular doesn't preserve the url when a guard cancels the back button.
|
|
368
|
+
// // See https://github.com/angular/angular/issues/13586#issuecomment-432795720
|
|
369
|
+
// // session.rememberPopStateReturnUrl(this.router.routerState.snapshot.url);
|
|
370
|
+
// if (session.isPopState) {
|
|
371
|
+
// console.log('cancelled during popstate');
|
|
372
|
+
// // this.angularLocation.go(session.previousUrl);
|
|
373
|
+
// }
|
|
374
|
+
// }
|
|
375
|
+
// session.dispose();
|
|
376
|
+
// this._navigationSessionModel.value = null;
|
|
377
|
+
// }
|
|
378
|
+
// }
|
|
379
|
+
// private onAngularRouterStarted(event: NavigationStart) {
|
|
380
|
+
// if (!this.navigationSession) {
|
|
381
|
+
// // We been activated by an external route rather than placeRouter.go(visit)
|
|
382
|
+
// this._navigationSessionModel.value = this.createExternalNavigationSession(event);
|
|
383
|
+
// }
|
|
384
|
+
// this.firstRoute = false;
|
|
385
|
+
// }
|
|
386
|
+
//
|
|
387
|
+
// private createExternalNavigationSession(event: NavigationStart) {
|
|
388
|
+
// return new NavigationSession.Active(
|
|
389
|
+
// this.modalInteractionService,
|
|
390
|
+
// this.angularLocation,
|
|
391
|
+
// // event.url,
|
|
392
|
+
// event.navigationTrigger === 'popstate'
|
|
393
|
+
// );
|
|
394
|
+
// }
|
|
395
|
+
// private onAngularRouterFinished(cancelled: boolean) {
|
|
396
|
+
// const session = this._navigationSessionModel.value;
|
|
397
|
+
// if (session.backClickedDuringCanDeactivateInteraction) {
|
|
398
|
+
// // we swallow this finished event but keep the session alive as we're going to
|
|
399
|
+
// // get another route started event, which will trigger anohter canDeactivate dialog
|
|
400
|
+
// // if we start a new session.
|
|
401
|
+
// // session.resetInteractionSession()
|
|
402
|
+
// } else {
|
|
403
|
+
// if (!cancelled) {
|
|
404
|
+
// const visits = session.getVisits();
|
|
405
|
+
// visits.forEach(v => this.placeHistory.add(v));
|
|
406
|
+
// // Update visits before we end the navigation session. This allows the placeOutets to
|
|
407
|
+
// // ignore visit changes that occur while the navigation is in progress
|
|
408
|
+
// this._activeVisits.value = visits;
|
|
409
|
+
// } else {
|
|
410
|
+
// // TODO: move this to the navigation session
|
|
411
|
+
// // Angular doesn't preserve the url when a guard cancels the back button.
|
|
412
|
+
// // See https://github.com/angular/angular/issues/13586#issuecomment-432795720
|
|
413
|
+
// // session.rememberPopStateReturnUrl(this.router.routerState.snapshot.url);
|
|
414
|
+
// if (session.isPopState) {
|
|
415
|
+
// console.log('cancelled during popstate');
|
|
416
|
+
// // this.angularLocation.go(session.previousUrl);
|
|
417
|
+
// }
|
|
418
|
+
// }
|
|
419
|
+
// session.dispose();
|
|
420
|
+
// this._navigationSessionModel.value = null;
|
|
421
|
+
// }
|
|
422
|
+
// }
|
|
337
423
|
/**
|
|
338
424
|
* @param {?} activatedRoute
|
|
339
425
|
* @return {?}
|
|
340
426
|
*/
|
|
341
|
-
PlaceRouter.prototype.extractChildPath =
|
|
427
|
+
PlaceRouter.prototype.extractChildPath =
|
|
428
|
+
// private onAngularRouterStarted(event: NavigationStart) {
|
|
429
|
+
// if (!this.navigationSession) {
|
|
430
|
+
// // We been activated by an external route rather than placeRouter.go(visit)
|
|
431
|
+
// this._navigationSessionModel.value = this.createExternalNavigationSession(event);
|
|
432
|
+
// }
|
|
433
|
+
// this.firstRoute = false;
|
|
434
|
+
// }
|
|
435
|
+
//
|
|
436
|
+
// private createExternalNavigationSession(event: NavigationStart) {
|
|
437
|
+
// return new NavigationSession.Active(
|
|
438
|
+
// this.modalInteractionService,
|
|
439
|
+
// this.angularLocation,
|
|
440
|
+
// // event.url,
|
|
441
|
+
// event.navigationTrigger === 'popstate'
|
|
442
|
+
// );
|
|
443
|
+
// }
|
|
444
|
+
// private onAngularRouterFinished(cancelled: boolean) {
|
|
445
|
+
// const session = this._navigationSessionModel.value;
|
|
446
|
+
// if (session.backClickedDuringCanDeactivateInteraction) {
|
|
447
|
+
// // we swallow this finished event but keep the session alive as we're going to
|
|
448
|
+
// // get another route started event, which will trigger anohter canDeactivate dialog
|
|
449
|
+
// // if we start a new session.
|
|
450
|
+
// // session.resetInteractionSession()
|
|
451
|
+
// } else {
|
|
452
|
+
// if (!cancelled) {
|
|
453
|
+
// const visits = session.getVisits();
|
|
454
|
+
// visits.forEach(v => this.placeHistory.add(v));
|
|
455
|
+
// // Update visits before we end the navigation session. This allows the placeOutets to
|
|
456
|
+
// // ignore visit changes that occur while the navigation is in progress
|
|
457
|
+
// this._activeVisits.value = visits;
|
|
458
|
+
// } else {
|
|
459
|
+
// // TODO: move this to the navigation session
|
|
460
|
+
// // Angular doesn't preserve the url when a guard cancels the back button.
|
|
461
|
+
// // See https://github.com/angular/angular/issues/13586#issuecomment-432795720
|
|
462
|
+
// // session.rememberPopStateReturnUrl(this.router.routerState.snapshot.url);
|
|
463
|
+
// if (session.isPopState) {
|
|
464
|
+
// console.log('cancelled during popstate');
|
|
465
|
+
// // this.angularLocation.go(session.previousUrl);
|
|
466
|
+
// }
|
|
467
|
+
// }
|
|
468
|
+
// session.dispose();
|
|
469
|
+
// this._navigationSessionModel.value = null;
|
|
470
|
+
// }
|
|
471
|
+
// }
|
|
472
|
+
/**
|
|
342
473
|
* @param {?} activatedRoute
|
|
343
474
|
* @return {?}
|
|
344
475
|
*/
|
|
@@ -358,50 +489,7 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
358
489
|
* @return {?}
|
|
359
490
|
*/
|
|
360
491
|
function (snapshot) {
|
|
361
|
-
return new
|
|
362
|
-
};
|
|
363
|
-
// TODO: this all only sort of works. Opening dialogs and clicking back multiple times breaks things.
|
|
364
|
-
// TODO: next stage is to investigate tracking dialog state in a different placeoutlet and keeping those
|
|
365
|
-
// TODO: urls out of the history.
|
|
366
|
-
// TODO: this all only sort of works. Opening dialogs and clicking back multiple times breaks things.
|
|
367
|
-
// TODO: next stage is to investigate tracking dialog state in a different placeoutlet and keeping those
|
|
368
|
-
// TODO: urls out of the history.
|
|
369
|
-
/**
|
|
370
|
-
* @param {?} activatedRoute
|
|
371
|
-
* @param {?} state
|
|
372
|
-
* @return {?}
|
|
373
|
-
*/
|
|
374
|
-
PlaceRouter.prototype.performInitialNavigationIntercept =
|
|
375
|
-
// TODO: this all only sort of works. Opening dialogs and clicking back multiple times breaks things.
|
|
376
|
-
// TODO: next stage is to investigate tracking dialog state in a different placeoutlet and keeping those
|
|
377
|
-
// TODO: urls out of the history.
|
|
378
|
-
/**
|
|
379
|
-
* @param {?} activatedRoute
|
|
380
|
-
* @param {?} state
|
|
381
|
-
* @return {?}
|
|
382
|
-
*/
|
|
383
|
-
function (activatedRoute, state) {
|
|
384
|
-
assert.isTruthy(this.isInitialNavigation());
|
|
385
|
-
Logger.get(this).info("Redirecting to: " + noopPlaceDef.path, { returnUrl: state.url });
|
|
386
|
-
if (!this.initialRedirectFinished) {
|
|
387
|
-
this.initialRedirectFinished = true;
|
|
388
|
-
return this.router.createUrlTree([noopPlaceDef.path, {
|
|
389
|
-
returnUrl: state.url
|
|
390
|
-
}], {
|
|
391
|
-
replaceUrl: true,
|
|
392
|
-
// make sure we update our history
|
|
393
|
-
skipLocationChange: false
|
|
394
|
-
});
|
|
395
|
-
}
|
|
396
|
-
};
|
|
397
|
-
/**
|
|
398
|
-
* @return {?}
|
|
399
|
-
*/
|
|
400
|
-
PlaceRouter.prototype.isInitialNavigation = /**
|
|
401
|
-
* @return {?}
|
|
402
|
-
*/
|
|
403
|
-
function () {
|
|
404
|
-
return this.navigationSession.firstNavigation && !this.initialRedirectFinished;
|
|
492
|
+
return new UrlSnapshot(this.urlSerializer.parse(snapshot.url));
|
|
405
493
|
};
|
|
406
494
|
PlaceRouter.decorators = [
|
|
407
495
|
{ type: Injectable, args: [{
|
|
@@ -412,17 +500,11 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
412
500
|
PlaceRouter.ctorParameters = function () { return [
|
|
413
501
|
{ type: Router },
|
|
414
502
|
{ type: UrlSerializer },
|
|
415
|
-
{ type: InteractionContext },
|
|
416
503
|
{ type: Location },
|
|
417
|
-
{ type: PlaceHistory }
|
|
504
|
+
{ type: PlaceHistory },
|
|
505
|
+
{ type: ModalInteractionService }
|
|
418
506
|
]; };
|
|
419
|
-
/** @nocollapse */ PlaceRouter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i1.UrlSerializer), i0.ɵɵinject(i2.
|
|
420
|
-
tslib_1.__decorate([
|
|
421
|
-
Trace(),
|
|
422
|
-
tslib_1.__metadata("design:type", Function),
|
|
423
|
-
tslib_1.__metadata("design:paramtypes", [Visit, Object]),
|
|
424
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
425
|
-
], PlaceRouter.prototype, "navigate", null);
|
|
507
|
+
/** @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.ModalInteractionService)); }, token: PlaceRouter, providedIn: "root" });
|
|
426
508
|
return PlaceRouter;
|
|
427
509
|
}(GarbageCollector));
|
|
428
510
|
export { PlaceRouter };
|
|
@@ -450,159 +532,106 @@ if (false) {
|
|
|
450
532
|
* @type {?}
|
|
451
533
|
* @private
|
|
452
534
|
*/
|
|
453
|
-
PlaceRouter.prototype.
|
|
535
|
+
PlaceRouter.prototype._navigationSessionContext;
|
|
454
536
|
/**
|
|
455
537
|
* @type {?}
|
|
456
538
|
* @private
|
|
457
539
|
*/
|
|
458
|
-
PlaceRouter.prototype.
|
|
540
|
+
PlaceRouter.prototype.router;
|
|
459
541
|
/**
|
|
460
542
|
* @type {?}
|
|
461
543
|
* @private
|
|
462
544
|
*/
|
|
463
|
-
PlaceRouter.prototype.
|
|
545
|
+
PlaceRouter.prototype.urlSerializer;
|
|
464
546
|
/**
|
|
465
547
|
* @type {?}
|
|
466
548
|
* @private
|
|
467
549
|
*/
|
|
468
|
-
PlaceRouter.prototype.
|
|
550
|
+
PlaceRouter.prototype.angularLocation;
|
|
469
551
|
/**
|
|
470
552
|
* @type {?}
|
|
471
553
|
* @private
|
|
472
554
|
*/
|
|
473
|
-
PlaceRouter.prototype.
|
|
555
|
+
PlaceRouter.prototype.placeHistory;
|
|
474
556
|
/**
|
|
475
557
|
* @type {?}
|
|
476
558
|
* @private
|
|
477
559
|
*/
|
|
478
|
-
PlaceRouter.prototype.
|
|
479
|
-
/** @type {?} */
|
|
480
|
-
PlaceRouter.prototype.angularLocation;
|
|
481
|
-
/** @type {?} */
|
|
482
|
-
PlaceRouter.prototype.placeHistory;
|
|
560
|
+
PlaceRouter.prototype.modalInteractionService;
|
|
483
561
|
}
|
|
484
562
|
(function (PlaceRouter) {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
563
|
+
PlaceRouter.INTERACTION_ROUTER_OUTLET = 'aup-interaction';
|
|
564
|
+
var InteractionRouteMediator = /** @class */ (function () {
|
|
565
|
+
function InteractionRouteMediator(navigationSessionModelActive, router) {
|
|
566
|
+
this.navigationSessionModelActive = navigationSessionModelActive;
|
|
567
|
+
this.router = router;
|
|
489
568
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
*/
|
|
493
|
-
UrlHelper.prototype.cloneUrlSegmentList = /**
|
|
494
|
-
* @return {?}
|
|
495
|
-
*/
|
|
496
|
-
function () {
|
|
497
|
-
return tslib_1.__spread(this.urlTree.root.children.primary.segments);
|
|
498
|
-
};
|
|
499
|
-
/**
|
|
500
|
-
* @param {?} visit
|
|
501
|
-
* @return {?}
|
|
502
|
-
*/
|
|
503
|
-
UrlHelper.prototype.updateVisitSegments = /**
|
|
504
|
-
* @param {?} visit
|
|
505
|
-
* @return {?}
|
|
506
|
-
*/
|
|
507
|
-
function (visit) {
|
|
508
|
-
// Ugly, but it works for now.
|
|
509
|
-
/** @type {?} */
|
|
510
|
-
var segments = this.cloneUrlSegmentList();
|
|
511
|
-
/** @type {?} */
|
|
512
|
-
var visitSegments = this.convertToUrlSegments(visit);
|
|
513
|
-
/** @type {?} */
|
|
514
|
-
var replaceAt = segments.findIndex((/**
|
|
515
|
-
* @param {?} segment
|
|
569
|
+
Object.defineProperty(InteractionRouteMediator.prototype, "isNavigating", {
|
|
570
|
+
get: /**
|
|
516
571
|
* @return {?}
|
|
517
572
|
*/
|
|
518
|
-
function (
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
573
|
+
function () {
|
|
574
|
+
return this.navigationSessionModelActive.value;
|
|
575
|
+
},
|
|
576
|
+
enumerable: true,
|
|
577
|
+
configurable: true
|
|
578
|
+
});
|
|
579
|
+
// If we're not in a navigation we push
|
|
580
|
+
// @Trace()
|
|
581
|
+
// If we're not in a navigation we push
|
|
582
|
+
// @Trace()
|
|
527
583
|
/**
|
|
528
|
-
* Converts the visit into segments. Please not that these segments are not e
|
|
529
|
-
* @param {?} visit
|
|
530
|
-
* @return {?}
|
|
531
|
-
*/
|
|
532
|
-
UrlHelper.prototype.convertToUrlSegments = /**
|
|
533
|
-
* Converts the visit into segments. Please not that these segments are not e
|
|
534
|
-
* @param {?} visit
|
|
535
584
|
* @return {?}
|
|
536
585
|
*/
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
// NOTE:
|
|
541
|
-
// It's important to attach the params to the root path and not the id. If we attach them
|
|
542
|
-
// to an empty id then the angular router won't match the pattern.
|
|
543
|
-
new UrlSegment(visit.placeDefinition.path, visit.placeDefinition.getFormattedRouteParameters(visit)),
|
|
544
|
-
new UrlSegment(visit.placeDefinition.getFormattedRouteId(visit), {})
|
|
545
|
-
]
|
|
546
|
-
:
|
|
547
|
-
[
|
|
548
|
-
new UrlSegment(visit.placeDefinition.path, visit.placeDefinition.getFormattedRouteParameters(visit))
|
|
549
|
-
];
|
|
550
|
-
};
|
|
586
|
+
InteractionRouteMediator.prototype.onActivityStarted =
|
|
587
|
+
// If we're not in a navigation we push
|
|
588
|
+
// @Trace()
|
|
551
589
|
/**
|
|
552
|
-
* @param {?} visit
|
|
553
|
-
* @return {?}
|
|
554
|
-
*/
|
|
555
|
-
UrlHelper.prototype.createRedirectCommandsFor = /**
|
|
556
|
-
* @param {?} visit
|
|
557
590
|
* @return {?}
|
|
558
591
|
*/
|
|
559
|
-
function (
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
commands.push(s.parameters);
|
|
572
|
-
}
|
|
573
|
-
}));
|
|
574
|
-
return commands;
|
|
592
|
+
function () {
|
|
593
|
+
var _a;
|
|
594
|
+
if (!this.isNavigating) {
|
|
595
|
+
this.router.navigate(['.', {
|
|
596
|
+
outlets: (_a = {},
|
|
597
|
+
_a[PlaceRouter.INTERACTION_ROUTER_OUTLET] = ['modal'] // "open" must be a valid route for this outlet.
|
|
598
|
+
,
|
|
599
|
+
_a)
|
|
600
|
+
}], {
|
|
601
|
+
replaceUrl: false,
|
|
602
|
+
});
|
|
603
|
+
}
|
|
575
604
|
};
|
|
605
|
+
// @Trace()
|
|
606
|
+
// @Trace()
|
|
576
607
|
/**
|
|
577
|
-
* @param {?} placeDef
|
|
578
608
|
* @return {?}
|
|
579
609
|
*/
|
|
580
|
-
|
|
581
|
-
|
|
610
|
+
InteractionRouteMediator.prototype.onActivityFinished =
|
|
611
|
+
// @Trace()
|
|
612
|
+
/**
|
|
582
613
|
* @return {?}
|
|
583
614
|
*/
|
|
584
|
-
function (
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
615
|
+
function () {
|
|
616
|
+
var _a;
|
|
617
|
+
if (!this.isNavigating) {
|
|
618
|
+
this.router.navigate(['.', {
|
|
619
|
+
outlets: (_a = {},
|
|
620
|
+
_a[PlaceRouter.INTERACTION_ROUTER_OUTLET] = null,
|
|
621
|
+
_a)
|
|
622
|
+
}], {
|
|
623
|
+
replaceUrl: true // remove the interaction from the history.
|
|
624
|
+
});
|
|
625
|
+
}
|
|
590
626
|
};
|
|
591
|
-
|
|
592
|
-
Trace(),
|
|
593
|
-
tslib_1.__metadata("design:type", Function),
|
|
594
|
-
tslib_1.__metadata("design:paramtypes", [Visit]),
|
|
595
|
-
tslib_1.__metadata("design:returntype", Array)
|
|
596
|
-
], UrlHelper.prototype, "createRedirectCommandsFor", null);
|
|
597
|
-
return UrlHelper;
|
|
627
|
+
return InteractionRouteMediator;
|
|
598
628
|
}());
|
|
599
|
-
PlaceRouter.
|
|
629
|
+
PlaceRouter.InteractionRouteMediator = InteractionRouteMediator;
|
|
600
630
|
if (false) {
|
|
601
|
-
/**
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
UrlHelper.prototype.urlTree;
|
|
631
|
+
/** @type {?} */
|
|
632
|
+
InteractionRouteMediator.prototype.navigationSessionModelActive;
|
|
633
|
+
/** @type {?} */
|
|
634
|
+
InteractionRouteMediator.prototype.router;
|
|
606
635
|
}
|
|
607
636
|
})(PlaceRouter || (PlaceRouter = {}));
|
|
608
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGVBQWUsRUFDZixNQUFNLEVBRU4sVUFBVSxFQUNWLGFBQWEsRUFFZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBRU4sR0FBRyxFQUNILGdCQUFnQixFQUdoQixNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixLQUFLLEVBRU4sTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7O0lBRzFCLFlBQVksR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO0FBRW5FO0lBR2lDLHVDQUFnQjtJQWEvQyxxQkFBNkIsTUFBYyxFQUNkLGFBQTRCLEVBQ3JDLGtCQUFzQyxFQUNyQyxlQUF5QixFQUN6QixZQUEwQjtRQUovQyxZQUtFLGlCQUFPLFNBaUNSO1FB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Q0FBQztnQkFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDN0I7WUFDSCxDQUFDLEVBQUMsQ0FBQztZQUNILE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7Ozs7O1FBRUQsa0NBQWM7Ozs7UUFBZCxVQUFlLFFBQXlCO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSTs7OztZQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxFQUF4QixDQUF3QixFQUFDLENBQUM7UUFDeEUsQ0FBQztRQWZEO1lBREMsS0FBSyxFQUFFOztxREFDeUIsS0FBSzs7a0VBV3JDO1FBTUgsZ0JBQUM7S0FBQSxBQXpERCxJQXlEQztJQXpEWSxxQkFBUyxZQXlEckIsQ0FBQTs7Ozs7O1FBdkRhLDRCQUF3Qjs7QUF3RHhDLENBQUMsRUE3RGdCLFdBQVcsS0FBWCxXQUFXLFFBNkQzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25FeHRyYXMsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBVcmxTZWdtZW50LFxuICBVcmxTZXJpYWxpemVyLFxuICBVcmxUcmVlXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW4sXG4gIERzbCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgSGFzT25lSW5kZXhDaGFpbixcbiAgTGlzdE1vZGVsLFxuICBMb2dnZXIsXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIE11dGFibGVWYWx1ZU1vZGVsLFxuICBUcmFjZSxcbiAgVmFsdWVNb2RlbFxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2Vzc2lvbiB9IGZyb20gJy4vbmF2aWdhdGlvbi1zZXNzaW9uJztcbmltcG9ydCB7IFBsYWNlQ29tcG9uZW50IH0gZnJvbSAnLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhY2VEZWZpbml0aW9uIH0gZnJvbSAnLi9wbGFjZS1kZWZpbml0aW9uJztcbmltcG9ydCB7IFBsYWNlSGlzdG9yeSB9IGZyb20gJy4vcGxhY2UtaGlzdG9yeSc7XG5pbXBvcnQgeyBOb29wR2F0ZXdheVBsYWNlIH0gZnJvbSAnLi9wbGFjZXMvbm9vcC1nYXRld2F5LXBsYWNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4vdmlzaXQnO1xuXG5cbmNvbnN0IG5vb3BQbGFjZURlZiA9IFBsYWNlQ29tcG9uZW50LmdldERlZmluaXRpb24oTm9vcEdhdGV3YXlQbGFjZSk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYWNlUm91dGVyIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHJpdmF0ZSBmaXJzdFJvdXRlID0gdHJ1ZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPE5hdmlnYXRpb25TZXNzaW9uPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVWaXNpdHMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxWaXNpdD4oKTtcblxuICByZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZTogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcbiAgcmVhZG9ubHkgYWN0aXZlVmlzaXRJbmRleDogSGFzT25lSW5kZXhDaGFpbjwncGxhY2VEZWZpbml0aW9uJywgVmlzaXQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IG5hdmlnYXRpb25TZXNzaW9uRmFjdG9yeTogTmF2aWdhdGlvblNlc3Npb24uRmFjdG9yeTtcbiAgcHJpdmF0ZSBpbml0aWFsUmVkaXJlY3RTdGFydGVkID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbFJlZGlyZWN0RmluaXNoZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVybFNlcmlhbGl6ZXI6IFVybFNlcmlhbGl6ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGFuZ3VsYXJMb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgICAgICAgIHJlYWRvbmx5IHBsYWNlSGlzdG9yeTogUGxhY2VIaXN0b3J5KSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7IGNoYWluLCB2YWx1ZU9mLCBiZWZvcmUsIHdoZW4sIGFmdGVyLCBvYnNlcnZlLCBzd2l0Y2hPbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuYWN0aXZlVmlzaXRJbmRleCA9IGNoYWluKHRoaXMuX2FjdGl2ZVZpc2l0cykuaW5kZXhCeSgncGxhY2VEZWZpbml0aW9uJyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbkZhY3RvcnkgPSBuZXcgTmF2aWdhdGlvblNlc3Npb24uRmFjdG9yeShpbnRlcmFjdGlvbkNvbnRleHQpO1xuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSh1cmwgPT4ge1xuICAgICAgY29uc29sZS5sb2coYGxvY2F0aW9uLm9uVXJsQ2hhbmdlIC0+ICR7dXJsfWApO1xuICAgIH0pO1xuXG4gICAgLy8gVE9ETzogbWFrZSBzZXR1cCB0aGUgY2FsbGJhY2tzIGluIGR1cmluZyBtb2R1bGUgaW5pdGlhdGlvbiB0byBtYWtlIHRoaXMgdGVzdGFibGUuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAvLyBSb3V0aW5nIGV2ZW50IHNlcXVlbmNlXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uQ2FuY2VsIC0tPiByZWRpcmVjdCwgZ28gYXJvdW5kIGFnYWluIGluIHRoZSBzYW1lIHNlc3Npb25cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FbmQgLS0+IG5hdmlnYXRpb24gY29tcGxldGUsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVycm9yIC0tPiBuYXZpZ2F0aW9uIGNhbmNlbGVkLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgdGhpcy5vbkFuZ3VsYXJSb3V0ZXJTdGFydGVkKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdGhpcy5vbkFuZ3VsYXJSb3V0ZXJGaW5pc2hlZChmYWxzZSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkFuZ3VsYXJSb3V0ZXJGaW5pc2hlZCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubmF2aWdhdGlvblNlc3Npb25BY3RpdmUgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uTW9kZWwpLmlzTm90TmlsKCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZS5zdWJzY3JpYmUoYWN0aXZlID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCduYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZScsIGFjdGl2ZSk7XG4gICAgfSk7XG4gICAgLy8gY29uc3QgdHhvID0gbmV3IFRyYW5zYWN0aW9uT2JzZXJ2ZXIoKS5vbkV2ZW50KGUgPT4gY29uc29sZS5sb2coZS50b1N0cmluZygpKSk7XG4gICAgLy8gdHhvLm9ic2VydmUoJ3RoaXMubmF2aWdhdGlvblNlc3Npb25Nb2RlbCcsIHRoaXMubmF2aWdhdGlvblNlc3Npb25Nb2RlbCk7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblNlc3Npb24oKTogTmF2aWdhdGlvblNlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnZhbHVlO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uTW9kZWwoKTogVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU2Vzc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnJlYWRvbmx5O1xuICB9XG5cbiAgZ2V0IGFjdGl2ZVZpc2l0cygpOiBMaXN0TW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXRzLnJlYWRvbmx5O1xuICB9XG5cbiAgLyoqXG4gICAqICBwbGFjZVJvdXRlci5uYXZpZ2F0ZShwbGFjZURlc3RpbmF0aW9ucy5zb21lUGxhY2UuY3JlYXRlVmlzaXQocm91dGVJZCwgLi4udmlzaXRQYXJhbXMpKTtcbiAgICogQHBhcmFtIHZpc2l0XG4gICAqL1xuICBAVHJhY2UoKVxuICBhc3luYyBuYXZpZ2F0ZSh2aXNpdDogVmlzaXQsIG9wdGlvbnM/OiB7IHJlbGF0aXZlVG86IEFjdGl2YXRlZFJvdXRlIH0pIHtcbiAgICB0aGlzLmRvTmF2aWdhdGlvbih2aXNpdCwgYXN5bmMgcm91dGVyID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgICAgICB2aXNpdC5wbGFjZURlZmluaXRpb24ucGF0aCxcbiAgICAgICAgLi4udGhpcy5jcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQpXG4gICAgICBdO1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVsYXRpdmVUbzogb3B0aW9ucyA/IG9wdGlvbnMucmVsYXRpdmVUbyA6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlUmVkaXJlY3RGb3IodmlzaXQ6VmlzaXQsIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzKSB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5jcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQpLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIHB1c2hWaXNpdENoYW5nZXNUb1JvdXRlKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJldmlvdXM6IFZpc2l0LCBuZXh0OiBWaXNpdCkge1xuXG4gICAgLy8gd2UgaGF2ZSB0byBwdXNoIHRvIGhpc3Rvcnkgc28gb3VyIHJlbWVtYmVyIHNhbml0aXNlcnMgZG9uJ3QgcGljayB1cCB0aGUgcHJldmlvdXMgdmFsdWVcbiAgICAvLyB3aGVuIGl0J3MgYmVlbiBjbGVhcmVkIGJ5IHRoZSB1c2VyLlxuICAgIHRoaXMucGxhY2VIaXN0b3J5LmFkZChuZXh0KTtcblxuICAgIC8vIEZJWE1FOiBubyByb3V0ZSBpZCAtPiByb3V0ZSBpZCBkdXBsaWNhdGVzIHJvdXRlIHBhcmFtZXRlcnNcbiAgICBpZiAobmV4dC5oYXNSb3V0aW5nQ2hhbmdlZEZyb20ocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24obmV4dCwgcm91dGVyID0+IHtcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSB0aGlzLnBhcnNlVXJsKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KS5jcmVhdGVSZWRpcmVjdENvbW1hbmRzRm9yKG5leHQpO1xuICAgICAgICAvLyAvLyB3ZSBoYXZlIHRvIHRvIHVzZSB0aGUgZGVmaW5pdGlvbiBmb3Igcm91dGUgaWQgYXMgb3VyIHJlZGlyZWN0aW9uIGFsd2F5cyBpbmNsdWRlc1xuICAgICAgICAvLyAvLyB0aGUgaWQgaW4gdGhlIHVybCBzZWdlbWVudHMgKGJ1dCBsZWF2ZXMgaXQgYmxhbmsgd2hlbiB0aGVyZSdzIG5vIGlkKS4gSS5lLiBpbiB0aGVcbiAgICAgICAgLy8gLy8gbm8gaWQgY2FzZSB3ZSdyZSBkb2luZyB0aGUgZm9sbG93aW5nIHJlZGlyZWN0IFs8cGxhY2VQYXRoPiwgXCJcIl0gLT4gW1wiLi5cIiwgPGlkPl1cbiAgICAgICAgLy8gY29uc3QgcmVsYXRpdmVQYXRoID0gISFwcmV2aW91cy5wbGFjZURlZmluaXRpb24uaGFzUm91dGVJZCgpID8gJy4uJyA6ICcuJztcbiAgICAgICAgLy8gY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAgIC8vICAgcmVsYXRpdmVQYXRoLFxuICAgICAgICAvLyAgIC4uLnRoaXMuY3JlYXRlUm91dGVQYXJhbWV0ZXJzKG5leHQpLFxuICAgICAgICAvLyAgIC4uLnRoaXMuZXh0cmFjdENoaWxkUGF0aChhY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdClcbiAgICAgICAgLy8gXTtcbiAgICAgICAgY29uc29sZS5sb2coJyMjIyBQdXNoIENoYW5nZXMgdG8gcm91dGUgUmVkaXJlY3QnLCB7IGNvbW1hbmRzIH0pO1xuICAgICAgICByZXR1cm4gcm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvTmF2aWdhdGlvbih2aXNpdDogVmlzaXQsIGN1c3RvbU5hdmlnYXRpb246IChyb3V0ZXI6IFJvdXRlcikgPT4gYW55KSB7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZSA9IHRoaXMubmF2aWdhdGlvblNlc3Npb25GYWN0b3J5LmNyZWF0ZUludGVybmFsKHZpc2l0KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY3VzdG9tTmF2aWdhdGlvbih0aGlzLnJvdXRlcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJvdXRlciBoYXMgZmluaXNoZWQgKHNpbmNlIHRoZXJlIHdhcyBubyByb3V0ZXIgY2hhbmdlIHJlcXVpcmVkKSBzbyB3ZVxuICAgICAgLy8gbmVlZCB0byBlbmQgdGhlIG5hdmlnYXRpb24gc2Vzc2lvbi5cbiAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXNzaW9uICYmICF0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpKSB7XG4gICAgICAgIHRoaXMub25Bbmd1bGFyUm91dGVyRmluaXNoZWQoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUm91dGVQYXJhbWV0ZXJzKHZpc2l0OiBWaXNpdCkge1xuICAgIGNvbnN0IGRlZiA9IHZpc2l0LnBsYWNlRGVmaW5pdGlvbjtcbiAgICByZXR1cm4gdmlzaXQuaGFzUm91dGVJZCgpID9cbiAgICAgIFtkZWYuZ2V0Rm9ybWF0dGVkUm91dGVJZCh2aXNpdCksIGRlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXSA6XG4gICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdCldO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgcHJpdmF0ZSBvbkFuZ3VsYXJSb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBpZiAoIXRoaXMubmF2aWdhdGlvblNlc3Npb24pIHsgLy8gV2UgYmVlbiBhY3RpdmF0ZWQgYnkgYW4gZXh0ZXJuYWwgcm91dGUgcmF0aGVyIHRoYW4gcGxhY2VSb3V0ZXIuZ28odmlzaXQpXG4gICAgICBjb25zb2xlLmxvZygnbmF2aWdhdGlvbiBzdGFydGVkJywgeyBmaXJzdFRpbWU6IHRoaXMuZmlyc3RSb3V0ZSB9KTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLm5hdmlnYXRpb25TZXNzaW9uRmFjdG9yeS5jcmVhdGVFeHRlcm5hbCh0aGlzLmZpcnN0Um91dGUpO1xuICAgICAgaWYgKGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSB7XG4gICAgICAgIHNlc3Npb24uc2V0UG9wc3RhdGVSZXR1cm5VcmwodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWUgPSBzZXNzaW9uO1xuICAgIH1cbiAgICB0aGlzLmZpcnN0Um91dGUgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIHByaXZhdGUgb25Bbmd1bGFyUm91dGVyRmluaXNoZWQoY2FuY2VsbGVkOiBib29sZWFuKSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWU7XG4gICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgIC8vIFVwZGF0ZSB2aXNpdHMgYmVmb3JlIHdlIGVuZCB0aGUgbmF2aWdhdGlvbiBzZXNzaW9uLiAgVGhpcyBhbGxvd3MgdGhlIHBsYWNlT3V0ZXRzIHRvXG4gICAgICAvLyBpZ25vcmUgdmlzaXQgY2hhbmdlcyB0aGF0IG9jY3VyIHdoaWxlIHRoZSBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzXG4gICAgICBjb25zdCB2aXNpdHMgPSBzZXNzaW9uLmdldFZpc2l0cygpO1xuICAgICAgdmlzaXRzLmZvckVhY2godiA9PiB0aGlzLnBsYWNlSGlzdG9yeS5hZGQodikpO1xuICAgICAgdGhpcy5fYWN0aXZlVmlzaXRzLnZhbHVlID0gdmlzaXRzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBbmd1bGFyIGRvZXNuJ3QgcHJlc2VydmUgdGhlIHVybCB3aGVuIGEgZ3VhcmQgY2FuY2VscyB0aGUgYmFjayBidXR0b24uXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM1ODYjaXNzdWVjb21tZW50LTQzMjc5NTcyMFxuICAgICAgaWYgKHNlc3Npb24uaXNQb3BTdGF0ZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnY2FuY2VsbGVkIGR1cmluZyBwb3BzdGF0ZScpO1xuICAgICAgICB0aGlzLmFuZ3VsYXJMb2NhdGlvbi5nbyhzZXNzaW9uLnBvcFN0YXRlUmV0dXJuVXJsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBleHRyYWN0Q2hpbGRQYXRoKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogYW55W10ge1xuICAgIHJldHVybiBfLmZsYXR0ZW4oYWN0aXZhdGVkUm91dGUuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLnVybCkpO1xuICB9XG5cbiAgcGFyc2VVcmwoc25hcHNob3Q6IFJvdXRlclN0YXRlU25hcHNob3QpOiBQbGFjZVJvdXRlci5VcmxIZWxwZXIge1xuICAgIHJldHVybiBuZXcgUGxhY2VSb3V0ZXIuVXJsSGVscGVyKHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShzbmFwc2hvdC51cmwpKTtcbiAgfVxuXG4gIC8vIFRPRE86IHRoaXMgYWxsIG9ubHkgc29ydCBvZiB3b3Jrcy4gIE9wZW5pbmcgZGlhbG9ncyBhbmQgY2xpY2tpbmcgYmFjayBtdWx0aXBsZSB0aW1lcyBicmVha3MgdGhpbmdzLlxuICAvLyBUT0RPOiBuZXh0IHN0YWdlIGlzIHRvIGludmVzdGlnYXRlIHRyYWNraW5nIGRpYWxvZyBzdGF0ZSBpbiBhIGRpZmZlcmVudCBwbGFjZW91dGxldCBhbmQga2VlcGluZyB0aG9zZVxuICAvLyBUT0RPOiB1cmxzIG91dCBvZiB0aGUgaGlzdG9yeS5cbiAgcGVyZm9ybUluaXRpYWxOYXZpZ2F0aW9uSW50ZXJjZXB0KGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLmlzSW5pdGlhbE5hdmlnYXRpb24oKSk7XG4gICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBSZWRpcmVjdGluZyB0bzogJHtub29wUGxhY2VEZWYucGF0aH1gLCB7IHJldHVyblVybDogc3RhdGUudXJsIH0pO1xuICAgIGlmICghdGhpcy5pbml0aWFsUmVkaXJlY3RGaW5pc2hlZCkge1xuICAgICAgdGhpcy5pbml0aWFsUmVkaXJlY3RGaW5pc2hlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbbm9vcFBsYWNlRGVmLnBhdGgsIHtcbiAgICAgICAgcmV0dXJuVXJsOiBzdGF0ZS51cmxcbiAgICAgIH1dLCB7XG4gICAgICAgIHJlcGxhY2VVcmw6IHRydWUsIC8vIG1ha2Ugc3VyZSB3ZSB1cGRhdGUgb3VyIGhpc3RvcnlcbiAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNJbml0aWFsTmF2aWdhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbi5maXJzdE5hdmlnYXRpb24gJiYgIXRoaXMuaW5pdGlhbFJlZGlyZWN0RmluaXNoZWQ7XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBQbGFjZVJvdXRlciB7XG5cblxuICBleHBvcnQgY2xhc3MgVXJsSGVscGVyIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdXJsVHJlZTogVXJsVHJlZSkge1xuICAgICAgY29uc29sZS5sb2coeyBzZWdtZW50czogdGhpcy51cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50cyB9KTtcbiAgICB9XG5cbiAgICBjbG9uZVVybFNlZ21lbnRMaXN0KCk6IFVybFNlZ21lbnRbXSB7XG4gICAgICByZXR1cm4gWy4uLnRoaXMudXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHNdO1xuICAgIH1cblxuICAgIHVwZGF0ZVZpc2l0U2VnbWVudHModmlzaXQ6IFZpc2l0KTogVXJsU2VnbWVudFtdIHtcbiAgICAgIC8vIFVnbHksIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuICAgICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmNsb25lVXJsU2VnbWVudExpc3QoKTtcbiAgICAgIGNvbnN0IHZpc2l0U2VnbWVudHMgPSB0aGlzLmNvbnZlcnRUb1VybFNlZ21lbnRzKHZpc2l0KTtcbiAgICAgIGNvbnN0IHJlcGxhY2VBdCA9IHNlZ21lbnRzLmZpbmRJbmRleChzZWdtZW50ID0+IHNlZ21lbnQucGF0aCA9PT0gdmlzaXRTZWdtZW50c1swXS5wYXRoKTtcbiAgICAgIC8vIGRvIG5vdCB1c2UgdGhlIHJldHVybiB2YWx1ZSwgaXQncyB0aGUgaXRlbXMgdGhhdCB3ZXJlIHJlbW92ZWQhXG4gICAgICBzZWdtZW50cy5zcGxpY2UocmVwbGFjZUF0LCB2aXNpdFNlZ21lbnRzLmxlbmd0aCwgLi4udmlzaXRTZWdtZW50cyk7XG4gICAgICByZXR1cm4gc2VnbWVudHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIHZpc2l0IGludG8gc2VnbWVudHMuICBQbGVhc2Ugbm90IHRoYXQgdGhlc2Ugc2VnbWVudHMgYXJlIG5vdCBlXG4gICAgICogQHBhcmFtIHZpc2l0XG4gICAgICovXG4gICAgY29udmVydFRvVXJsU2VnbWVudHModmlzaXQ6IFZpc2l0KTogVXJsU2VnbWVudFtdIHtcbiAgICAgIHJldHVybiB2aXNpdC5wbGFjZURlZmluaXRpb24uaGFzUm91dGVJZCgpID9cbiAgICAgICAgW1xuICAgICAgICAgIC8vIE5PVEU6XG4gICAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gYXR0YWNoIHRoZSBwYXJhbXMgdG8gdGhlIHJvb3QgcGF0aCBhbmQgbm90IHRoZSBpZC4gIElmIHdlIGF0dGFjaCB0aGVtXG4gICAgICAgICAgLy8gdG8gYW4gZW1wdHkgaWQgdGhlbiB0aGUgYW5ndWxhciByb3V0ZXIgd29uJ3QgbWF0Y2ggdGhlIHBhdHRlcm4uXG4gICAgICAgICAgbmV3IFVybFNlZ21lbnQodmlzaXQucGxhY2VEZWZpbml0aW9uLnBhdGgsIHZpc2l0LnBsYWNlRGVmaW5pdGlvbi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpKSxcbiAgICAgICAgICBuZXcgVXJsU2VnbWVudCh2aXNpdC5wbGFjZURlZmluaXRpb24uZ2V0Rm9ybWF0dGVkUm91dGVJZCh2aXNpdCksIHt9KV1cbiAgICAgICAgOlxuICAgICAgICBbXG4gICAgICAgICAgbmV3IFVybFNlZ21lbnQodmlzaXQucGxhY2VEZWZpbml0aW9uLnBhdGgsIHZpc2l0LnBsYWNlRGVmaW5pdGlvbi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpKVxuICAgICAgICBdO1xuICAgIH1cblxuXG4gICAgQFRyYWNlKClcbiAgICBjcmVhdGVSZWRpcmVjdENvbW1hbmRzRm9yKHZpc2l0OiBWaXNpdCk6IGFueVtdIHtcblxuICAgICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnVwZGF0ZVZpc2l0U2VnbWVudHModmlzaXQpO1xuICAgICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICAgIHNlZ21lbnRzLmZvckVhY2gocyA9PiB7XG4gICAgICAgIGNvbW1hbmRzLnB1c2gocy5wYXRoKTtcbiAgICAgICAgaWYgKHMucGFyYW1ldGVyTWFwLmtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2gocy5wYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfVxuXG4gICAgaW5jbHVkZXNQYXRoT2YocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVVcmxTZWdtZW50TGlzdCgpLmZpbmQocyA9PiBzLnBhdGggPT09IHBsYWNlRGVmLnBhdGgpO1xuICAgIH1cblxuICB9XG59XG4iXX0=
|
|
637
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsTUFBTSxFQUVOLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxHQUFHLEVBQ0gsZ0JBQWdCLEVBRWhCLElBQUksRUFFSixNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFJN0M7SUFHaUMsdUNBQWdCO0lBVy9DLHFCQUE2QixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsZUFBeUIsRUFDekIsWUFBMEIsRUFDMUIsdUJBQWdEO1FBSjdFLFlBS0UsaUJBQU8sU0E0Q1I7UUFqRDRCLFlBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZSxHQUFmLGVBQWUsQ0FBVTtRQUN6QixrQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQiw2QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBYnJF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Z0JBQ0UsT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDO1lBQ2pELENBQUM7OztXQUFBO1FBRUQsdUNBQXVDO1FBQ3ZDLFdBQVc7Ozs7OztRQUNYLG9EQUFpQjs7Ozs7O1FBQWpCOztZQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRTt3QkFDekIsT0FBTzs0QkFDTCxHQUFDLFdBQVcsQ0FBQyx5QkFBeUIsSUFBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGdEQUFnRDs7K0JBQ3BHO3FCQUNGLENBQUMsRUFBRTtvQkFDRixVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDO1FBRUQsV0FBVzs7Ozs7UUFDWCxxREFBa0I7Ozs7O1FBQWxCOztZQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRTt3QkFDekIsT0FBTzs0QkFDTCxHQUFDLFdBQVcsQ0FBQyx5QkFBeUIsSUFBRyxJQUFJOytCQUM5QztxQkFDRixDQUFDLEVBQUU7b0JBQ0YsVUFBVSxFQUFFLElBQUksQ0FBQywyQ0FBMkM7aUJBQzdELENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztRQUVILCtCQUFDO0lBQUQsQ0FBQyxBQW5DRCxJQW1DQztJQW5DWSxvQ0FBd0IsMkJBbUNwQyxDQUFBOzs7UUFsQ2EsZ0VBQTBEOztRQUFFLDBDQUF1Qjs7QUFvQ25HLENBQUMsRUF6Q2dCLFdBQVcsS0FBWCxXQUFXLFFBeUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBVcmxTZXJpYWxpemVyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIEhhc09uZUluZGV4Q2hhaW4sXG4gIGxhbmcsXG4gIExpc3RNb2RlbCxcbiAgTG9nZ2VyLFxuICBNdXRhYmxlTGlzdE1vZGVsLFxuICBNdXRhYmxlVmFsdWVNb2RlbCwgVHJhY2UsXG4gIFZhbHVlTW9kZWxcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uQ29udGV4dCB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgTW9kYWxJbnRlcmFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9tb2RhbC1pbnRlcmFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXNzaW9uIH0gZnJvbSAnLi9ndWFyZHMvbmF2aWdhdGlvbi1zZXNzaW9uJztcbmltcG9ydCB7IFBsYWNlSGlzdG9yeSB9IGZyb20gJy4vcGxhY2UtaGlzdG9yeSc7XG5pbXBvcnQgeyBVcmxTbmFwc2hvdCB9IGZyb20gJy4vdXJsLXNuYXBzaG90JztcbmltcG9ydCB7IFZpc2l0IH0gZnJvbSAnLi92aXNpdCc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZXIgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIGZpcnN0Um91dGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRpb25TZXNzaW9uTW9kZWwgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8TmF2aWdhdGlvblNlc3Npb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVZpc2l0cyA9IG5ldyBNdXRhYmxlTGlzdE1vZGVsPFZpc2l0PigpO1xuXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25TZXNzaW9uQWN0aXZlOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuICByZWFkb25seSBhY3RpdmVWaXNpdEluZGV4OiBIYXNPbmVJbmRleENoYWluPCdwbGFjZURlZmluaXRpb24nLCBWaXNpdD47XG4gIHByaXZhdGUgX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dDogTmF2aWdhdGlvblNlc3Npb24uQ29udGV4dDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVybFNlcmlhbGl6ZXI6IFVybFNlcmlhbGl6ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhckxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwbGFjZUhpc3Rvcnk6IFBsYWNlSGlzdG9yeSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtb2RhbEludGVyYWN0aW9uU2VydmljZTogTW9kYWxJbnRlcmFjdGlvblNlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHsgY2hhaW4sIHZhbHVlT2YsIGJlZm9yZSwgd2hlbiwgYWZ0ZXIsIG9ic2VydmUsIHN3aXRjaE9uIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5hY3RpdmVWaXNpdEluZGV4ID0gY2hhaW4odGhpcy5fYWN0aXZlVmlzaXRzKS5pbmRleEJ5KCdwbGFjZURlZmluaXRpb24nKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uQWN0aXZlID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsKS5wbHVjaygnYWN0aXZlJyk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Db250ZXh0ID0gbmV3IE5hdmlnYXRpb25TZXNzaW9uLkNvbnRleHQodGhpcy5yb3V0ZXIsIHRoaXMubW9kYWxJbnRlcmFjdGlvblNlcnZpY2UsIHRoaXMuYW5ndWxhckxvY2F0aW9uLCBzZXNzaW9uID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc05hdmlnYXRpb25TdWNjZXNzKHNlc3Npb24pO1xuICAgIH0pO1xuICAgIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWUgPSBuZXcgTmF2aWdhdGlvblNlc3Npb24uSWRsZSh0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQpO1xuXG4gICAgLy8gVE9ETzogbWFrZSBzZXR1cCB0aGUgY2FsbGJhY2tzIGluIGR1cmluZyBtb2R1bGUgaW5pdGlhdGlvbiB0byBtYWtlIHRoaXMgdGVzdGFibGUuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAvLyBSb3V0aW5nIGV2ZW50IHNlcXVlbmNlXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uQ2FuY2VsIC0tPiByZWRpcmVjdCwgZ28gYXJvdW5kIGFnYWluIGluIHRoZSBzYW1lIHNlc3Npb25cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FbmQgLS0+IG5hdmlnYXRpb24gY29tcGxldGUsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVycm9yIC0tPiBuYXZpZ2F0aW9uIGFib3J0ZWQsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25TdGFydChldmVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25FbmQoZXZlbnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25FcnJvcihldmVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25DYW5jZWwoZXZlbnQpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFB1c2ggZGlhbG9nIHN0YXRlIHRvIHRoZSB1cmwgc28gd2UgY2FuIGNhcHR1cmUgdGhlIGJhY2sgYnV0dG9uLlxuICAgIHRoaXMubW9kYWxJbnRlcmFjdGlvblNlcnZpY2UuYWRkQWN0aXZpdHlMaXN0ZW5lcihuZXcgUGxhY2VSb3V0ZXIuSW50ZXJhY3Rpb25Sb3V0ZU1lZGlhdG9yKHRoaXMubmF2aWdhdGlvblNlc3Npb25BY3RpdmUsIHRoaXMucm91dGVyKSk7XG5cbiAgICAvLyBUaGUgYW5ndWxhciByb3V0ZXIgZG9lc24ndCBhbHdheXMgZmlyZSByb3V0ZXIgZXZlbnRzIHdoZW4gdGhlIGJhY2sgYnV0dG9uIGlzIHB1c2hlZCB3aGlsZSBhIG5hdmlnYXRpb25cbiAgICAvLyBzZXNzaW9uIGlzIGluIHByb2dyZXNzLiAgU29tZXRpbWVzIHdlIG9ubHkga25vdyBhYm91dCBpdCBmcm9tIHRoZSB1cmwgY2hhbmdlLlxuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSh1cmwgPT4ge1xuICAgICAgY29uc29sZS5sb2coYCMjIyMgdXJsIGNoYW5nZWQgLT4gJHt1cmx9YCk7XG4gICAgICBjb25zdCBpbnRlcmFjdGlvbkNvbnRleHQgPSB0aGlzLm5hdmlnYXRpb25TZXNzaW9uQWN0aXZlLnZhbHVlICYmIHRoaXMubmF2aWdhdGlvblNlc3Npb24uaW50ZXJhY3Rpb25Db250ZXh0O1xuICAgICAgaWYgKGludGVyYWN0aW9uQ29udGV4dCAmJiBpbnRlcmFjdGlvbkNvbnRleHQuaXNBY3RpdmUoKSkge1xuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYGJhY2sgYnV0dG9uIHByZXNzZWQgZHVyaW5nIG5hdmlnYXRpb24gc2Vzc2lvbiBpbnRlcmFjdGlvbmApO1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihuYXZpZ2F0aW9uU2Vzc2lvbiA9PiBuYXZpZ2F0aW9uU2Vzc2lvbi5vbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKHVybCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzTmF2aWdhdGlvblN1Y2Nlc3Moc2Vzc2lvbjogTmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICBjb25zdCB2aXNpdHMgPSBzZXNzaW9uLmdldFZpc2l0cygpO1xuICAgIHZpc2l0cy5mb3JFYWNoKHYgPT4gdGhpcy5wbGFjZUhpc3RvcnkuYWRkKHYpKTtcbiAgICAvLyBVcGRhdGUgdmlzaXRzIGJlZm9yZSB3ZSBlbmQgdGhlIG5hdmlnYXRpb24gc2Vzc2lvbi4gIFRoaXMgYWxsb3dzIHRoZSBwbGFjZU91dGV0cyB0b1xuICAgIC8vIGlnbm9yZSB2aXNpdCBjaGFuZ2VzIHRoYXQgb2NjdXIgd2hpbGUgdGhlIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3NcbiAgICB0aGlzLl9hY3RpdmVWaXNpdHMudmFsdWUgPSB2aXNpdHM7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblNlc3Npb24oKTogTmF2aWdhdGlvblNlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnZhbHVlO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uTW9kZWwoKTogVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU2Vzc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnJlYWRvbmx5O1xuICB9XG5cbiAgZ2V0IGFjdGl2ZVZpc2l0cygpOiBMaXN0TW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXRzLnJlYWRvbmx5O1xuICB9XG5cbiAgLyoqXG4gICAqICBwbGFjZVJvdXRlci5uYXZpZ2F0ZShwbGFjZURlc3RpbmF0aW9ucy5zb21lUGxhY2UuY3JlYXRlVmlzaXQocm91dGVJZCwgLi4udmlzaXRQYXJhbXMpKTtcbiAgICogQHBhcmFtIHZpc2l0XG4gICAqL1xuICBhc3luYyBuYXZpZ2F0ZSh2aXNpdDogVmlzaXQsIG9wdGlvbnM/OiB7IHJlbGF0aXZlVG86IEFjdGl2YXRlZFJvdXRlIH0pIHtcbiAgICB0aGlzLmRvTmF2aWdhdGlvbih2aXNpdCwgYXN5bmMgcm91dGVyID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgICAgICB2aXNpdC5wbGFjZURlZmluaXRpb24ucGF0aCxcbiAgICAgICAgLi4udGhpcy5jcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQpXG4gICAgICBdO1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVsYXRpdmVUbzogb3B0aW9ucyA/IG9wdGlvbnMucmVsYXRpdmVUbyA6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgYXN5bmMgcHVzaFZpc2l0Q2hhbmdlc1RvUm91dGUoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcmV2aW91czogVmlzaXQsIG5leHQ6IFZpc2l0KSB7XG4gICAgLy8gd2UgaGF2ZSB0byBwdXNoIHRvIGhpc3Rvcnkgc28gb3VyIHJlbWVtYmVyIHNhbml0aXNlcnMgZG9uJ3QgcGljayB1cCB0aGUgcHJldmlvdXMgdmFsdWVcbiAgICAvLyB3aGVuIGl0J3MgYmVlbiBjbGVhcmVkIGJ5IHRoZSB1c2VyLlxuICAgIHRoaXMucGxhY2VIaXN0b3J5LmFkZChuZXh0KTtcblxuICAgIC8vIEZJWE1FOiBubyByb3V0ZSBpZCAtPiByb3V0ZSBpZCBkdXBsaWNhdGVzIHJvdXRlIHBhcmFtZXRlcnNcbiAgICBpZiAobmV4dC5oYXNSb3V0aW5nQ2hhbmdlZEZyb20ocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24obmV4dCwgcm91dGVyID0+IHtcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSB0aGlzLnBhcnNlVXJsKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KS5jcmVhdGVSZWRpcmVjdENvbW1hbmRzRm9yKG5leHQpO1xuICAgICAgICBjb25zb2xlLmxvZygnIyMjIFB1c2ggQ2hhbmdlcyB0byByb3V0ZSBSZWRpcmVjdCcsIHsgY29tbWFuZHMgfSk7XG4gICAgICAgIHJldHVybiByb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG9OYXZpZ2F0aW9uKHZpc2l0OiBWaXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IGFueSkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXNzaW9uQWN0aXZlLnZhbHVlKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZSgnTmF2aWdhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oY3VycmVudCA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IE5hdmlnYXRpb25TZXNzaW9uLkFjdGl2ZSggdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Db250ZXh0LCBmYWxzZSwgdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKTtcbiAgICAgIHNlc3Npb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuTmF2aWdhdGlvbkNvbW1hbmRzKHRoaXMucm91dGVyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUm91dGVyIGhhcyBmaW5pc2hlZCAoc2luY2UgdGhlcmUgd2FzIG5vIHJvdXRlciBjaGFuZ2UgcmVxdWlyZWQpIHNvIHdlXG4gICAgICAvLyBuZWVkIHRvIGVuZCB0aGUgbmF2aWdhdGlvbiBzZXNzaW9uLlxuICAgICAgaWYgKHRoaXMubmF2aWdhdGlvblNlc3Npb24uYWN0aXZlICYmICF0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpKSB7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHNlc3Npb24gPT4gc2Vzc2lvbi5vbkVuZChuZXcgTmF2aWdhdGlvbkVuZCgtMSwgJycsICcnKSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBydW5TdGF0ZVRyYW5zaXRpb24odHJhbnNpdGlvbjogKG5hdmlnYXRpb25TZXNzaW9uOiBOYXZpZ2F0aW9uU2Vzc2lvbikgPT4gTmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWU7XG4gICAgY29uc3QgbmV4dCA9IHRyYW5zaXRpb24odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbik7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZSA9IG5leHQ7XG4gICAgaWYgKG5leHQgIT09IHByZXZpb3VzKSB7XG4gICAgICBwcmV2aW91cy5kaXNwb3NlKCk7XG4gICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYFJvdXRlciBTdGF0ZSBUcmFuc2l0aW9uOiAke3ByZXZpb3VzLnRvU3RyaW5nKCl9IC0+ICR7bmV4dC50b1N0cmluZygpfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUm91dGVQYXJhbWV0ZXJzKHZpc2l0OiBWaXNpdCkge1xuICAgIGNvbnN0IGRlZiA9IHZpc2l0LnBsYWNlRGVmaW5pdGlvbjtcbiAgICByZXR1cm4gdmlzaXQuaGFzUm91dGVJZCgpID9cbiAgICAgIFtkZWYuZ2V0Rm9ybWF0dGVkUm91dGVJZCh2aXNpdCksIGRlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXSA6XG4gICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdCldO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBvbkFuZ3VsYXJSb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgLy8gICBpZiAoIXRoaXMubmF2aWdhdGlvblNlc3Npb24pIHtcbiAgLy8gICAgIC8vIFdlIGJlZW4gYWN0aXZhdGVkIGJ5IGFuIGV4dGVybmFsIHJvdXRlIHJhdGhlciB0aGFuIHBsYWNlUm91dGVyLmdvKHZpc2l0KVxuICAvLyAgICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZSA9IHRoaXMuY3JlYXRlRXh0ZXJuYWxOYXZpZ2F0aW9uU2Vzc2lvbihldmVudCk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuZmlyc3RSb3V0ZSA9IGZhbHNlO1xuICAvLyB9XG4gIC8vXG4gIC8vIHByaXZhdGUgY3JlYXRlRXh0ZXJuYWxOYXZpZ2F0aW9uU2Vzc2lvbihldmVudDogTmF2aWdhdGlvblN0YXJ0KSB7XG4gIC8vICAgcmV0dXJuIG5ldyBOYXZpZ2F0aW9uU2Vzc2lvbi5BY3RpdmUoXG4gIC8vICAgICB0aGlzLm1vZGFsSW50ZXJhY3Rpb25TZXJ2aWNlLFxuICAvLyAgICAgdGhpcy5hbmd1bGFyTG9jYXRpb24sXG4gIC8vICAgICAvLyBldmVudC51cmwsXG4gIC8vICAgICBldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJ1xuICAvLyAgICk7XG4gIC8vIH1cbiAgLy8gcHJpdmF0ZSBvbkFuZ3VsYXJSb3V0ZXJGaW5pc2hlZChjYW5jZWxsZWQ6IGJvb2xlYW4pIHtcbiAgLy8gICBjb25zdCBzZXNzaW9uID0gdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZTtcbiAgLy8gICBpZiAoc2Vzc2lvbi5iYWNrQ2xpY2tlZER1cmluZ0NhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbikge1xuICAvLyAgICAgLy8gd2Ugc3dhbGxvdyB0aGlzIGZpbmlzaGVkIGV2ZW50IGJ1dCBrZWVwIHRoZSBzZXNzaW9uIGFsaXZlIGFzIHdlJ3JlIGdvaW5nIHRvXG4gIC8vICAgICAvLyBnZXQgYW5vdGhlciByb3V0ZSBzdGFydGVkIGV2ZW50LCB3aGljaCB3aWxsIHRyaWdnZXIgYW5vaHRlciBjYW5EZWFjdGl2YXRlIGRpYWxvZ1xuICAvLyAgICAgLy8gaWYgd2Ugc3RhcnQgYSBuZXcgc2Vzc2lvbi5cbiAgLy8gICAgIC8vIHNlc3Npb24ucmVzZXRJbnRlcmFjdGlvblNlc3Npb24oKVxuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAvLyAgICAgICBjb25zdCB2aXNpdHMgPSBzZXNzaW9uLmdldFZpc2l0cygpO1xuICAvLyAgICAgICB2aXNpdHMuZm9yRWFjaCh2ID0+IHRoaXMucGxhY2VIaXN0b3J5LmFkZCh2KSk7XG4gIC8vICAgICAgIC8vIFVwZGF0ZSB2aXNpdHMgYmVmb3JlIHdlIGVuZCB0aGUgbmF2aWdhdGlvbiBzZXNzaW9uLiAgVGhpcyBhbGxvd3MgdGhlIHBsYWNlT3V0ZXRzIHRvXG4gIC8vICAgICAgIC8vIGlnbm9yZSB2aXNpdCBjaGFuZ2VzIHRoYXQgb2NjdXIgd2hpbGUgdGhlIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3NcbiAgLy8gICAgICAgdGhpcy5fYWN0aXZlVmlzaXRzLnZhbHVlID0gdmlzaXRzO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgLy8gVE9ETzogbW92ZSB0aGlzIHRvIHRoZSBuYXZpZ2F0aW9uIHNlc3Npb25cbiAgLy8gICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAvLyAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM1ODYjaXNzdWVjb21tZW50LTQzMjc5NTcyMFxuICAvLyAgICAgICAvLyBzZXNzaW9uLnJlbWVtYmVyUG9wU3RhdGVSZXR1cm5VcmwodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKTtcbiAgLy8gICAgICAgaWYgKHNlc3Npb24uaXNQb3BTdGF0ZSkge1xuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKCdjYW5jZWxsZWQgZHVyaW5nIHBvcHN0YXRlJyk7XG4gIC8vICAgICAgICAgLy8gdGhpcy5hbmd1bGFyTG9jYXRpb24uZ28oc2Vzc2lvbi5wcmV2aW91c1VybCk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICAgIHNlc3Npb24uZGlzcG9zZSgpO1xuICAvLyAgICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZSA9IG51bGw7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgZXh0cmFjdENoaWxkUGF0aChhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IGFueVtdIHtcbiAgICByZXR1cm4gXy5mbGF0dGVuKGFjdGl2YXRlZFJvdXRlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC51cmwpKTtcbiAgfVxuXG4gIHBhcnNlVXJsKHNuYXBzaG90OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogVXJsU25hcHNob3Qge1xuICAgIHJldHVybiBuZXcgVXJsU25hcHNob3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHNuYXBzaG90LnVybCkpO1xuICB9XG5cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBQbGFjZVJvdXRlciB7XG5cbiAgZXhwb3J0IGNvbnN0IElOVEVSQUNUSU9OX1JPVVRFUl9PVVRMRVQgPSAnYXVwLWludGVyYWN0aW9uJztcblxuICBleHBvcnQgY2xhc3MgSW50ZXJhY3Rpb25Sb3V0ZU1lZGlhdG9yIGltcGxlbWVudHMgSW50ZXJhY3Rpb25Db250ZXh0Lkxpc3RlbmVyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsQWN0aXZlOiBWYWx1ZU1vZGVsPGJvb2xlYW4+LCByZWFkb25seSByb3V0ZXI6IFJvdXRlcikge1xuICAgIH1cblxuICAgIGdldCBpc05hdmlnYXRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsQWN0aXZlLnZhbHVlO1xuICAgIH1cblxuICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhIG5hdmlnYXRpb24gd2UgcHVzaFxuICAgIC8vIEBUcmFjZSgpXG4gICAgb25BY3Rpdml0eVN0YXJ0ZWQoKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMuaXNOYXZpZ2F0aW5nKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLicsIHtcbiAgICAgICAgICBvdXRsZXRzOiB7XG4gICAgICAgICAgICBbUGxhY2VSb3V0ZXIuSU5URVJBQ1RJT05fUk9VVEVSX09VVExFVF06IFsnbW9kYWwnXSAvLyBcIm9wZW5cIiBtdXN0IGJlIGEgdmFsaWQgcm91dGUgZm9yIHRoaXMgb3V0bGV0LlxuICAgICAgICAgIH1cbiAgICAgICAgfV0sIHtcbiAgICAgICAgICByZXBsYWNlVXJsOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQFRyYWNlKClcbiAgICBvbkFjdGl2aXR5RmluaXNoZWQoKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMuaXNOYXZpZ2F0aW5nKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLicsIHtcbiAgICAgICAgICBvdXRsZXRzOiB7XG4gICAgICAgICAgICBbUGxhY2VSb3V0ZXIuSU5URVJBQ1RJT05fUk9VVEVSX09VVExFVF06IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1dLCB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSAvLyByZW1vdmUgdGhlIGludGVyYWN0aW9uIGZyb20gdGhlIGhpc3RvcnkuXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbn1cbiJdfQ==
|