@ngrx/store-devtools 11.0.0-rc.0 → 11.1.1
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/ngrx-store-devtools.umd.js +44 -789
- package/bundles/ngrx-store-devtools.umd.js.map +1 -1
- package/bundles/ngrx-store-devtools.umd.min.js +2 -2
- package/bundles/ngrx-store-devtools.umd.min.js.map +1 -1
- package/esm2015/index.js +2 -7
- package/esm2015/ngrx-store-devtools.js +2 -7
- package/esm2015/public_api.js +2 -7
- package/esm2015/src/actions.js +1 -135
- package/esm2015/src/config.js +1 -80
- package/esm2015/src/devtools-dispatcher.js +1 -6
- package/esm2015/src/devtools.js +9 -123
- package/esm2015/src/extension.js +14 -216
- package/esm2015/src/index.js +1 -6
- package/esm2015/src/instrument.js +3 -26
- package/esm2015/src/reducer.js +8 -146
- package/esm2015/src/utils.js +10 -92
- package/fesm2015/ngrx-store-devtools.js +43 -834
- package/fesm2015/ngrx-store-devtools.js.map +1 -1
- package/package.json +3 -3
- package/schematics-core/index.js +4 -1
- package/schematics-core/index.js.map +1 -1
- package/schematics-core/utility/ast-utils.js +127 -1
- package/schematics-core/utility/ast-utils.js.map +1 -1
- package/schematics-core/utility/config.js +1 -1
- package/schematics-core/utility/config.js.map +1 -1
- package/schematics-core/utility/find-component.js +101 -0
- package/schematics-core/utility/find-component.js.map +1 -0
- package/schematics-core/utility/libs-version.js +1 -1
- package/schematics-core/utility/libs-version.js.map +1 -1
- package/schematics-core/utility/project.js +4 -2
- package/schematics-core/utility/project.js.map +1 -1
- package/CHANGELOG.md +0 -3
- package/esm2015/index.ngsummary.json +0 -1
- package/esm2015/ngrx-store-devtools.ngsummary.json +0 -1
- package/esm2015/public_api.ngsummary.json +0 -1
- package/esm2015/src/actions.ngsummary.json +0 -1
- package/esm2015/src/config.ngsummary.json +0 -1
- package/esm2015/src/devtools-dispatcher.ngsummary.json +0 -1
- package/esm2015/src/devtools.ngsummary.json +0 -1
- package/esm2015/src/extension.ngsummary.json +0 -1
- package/esm2015/src/index.ngsummary.json +0 -1
- package/esm2015/src/instrument.ngfactory.js +0 -11
- package/esm2015/src/instrument.ngsummary.json +0 -1
- package/esm2015/src/reducer.ngsummary.json +0 -1
- package/esm2015/src/utils.ngsummary.json +0 -1
- package/src/instrument.ngfactory.d.ts +0 -3
package/esm2015/src/extension.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: src/extension.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
1
|
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
|
7
2
|
import { UPDATE } from '@ngrx/store';
|
|
8
3
|
import { EMPTY, Observable, of } from 'rxjs';
|
|
@@ -11,95 +6,20 @@ import { IMPORT_STATE, PERFORM_ACTION } from './actions';
|
|
|
11
6
|
import { STORE_DEVTOOLS_CONFIG, StoreDevtoolsConfig, } from './config';
|
|
12
7
|
import { DevtoolsDispatcher } from './devtools-dispatcher';
|
|
13
8
|
import { isActionFiltered, sanitizeAction, sanitizeActions, sanitizeState, sanitizeStates, shouldFilterActions, unliftState, } from './utils';
|
|
14
|
-
/** @type {?} */
|
|
15
9
|
export const ExtensionActionTypes = {
|
|
16
10
|
START: 'START',
|
|
17
11
|
DISPATCH: 'DISPATCH',
|
|
18
12
|
STOP: 'STOP',
|
|
19
13
|
ACTION: 'ACTION',
|
|
20
14
|
};
|
|
21
|
-
/** @type {?} */
|
|
22
15
|
export const REDUX_DEVTOOLS_EXTENSION = new InjectionToken('@ngrx/store-devtools Redux Devtools Extension');
|
|
23
|
-
/**
|
|
24
|
-
* @record
|
|
25
|
-
*/
|
|
26
|
-
export function ReduxDevtoolsExtensionConnection() { }
|
|
27
|
-
if (false) {
|
|
28
|
-
/**
|
|
29
|
-
* @param {?} listener
|
|
30
|
-
* @return {?}
|
|
31
|
-
*/
|
|
32
|
-
ReduxDevtoolsExtensionConnection.prototype.subscribe = function (listener) { };
|
|
33
|
-
/**
|
|
34
|
-
* @return {?}
|
|
35
|
-
*/
|
|
36
|
-
ReduxDevtoolsExtensionConnection.prototype.unsubscribe = function () { };
|
|
37
|
-
/**
|
|
38
|
-
* @param {?} action
|
|
39
|
-
* @param {?} state
|
|
40
|
-
* @return {?}
|
|
41
|
-
*/
|
|
42
|
-
ReduxDevtoolsExtensionConnection.prototype.send = function (action, state) { };
|
|
43
|
-
/**
|
|
44
|
-
* @param {?=} state
|
|
45
|
-
* @return {?}
|
|
46
|
-
*/
|
|
47
|
-
ReduxDevtoolsExtensionConnection.prototype.init = function (state) { };
|
|
48
|
-
/**
|
|
49
|
-
* @param {?} anyErr
|
|
50
|
-
* @return {?}
|
|
51
|
-
*/
|
|
52
|
-
ReduxDevtoolsExtensionConnection.prototype.error = function (anyErr) { };
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* @record
|
|
56
|
-
*/
|
|
57
|
-
export function ReduxDevtoolsExtensionConfig() { }
|
|
58
|
-
if (false) {
|
|
59
|
-
/** @type {?|undefined} */
|
|
60
|
-
ReduxDevtoolsExtensionConfig.prototype.features;
|
|
61
|
-
/** @type {?} */
|
|
62
|
-
ReduxDevtoolsExtensionConfig.prototype.name;
|
|
63
|
-
/** @type {?|undefined} */
|
|
64
|
-
ReduxDevtoolsExtensionConfig.prototype.maxAge;
|
|
65
|
-
/** @type {?|undefined} */
|
|
66
|
-
ReduxDevtoolsExtensionConfig.prototype.serialize;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* @record
|
|
70
|
-
*/
|
|
71
|
-
export function ReduxDevtoolsExtension() { }
|
|
72
|
-
if (false) {
|
|
73
|
-
/**
|
|
74
|
-
* @param {?} options
|
|
75
|
-
* @return {?}
|
|
76
|
-
*/
|
|
77
|
-
ReduxDevtoolsExtension.prototype.connect = function (options) { };
|
|
78
|
-
/**
|
|
79
|
-
* @param {?} action
|
|
80
|
-
* @param {?} state
|
|
81
|
-
* @param {?} options
|
|
82
|
-
* @return {?}
|
|
83
|
-
*/
|
|
84
|
-
ReduxDevtoolsExtension.prototype.send = function (action, state, options) { };
|
|
85
|
-
}
|
|
86
16
|
export class DevtoolsExtension {
|
|
87
|
-
/**
|
|
88
|
-
* @param {?} devtoolsExtension
|
|
89
|
-
* @param {?} config
|
|
90
|
-
* @param {?} dispatcher
|
|
91
|
-
*/
|
|
92
17
|
constructor(devtoolsExtension, config, dispatcher) {
|
|
93
18
|
this.config = config;
|
|
94
19
|
this.dispatcher = dispatcher;
|
|
95
20
|
this.devtoolsExtension = devtoolsExtension;
|
|
96
21
|
this.createActionStreams();
|
|
97
22
|
}
|
|
98
|
-
/**
|
|
99
|
-
* @param {?} action
|
|
100
|
-
* @param {?} state
|
|
101
|
-
* @return {?}
|
|
102
|
-
*/
|
|
103
23
|
notify(action, state) {
|
|
104
24
|
if (!this.devtoolsExtension) {
|
|
105
25
|
return;
|
|
@@ -121,101 +41,50 @@ export class DevtoolsExtension {
|
|
|
121
41
|
if (state.isLocked || state.isPaused) {
|
|
122
42
|
return;
|
|
123
43
|
}
|
|
124
|
-
/** @type {?} */
|
|
125
44
|
const currentState = unliftState(state);
|
|
126
45
|
if (shouldFilterActions(this.config) &&
|
|
127
46
|
isActionFiltered(currentState, action, this.config.predicate, this.config.actionsSafelist, this.config.actionsBlocklist)) {
|
|
128
47
|
return;
|
|
129
48
|
}
|
|
130
|
-
/** @type {?} */
|
|
131
49
|
const sanitizedState = this.config.stateSanitizer
|
|
132
50
|
? sanitizeState(this.config.stateSanitizer, currentState, state.currentStateIndex)
|
|
133
51
|
: currentState;
|
|
134
|
-
/** @type {?} */
|
|
135
52
|
const sanitizedAction = this.config.actionSanitizer
|
|
136
53
|
? sanitizeAction(this.config.actionSanitizer, action, state.nextActionId)
|
|
137
54
|
: action;
|
|
138
|
-
this.sendToReduxDevtools((
|
|
139
|
-
* @return {?}
|
|
140
|
-
*/
|
|
141
|
-
() => this.extensionConnection.send(sanitizedAction, sanitizedState)));
|
|
55
|
+
this.sendToReduxDevtools(() => this.extensionConnection.send(sanitizedAction, sanitizedState));
|
|
142
56
|
}
|
|
143
57
|
else {
|
|
144
58
|
// Requires full state update
|
|
145
|
-
/** @type {?} */
|
|
146
59
|
const sanitizedLiftedState = Object.assign(Object.assign({}, state), { stagedActionIds: state.stagedActionIds, actionsById: this.config.actionSanitizer
|
|
147
60
|
? sanitizeActions(this.config.actionSanitizer, state.actionsById)
|
|
148
61
|
: state.actionsById, computedStates: this.config.stateSanitizer
|
|
149
62
|
? sanitizeStates(this.config.stateSanitizer, state.computedStates)
|
|
150
63
|
: state.computedStates });
|
|
151
|
-
this.sendToReduxDevtools((
|
|
152
|
-
* @return {?}
|
|
153
|
-
*/
|
|
154
|
-
() => this.devtoolsExtension.send(null, sanitizedLiftedState, this.getExtensionConfig(this.config))));
|
|
64
|
+
this.sendToReduxDevtools(() => this.devtoolsExtension.send(null, sanitizedLiftedState, this.getExtensionConfig(this.config)));
|
|
155
65
|
}
|
|
156
66
|
}
|
|
157
|
-
/**
|
|
158
|
-
* @private
|
|
159
|
-
* @return {?}
|
|
160
|
-
*/
|
|
161
67
|
createChangesObservable() {
|
|
162
68
|
if (!this.devtoolsExtension) {
|
|
163
69
|
return EMPTY;
|
|
164
70
|
}
|
|
165
|
-
return new Observable((
|
|
166
|
-
* @param {?} subscriber
|
|
167
|
-
* @return {?}
|
|
168
|
-
*/
|
|
169
|
-
(subscriber) => {
|
|
170
|
-
/** @type {?} */
|
|
71
|
+
return new Observable((subscriber) => {
|
|
171
72
|
const connection = this.devtoolsExtension.connect(this.getExtensionConfig(this.config));
|
|
172
73
|
this.extensionConnection = connection;
|
|
173
74
|
connection.init();
|
|
174
|
-
connection.subscribe((
|
|
175
|
-
* @param {?} change
|
|
176
|
-
* @return {?}
|
|
177
|
-
*/
|
|
178
|
-
(change) => subscriber.next(change)));
|
|
75
|
+
connection.subscribe((change) => subscriber.next(change));
|
|
179
76
|
return connection.unsubscribe;
|
|
180
|
-
})
|
|
77
|
+
});
|
|
181
78
|
}
|
|
182
|
-
/**
|
|
183
|
-
* @private
|
|
184
|
-
* @return {?}
|
|
185
|
-
*/
|
|
186
79
|
createActionStreams() {
|
|
187
80
|
// Listens to all changes
|
|
188
|
-
/** @type {?} */
|
|
189
81
|
const changes$ = this.createChangesObservable().pipe(share());
|
|
190
82
|
// Listen for the start action
|
|
191
|
-
|
|
192
|
-
const start$ = changes$.pipe(filter((/**
|
|
193
|
-
* @param {?} change
|
|
194
|
-
* @return {?}
|
|
195
|
-
*/
|
|
196
|
-
(change) => change.type === ExtensionActionTypes.START)));
|
|
83
|
+
const start$ = changes$.pipe(filter((change) => change.type === ExtensionActionTypes.START));
|
|
197
84
|
// Listen for the stop action
|
|
198
|
-
|
|
199
|
-
const stop$ = changes$.pipe(filter((/**
|
|
200
|
-
* @param {?} change
|
|
201
|
-
* @return {?}
|
|
202
|
-
*/
|
|
203
|
-
(change) => change.type === ExtensionActionTypes.STOP)));
|
|
85
|
+
const stop$ = changes$.pipe(filter((change) => change.type === ExtensionActionTypes.STOP));
|
|
204
86
|
// Listen for lifted actions
|
|
205
|
-
|
|
206
|
-
const liftedActions$ = changes$.pipe(filter((/**
|
|
207
|
-
* @param {?} change
|
|
208
|
-
* @return {?}
|
|
209
|
-
*/
|
|
210
|
-
(change) => change.type === ExtensionActionTypes.DISPATCH)), map((/**
|
|
211
|
-
* @param {?} change
|
|
212
|
-
* @return {?}
|
|
213
|
-
*/
|
|
214
|
-
(change) => this.unwrapAction(change.payload))), concatMap((/**
|
|
215
|
-
* @param {?} action
|
|
216
|
-
* @return {?}
|
|
217
|
-
*/
|
|
218
|
-
(action) => {
|
|
87
|
+
const liftedActions$ = changes$.pipe(filter((change) => change.type === ExtensionActionTypes.DISPATCH), map((change) => this.unwrapAction(change.payload)), concatMap((action) => {
|
|
219
88
|
if (action.type === IMPORT_STATE) {
|
|
220
89
|
// State imports may happen in two situations:
|
|
221
90
|
// 1. Explicitly by user
|
|
@@ -225,63 +94,25 @@ export class DevtoolsExtension {
|
|
|
225
94
|
// lazy loaded reducers time to instantiate.
|
|
226
95
|
// As soon as there is no UPDATE action within 1 second,
|
|
227
96
|
// it is assumed that all reducers are loaded.
|
|
228
|
-
return this.dispatcher.pipe(filter((
|
|
229
|
-
* @param {?} action
|
|
230
|
-
* @return {?}
|
|
231
|
-
*/
|
|
232
|
-
(action) => action.type === UPDATE)), timeout(1000), debounceTime(1000), map((/**
|
|
233
|
-
* @return {?}
|
|
234
|
-
*/
|
|
235
|
-
() => action)), catchError((/**
|
|
236
|
-
* @return {?}
|
|
237
|
-
*/
|
|
238
|
-
() => of(action))), take(1));
|
|
97
|
+
return this.dispatcher.pipe(filter((action) => action.type === UPDATE), timeout(1000), debounceTime(1000), map(() => action), catchError(() => of(action)), take(1));
|
|
239
98
|
}
|
|
240
99
|
else {
|
|
241
100
|
return of(action);
|
|
242
101
|
}
|
|
243
|
-
}))
|
|
102
|
+
}));
|
|
244
103
|
// Listen for unlifted actions
|
|
245
|
-
|
|
246
|
-
const actions$ = changes$.pipe(filter((/**
|
|
247
|
-
* @param {?} change
|
|
248
|
-
* @return {?}
|
|
249
|
-
*/
|
|
250
|
-
(change) => change.type === ExtensionActionTypes.ACTION)), map((/**
|
|
251
|
-
* @param {?} change
|
|
252
|
-
* @return {?}
|
|
253
|
-
*/
|
|
254
|
-
(change) => this.unwrapAction(change.payload))));
|
|
255
|
-
/** @type {?} */
|
|
104
|
+
const actions$ = changes$.pipe(filter((change) => change.type === ExtensionActionTypes.ACTION), map((change) => this.unwrapAction(change.payload)));
|
|
256
105
|
const actionsUntilStop$ = actions$.pipe(takeUntil(stop$));
|
|
257
|
-
/** @type {?} */
|
|
258
106
|
const liftedUntilStop$ = liftedActions$.pipe(takeUntil(stop$));
|
|
259
107
|
this.start$ = start$.pipe(takeUntil(stop$));
|
|
260
108
|
// Only take the action sources between the start/stop events
|
|
261
|
-
this.actions$ = this.start$.pipe(switchMap((
|
|
262
|
-
|
|
263
|
-
*/
|
|
264
|
-
() => actionsUntilStop$)));
|
|
265
|
-
this.liftedActions$ = this.start$.pipe(switchMap((/**
|
|
266
|
-
* @return {?}
|
|
267
|
-
*/
|
|
268
|
-
() => liftedUntilStop$)));
|
|
109
|
+
this.actions$ = this.start$.pipe(switchMap(() => actionsUntilStop$));
|
|
110
|
+
this.liftedActions$ = this.start$.pipe(switchMap(() => liftedUntilStop$));
|
|
269
111
|
}
|
|
270
|
-
/**
|
|
271
|
-
* @private
|
|
272
|
-
* @param {?} action
|
|
273
|
-
* @return {?}
|
|
274
|
-
*/
|
|
275
112
|
unwrapAction(action) {
|
|
276
113
|
return typeof action === 'string' ? eval(`(${action})`) : action;
|
|
277
114
|
}
|
|
278
|
-
/**
|
|
279
|
-
* @private
|
|
280
|
-
* @param {?} config
|
|
281
|
-
* @return {?}
|
|
282
|
-
*/
|
|
283
115
|
getExtensionConfig(config) {
|
|
284
|
-
/** @type {?} */
|
|
285
116
|
const extensionOptions = {
|
|
286
117
|
name: config.name,
|
|
287
118
|
features: config.features,
|
|
@@ -292,11 +123,6 @@ export class DevtoolsExtension {
|
|
|
292
123
|
}
|
|
293
124
|
return extensionOptions;
|
|
294
125
|
}
|
|
295
|
-
/**
|
|
296
|
-
* @private
|
|
297
|
-
* @param {?} send
|
|
298
|
-
* @return {?}
|
|
299
|
-
*/
|
|
300
126
|
sendToReduxDevtools(send) {
|
|
301
127
|
try {
|
|
302
128
|
send();
|
|
@@ -315,32 +141,4 @@ DevtoolsExtension.ctorParameters = () => [
|
|
|
315
141
|
{ type: StoreDevtoolsConfig, decorators: [{ type: Inject, args: [STORE_DEVTOOLS_CONFIG,] }] },
|
|
316
142
|
{ type: DevtoolsDispatcher }
|
|
317
143
|
];
|
|
318
|
-
if (false) {
|
|
319
|
-
/**
|
|
320
|
-
* @type {?}
|
|
321
|
-
* @private
|
|
322
|
-
*/
|
|
323
|
-
DevtoolsExtension.prototype.devtoolsExtension;
|
|
324
|
-
/**
|
|
325
|
-
* @type {?}
|
|
326
|
-
* @private
|
|
327
|
-
*/
|
|
328
|
-
DevtoolsExtension.prototype.extensionConnection;
|
|
329
|
-
/** @type {?} */
|
|
330
|
-
DevtoolsExtension.prototype.liftedActions$;
|
|
331
|
-
/** @type {?} */
|
|
332
|
-
DevtoolsExtension.prototype.actions$;
|
|
333
|
-
/** @type {?} */
|
|
334
|
-
DevtoolsExtension.prototype.start$;
|
|
335
|
-
/**
|
|
336
|
-
* @type {?}
|
|
337
|
-
* @private
|
|
338
|
-
*/
|
|
339
|
-
DevtoolsExtension.prototype.config;
|
|
340
|
-
/**
|
|
341
|
-
* @type {?}
|
|
342
|
-
* @private
|
|
343
|
-
*/
|
|
344
|
-
DevtoolsExtension.prototype.dispatcher;
|
|
345
|
-
}
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL21vZHVsZXMvc3RvcmUtZGV2dG9vbHMvIiwic291cmNlcyI6WyJzcmMvZXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sR0FBRyxFQUNILEtBQUssRUFDTCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6RCxPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLG1CQUFtQixHQUNwQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsV0FBVyxHQUNaLE1BQU0sU0FBUyxDQUFDOztBQUVqQixNQUFNLE9BQU8sb0JBQW9CLEdBQUc7SUFDbEMsS0FBSyxFQUFFLE9BQU87SUFDZCxRQUFRLEVBQUUsVUFBVTtJQUNwQixJQUFJLEVBQUUsTUFBTTtJQUNaLE1BQU0sRUFBRSxRQUFRO0NBQ2pCOztBQUVELE1BQU0sT0FBTyx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDeEQsK0NBQStDLENBQ2hEOzs7O0FBRUQsc0RBTUM7Ozs7OztJQUxDLCtF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LG1CQUFtQixFQUFFO1lBQy9DLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3pDO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDOzs7Ozs7SUFFTyxtQkFBbUIsQ0FBQyxJQUFjO1FBQ3hDLElBQUk7WUFDRixJQUFJLEVBQUUsQ0FBQztTQUNSO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsSUFBSSxDQUNWLHNFQUFzRSxFQUN0RSxHQUFHLENBQ0osQ0FBQztTQUNIO0lBQ0gsQ0FBQzs7O1lBeE1GLFVBQVU7Ozs7NENBVU4sTUFBTSxTQUFDLHdCQUF3QjtZQXhEbEMsbUJBQW1CLHVCQXlEaEIsTUFBTSxTQUFDLHFCQUFxQjtZQXZEeEIsa0JBQWtCOzs7Ozs7O0lBOEN6Qiw4Q0FBa0Q7Ozs7O0lBQ2xELGdEQUErRDs7SUFFL0QsMkNBQWlDOztJQUNqQyxxQ0FBMkI7O0lBQzNCLG1DQUF5Qjs7Ozs7SUFJdkIsbUNBQWtFOzs7OztJQUNsRSx1Q0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFVQREFURSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgY29uY2F0TWFwLFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBzaGFyZSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRpbWVvdXQsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSU1QT1JUX1NUQVRFLCBQRVJGT1JNX0FDVElPTiB9IGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQge1xuICBTZXJpYWxpemF0aW9uT3B0aW9ucyxcbiAgU1RPUkVfREVWVE9PTFNfQ09ORklHLFxuICBTdG9yZURldnRvb2xzQ29uZmlnLFxufSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBEZXZ0b29sc0Rpc3BhdGNoZXIgfSBmcm9tICcuL2RldnRvb2xzLWRpc3BhdGNoZXInO1xuaW1wb3J0IHsgTGlmdGVkQWN0aW9uLCBMaWZ0ZWRTdGF0ZSB9IGZyb20gJy4vcmVkdWNlcic7XG5pbXBvcnQge1xuICBpc0FjdGlvbkZpbHRlcmVkLFxuICBzYW5pdGl6ZUFjdGlvbixcbiAgc2FuaXRpemVBY3Rpb25zLFxuICBzYW5pdGl6ZVN0YXRlLFxuICBzYW5pdGl6ZVN0YXRlcyxcbiAgc2hvdWxkRmlsdGVyQWN0aW9ucyxcbiAgdW5saWZ0U3RhdGUsXG59IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgRXh0ZW5zaW9uQWN0aW9uVHlwZXMgPSB7XG4gIFNUQVJUOiAnU1RBUlQnLFxuICBESVNQQVRDSDogJ0RJU1BBVENIJyxcbiAgU1RPUDogJ1NUT1AnLFxuICBBQ1RJT046ICdBQ1RJT04nLFxufTtcblxuZXhwb3J0IGNvbnN0IFJFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWR1eERldnRvb2xzRXh0ZW5zaW9uPihcbiAgJ0BuZ3J4L3N0b3JlLWRldnRvb2xzIFJlZHV4IERldnRvb2xzIEV4dGVuc2lvbidcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkdXhEZXZ0b29sc0V4dGVuc2lvbkNvbm5lY3Rpb24ge1xuICBzdWJzY3JpYmUobGlzdGVuZXI6IChjaGFuZ2U6IGFueSkgPT4gdm9pZCk6IHZvaWQ7XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG4gIHNlbmQoYWN0aW9uOiBhbnksIHN0YXRlOiBhbnkpOiB2b2lkO1xuICBpbml0KHN0YXRlPzogYW55KTogdm9pZDtcbiAgZXJyb3IoYW55RXJyOiBhbnkpOiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBSZWR1eERldnRvb2xzRXh0ZW5zaW9uQ29uZmlnIHtcbiAgZmVhdHVyZXM/OiBvYmplY3QgfCBib29sZWFuO1xuICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1heEFnZT86IG51bWJlcjtcbiAgc2VyaWFsaXplPzogYm9vbGVhbiB8IFNlcmlhbGl6YXRpb25PcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZHV4RGV2dG9vbHNFeHRlbnNpb24ge1xuICBjb25uZWN0KFxuICAgIG9wdGlvbnM6IFJlZHV4RGV2dG9vbHNFeHRlbnNpb25Db25maWdcbiAgKTogUmVkdXhEZXZ0b29sc0V4dGVuc2lvbkNvbm5lY3Rpb247XG4gIHNlbmQoYWN0aW9uOiBhbnksIHN0YXRlOiBhbnksIG9wdGlvbnM6IFJlZHV4RGV2dG9vbHNFeHRlbnNpb25Db25maWcpOiB2b2lkO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGV2dG9vbHNFeHRlbnNpb24ge1xuICBwcml2YXRlIGRldnRvb2xzRXh0ZW5zaW9uOiBSZWR1eERldnRvb2xzRXh0ZW5zaW9uO1xuICBwcml2YXRlIGV4dGVuc2lvbkNvbm5lY3Rpb24hOiBSZWR1eERldnRvb2xzRXh0ZW5zaW9uQ29ubmVjdGlvbjtcblxuICBsaWZ0ZWRBY3Rpb25zJCE6IE9ic2VydmFibGU8YW55PjtcbiAgYWN0aW9ucyQhOiBPYnNlcnZhYmxlPGFueT47XG4gIHN0YXJ0JCE6IE9ic2VydmFibGU8YW55PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFJFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTikgZGV2dG9vbHNFeHRlbnNpb246IFJlZHV4RGV2dG9vbHNFeHRlbnNpb24sXG4gICAgQEluamVjdChTVE9SRV9ERVZUT09MU19DT05GSUcpIHByaXZhdGUgY29uZmlnOiBTdG9yZURldnRvb2xzQ29uZmlnLFxuICAgIHByaXZhdGUgZGlzcGF0Y2hlcjogRGV2dG9vbHNEaXNwYXRjaGVyXG4gICkge1xuICAgIHRoaXMuZGV2dG9vbHNFeHRlbnNpb24gPSBkZXZ0b29sc0V4dGVuc2lvbjtcbiAgICB0aGlzLmNyZWF0ZUFjdGlvblN0cmVhbXMoKTtcbiAgfVxuXG4gIG5vdGlmeShhY3Rpb246IExpZnRlZEFjdGlvbiwgc3RhdGU6IExpZnRlZFN0YXRlKSB7XG4gICAgaWYgKCF0aGlzLmRldnRvb2xzRXh0ZW5zaW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYWN0aW9uIHJlcXVpcmVzIGEgZnVsbCB1cGRhdGUgb2YgdGhlIGxpZnRlZFN0YXRlLlxuICAgIC8vIElmIGl0IGlzIGEgc2ltcGxlIGFjdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIHVzZXIncyBhcHAgYW5kIHRoZSByZWNvcmRpbmdcbiAgICAvLyBpcyBub3QgbG9ja2VkL3BhdXNlZCwgb25seSBzZW5kIHRoZSBhY3Rpb24gYW5kIHRoZSBjdXJyZW50IHN0YXRlIChmYXN0KS5cbiAgICAvL1xuICAgIC8vIEEgZnVsbCBsaWZ0ZWRTdGF0ZSB1cGRhdGUgKHNsb3c6IHNlcmlhbGl6ZXMgdGhlIGVudGlyZSBsaWZ0ZWRTdGF0ZSkgaXNcbiAgICAvLyBvbmx5IHJlcXVpcmVkIHdoZW46XG4gICAgLy8gICBhKSByZWR1eC1kZXZ0b29scy1leHRlbnNpb24gZmlyZXMgdGhlIEBASW5pdCBhY3Rpb24gKGlnbm9yZWQgYnlcbiAgICAvLyAgICAgIEBuZ3J4L3N0b3JlLWRldnRvb2xzKVxuICAgIC8vICAgYikgYW4gYWN0aW9uIGlzIGdlbmVyYXRlZCBieSBhbiBAbmdyeCBtb2R1bGUgKGUuZy4gQG5ncngvZWZmZWN0cy9pbml0XG4gICAgLy8gICAgICBvciBAbmdyeC9zdG9yZS91cGRhdGUtcmVkdWNlcnMpXG4gICAgLy8gICBjKSB0aGUgc3RhdGUgaGFzIGJlZW4gcmVjb21wdXRlZCBkdWUgdG8gdGltZS10cmF2ZWxpbmdcbiAgICAvLyAgIGQpIGFueSBhY3Rpb24gdGhhdCBpcyBub3QgYSBQZXJmb3JtQWN0aW9uIHRvIGVyciBvbiB0aGUgc2lkZSBvZlxuICAgIC8vICAgICAgY2F1dGlvbi5cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09IFBFUkZPUk1fQUNUSU9OKSB7XG4gICAgICBpZiAoc3RhdGUuaXNMb2NrZWQgfHwgc3RhdGUuaXNQYXVzZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB1bmxpZnRTdGF0ZShzdGF0ZSk7XG4gICAgICBpZiAoXG4gICAgICAgIHNob3VsZEZpbHRlckFjdGlvbnModGhpcy5jb25maWcpICYmXG4gICAgICAgIGlzQWN0aW9uRmlsdGVyZWQoXG4gICAgICAgICAgY3VycmVudFN0YXRlLFxuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICB0aGlzLmNvbmZpZy5wcmVkaWNhdGUsXG4gICAgICAgICAgdGhpcy5jb25maWcuYWN0aW9uc1NhZmVsaXN0LFxuICAgICAgICAgIHRoaXMuY29uZmlnLmFjdGlvbnNCbG9ja2xpc3RcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNhbml0aXplZFN0YXRlID0gdGhpcy5jb25maWcuc3RhdGVTYW5pdGl6ZXJcbiAgICAgICAgPyBzYW5pdGl6ZVN0YXRlKFxuICAgICAgICAgICAgdGhpcy5jb25maWcuc3RhdGVTYW5pdGl6ZXIsXG4gICAgICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50U3RhdGVJbmRleFxuICAgICAgICAgIClcbiAgICAgICAgOiBjdXJyZW50U3RhdGU7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRBY3Rpb24gPSB0aGlzLmNvbmZpZy5hY3Rpb25TYW5pdGl6ZXJcbiAgICAgICAgPyBzYW5pdGl6ZUFjdGlvbihcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmFjdGlvblNhbml0aXplcixcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHN0YXRlLm5leHRBY3Rpb25JZFxuICAgICAgICAgIClcbiAgICAgICAgOiBhY3Rpb247XG5cbiAgICAgIHRoaXMuc2VuZFRvUmVkdXhEZXZ0b29scygoKSA9PlxuICAgICAgICB0aGlzLmV4dGVuc2lvbkNvbm5lY3Rpb24uc2VuZChzYW5pdGl6ZWRBY3Rpb24sIHNhbml0aXplZFN0YXRlKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVxdWlyZXMgZnVsbCBzdGF0ZSB1cGRhdGVcbiAgICAgIGNvbnN0IHNhbml0aXplZExpZnRlZFN0YXRlID0ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhZ2VkQWN0aW9uSWRzOiBzdGF0ZS5zdGFnZWRBY3Rpb25JZHMsXG4gICAgICAgIGFjdGlvbnNCeUlkOiB0aGlzLmNvbmZpZy5hY3Rpb25TYW5pdGl6ZXJcbiAgICAgICAgICA/IHNhbml0aXplQWN0aW9ucyh0aGlzLmNvbmZpZy5hY3Rpb25TYW5pdGl6ZXIsIHN0YXRlLmFjdGlvbnNCeUlkKVxuICAgICAgICAgIDogc3RhdGUuYWN0aW9uc0J5SWQsXG4gICAgICAgIGNvbXB1dGVkU3RhdGVzOiB0aGlzLmNvbmZpZy5zdGF0ZVNhbml0aXplclxuICAgICAgICAgID8gc2FuaXRpemVTdGF0ZXModGhpcy5jb25maWcuc3RhdGVTYW5pdGl6ZXIsIHN0YXRlLmNvbXB1dGVkU3RhdGVzKVxuICAgICAgICAgIDogc3RhdGUuY29tcHV0ZWRTdGF0ZXMsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNlbmRUb1JlZHV4RGV2dG9vbHMoKCkgPT5cbiAgICAgICAgdGhpcy5kZXZ0b29sc0V4dGVuc2lvbi5zZW5kKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgc2FuaXRpemVkTGlmdGVkU3RhdGUsXG4gICAgICAgICAgdGhpcy5nZXRFeHRlbnNpb25Db25maWcodGhpcy5jb25maWcpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDaGFuZ2VzT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5kZXZ0b29sc0V4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuZGV2dG9vbHNFeHRlbnNpb24uY29ubmVjdChcbiAgICAgICAgdGhpcy5nZXRFeHRlbnNpb25Db25maWcodGhpcy5jb25maWcpXG4gICAgICApO1xuICAgICAgdGhpcy5leHRlbnNpb25Db25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgICAgIGNvbm5lY3Rpb24uaW5pdCgpO1xuXG4gICAgICBjb25uZWN0aW9uLnN1YnNjcmliZSgoY2hhbmdlOiBhbnkpID0+IHN1YnNjcmliZXIubmV4dChjaGFuZ2UpKTtcbiAgICAgIHJldHVybiBjb25uZWN0aW9uLnVuc3Vic2NyaWJlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBY3Rpb25TdHJlYW1zKCkge1xuICAgIC8vIExpc3RlbnMgdG8gYWxsIGNoYW5nZXNcbiAgICBjb25zdCBjaGFuZ2VzJCA9IHRoaXMuY3JlYXRlQ2hhbmdlc09ic2VydmFibGUoKS5waXBlKHNoYXJlKCkpO1xuXG4gICAgLy8gTGlzdGVuIGZvciB0aGUgc3RhcnQgYWN0aW9uXG4gICAgY29uc3Qgc3RhcnQkID0gY2hhbmdlcyQucGlwZShcbiAgICAgIGZpbHRlcigoY2hhbmdlOiBhbnkpID0+IGNoYW5nZS50eXBlID09PSBFeHRlbnNpb25BY3Rpb25UeXBlcy5TVEFSVClcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvciB0aGUgc3RvcCBhY3Rpb25cbiAgICBjb25zdCBzdG9wJCA9IGNoYW5nZXMkLnBpcGUoXG4gICAgICBmaWx0ZXIoKGNoYW5nZTogYW55KSA9PiBjaGFuZ2UudHlwZSA9PT0gRXh0ZW5zaW9uQWN0aW9uVHlwZXMuU1RPUClcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvciBsaWZ0ZWQgYWN0aW9uc1xuICAgIGNvbnN0IGxpZnRlZEFjdGlvbnMkID0gY2hhbmdlcyQucGlwZShcbiAgICAgIGZpbHRlcigoY2hhbmdlKSA9PiBjaGFuZ2UudHlwZSA9PT0gRXh0ZW5zaW9uQWN0aW9uVHlwZXMuRElTUEFUQ0gpLFxuICAgICAgbWFwKChjaGFuZ2UpID0+IHRoaXMudW53cmFwQWN0aW9uKGNoYW5nZS5wYXlsb2FkKSksXG4gICAgICBjb25jYXRNYXAoKGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gSU1QT1JUX1NUQVRFKSB7XG4gICAgICAgICAgLy8gU3RhdGUgaW1wb3J0cyBtYXkgaGFwcGVuIGluIHR3byBzaXR1YXRpb25zOlxuICAgICAgICAgIC8vIDEuIEV4cGxpY2l0bHkgYnkgdXNlclxuICAgICAgICAgIC8vIDIuIFVzZXIgYWN0aXZhdGVkIHRoZSBcInBlcnNpc3Qgc3RhdGUgYWNjcm9zcyByZWxvYWRzXCIgb3B0aW9uXG4gICAgICAgICAgLy8gICAgYW5kIG5vdyB0aGUgc3RhdGUgaXMgaW1wb3J0ZWQgZHVyaW5nIHJlbG9hZC5cbiAgICAgICAgICAvLyBCZWNhdXNlIG9mIG9wdGlvbiAyLCB3ZSBuZWVkIHRvIGdpdmUgcG9zc2libGVcbiAgICAgICAgICAvLyBsYXp5IGxvYWRlZCByZWR1Y2VycyB0aW1lIHRvIGluc3RhbnRpYXRlLlxuICAgICAgICAgIC8vIEFzIHNvb24gYXMgdGhlcmUgaXMgbm8gVVBEQVRFIGFjdGlvbiB3aXRoaW4gMSBzZWNvbmQsXG4gICAgICAgICAgLy8gaXQgaXMgYXNzdW1lZCB0aGF0IGFsbCByZWR1Y2VycyBhcmUgbG9hZGVkLlxuICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoZXIucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gVVBEQVRFKSxcbiAgICAgICAgICAgIHRpbWVvdXQoMTAwMCksXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksXG4gICAgICAgICAgICBtYXAoKCkgPT4gYWN0aW9uKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoYWN0aW9uKSksXG4gICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvciB1bmxpZnRlZCBhY3Rpb25zXG4gICAgY29uc3QgYWN0aW9ucyQgPSBjaGFuZ2VzJC5waXBlKFxuICAgICAgZmlsdGVyKChjaGFuZ2UpID0+IGNoYW5nZS50eXBlID09PSBFeHRlbnNpb25BY3Rpb25UeXBlcy5BQ1RJT04pLFxuICAgICAgbWFwKChjaGFuZ2UpID0+IHRoaXMudW53cmFwQWN0aW9uKGNoYW5nZS5wYXlsb2FkKSlcbiAgICApO1xuXG4gICAgY29uc3QgYWN0aW9uc1VudGlsU3RvcCQgPSBhY3Rpb25zJC5waXBlKHRha2VVbnRpbChzdG9wJCkpO1xuICAgIGNvbnN0IGxpZnRlZFVudGlsU3RvcCQgPSBsaWZ0ZWRBY3Rpb25zJC5waXBlKHRha2VVbnRpbChzdG9wJCkpO1xuICAgIHRoaXMuc3RhcnQkID0gc3RhcnQkLnBpcGUodGFrZVVudGlsKHN0b3AkKSk7XG5cbiAgICAvLyBPbmx5IHRha2UgdGhlIGFjdGlvbiBzb3VyY2VzIGJldHdlZW4gdGhlIHN0YXJ0L3N0b3AgZXZlbnRzXG4gICAgdGhpcy5hY3Rpb25zJCA9IHRoaXMuc3RhcnQkLnBpcGUoc3dpdGNoTWFwKCgpID0+IGFjdGlvbnNVbnRpbFN0b3AkKSk7XG4gICAgdGhpcy5saWZ0ZWRBY3Rpb25zJCA9IHRoaXMuc3RhcnQkLnBpcGUoc3dpdGNoTWFwKCgpID0+IGxpZnRlZFVudGlsU3RvcCQpKTtcbiAgfVxuXG4gIHByaXZhdGUgdW53cmFwQWN0aW9uKGFjdGlvbjogQWN0aW9uKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnID8gZXZhbChgKCR7YWN0aW9ufSlgKSA6IGFjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXh0ZW5zaW9uQ29uZmlnKGNvbmZpZzogU3RvcmVEZXZ0b29sc0NvbmZpZykge1xuICAgIGNvbnN0IGV4dGVuc2lvbk9wdGlvbnM6IFJlZHV4RGV2dG9vbHNFeHRlbnNpb25Db25maWcgPSB7XG4gICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgIGZlYXR1cmVzOiBjb25maWcuZmVhdHVyZXMsXG4gICAgICBzZXJpYWxpemU6IGNvbmZpZy5zZXJpYWxpemUsXG4gICAgICAvLyBUaGUgYWN0aW9uL3N0YXRlIHNhbml0aXplcnMgYXJlIG5vdCBhZGRlZCB0byB0aGUgY29uZmlnXG4gICAgICAvLyBiZWNhdXNlIHNhbml0YXRpb24gaXMgZG9uZSBpbiB0aGlzIGNsYXNzIGFscmVhZHkuXG4gICAgICAvLyBJdCBpcyBkb25lIGJlZm9yZSBzZW5kaW5nIGl0IHRvIHRoZSBkZXZ0b29scyBleHRlbnNpb24gZm9yIGNvbnNpc3RlbmN5OlxuICAgICAgLy8gLSBJZiB3ZSBjYWxsIGV4dGVuc2lvbkNvbm5lY3Rpb24uc2VuZCguLi4pLFxuICAgICAgLy8gICB0aGUgZXh0ZW5zaW9uIHdvdWxkIGNhbGwgdGhlIHNhbml0aXplcnMuXG4gICAgICAvLyAtIElmIHdlIGNhbGwgZGV2dG9vbHNFeHRlbnNpb24uc2VuZCguLi4pIChha2EgZnVsbCBzdGF0ZSB1cGRhdGUpLFxuICAgICAgLy8gICB0aGUgZXh0ZW5zaW9uIHdvdWxkIE5PVCBjYWxsIHRoZSBzYW5pdGl6ZXJzLCBzbyB3ZSBoYXZlIHRvIGRvIGl0IG91cnNlbHZlcy5cbiAgICB9O1xuICAgIGlmIChjb25maWcubWF4QWdlICE9PSBmYWxzZSAvKiBzdXBwb3J0ID09PSAwICovKSB7XG4gICAgICBleHRlbnNpb25PcHRpb25zLm1heEFnZSA9IGNvbmZpZy5tYXhBZ2U7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25PcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kVG9SZWR1eERldnRvb2xzKHNlbmQ6IEZ1bmN0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNlbmQoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0BuZ3J4L3N0b3JlLWRldnRvb2xzOiBzb21ldGhpbmcgd2VudCB3cm9uZyBpbnNpZGUgdGhlIHJlZHV4IGRldnRvb2xzJyxcbiAgICAgICAgZXJyXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9zdG9yZS1kZXZ0b29scy9zcmMvZXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEdBQUcsRUFDSCxLQUFLLEVBQ0wsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekQsT0FBTyxFQUVMLHFCQUFxQixFQUNyQixtQkFBbUIsR0FDcEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLFdBQVcsR0FDWixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyxLQUFLLEVBQUUsT0FBTztJQUNkLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUN4RCwrQ0FBK0MsQ0FDaEQsQ0FBQztBQXdCRixNQUFN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QUFDO0lBRU8sbUJBQW1CLENBQUMsSUFBYztRQUN4QyxJQUFJO1lBQ0YsSUFBSSxFQUFFLENBQUM7U0FDUjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLElBQUksQ0FDVixzRUFBc0UsRUFDdEUsR0FBRyxDQUNKLENBQUM7U0FDSDtJQUNILENBQUM7OztZQXhNRixVQUFVOzs7OzRDQVVOLE1BQU0sU0FBQyx3QkFBd0I7WUF4RGxDLG1CQUFtQix1QkF5RGhCLE1BQU0sU0FBQyxxQkFBcUI7WUF2RHhCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgVVBEQVRFIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBjb25jYXRNYXAsXG4gIGRlYm91bmNlVGltZSxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHNoYXJlLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGltZW91dCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJTVBPUlRfU1RBVEUsIFBFUkZPUk1fQUNUSU9OIH0gZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCB7XG4gIFNlcmlhbGl6YXRpb25PcHRpb25zLFxuICBTVE9SRV9ERVZUT09MU19DT05GSUcsXG4gIFN0b3JlRGV2dG9vbHNDb25maWcsXG59IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IERldnRvb2xzRGlzcGF0Y2hlciB9IGZyb20gJy4vZGV2dG9vbHMtZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBMaWZ0ZWRBY3Rpb24sIExpZnRlZFN0YXRlIH0gZnJvbSAnLi9yZWR1Y2VyJztcbmltcG9ydCB7XG4gIGlzQWN0aW9uRmlsdGVyZWQsXG4gIHNhbml0aXplQWN0aW9uLFxuICBzYW5pdGl6ZUFjdGlvbnMsXG4gIHNhbml0aXplU3RhdGUsXG4gIHNhbml0aXplU3RhdGVzLFxuICBzaG91bGRGaWx0ZXJBY3Rpb25zLFxuICB1bmxpZnRTdGF0ZSxcbn0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBFeHRlbnNpb25BY3Rpb25UeXBlcyA9IHtcbiAgU1RBUlQ6ICdTVEFSVCcsXG4gIERJU1BBVENIOiAnRElTUEFUQ0gnLFxuICBTVE9QOiAnU1RPUCcsXG4gIEFDVElPTjogJ0FDVElPTicsXG59O1xuXG5leHBvcnQgY29uc3QgUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OID0gbmV3IEluamVjdGlvblRva2VuPFJlZHV4RGV2dG9vbHNFeHRlbnNpb24+KFxuICAnQG5ncngvc3RvcmUtZGV2dG9vbHMgUmVkdXggRGV2dG9vbHMgRXh0ZW5zaW9uJ1xuKTtcblxuZXhwb3J0IGludGVyZmFjZSBSZWR1eERldnRvb2xzRXh0ZW5zaW9uQ29ubmVjdGlvbiB7XG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKGNoYW5nZTogYW55KSA9PiB2b2lkKTogdm9pZDtcbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbiAgc2VuZChhY3Rpb246IGFueSwgc3RhdGU6IGFueSk6IHZvaWQ7XG4gIGluaXQoc3RhdGU/OiBhbnkpOiB2b2lkO1xuICBlcnJvcihhbnlFcnI6IGFueSk6IHZvaWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIFJlZHV4RGV2dG9vbHNFeHRlbnNpb25Db25maWcge1xuICBmZWF0dXJlcz86IG9iamVjdCB8IGJvb2xlYW47XG4gIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbWF4QWdlPzogbnVtYmVyO1xuICBzZXJpYWxpemU/OiBib29sZWFuIHwgU2VyaWFsaXphdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkdXhEZXZ0b29sc0V4dGVuc2lvbiB7XG4gIGNvbm5lY3QoXG4gICAgb3B0aW9uczogUmVkdXhEZXZ0b29sc0V4dGVuc2lvbkNvbmZpZ1xuICApOiBSZWR1eERldnRvb2xzRXh0ZW5zaW9uQ29ubmVjdGlvbjtcbiAgc2VuZChhY3Rpb246IGFueSwgc3RhdGU6IGFueSwgb3B0aW9uczogUmVkdXhEZXZ0b29sc0V4dGVuc2lvbkNvbmZpZyk6IHZvaWQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZXZ0b29sc0V4dGVuc2lvbiB7XG4gIHByaXZhdGUgZGV2dG9vbHNFeHRlbnNpb246IFJlZHV4RGV2dG9vbHNFeHRlbnNpb247XG4gIHByaXZhdGUgZXh0ZW5zaW9uQ29ubmVjdGlvbiE6IFJlZHV4RGV2dG9vbHNFeHRlbnNpb25Db25uZWN0aW9uO1xuXG4gIGxpZnRlZEFjdGlvbnMkITogT2JzZXJ2YWJsZTxhbnk+O1xuICBhY3Rpb25zJCE6IE9ic2VydmFibGU8YW55PjtcbiAgc3RhcnQkITogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OKSBkZXZ0b29sc0V4dGVuc2lvbjogUmVkdXhEZXZ0b29sc0V4dGVuc2lvbixcbiAgICBASW5qZWN0KFNUT1JFX0RFVlRPT0xTX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFN0b3JlRGV2dG9vbHNDb25maWcsXG4gICAgcHJpdmF0ZSBkaXNwYXRjaGVyOiBEZXZ0b29sc0Rpc3BhdGNoZXJcbiAgKSB7XG4gICAgdGhpcy5kZXZ0b29sc0V4dGVuc2lvbiA9IGRldnRvb2xzRXh0ZW5zaW9uO1xuICAgIHRoaXMuY3JlYXRlQWN0aW9uU3RyZWFtcygpO1xuICB9XG5cbiAgbm90aWZ5KGFjdGlvbjogTGlmdGVkQWN0aW9uLCBzdGF0ZTogTGlmdGVkU3RhdGUpIHtcbiAgICBpZiAoIXRoaXMuZGV2dG9vbHNFeHRlbnNpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBhY3Rpb24gcmVxdWlyZXMgYSBmdWxsIHVwZGF0ZSBvZiB0aGUgbGlmdGVkU3RhdGUuXG4gICAgLy8gSWYgaXQgaXMgYSBzaW1wbGUgYWN0aW9uIGdlbmVyYXRlZCBieSB0aGUgdXNlcidzIGFwcCBhbmQgdGhlIHJlY29yZGluZ1xuICAgIC8vIGlzIG5vdCBsb2NrZWQvcGF1c2VkLCBvbmx5IHNlbmQgdGhlIGFjdGlvbiBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgKGZhc3QpLlxuICAgIC8vXG4gICAgLy8gQSBmdWxsIGxpZnRlZFN0YXRlIHVwZGF0ZSAoc2xvdzogc2VyaWFsaXplcyB0aGUgZW50aXJlIGxpZnRlZFN0YXRlKSBpc1xuICAgIC8vIG9ubHkgcmVxdWlyZWQgd2hlbjpcbiAgICAvLyAgIGEpIHJlZHV4LWRldnRvb2xzLWV4dGVuc2lvbiBmaXJlcyB0aGUgQEBJbml0IGFjdGlvbiAoaWdub3JlZCBieVxuICAgIC8vICAgICAgQG5ncngvc3RvcmUtZGV2dG9vbHMpXG4gICAgLy8gICBiKSBhbiBhY3Rpb24gaXMgZ2VuZXJhdGVkIGJ5IGFuIEBuZ3J4IG1vZHVsZSAoZS5nLiBAbmdyeC9lZmZlY3RzL2luaXRcbiAgICAvLyAgICAgIG9yIEBuZ3J4L3N0b3JlL3VwZGF0ZS1yZWR1Y2VycylcbiAgICAvLyAgIGMpIHRoZSBzdGF0ZSBoYXMgYmVlbiByZWNvbXB1dGVkIGR1ZSB0byB0aW1lLXRyYXZlbGluZ1xuICAgIC8vICAgZCkgYW55IGFjdGlvbiB0aGF0IGlzIG5vdCBhIFBlcmZvcm1BY3Rpb24gdG8gZXJyIG9uIHRoZSBzaWRlIG9mXG4gICAgLy8gICAgICBjYXV0aW9uLlxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gUEVSRk9STV9BQ1RJT04pIHtcbiAgICAgIGlmIChzdGF0ZS5pc0xvY2tlZCB8fCBzdGF0ZS5pc1BhdXNlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHVubGlmdFN0YXRlKHN0YXRlKTtcbiAgICAgIGlmIChcbiAgICAgICAgc2hvdWxkRmlsdGVyQWN0aW9ucyh0aGlzLmNvbmZpZykgJiZcbiAgICAgICAgaXNBY3Rpb25GaWx0ZXJlZChcbiAgICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIHRoaXMuY29uZmlnLnByZWRpY2F0ZSxcbiAgICAgICAgICB0aGlzLmNvbmZpZy5hY3Rpb25zU2FmZWxpc3QsXG4gICAgICAgICAgdGhpcy5jb25maWcuYWN0aW9uc0Jsb2NrbGlzdFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2FuaXRpemVkU3RhdGUgPSB0aGlzLmNvbmZpZy5zdGF0ZVNhbml0aXplclxuICAgICAgICA/IHNhbml0aXplU3RhdGUoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5zdGF0ZVNhbml0aXplcixcbiAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRTdGF0ZUluZGV4XG4gICAgICAgICAgKVxuICAgICAgICA6IGN1cnJlbnRTdGF0ZTtcbiAgICAgIGNvbnN0IHNhbml0aXplZEFjdGlvbiA9IHRoaXMuY29uZmlnLmFjdGlvblNhbml0aXplclxuICAgICAgICA/IHNhbml0aXplQWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5jb25maWcuYWN0aW9uU2FuaXRpemVyLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgc3RhdGUubmV4dEFjdGlvbklkXG4gICAgICAgICAgKVxuICAgICAgICA6IGFjdGlvbjtcblxuICAgICAgdGhpcy5zZW5kVG9SZWR1eERldnRvb2xzKCgpID0+XG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uQ29ubmVjdGlvbi5zZW5kKHNhbml0aXplZEFjdGlvbiwgc2FuaXRpemVkU3RhdGUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXF1aXJlcyBmdWxsIHN0YXRlIHVwZGF0ZVxuICAgICAgY29uc3Qgc2FuaXRpemVkTGlmdGVkU3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzdGFnZWRBY3Rpb25JZHM6IHN0YXRlLnN0YWdlZEFjdGlvbklkcyxcbiAgICAgICAgYWN0aW9uc0J5SWQ6IHRoaXMuY29uZmlnLmFjdGlvblNhbml0aXplclxuICAgICAgICAgID8gc2FuaXRpemVBY3Rpb25zKHRoaXMuY29uZmlnLmFjdGlvblNhbml0aXplciwgc3RhdGUuYWN0aW9uc0J5SWQpXG4gICAgICAgICAgOiBzdGF0ZS5hY3Rpb25zQnlJZCxcbiAgICAgICAgY29tcHV0ZWRTdGF0ZXM6IHRoaXMuY29uZmlnLnN0YXRlU2FuaXRpemVyXG4gICAgICAgICAgPyBzYW5pdGl6ZVN0YXRlcyh0aGlzLmNvbmZpZy5zdGF0ZVNhbml0aXplciwgc3RhdGUuY29tcHV0ZWRTdGF0ZXMpXG4gICAgICAgICAgOiBzdGF0ZS5jb21wdXRlZFN0YXRlcyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc2VuZFRvUmVkdXhEZXZ0b29scygoKSA9PlxuICAgICAgICB0aGlzLmRldnRvb2xzRXh0ZW5zaW9uLnNlbmQoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBzYW5pdGl6ZWRMaWZ0ZWRTdGF0ZSxcbiAgICAgICAgICB0aGlzLmdldEV4dGVuc2lvbkNvbmZpZyh0aGlzLmNvbmZpZylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNoYW5nZXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKCF0aGlzLmRldnRvb2xzRXh0ZW5zaW9uKSB7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5kZXZ0b29sc0V4dGVuc2lvbi5jb25uZWN0KFxuICAgICAgICB0aGlzLmdldEV4dGVuc2lvbkNvbmZpZyh0aGlzLmNvbmZpZylcbiAgICAgICk7XG4gICAgICB0aGlzLmV4dGVuc2lvbkNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgICAgY29ubmVjdGlvbi5pbml0KCk7XG5cbiAgICAgIGNvbm5lY3Rpb24uc3Vic2NyaWJlKChjaGFuZ2U6IGFueSkgPT4gc3Vic2NyaWJlci5uZXh0KGNoYW5nZSkpO1xuICAgICAgcmV0dXJuIGNvbm5lY3Rpb24udW5zdWJzY3JpYmU7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFjdGlvblN0cmVhbXMoKSB7XG4gICAgLy8gTGlzdGVucyB0byBhbGwgY2hhbmdlc1xuICAgIGNvbnN0IGNoYW5nZXMkID0gdGhpcy5jcmVhdGVDaGFuZ2VzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmUoKSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHRoZSBzdGFydCBhY3Rpb25cbiAgICBjb25zdCBzdGFydCQgPSBjaGFuZ2VzJC5waXBlKFxuICAgICAgZmlsdGVyKChjaGFuZ2U6IGFueSkgPT4gY2hhbmdlLnR5cGUgPT09IEV4dGVuc2lvbkFjdGlvblR5cGVzLlNUQVJUKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHRoZSBzdG9wIGFjdGlvblxuICAgIGNvbnN0IHN0b3AkID0gY2hhbmdlcyQucGlwZShcbiAgICAgIGZpbHRlcigoY2hhbmdlOiBhbnkpID0+IGNoYW5nZS50eXBlID09PSBFeHRlbnNpb25BY3Rpb25UeXBlcy5TVE9QKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGxpZnRlZCBhY3Rpb25zXG4gICAgY29uc3QgbGlmdGVkQWN0aW9ucyQgPSBjaGFuZ2VzJC5waXBlKFxuICAgICAgZmlsdGVyKChjaGFuZ2UpID0+IGNoYW5nZS50eXBlID09PSBFeHRlbnNpb25BY3Rpb25UeXBlcy5ESVNQQVRDSCksXG4gICAgICBtYXAoKGNoYW5nZSkgPT4gdGhpcy51bndyYXBBY3Rpb24oY2hhbmdlLnBheWxvYWQpKSxcbiAgICAgIGNvbmNhdE1hcCgoYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBJTVBPUlRfU1RBVEUpIHtcbiAgICAgICAgICAvLyBTdGF0ZSBpbXBvcnRzIG1heSBoYXBwZW4gaW4gdHdvIHNpdHVhdGlvbnM6XG4gICAgICAgICAgLy8gMS4gRXhwbGljaXRseSBieSB1c2VyXG4gICAgICAgICAgLy8gMi4gVXNlciBhY3RpdmF0ZWQgdGhlIFwicGVyc2lzdCBzdGF0ZSBhY2Nyb3NzIHJlbG9hZHNcIiBvcHRpb25cbiAgICAgICAgICAvLyAgICBhbmQgbm93IHRoZSBzdGF0ZSBpcyBpbXBvcnRlZCBkdXJpbmcgcmVsb2FkLlxuICAgICAgICAgIC8vIEJlY2F1c2Ugb2Ygb3B0aW9uIDIsIHdlIG5lZWQgdG8gZ2l2ZSBwb3NzaWJsZVxuICAgICAgICAgIC8vIGxhenkgbG9hZGVkIHJlZHVjZXJzIHRpbWUgdG8gaW5zdGFudGlhdGUuXG4gICAgICAgICAgLy8gQXMgc29vbiBhcyB0aGVyZSBpcyBubyBVUERBVEUgYWN0aW9uIHdpdGhpbiAxIHNlY29uZCxcbiAgICAgICAgICAvLyBpdCBpcyBhc3N1bWVkIHRoYXQgYWxsIHJlZHVjZXJzIGFyZSBsb2FkZWQuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2hlci5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBVUERBVEUpLFxuICAgICAgICAgICAgdGltZW91dCgxMDAwKSxcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBhY3Rpb24pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihhY3Rpb24pKSxcbiAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZihhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHVubGlmdGVkIGFjdGlvbnNcbiAgICBjb25zdCBhY3Rpb25zJCA9IGNoYW5nZXMkLnBpcGUoXG4gICAgICBmaWx0ZXIoKGNoYW5nZSkgPT4gY2hhbmdlLnR5cGUgPT09IEV4dGVuc2lvbkFjdGlvblR5cGVzLkFDVElPTiksXG4gICAgICBtYXAoKGNoYW5nZSkgPT4gdGhpcy51bndyYXBBY3Rpb24oY2hhbmdlLnBheWxvYWQpKVxuICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb25zVW50aWxTdG9wJCA9IGFjdGlvbnMkLnBpcGUodGFrZVVudGlsKHN0b3AkKSk7XG4gICAgY29uc3QgbGlmdGVkVW50aWxTdG9wJCA9IGxpZnRlZEFjdGlvbnMkLnBpcGUodGFrZVVudGlsKHN0b3AkKSk7XG4gICAgdGhpcy5zdGFydCQgPSBzdGFydCQucGlwZSh0YWtlVW50aWwoc3RvcCQpKTtcblxuICAgIC8vIE9ubHkgdGFrZSB0aGUgYWN0aW9uIHNvdXJjZXMgYmV0d2VlbiB0aGUgc3RhcnQvc3RvcCBldmVudHNcbiAgICB0aGlzLmFjdGlvbnMkID0gdGhpcy5zdGFydCQucGlwZShzd2l0Y2hNYXAoKCkgPT4gYWN0aW9uc1VudGlsU3RvcCQpKTtcbiAgICB0aGlzLmxpZnRlZEFjdGlvbnMkID0gdGhpcy5zdGFydCQucGlwZShzd2l0Y2hNYXAoKCkgPT4gbGlmdGVkVW50aWxTdG9wJCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bndyYXBBY3Rpb24oYWN0aW9uOiBBY3Rpb24pIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycgPyBldmFsKGAoJHthY3Rpb259KWApIDogYWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRlbnNpb25Db25maWcoY29uZmlnOiBTdG9yZURldnRvb2xzQ29uZmlnKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uT3B0aW9uczogUmVkdXhEZXZ0b29sc0V4dGVuc2lvbkNvbmZpZyA9IHtcbiAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgZmVhdHVyZXM6IGNvbmZpZy5mZWF0dXJlcyxcbiAgICAgIHNlcmlhbGl6ZTogY29uZmlnLnNlcmlhbGl6ZSxcbiAgICAgIC8vIFRoZSBhY3Rpb24vc3RhdGUgc2FuaXRpemVycyBhcmUgbm90IGFkZGVkIHRvIHRoZSBjb25maWdcbiAgICAgIC8vIGJlY2F1c2Ugc2FuaXRhdGlvbiBpcyBkb25lIGluIHRoaXMgY2xhc3MgYWxyZWFkeS5cbiAgICAgIC8vIEl0IGlzIGRvbmUgYmVmb3JlIHNlbmRpbmcgaXQgdG8gdGhlIGRldnRvb2xzIGV4dGVuc2lvbiBmb3IgY29uc2lzdGVuY3k6XG4gICAgICAvLyAtIElmIHdlIGNhbGwgZXh0ZW5zaW9uQ29ubmVjdGlvbi5zZW5kKC4uLiksXG4gICAgICAvLyAgIHRoZSBleHRlbnNpb24gd291bGQgY2FsbCB0aGUgc2FuaXRpemVycy5cbiAgICAgIC8vIC0gSWYgd2UgY2FsbCBkZXZ0b29sc0V4dGVuc2lvbi5zZW5kKC4uLikgKGFrYSBmdWxsIHN0YXRlIHVwZGF0ZSksXG4gICAgICAvLyAgIHRoZSBleHRlbnNpb24gd291bGQgTk9UIGNhbGwgdGhlIHNhbml0aXplcnMsIHNvIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLlxuICAgIH07XG4gICAgaWYgKGNvbmZpZy5tYXhBZ2UgIT09IGZhbHNlIC8qIHN1cHBvcnQgPT09IDAgKi8pIHtcbiAgICAgIGV4dGVuc2lvbk9wdGlvbnMubWF4QWdlID0gY29uZmlnLm1heEFnZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvbk9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIHNlbmRUb1JlZHV4RGV2dG9vbHMoc2VuZDogRnVuY3Rpb24pIHtcbiAgICB0cnkge1xuICAgICAgc2VuZCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnQG5ncngvc3RvcmUtZGV2dG9vbHM6IHNvbWV0aGluZyB3ZW50IHdyb25nIGluc2lkZSB0aGUgcmVkdXggZGV2dG9vbHMnLFxuICAgICAgICBlcnJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/esm2015/src/index.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: src/index.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
1
|
export { StoreDevtoolsModule } from './instrument';
|
|
7
2
|
export { RECOMPUTE } from './reducer';
|
|
8
3
|
export { StoreDevtools } from './devtools';
|
|
9
4
|
export { StoreDevtoolsConfig, INITIAL_OPTIONS, } from './config';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JlLWRldnRvb2xzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxtQkFBbUIsRUFHbkIsZUFBZSxHQUNoQixNQUFNLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFN0b3JlRGV2dG9vbHNNb2R1bGUgfSBmcm9tICcuL2luc3RydW1lbnQnO1xuZXhwb3J0IHsgTGlmdGVkU3RhdGUsIFJFQ09NUFVURSB9IGZyb20gJy4vcmVkdWNlcic7XG5leHBvcnQgeyBTdG9yZURldnRvb2xzIH0gZnJvbSAnLi9kZXZ0b29scyc7XG5leHBvcnQge1xuICBTdG9yZURldnRvb2xzQ29uZmlnLFxuICBTdG9yZURldnRvb2xzT3B0aW9ucyxcbiAgRGV2VG9vbHNGZWF0dXJlT3B0aW9ucyxcbiAgSU5JVElBTF9PUFRJT05TLFxufSBmcm9tICcuL2NvbmZpZyc7XG4iXX0=
|
|
@@ -1,50 +1,27 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: src/instrument.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
1
|
import { InjectionToken, NgModule } from '@angular/core';
|
|
7
2
|
import { ReducerManagerDispatcher, StateObservable } from '@ngrx/store';
|
|
8
3
|
import { INITIAL_OPTIONS, STORE_DEVTOOLS_CONFIG, noMonitor, createConfig, } from './config';
|
|
9
4
|
import { StoreDevtools } from './devtools';
|
|
10
5
|
import { DevtoolsExtension, REDUX_DEVTOOLS_EXTENSION, } from './extension';
|
|
11
6
|
import { DevtoolsDispatcher } from './devtools-dispatcher';
|
|
12
|
-
/** @type {?} */
|
|
13
7
|
export const IS_EXTENSION_OR_MONITOR_PRESENT = new InjectionToken('@ngrx/store-devtools Is Devtools Extension or Monitor Present');
|
|
14
|
-
/**
|
|
15
|
-
* @param {?} extension
|
|
16
|
-
* @param {?} config
|
|
17
|
-
* @return {?}
|
|
18
|
-
*/
|
|
19
8
|
export function createIsExtensionOrMonitorPresent(extension, config) {
|
|
20
9
|
return Boolean(extension) || config.monitor !== noMonitor;
|
|
21
10
|
}
|
|
22
|
-
/**
|
|
23
|
-
* @return {?}
|
|
24
|
-
*/
|
|
25
11
|
export function createReduxDevtoolsExtension() {
|
|
26
|
-
/** @type {?} */
|
|
27
12
|
const extensionKey = '__REDUX_DEVTOOLS_EXTENSION__';
|
|
28
13
|
if (typeof window === 'object' &&
|
|
29
|
-
typeof
|
|
30
|
-
return
|
|
14
|
+
typeof window[extensionKey] !== 'undefined') {
|
|
15
|
+
return window[extensionKey];
|
|
31
16
|
}
|
|
32
17
|
else {
|
|
33
18
|
return null;
|
|
34
19
|
}
|
|
35
20
|
}
|
|
36
|
-
/**
|
|
37
|
-
* @param {?} devtools
|
|
38
|
-
* @return {?}
|
|
39
|
-
*/
|
|
40
21
|
export function createStateObservable(devtools) {
|
|
41
22
|
return devtools.state;
|
|
42
23
|
}
|
|
43
24
|
export class StoreDevtoolsModule {
|
|
44
|
-
/**
|
|
45
|
-
* @param {?=} options
|
|
46
|
-
* @return {?}
|
|
47
|
-
*/
|
|
48
25
|
static instrument(options = {}) {
|
|
49
26
|
return {
|
|
50
27
|
ngModule: StoreDevtoolsModule,
|
|
@@ -86,4 +63,4 @@ export class StoreDevtoolsModule {
|
|
|
86
63
|
StoreDevtoolsModule.decorators = [
|
|
87
64
|
{ type: NgModule, args: [{},] }
|
|
88
65
|
];
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc3RvcmUtZGV2dG9vbHMvc3JjL2luc3RydW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHeEUsT0FBTyxFQUNMLGVBQWUsRUFDZixxQkFBcUIsRUFHckIsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsd0JBQXdCLEdBRXpCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLElBQUksY0FBYyxDQUMvRCwrREFBK0QsQ0FDaEUsQ0FBQztBQUVGLE1BQU0sVUFBVSxpQ0FBaUMsQ0FDL0MsU0FBd0MsRUFDeEMsTUFBMkI7SUFFM0IsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEI7SUFDMUMsTUFBTSxZQUFZLEdBQUcsOEJBQThCLENBQUM7SUFFcEQsSUFDRSxPQUFPLE1BQU0sS0FBSyxRQUFRO1FBQzFCLE9BQVEsTUFBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLFdBQVcsRUFDcEQ7UUFDQSxPQUFRLE1BQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUN0QztTQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFFBQXVCO0lBRXZCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQztBQUN4QixDQUFDO0FBR0QsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixNQUFNLENBQUMsVUFBVSxDQUNmLFVBQWdDLEVBQUU7UUFFbEMsT0FBTztZQUNMLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsU0FBUyxFQUFFO2dCQUNULGlCQUFpQjtnQkFDakIsa0JBQWtCO2dCQUNsQixhQUFhO2dCQUNiO29CQUNFLE9BQU8sRUFBRSxlQUFlO29CQUN4QixRQUFRLEVBQUUsT0FBTztpQkFDbEI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLCtCQUErQjtvQkFDeEMsSUFBSSxFQUFFLENBQUMsd0JBQXdCLEVBQUUscUJBQXFCLENBQUM7b0JBQ3ZELFVBQVUsRUFBRSxpQ0FBaUM7aUJBQzlDO2dCQUNEO29CQUNFLE9BQU8sRUFBRSx3QkFBd0I7b0JBQ2pDLFVBQVUsRUFBRSw0QkFBNEI7aUJBQ3pDO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxxQkFBcUI7b0JBQzlCLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDdkIsVUFBVSxFQUFFLFlBQVk7aUJBQ3pCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxlQUFlO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7b0JBQ3JCLFVBQVUsRUFBRSxxQkFBcUI7aUJBQ2xDO2dCQUNEO29CQUNFLE9BQU8sRUFBRSx3QkFBd0I7b0JBQ2pDLFdBQVcsRUFBRSxrQkFBa0I7aUJBQ2hDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7O1lBeENGLFFBQVEsU0FBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWR1Y2VyTWFuYWdlckRpc3BhdGNoZXIsIFN0YXRlT2JzZXJ2YWJsZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgSU5JVElBTF9PUFRJT05TLFxuICBTVE9SRV9ERVZUT09MU19DT05GSUcsXG4gIFN0b3JlRGV2dG9vbHNDb25maWcsXG4gIFN0b3JlRGV2dG9vbHNPcHRpb25zLFxuICBub01vbml0b3IsXG4gIGNyZWF0ZUNvbmZpZyxcbn0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgU3RvcmVEZXZ0b29scyB9IGZyb20gJy4vZGV2dG9vbHMnO1xuaW1wb3J0IHtcbiAgRGV2dG9vbHNFeHRlbnNpb24sXG4gIFJFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTixcbiAgUmVkdXhEZXZ0b29sc0V4dGVuc2lvbixcbn0gZnJvbSAnLi9leHRlbnNpb24nO1xuaW1wb3J0IHsgRGV2dG9vbHNEaXNwYXRjaGVyIH0gZnJvbSAnLi9kZXZ0b29scy1kaXNwYXRjaGVyJztcblxuZXhwb3J0IGNvbnN0IElTX0VYVEVOU0lPTl9PUl9NT05JVE9SX1BSRVNFTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oXG4gICdAbmdyeC9zdG9yZS1kZXZ0b29scyBJcyBEZXZ0b29scyBFeHRlbnNpb24gb3IgTW9uaXRvciBQcmVzZW50J1xuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlzRXh0ZW5zaW9uT3JNb25pdG9yUHJlc2VudChcbiAgZXh0ZW5zaW9uOiBSZWR1eERldnRvb2xzRXh0ZW5zaW9uIHwgbnVsbCxcbiAgY29uZmlnOiBTdG9yZURldnRvb2xzQ29uZmlnXG4pIHtcbiAgcmV0dXJuIEJvb2xlYW4oZXh0ZW5zaW9uKSB8fCBjb25maWcubW9uaXRvciAhPT0gbm9Nb25pdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdXhEZXZ0b29sc0V4dGVuc2lvbigpIHtcbiAgY29uc3QgZXh0ZW5zaW9uS2V5ID0gJ19fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18nO1xuXG4gIGlmIChcbiAgICB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiAod2luZG93IGFzIGFueSlbZXh0ZW5zaW9uS2V5XSAhPT0gJ3VuZGVmaW5lZCdcbiAgKSB7XG4gICAgcmV0dXJuICh3aW5kb3cgYXMgYW55KVtleHRlbnNpb25LZXldO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGF0ZU9ic2VydmFibGUoXG4gIGRldnRvb2xzOiBTdG9yZURldnRvb2xzXG4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gZGV2dG9vbHMuc3RhdGU7XG59XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBTdG9yZURldnRvb2xzTW9kdWxlIHtcbiAgc3RhdGljIGluc3RydW1lbnQoXG4gICAgb3B0aW9uczogU3RvcmVEZXZ0b29sc09wdGlvbnMgPSB7fVxuICApOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFN0b3JlRGV2dG9vbHNNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFN0b3JlRGV2dG9vbHNNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgRGV2dG9vbHNFeHRlbnNpb24sXG4gICAgICAgIERldnRvb2xzRGlzcGF0Y2hlcixcbiAgICAgICAgU3RvcmVEZXZ0b29scyxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IElOSVRJQUxfT1BUSU9OUyxcbiAgICAgICAgICB1c2VWYWx1ZTogb3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IElTX0VYVEVOU0lPTl9PUl9NT05JVE9SX1BSRVNFTlQsXG4gICAgICAgICAgZGVwczogW1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTiwgU1RPUkVfREVWVE9PTFNfQ09ORklHXSxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBjcmVhdGVJc0V4dGVuc2lvbk9yTW9uaXRvclByZXNlbnQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBSRURVWF9ERVZUT09MU19FWFRFTlNJT04sXG4gICAgICAgICAgdXNlRmFjdG9yeTogY3JlYXRlUmVkdXhEZXZ0b29sc0V4dGVuc2lvbixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFNUT1JFX0RFVlRPT0xTX0NPTkZJRyxcbiAgICAgICAgICBkZXBzOiBbSU5JVElBTF9PUFRJT05TXSxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBjcmVhdGVDb25maWcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBTdGF0ZU9ic2VydmFibGUsXG4gICAgICAgICAgZGVwczogW1N0b3JlRGV2dG9vbHNdLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNyZWF0ZVN0YXRlT2JzZXJ2YWJsZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFJlZHVjZXJNYW5hZ2VyRGlzcGF0Y2hlcixcbiAgICAgICAgICB1c2VFeGlzdGluZzogRGV2dG9vbHNEaXNwYXRjaGVyLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|