@ngxs/store 18.1.5-dev.master-cd94934 → 18.1.5-dev.master-8fe2074

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.
@@ -31,20 +31,17 @@ function cloneDefaults(defaults) {
31
31
  * The `StateFactory` class adds root and feature states to the graph.
32
32
  * This extracts state names from state classes, checks if they already
33
33
  * exist in the global graph, throws errors if their names are invalid, etc.
34
- * See its constructor, state factories inject state factories that are
35
- * parent-level providers. This is required to get feature states from the
36
- * injector on the same level.
37
34
  *
38
- * The `NgxsModule.forFeature(...)` returns `providers: [StateFactory, ...states]`.
39
- * The `StateFactory` is initialized on the feature level and goes through `...states`
40
- * to get them from the injector through `injector.get(state)`.
35
+ * Root and feature initializers call `addAndReturnDefaults()` to add those states
36
+ * to the global graph. Since `addAndReturnDefaults` runs within the injection
37
+ * context (which might be the root injector or a feature injector), we can
38
+ * retrieve an instance of the state class using `inject(StateClass)`.
41
39
  * @ignore
42
40
  */
43
41
  export class StateFactory {
44
42
  constructor() {
45
43
  this._injector = inject(Injector);
46
44
  this._config = inject(NgxsConfig);
47
- this._parentFactory = inject(StateFactory, { optional: true, skipSelf: true });
48
45
  this._stateContextFactory = inject(StateContextFactory);
49
46
  this._actions = inject(InternalActions);
50
47
  this._actionResults = inject(InternalDispatchedActionResults);
@@ -61,47 +58,36 @@ export class StateFactory {
61
58
  const stateFactory = this;
62
59
  const propGetter = stateFactory._propGetter;
63
60
  function resolveGetter(key) {
64
- const path = stateFactory.statePaths[key];
61
+ const path = stateFactory._statePaths[key];
65
62
  return path ? propGetter(path.split('.')) : null;
66
63
  }
67
- const context = this._parentFactory
68
- ? this._parentFactory.getRuntimeSelectorContext()
69
- : {
70
- getStateGetter(key) {
71
- // Use `@__INLINE__` annotation to forcely inline `resolveGetter`.
72
- // This is a Terser annotation, which will function only in the production mode.
73
- let getter = /*@__INLINE__*/ resolveGetter(key);
74
- if (getter) {
75
- return getter;
76
- }
77
- return (...args) => {
78
- // Late loaded getter
79
- if (!getter) {
80
- getter = /*@__INLINE__*/ resolveGetter(key);
81
- }
82
- return getter ? getter(...args) : undefined;
83
- };
84
- },
85
- getSelectorOptions(localOptions) {
86
- const globalSelectorOptions = stateFactory._config.selectorOptions;
87
- return {
88
- ...globalSelectorOptions,
89
- ...(localOptions || {})
90
- };
64
+ const context = {
65
+ getStateGetter(key) {
66
+ // Use `@__INLINE__` annotation to forcely inline `resolveGetter`.
67
+ // This is a Terser annotation, which will function only in the production mode.
68
+ let getter = /*@__INLINE__*/ resolveGetter(key);
69
+ if (getter) {
70
+ return getter;
91
71
  }
92
- };
72
+ return (...args) => {
73
+ // Late loaded getter
74
+ if (!getter) {
75
+ getter = /*@__INLINE__*/ resolveGetter(key);
76
+ }
77
+ return getter ? getter(...args) : undefined;
78
+ };
79
+ },
80
+ getSelectorOptions(localOptions) {
81
+ const globalSelectorOptions = stateFactory._config.selectorOptions;
82
+ return {
83
+ ...globalSelectorOptions,
84
+ ...(localOptions || {})
85
+ };
86
+ }
87
+ };
93
88
  return context;
94
89
  });
95
90
  }
96
- get states() {
97
- return this._parentFactory ? this._parentFactory.states : this._states;
98
- }
99
- get statesByName() {
100
- return this._parentFactory ? this._parentFactory.statesByName : this._statesByName;
101
- }
102
- get statePaths() {
103
- return this._parentFactory ? this._parentFactory.statePaths : this._statePaths;
104
- }
105
91
  ngOnDestroy() {
106
92
  this._actionsSubscription?.unsubscribe();
107
93
  }
@@ -137,7 +123,7 @@ export class StateFactory {
137
123
  path,
138
124
  isInitialised: false,
139
125
  actions: meta.actions,
140
- instance: this._injector.get(stateClass),
126
+ instance: inject(stateClass),
141
127
  defaults: cloneDefaults(meta.defaults)
142
128
  };
143
129
  // ensure our store hasn't already been added
@@ -146,7 +132,7 @@ export class StateFactory {
146
132
  if (!this.hasBeenMountedAndBootstrapped(name, path)) {
147
133
  bootstrappedStores.push(stateMap);
148
134
  }
149
- this.states.push(stateMap);
135
+ this._states.push(stateMap);
150
136
  this.hydrateActionMetasMap(stateMap);
151
137
  }
152
138
  return bootstrappedStores;
@@ -161,12 +147,6 @@ export class StateFactory {
161
147
  return { defaults, states: mappedStores };
162
148
  }
163
149
  connectActionHandlers() {
164
- // Note: We have to connect actions only once when the `StateFactory`
165
- // is being created for the first time. This checks if we're in
166
- // a child state factory and the parent state factory already exists.
167
- if (this._parentFactory || this._actionsSubscription !== null) {
168
- return;
169
- }
170
150
  this._actionsSubscription = this._actions
171
151
  .pipe(filter((ctx) => ctx.status === "DISPATCHED" /* ActionStatus.Dispatched */), mergeMap(ctx => {
172
152
  const action = ctx.action;
@@ -222,7 +202,7 @@ export class StateFactory {
222
202
  }
223
203
  addToStatesMap(stateClasses) {
224
204
  const newStates = [];
225
- const statesMap = this.statesByName;
205
+ const statesMap = this._statesByName;
226
206
  for (const stateClass of stateClasses) {
227
207
  const stateName = ɵgetStoreMetadata(stateClass).name;
228
208
  if (typeof ngDevMode !== 'undefined' && ngDevMode) {
@@ -237,7 +217,7 @@ export class StateFactory {
237
217
  return { newStates };
238
218
  }
239
219
  addRuntimeInfoToMeta(meta, path) {
240
- this.statePaths[meta.name] = path;
220
+ this._statePaths[meta.name] = path;
241
221
  // TODO: versions after v3 - we plan to get rid of the `path` property because it is non-deterministic
242
222
  // we can do this when we get rid of the incorrectly exposed getStoreMetadata
243
223
  // We will need to come up with an alternative to what was exposed in v3 because this is used by many plugins
@@ -247,7 +227,7 @@ export class StateFactory {
247
227
  const valueIsBootstrappedInInitialState = getValue(this._initialState, path) !== undefined;
248
228
  // This checks whether a state has been already added to the global graph and
249
229
  // its lifecycle is in 'bootstrapped' state.
250
- return this.statesByName[name] && valueIsBootstrappedInInitialState;
230
+ return this._statesByName[name] && valueIsBootstrappedInInitialState;
251
231
  }
252
232
  hydrateActionMetasMap({ path, actions, instance }) {
253
233
  const { dispatched$ } = this._actions;
@@ -318,13 +298,14 @@ export class StateFactory {
318
298
  }
319
299
  }
320
300
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
321
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory }); }
301
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, providedIn: 'root' }); }
322
302
  }
323
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, decorators: [{
324
- type: Injectable
304
+ type: Injectable,
305
+ args: [{ providedIn: 'root' }]
325
306
  }] });
326
307
  // This is used to replace `setState` and `patchState` once the action
327
308
  // handler has been unsubscribed or completed, to prevent writing
328
309
  // to the state context.
329
310
  function noop() { }
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy9pbnRlcm5hbC9zdGF0ZS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFhLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBR1QsaUJBQWlCLEVBRWpCLG9CQUFvQixFQUdyQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEYsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osWUFBWSxFQUNaLEVBQUUsRUFFRixVQUFVLEVBQ1YsVUFBVSxFQUNWLGNBQWMsRUFDZCxNQUFNLEVBQ04sR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUVULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGtCQUFrQixFQUVsQixXQUFXLEVBQ1gsWUFBWSxFQUlaLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUErQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBC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O3dCQUN4RSxnRUFBZ0U7d0JBQ2hFLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3pCLENBQUM7b0JBRUQsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztpSUEvVVUsWUFBWTtxSUFBWixZQUFZOzsyRkFBWixZQUFZO2tCQUR4QixVQUFVOztBQW1WWCxzRUFBc0U7QUFDdEUsaUVBQWlFO0FBQ2pFLHdCQUF3QjtBQUN4QixTQUFTLElBQUksS0FBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSwgaW5qZWN0LCDJtWlzUHJvbWlzZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgybVtZW1vaXplLFxuICDJtU1FVEFfS0VZLFxuICDJtVBsYWluT2JqZWN0T2YsXG4gIMm1TWV0YURhdGFNb2RlbCxcbiAgybVnZXRTdG9yZU1ldGFkYXRhLFxuICDJtVN0YXRlQ2xhc3NJbnRlcm5hbCxcbiAgybVJTklUSUFMX1NUQVRFX1RPS0VOLFxuICDJtVNoYXJlZFNlbGVjdG9yT3B0aW9ucyxcbiAgybVSdW50aW1lU2VsZWN0b3JDb250ZXh0XG59IGZyb20gJ0BuZ3hzL3N0b3JlL2ludGVybmFscyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlLCBnZXRWYWx1ZSwgc2V0VmFsdWUgfSBmcm9tICdAbmd4cy9zdG9yZS9wbHVnaW5zJztcbmltcG9ydCB7XG4gIGZvcmtKb2luLFxuICBmcm9tLFxuICBpc09ic2VydmFibGUsXG4gIG9mLFxuICBTdWJzY3JpcHRpb24sXG4gIHRocm93RXJyb3IsXG4gIGNhdGNoRXJyb3IsXG4gIGRlZmF1bHRJZkVtcHR5LFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHRha2VVbnRpbCxcbiAgZmluYWxpemUsXG4gIE9ic2VydmFibGVcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neHNDb25maWcgfSBmcm9tICcuLi9zeW1ib2xzJztcbmltcG9ydCB7XG4gIGJ1aWxkR3JhcGgsXG4gIGZpbmRGdWxsUGFyZW50UGF0aCxcbiAgTWFwcGVkU3RvcmUsXG4gIG5hbWVUb1N0YXRlLFxuICDJtVBST1BfR0VUVEVSLFxuICBTdGF0ZUtleUdyYXBoLFxuICBTdGF0ZXNBbmREZWZhdWx0cyxcbiAgU3RhdGVzQnlOYW1lLFxuICB0b3BvbG9naWNhbFNvcnRcbn0gZnJvbSAnLi9pbnRlcm5hbHMnO1xuaW1wb3J0IHsgTmd4c0FjdGlvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb24tcmVnaXN0cnknO1xuaW1wb3J0IHsgQWN0aW9uQ29udGV4dCwgQWN0aW9uU3RhdHVzLCBJbnRlcm5hbEFjdGlvbnMgfSBmcm9tICcuLi9hY3Rpb25zLXN0cmVhbSc7XG5pbXBvcnQgeyBJbnRlcm5hbERpc3BhdGNoZWRBY3Rpb25SZXN1bHRzIH0gZnJvbSAnLi4vaW50ZXJuYWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBlbnN1cmVTdGF0ZU5hbWVJc1VuaXF1ZSwgZW5zdXJlU3RhdGVzQXJlRGVjb3JhdGVkIH0gZnJvbSAnLi4vdXRpbHMvc3RvcmUtdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBlbnN1cmVTdGF0ZUNsYXNzSXNJbmplY3RhYmxlIH0gZnJvbSAnLi4vaXZ5L2l2eS1lbmFibGVkLWluLWRldi1tb2RlJztcbmltcG9ydCB7IE5neHNVbmhhbmRsZWRBY3Rpb25zTG9nZ2VyIH0gZnJvbSAnLi4vZGV2LWZlYXR1cmVzL25neHMtdW5oYW5kbGVkLWFjdGlvbnMtbG9nZ2VyJztcbmltcG9ydCB7IE5neHNVbmhhbmRsZWRFcnJvckhhbmRsZXIgfSBmcm9tICcuLi9uZ3hzLXVuaGFuZGxlZC1lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IGFzc2lnblVuaGFuZGxlZENhbGxiYWNrIH0gZnJvbSAnLi91bmhhbmRsZWQtcnhqcy1lcnJvci1jYWxsYmFjayc7XG5pbXBvcnQgeyBTdGF0ZUNvbnRleHRGYWN0b3J5IH0gZnJvbSAnLi9zdGF0ZS1jb250ZXh0LWZhY3RvcnknO1xuaW1wb3J0IHsgb2ZBY3Rpb25EaXNwYXRjaGVkIH0gZnJvbSAnLi4vb3BlcmF0b3JzL29mLWFjdGlvbic7XG5cbmZ1bmN0aW9uIGNsb25lRGVmYXVsdHMoZGVmYXVsdHM6IGFueSk6IGFueSB7XG4gIGxldCB2YWx1ZSA9IGRlZmF1bHRzID09PSB1bmRlZmluZWQgPyB7fSA6IGRlZmF1bHRzO1xuXG4gIGlmIChkZWZhdWx0cykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZmF1bHRzKSkge1xuICAgICAgdmFsdWUgPSBkZWZhdWx0cy5zbGljZSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmF1bHRzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsdWUgPSB7IC4uLmRlZmF1bHRzIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSBgU3RhdGVGYWN0b3J5YCBjbGFzcyBhZGRzIHJvb3QgYW5kIGZlYXR1cmUgc3RhdGVzIHRvIHRoZSBncmFwaC5cbiAqIFRoaXMgZXh0cmFjdHMgc3RhdGUgbmFtZXMgZnJvbSBzdGF0ZSBjbGFzc2VzLCBjaGVja3MgaWYgdGhleSBhbHJlYWR5XG4gKiBleGlzdCBpbiB0aGUgZ2xvYmFsIGdyYXBoLCB0aHJvd3MgZXJyb3JzIGlmIHRoZWlyIG5hbWVzIGFyZSBpbnZhbGlkLCBldGMuXG4gKiBTZWUgaXRzIGNvbnN0cnVjdG9yLCBzdGF0ZSBmYWN0b3JpZXMgaW5qZWN0IHN0YXRlIGZhY3RvcmllcyB0aGF0IGFyZVxuICogcGFyZW50LWxldmVsIHByb3ZpZGVycy4gVGhpcyBpcyByZXF1aXJlZCB0byBnZXQgZmVhdHVyZSBzdGF0ZXMgZnJvbSB0aGVcbiAqIGluamVjdG9yIG9uIHRoZSBzYW1lIGxldmVsLlxuICpcbiAqIFRoZSBgTmd4c01vZHVsZS5mb3JGZWF0dXJlKC4uLilgIHJldHVybnMgYHByb3ZpZGVyczogW1N0YXRlRmFjdG9yeSwgLi4uc3RhdGVzXWAuXG4gKiBUaGUgYFN0YXRlRmFjdG9yeWAgaXMgaW5pdGlhbGl6ZWQgb24gdGhlIGZlYXR1cmUgbGV2ZWwgYW5kIGdvZXMgdGhyb3VnaCBgLi4uc3RhdGVzYFxuICogdG8gZ2V0IHRoZW0gZnJvbSB0aGUgaW5qZWN0b3IgdGhyb3VnaCBgaW5qZWN0b3IuZ2V0KHN0YXRlKWAuXG4gKiBAaWdub3JlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdGF0ZUZhY3RvcnkgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZyA9IGluamVjdChOZ3hzQ29uZmlnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50RmFjdG9yeSA9IGluamVjdChTdGF0ZUZhY3RvcnksIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHRGYWN0b3J5ID0gaW5qZWN0KFN0YXRlQ29udGV4dEZhY3RvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3Rpb25zID0gaW5qZWN0KEludGVybmFsQWN0aW9ucyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGlvblJlc3VsdHMgPSBpbmplY3QoSW50ZXJuYWxEaXNwYXRjaGVkQWN0aW9uUmVzdWx0cyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxTdGF0ZSA9IGluamVjdCjJtUlOSVRJQUxfU1RBVEVfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGlvblJlZ2lzdHJ5ID0gaW5qZWN0KE5neHNBY3Rpb25SZWdpc3RyeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3BHZXR0ZXIgPSBpbmplY3QoybVQUk9QX0dFVFRFUik7XG5cbiAgcHJpdmF0ZSBfYWN0aW9uc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfbmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlcjogTmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlciA9IG51bGwhO1xuXG4gIHByaXZhdGUgX3N0YXRlczogTWFwcGVkU3RvcmVbXSA9IFtdO1xuICBnZXQgc3RhdGVzKCk6IE1hcHBlZFN0b3JlW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRGYWN0b3J5ID8gdGhpcy5fcGFyZW50RmFjdG9yeS5zdGF0ZXMgOiB0aGlzLl9zdGF0ZXM7XG4gIH1cblxuICBwcml2YXRlIF9zdGF0ZXNCeU5hbWU6IFN0YXRlc0J5TmFtZSA9IHt9O1xuICBnZXQgc3RhdGVzQnlOYW1lKCk6IFN0YXRlc0J5TmFtZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudEZhY3RvcnkgPyB0aGlzLl9wYXJlbnRGYWN0b3J5LnN0YXRlc0J5TmFtZSA6IHRoaXMuX3N0YXRlc0J5TmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgX3N0YXRlUGF0aHM6IMm1UGxhaW5PYmplY3RPZjxzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgZ2V0IHN0YXRlUGF0aHMoKTogybVQbGFpbk9iamVjdE9mPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRGYWN0b3J5ID8gdGhpcy5fcGFyZW50RmFjdG9yeS5zdGF0ZVBhdGhzIDogdGhpcy5fc3RhdGVQYXRocztcbiAgfVxuXG4gIGdldFJ1bnRpbWVTZWxlY3RvckNvbnRleHQgPSDJtW1lbW9pemUoKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGNvbnN0IHN0YXRlRmFjdG9yeSA9IHRoaXM7XG4gICAgY29uc3QgcHJvcEdldHRlciA9IHN0YXRlRmFjdG9yeS5fcHJvcEdldHRlcjtcblxuICAgIGZ1bmN0aW9uIHJlc29sdmVHZXR0ZXIoa2V5OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBzdGF0ZUZhY3Rvcnkuc3RhdGVQYXRoc1trZXldO1xuICAgICAgcmV0dXJuIHBhdGggPyBwcm9wR2V0dGVyKHBhdGguc3BsaXQoJy4nKSkgOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IMm1UnVudGltZVNlbGVjdG9yQ29udGV4dCA9IHRoaXMuX3BhcmVudEZhY3RvcnlcbiAgICAgID8gdGhpcy5fcGFyZW50RmFjdG9yeS5nZXRSdW50aW1lU2VsZWN0b3JDb250ZXh0KClcbiAgICAgIDoge1xuICAgICAgICAgIGdldFN0YXRlR2V0dGVyKGtleTogc3RyaW5nKSB7XG4gICAgICAgICAgICAvLyBVc2UgYEBfX0lOTElORV9fYCBhbm5vdGF0aW9uIHRvIGZvcmNlbHkgaW5saW5lIGByZXNvbHZlR2V0dGVyYC5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBUZXJzZXIgYW5ub3RhdGlvbiwgd2hpY2ggd2lsbCBmdW5jdGlvbiBvbmx5IGluIHRoZSBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAgICAgICBsZXQgZ2V0dGVyID0gLypAX19JTkxJTkVfXyovIHJlc29sdmVHZXR0ZXIoa2V5KTtcbiAgICAgICAgICAgIGlmIChnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAvLyBMYXRlIGxvYWRlZCBnZXR0ZXJcbiAgICAgICAgICAgICAgaWYgKCFnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBnZXR0ZXIgPSAvKkBfX0lOTElORV9fKi8gcmVzb2x2ZUdldHRlcihrZXkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIgPyBnZXR0ZXIoLi4uYXJncykgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0U2VsZWN0b3JPcHRpb25zKGxvY2FsT3B0aW9ucz86IMm1U2hhcmVkU2VsZWN0b3JPcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBnbG9iYWxTZWxlY3Rvck9wdGlvbnMgPSBzdGF0ZUZhY3RvcnkuX2NvbmZpZy5zZWxlY3Rvck9wdGlvbnM7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5nbG9iYWxTZWxlY3Rvck9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLihsb2NhbE9wdGlvbnMgfHwge30pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfSk7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9uc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgc3RhdGUgdG8gdGhlIGdsb2JhbCBkZWZzLlxuICAgKi9cbiAgYWRkKHN0YXRlQ2xhc3NlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IE1hcHBlZFN0b3JlW10ge1xuICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICAgIGVuc3VyZVN0YXRlc0FyZURlY29yYXRlZChzdGF0ZUNsYXNzZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbmV3U3RhdGVzIH0gPSB0aGlzLmFkZFRvU3RhdGVzTWFwKHN0YXRlQ2xhc3Nlcyk7XG4gICAgaWYgKCFuZXdTdGF0ZXMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBzdGF0ZUdyYXBoOiBTdGF0ZUtleUdyYXBoID0gYnVpbGRHcmFwaChuZXdTdGF0ZXMpO1xuICAgIGNvbnN0IHNvcnRlZFN0YXRlczogc3RyaW5nW10gPSB0b3BvbG9naWNhbFNvcnQoc3RhdGVHcmFwaCk7XG4gICAgY29uc3QgcGF0aHM6IMm1UGxhaW5PYmplY3RPZjxzdHJpbmc+ID0gZmluZEZ1bGxQYXJlbnRQYXRoKHN0YXRlR3JhcGgpO1xuICAgIGNvbnN0IG5hbWVHcmFwaDogybVQbGFpbk9iamVjdE9mPMm1U3RhdGVDbGFzc0ludGVybmFsPiA9IG5hbWVUb1N0YXRlKG5ld1N0YXRlcyk7XG4gICAgY29uc3QgYm9vdHN0cmFwcGVkU3RvcmVzOiBNYXBwZWRTdG9yZVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygc29ydGVkU3RhdGVzKSB7XG4gICAgICBjb25zdCBzdGF0ZUNsYXNzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbCA9IG5hbWVHcmFwaFtuYW1lXTtcbiAgICAgIGNvbnN0IHBhdGg6IHN0cmluZyA9IHBhdGhzW25hbWVdO1xuICAgICAgY29uc3QgbWV0YTogybVNZXRhRGF0YU1vZGVsID0gc3RhdGVDbGFzc1vJtU1FVEFfS0VZXSE7XG5cbiAgICAgIHRoaXMuYWRkUnVudGltZUluZm9Ub01ldGEobWV0YSwgcGF0aCk7XG5cbiAgICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgY2FsbGVkIGBlbnN1cmVTdGF0ZUNsYXNzSXNJbmplY3RhYmxlYCB3aXRoaW4gdGhlXG4gICAgICAvLyBgU3RhdGVgIGRlY29yYXRvci4gVGhpcyBjaGVjayBpcyBtb3ZlZCBoZXJlIGJlY2F1c2UgdGhlIGDJtXByb3ZgIHByb3BlcnR5XG4gICAgICAvLyB3aWxsIG5vdCBleGlzdCBvbiB0aGUgY2xhc3MgaW4gSklUIG1vZGUgKGJlY2F1c2UgaXQncyBzZXQgYXN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGR1cmluZyBKSVQgY29tcGlsYXRpb24gdGhyb3VnaCBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCkuXG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlKSB7XG4gICAgICAgIGVuc3VyZVN0YXRlQ2xhc3NJc0luamVjdGFibGUoc3RhdGVDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXRlTWFwOiBNYXBwZWRTdG9yZSA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgaXNJbml0aWFsaXNlZDogZmFsc2UsXG4gICAgICAgIGFjdGlvbnM6IG1ldGEuYWN0aW9ucyxcbiAgICAgICAgaW5zdGFuY2U6IHRoaXMuX2luamVjdG9yLmdldChzdGF0ZUNsYXNzKSxcbiAgICAgICAgZGVmYXVsdHM6IGNsb25lRGVmYXVsdHMobWV0YS5kZWZhdWx0cylcbiAgICAgIH07XG5cbiAgICAgIC8vIGVuc3VyZSBvdXIgc3RvcmUgaGFzbid0IGFscmVhZHkgYmVlbiBhZGRlZFxuICAgICAgLy8gYnV0IGRvbid0IHRocm93IHNpbmNlIGl0IGNvdWxkIGJlIGxhenlcbiAgICAgIC8vIGxvYWRlZCBmcm9tIGRpZmZlcmVudCBwYXRoc1xuICAgICAgaWYgKCF0aGlzLmhhc0JlZW5Nb3VudGVkQW5kQm9vdHN0cmFwcGVkKG5hbWUsIHBhdGgpKSB7XG4gICAgICAgIGJvb3RzdHJhcHBlZFN0b3Jlcy5wdXNoKHN0YXRlTWFwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZU1hcCk7XG4gICAgICB0aGlzLmh5ZHJhdGVBY3Rpb25NZXRhc01hcChzdGF0ZU1hcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvb3RzdHJhcHBlZFN0b3JlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzZXQgb2Ygc3RhdGVzIHRvIHRoZSBzdG9yZSBhbmQgcmV0dXJuIHRoZSBkZWZhdWx0c1xuICAgKi9cbiAgYWRkQW5kUmV0dXJuRGVmYXVsdHMoc3RhdGVDbGFzc2VzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbFtdKTogU3RhdGVzQW5kRGVmYXVsdHMge1xuICAgIGNvbnN0IGNsYXNzZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW10gPSBzdGF0ZUNsYXNzZXMgfHwgW107XG5cbiAgICBjb25zdCBtYXBwZWRTdG9yZXM6IE1hcHBlZFN0b3JlW10gPSB0aGlzLmFkZChjbGFzc2VzKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IG1hcHBlZFN0b3Jlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0OiBhbnksIG1hcHBlZFN0b3JlOiBNYXBwZWRTdG9yZSkgPT5cbiAgICAgICAgc2V0VmFsdWUocmVzdWx0LCBtYXBwZWRTdG9yZS5wYXRoLCBtYXBwZWRTdG9yZS5kZWZhdWx0cyksXG4gICAgICB7fVxuICAgICk7XG4gICAgcmV0dXJuIHsgZGVmYXVsdHMsIHN0YXRlczogbWFwcGVkU3RvcmVzIH07XG4gIH1cblxuICBjb25uZWN0QWN0aW9uSGFuZGxlcnMoKTogdm9pZCB7XG4gICAgLy8gTm90ZTogV2UgaGF2ZSB0byBjb25uZWN0IGFjdGlvbnMgb25seSBvbmNlIHdoZW4gdGhlIGBTdGF0ZUZhY3RvcnlgXG4gICAgLy8gICAgICAgaXMgYmVpbmcgY3JlYXRlZCBmb3IgdGhlIGZpcnN0IHRpbWUuIFRoaXMgY2hlY2tzIGlmIHdlJ3JlIGluXG4gICAgLy8gICAgICAgYSBjaGlsZCBzdGF0ZSBmYWN0b3J5IGFuZCB0aGUgcGFyZW50IHN0YXRlIGZhY3RvcnkgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMuX3BhcmVudEZhY3RvcnkgfHwgdGhpcy5fYWN0aW9uc1N1YnNjcmlwdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FjdGlvbnNTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3Rpb25zXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChjdHg6IEFjdGlvbkNvbnRleHQpID0+IGN0eC5zdGF0dXMgPT09IEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkKSxcbiAgICAgICAgbWVyZ2VNYXAoY3R4ID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb246IGFueSA9IGN0eC5hY3Rpb247XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlQWN0aW9ucyhhY3Rpb24pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4gPEFjdGlvbkNvbnRleHQ+eyBhY3Rpb24sIHN0YXR1czogQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWwgfSksXG4gICAgICAgICAgICBkZWZhdWx0SWZFbXB0eSg8QWN0aW9uQ29udGV4dD57IGFjdGlvbiwgc3RhdHVzOiBBY3Rpb25TdGF0dXMuQ2FuY2VsZWQgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgbmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlciA9ICh0aGlzLl9uZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyIHx8PVxuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGhhbmRsZWFibGVFcnJvciA9IGFzc2lnblVuaGFuZGxlZENhbGxiYWNrKGVycm9yLCAoKSA9PlxuICAgICAgICAgICAgICAgIG5neHNVbmhhbmRsZWRFcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IsIHsgYWN0aW9uIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiBvZig8QWN0aW9uQ29udGV4dD57XG4gICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXR1czogQWN0aW9uU3RhdHVzLkVycm9yZWQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGhhbmRsZWFibGVFcnJvclxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoY3R4ID0+IHRoaXMuX2FjdGlvblJlc3VsdHMubmV4dChjdHgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgYWN0aW9ucyBvbiB0aGUgc3RhdGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnZva2VBY3Rpb25zKGFjdGlvbjogYW55KTogT2JzZXJ2YWJsZTx1bmtub3duW10+IHtcbiAgICBjb25zdCB0eXBlID0gZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShhY3Rpb24pITtcbiAgICBjb25zdCByZXN1bHRzOiBPYnNlcnZhYmxlPHVua25vd24+W10gPSBbXTtcblxuICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgZGlzcGF0Y2hlZCBhY3Rpb24gaGFzIGJlZW4gaGFuZGxlZCwgdGhpcyBpcyBhc3NpZ25lZFxuICAgIC8vIHRvIGB0cnVlYCB3aXRoaW4gdGhlIGJlbG93IGBmb3JgIGxvb3AgaWYgYW55IGBhY3Rpb25NZXRhc2AgaGFzIGJlZW4gZm91bmQuXG4gICAgbGV0IGFjdGlvbkhhc0JlZW5IYW5kbGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBhY3Rpb25IYW5kbGVycyA9IHRoaXMuX2FjdGlvblJlZ2lzdHJ5LmdldCh0eXBlKTtcblxuICAgIGlmIChhY3Rpb25IYW5kbGVycykge1xuICAgICAgZm9yIChjb25zdCBhY3Rpb25IYW5kbGVyIG9mIGFjdGlvbkhhbmRsZXJzKSB7XG4gICAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSBhY3Rpb25IYW5kbGVyKGFjdGlvbik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG5cbiAgICAgICAgYWN0aW9uSGFzQmVlbkhhbmRsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBgTmd4c1VuaGFuZGxlZEFjdGlvbnNMb2dnZXJgIGlzIGEgdHJlZS1zaGFrYWJsZSBjbGFzcyB3aGljaCBmdW5jdGlvbnNcbiAgICAvLyBvbmx5IGR1cmluZyBkZXZlbG9wbWVudC5cbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlICYmICFhY3Rpb25IYXNCZWVuSGFuZGxlZCkge1xuICAgICAgY29uc3QgdW5oYW5kbGVkQWN0aW9uc0xvZ2dlciA9IHRoaXMuX2luamVjdG9yLmdldChOZ3hzVW5oYW5kbGVkQWN0aW9uc0xvZ2dlciwgbnVsbCk7XG4gICAgICAvLyBUaGUgYE5neHNVbmhhbmRsZWRBY3Rpb25zTG9nZ2VyYCB3aWxsIG5vdCBiZSByZXNvbHZlZCBieSB0aGUgaW5qZWN0b3IgaWYgdGhlXG4gICAgICAvLyBgTmd4c0RldmVsb3BtZW50TW9kdWxlYCBpcyBub3QgcHJvdmlkZWQuIEl0J3MgZW5vdWdoIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGBpbmplY3Rvci5nZXRgXG4gICAgICAvLyBkaWRuJ3QgcmV0dXJuIGBudWxsYCBzbyB3ZSBtYXkgZW5zdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW1wb3J0ZWQuXG4gICAgICB1bmhhbmRsZWRBY3Rpb25zTG9nZ2VyPy53YXJuKGFjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0cy5wdXNoKG9mKHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JrSm9pbihyZXN1bHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9TdGF0ZXNNYXAoc3RhdGVDbGFzc2VzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbFtdKToge1xuICAgIG5ld1N0YXRlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXTtcbiAgfSB7XG4gICAgY29uc3QgbmV3U3RhdGVzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbFtdID0gW107XG4gICAgY29uc3Qgc3RhdGVzTWFwOiBTdGF0ZXNCeU5hbWUgPSB0aGlzLnN0YXRlc0J5TmFtZTtcblxuICAgIGZvciAoY29uc3Qgc3RhdGVDbGFzcyBvZiBzdGF0ZUNsYXNzZXMpIHtcbiAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IMm1Z2V0U3RvcmVNZXRhZGF0YShzdGF0ZUNsYXNzKS5uYW1lITtcbiAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICAgICAgZW5zdXJlU3RhdGVOYW1lSXNVbmlxdWUoc3RhdGVOYW1lLCBzdGF0ZUNsYXNzLCBzdGF0ZXNNYXApO1xuICAgICAgfVxuICAgICAgY29uc3QgdW5tb3VudGVkU3RhdGUgPSAhc3RhdGVzTWFwW3N0YXRlTmFtZV07XG4gICAgICBpZiAodW5tb3VudGVkU3RhdGUpIHtcbiAgICAgICAgbmV3U3RhdGVzLnB1c2goc3RhdGVDbGFzcyk7XG4gICAgICAgIHN0YXRlc01hcFtzdGF0ZU5hbWVdID0gc3RhdGVDbGFzcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBuZXdTdGF0ZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUnVudGltZUluZm9Ub01ldGEobWV0YTogybVNZXRhRGF0YU1vZGVsLCBwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlUGF0aHNbbWV0YS5uYW1lIV0gPSBwYXRoO1xuICAgIC8vIFRPRE86IHZlcnNpb25zIGFmdGVyIHYzIC0gd2UgcGxhbiB0byBnZXQgcmlkIG9mIHRoZSBgcGF0aGAgcHJvcGVydHkgYmVjYXVzZSBpdCBpcyBub24tZGV0ZXJtaW5pc3RpY1xuICAgIC8vIHdlIGNhbiBkbyB0aGlzIHdoZW4gd2UgZ2V0IHJpZCBvZiB0aGUgaW5jb3JyZWN0bHkgZXhwb3NlZCBnZXRTdG9yZU1ldGFkYXRhXG4gICAgLy8gV2Ugd2lsbCBuZWVkIHRvIGNvbWUgdXAgd2l0aCBhbiBhbHRlcm5hdGl2ZSB0byB3aGF0IHdhcyBleHBvc2VkIGluIHYzIGJlY2F1c2UgdGhpcyBpcyB1c2VkIGJ5IG1hbnkgcGx1Z2luc1xuICAgIG1ldGEucGF0aCA9IHBhdGg7XG4gIH1cblxuICBwcml2YXRlIGhhc0JlZW5Nb3VudGVkQW5kQm9vdHN0cmFwcGVkKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVJc0Jvb3RzdHJhcHBlZEluSW5pdGlhbFN0YXRlOiBib29sZWFuID1cbiAgICAgIGdldFZhbHVlKHRoaXMuX2luaXRpYWxTdGF0ZSwgcGF0aCkgIT09IHVuZGVmaW5lZDtcbiAgICAvLyBUaGlzIGNoZWNrcyB3aGV0aGVyIGEgc3RhdGUgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZCB0byB0aGUgZ2xvYmFsIGdyYXBoIGFuZFxuICAgIC8vIGl0cyBsaWZlY3ljbGUgaXMgaW4gJ2Jvb3RzdHJhcHBlZCcgc3RhdGUuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVzQnlOYW1lW25hbWVdICYmIHZhbHVlSXNCb290c3RyYXBwZWRJbkluaXRpYWxTdGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgaHlkcmF0ZUFjdGlvbk1ldGFzTWFwKHsgcGF0aCwgYWN0aW9ucywgaW5zdGFuY2UgfTogTWFwcGVkU3RvcmUpOiB2b2lkIHtcbiAgICBjb25zdCB7IGRpc3BhdGNoZWQkIH0gPSB0aGlzLl9hY3Rpb25zO1xuICAgIGZvciAoY29uc3QgYWN0aW9uVHlwZSBvZiBPYmplY3Qua2V5cyhhY3Rpb25zKSkge1xuICAgICAgY29uc3QgYWN0aW9uSGFuZGxlcnMgPSBhY3Rpb25zW2FjdGlvblR5cGVdLm1hcChhY3Rpb25NZXRhID0+IHtcbiAgICAgICAgY29uc3QgY2FuY2VsYWJsZSA9ICEhYWN0aW9uTWV0YS5vcHRpb25zLmNhbmNlbFVuY29tcGxldGVkO1xuXG4gICAgICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0ZUNvbnRleHQgPSB0aGlzLl9zdGF0ZUNvbnRleHRGYWN0b3J5LmNyZWF0ZVN0YXRlQ29udGV4dChwYXRoKTtcblxuICAgICAgICAgIGxldCByZXN1bHQgPSBpbnN0YW5jZVthY3Rpb25NZXRhLmZuXShzdGF0ZUNvbnRleHQsIGFjdGlvbik7XG5cbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSBgaXNQcm9taXNlYCBpbnN0ZWFkIG9mIGNoZWNraW5nIHdoZXRoZXJcbiAgICAgICAgICAvLyBgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZWAuIEluIHpvbmUuanMgcGF0Y2hlZCBlbnZpcm9ubWVudHMsIGBnbG9iYWwuUHJvbWlzZWBcbiAgICAgICAgICAvLyBpcyB0aGUgYFpvbmVBd2FyZVByb21pc2VgLiBTb21lIEFQSXMsIHdoaWNoIGFyZSBsaWtlbHkgbm90IHBhdGNoZWQgYnkgem9uZS5qc1xuICAgICAgICAgIC8vIGZvciBjZXJ0YWluIHJlYXNvbnMsIG1pZ2h0IG5vdCB3b3JrIHdpdGggYGluc3RhbmNlb2ZgLiBGb3IgaW5zdGFuY2UsIHRoZSBkeW5hbWljXG4gICAgICAgICAgLy8gaW1wb3J0IHJldHVybnMgYSBuYXRpdmUgcHJvbWlzZSAobm90IGEgYFpvbmVBd2FyZVByb21pc2VgKSwgY2F1c2luZyB0aGlzIGNoZWNrIHRvXG4gICAgICAgICAgLy8gYmUgZmFsc3kuXG4gICAgICAgICAgaWYgKMm1aXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZyb20ocmVzdWx0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKFxuICAgICAgICAgICAgICBtZXJnZU1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICjJtWlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmcm9tKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAvLyBJZiB0aGlzIG9ic2VydmFibGUgaGFzIGNvbXBsZXRlZCB3aXRob3V0IGVtaXR0aW5nIGFueSB2YWx1ZXMsXG4gICAgICAgICAgICAgIC8vIHdlIHdvdWxkbid0IHdhbnQgdG8gY29tcGxldGUgdGhlIGVudGlyZSBjaGFpbiBvZiBhY3Rpb25zLlxuICAgICAgICAgICAgICAvLyBJZiBhbnkgb2JzZXJ2YWJsZSBjb21wbGV0ZXMsIHRoZW4gdGhlIGFjdGlvbiB3aWxsIGJlIGNhbmNlbGVkLlxuICAgICAgICAgICAgICAvLyBGb3IgaW5zdGFuY2UsIGlmIGFueSBhY3Rpb24gaGFuZGxlciBoYWQgYSBzdGF0ZW1lbnQgbGlrZVxuICAgICAgICAgICAgICAvLyBgaGFuZGxlcihjdHgpIHsgcmV0dXJuIEVNUFRZOyB9YCwgdGhlbiB0aGUgYWN0aW9uIHdvdWxkIGJlIGNhbmNlbGVkLlxuICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25neHMvc3RvcmUvaXNzdWVzLzE1NjhcbiAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGRvbid0IGNhcmUgYWJvdXQgdGhlIHJldHVybiB0eXBlOyB3ZSBvbmx5IGNhcmVcbiAgICAgICAgICAgICAgLy8gYWJvdXQgZW1pc3Npb24sIGFuZCB0aHVzIGB1bmRlZmluZWRgIGlzIGFwcGxpY2FibGUgYnkgdGhlIGZyYW1ld29yay5cbiAgICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm90aWZpZXIkID0gZGlzcGF0Y2hlZCQucGlwZShvZkFjdGlvbkRpc3BhdGNoZWQoYWN0aW9uKSk7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKHRha2VVbnRpbChub3RpZmllciQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnBpcGUoXG4gICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSB1c2UgdGhlIGBmaW5hbGl6ZWAgb3BlcmF0b3Igb25seSB3aGVuIHRoZSBhY3Rpb24gaGFuZGxlclxuICAgICAgICAgICAgICAvLyByZXR1cm5zIGFuIG9ic2VydmFibGUuIElmIHRoZSBhY3Rpb24gaGFuZGxlciBpcyBzeW5jaHJvbm91cywgd2UgZG8gbm90XG4gICAgICAgICAgICAgIC8vIG5lZWQgdG8gc2V0IHRoZSBzdGF0ZSBjb250ZXh0IGZ1bmN0aW9ucyB0byBgbm9vcGAsIGFzIHRoZSBhYnNlbmNlIG9mIGFcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIHZhbHVlIGluZGljYXRlcyBubyBhc3luY2hyb25vdXMgZnVuY3Rpb25hbGl0eS4gSWYgdGhlIGhhbmRsZXInc1xuICAgICAgICAgICAgICAvLyByZXN1bHQgaXMgdW5zdWJzY3JpYmVkIChlaXRoZXIgYmVjYXVzZSB0aGUgb2JzZXJ2YWJsZSBoYXMgY29tcGxldGVkIG9yIGl0XG4gICAgICAgICAgICAgIC8vIHdhcyB1bnN1YnNjcmliZWQgYnkgYHRha2VVbnRpbGAgZHVlIHRvIGEgbmV3IGFjdGlvbiBiZWluZyBkaXNwYXRjaGVkKSxcbiAgICAgICAgICAgICAgLy8gd2UgcHJldmVudCB3cml0aW5nIHRvIHRoZSBzdGF0ZSBjb250ZXh0LlxuICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGVDb250ZXh0LnNldFN0YXRlID0gbm9vcDtcbiAgICAgICAgICAgICAgICBzdGF0ZUNvbnRleHQucGF0Y2hTdGF0ZSA9IG5vb3A7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYWN0aW9uIGhhbmRsZXIgaXMgc3luY2hyb25vdXMgYW5kIHJldHVybnMgbm90aGluZyAoYHZvaWRgKSwgd2VcbiAgICAgICAgICAgIC8vIHN0aWxsIGhhdmUgdG8gY29udmVydCB0aGUgcmVzdWx0IHRvIGEgc3luY2hyb25vdXMgb2JzZXJ2YWJsZS5cbiAgICAgICAgICAgIHJlc3VsdCA9IG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbkhhbmRsZXIgb2YgYWN0aW9uSGFuZGxlcnMpIHtcbiAgICAgICAgdGhpcy5fYWN0aW9uUmVnaXN0cnkucmVnaXN0ZXIoYWN0aW9uVHlwZSwgYWN0aW9uSGFuZGxlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgaXMgdXNlZCB0byByZXBsYWNlIGBzZXRTdGF0ZWAgYW5kIGBwYXRjaFN0YXRlYCBvbmNlIHRoZSBhY3Rpb25cbi8vIGhhbmRsZXIgaGFzIGJlZW4gdW5zdWJzY3JpYmVkIG9yIGNvbXBsZXRlZCwgdG8gcHJldmVudCB3cml0aW5nXG4vLyB0byB0aGUgc3RhdGUgY29udGV4dC5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuIl19
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy9pbnRlcm5hbC9zdGF0ZS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFhLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBR1QsaUJBQWlCLEVBRWpCLG9CQUFvQixFQUdyQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEYsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osWUFBWSxFQUNaLEVBQUUsRUFFRixVQUFVLEVBQ1YsVUFBVSxFQUNWLGNBQWMsRUFDZCxNQUFNLEVBQ04sR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUVULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGtCQUFrQixFQUVsQixXQUFXLEVBQ1gsWUFBWSxFQUlaLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUErQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBC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RSw0RUFBNEU7d0JBQzVFLHlFQUF5RTt3QkFDekUsMkNBQTJDO3dCQUMzQyxRQUFRLENBQUMsR0FBRyxFQUFFOzRCQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzRCQUM3QixZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDSixDQUFDO3lCQUFNLENBQUM7d0JBQ04sd0VBQXdFO3dCQUN4RSxnRUFBZ0U7d0JBQ2hFLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3pCLENBQUM7b0JBRUQsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztpSUExVFUsWUFBWTtxSUFBWixZQUFZLGNBREMsTUFBTTs7MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQThUbEMsc0VBQXNFO0FBQ3RFLGlFQUFpRTtBQUNqRSx3QkFBd0I7QUFDeEIsU0FBUyxJQUFJLEtBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPbkRlc3Ryb3ksIGluamVjdCwgybVpc1Byb21pc2UgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIMm1bWVtb2l6ZSxcbiAgybVNRVRBX0tFWSxcbiAgybVQbGFpbk9iamVjdE9mLFxuICDJtU1ldGFEYXRhTW9kZWwsXG4gIMm1Z2V0U3RvcmVNZXRhZGF0YSxcbiAgybVTdGF0ZUNsYXNzSW50ZXJuYWwsXG4gIMm1SU5JVElBTF9TVEFURV9UT0tFTixcbiAgybVTaGFyZWRTZWxlY3Rvck9wdGlvbnMsXG4gIMm1UnVudGltZVNlbGVjdG9yQ29udGV4dFxufSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuaW1wb3J0IHsgZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZSwgZ2V0VmFsdWUsIHNldFZhbHVlIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5pbXBvcnQge1xuICBmb3JrSm9pbixcbiAgZnJvbSxcbiAgaXNPYnNlcnZhYmxlLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICB0aHJvd0Vycm9yLFxuICBjYXRjaEVycm9yLFxuICBkZWZhdWx0SWZFbXB0eSxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICB0YWtlVW50aWwsXG4gIGZpbmFsaXplLFxuICBPYnNlcnZhYmxlXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3hzQ29uZmlnIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQge1xuICBidWlsZEdyYXBoLFxuICBmaW5kRnVsbFBhcmVudFBhdGgsXG4gIE1hcHBlZFN0b3JlLFxuICBuYW1lVG9TdGF0ZSxcbiAgybVQUk9QX0dFVFRFUixcbiAgU3RhdGVLZXlHcmFwaCxcbiAgU3RhdGVzQW5kRGVmYXVsdHMsXG4gIFN0YXRlc0J5TmFtZSxcbiAgdG9wb2xvZ2ljYWxTb3J0XG59IGZyb20gJy4vaW50ZXJuYWxzJztcbmltcG9ydCB7IE5neHNBY3Rpb25SZWdpc3RyeSB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXJlZ2lzdHJ5JztcbmltcG9ydCB7IEFjdGlvbkNvbnRleHQsIEFjdGlvblN0YXR1cywgSW50ZXJuYWxBY3Rpb25zIH0gZnJvbSAnLi4vYWN0aW9ucy1zdHJlYW0nO1xuaW1wb3J0IHsgSW50ZXJuYWxEaXNwYXRjaGVkQWN0aW9uUmVzdWx0cyB9IGZyb20gJy4uL2ludGVybmFsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHsgZW5zdXJlU3RhdGVOYW1lSXNVbmlxdWUsIGVuc3VyZVN0YXRlc0FyZURlY29yYXRlZCB9IGZyb20gJy4uL3V0aWxzL3N0b3JlLXZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgZW5zdXJlU3RhdGVDbGFzc0lzSW5qZWN0YWJsZSB9IGZyb20gJy4uL2l2eS9pdnktZW5hYmxlZC1pbi1kZXYtbW9kZSc7XG5pbXBvcnQgeyBOZ3hzVW5oYW5kbGVkQWN0aW9uc0xvZ2dlciB9IGZyb20gJy4uL2Rldi1mZWF0dXJlcy9uZ3hzLXVuaGFuZGxlZC1hY3Rpb25zLWxvZ2dlcic7XG5pbXBvcnQgeyBOZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi4vbmd4cy11bmhhbmRsZWQtZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBhc3NpZ25VbmhhbmRsZWRDYWxsYmFjayB9IGZyb20gJy4vdW5oYW5kbGVkLXJ4anMtZXJyb3ItY2FsbGJhY2snO1xuaW1wb3J0IHsgU3RhdGVDb250ZXh0RmFjdG9yeSB9IGZyb20gJy4vc3RhdGUtY29udGV4dC1mYWN0b3J5JztcbmltcG9ydCB7IG9mQWN0aW9uRGlzcGF0Y2hlZCB9IGZyb20gJy4uL29wZXJhdG9ycy9vZi1hY3Rpb24nO1xuXG5mdW5jdGlvbiBjbG9uZURlZmF1bHRzKGRlZmF1bHRzOiBhbnkpOiBhbnkge1xuICBsZXQgdmFsdWUgPSBkZWZhdWx0cyA9PT0gdW5kZWZpbmVkID8ge30gOiBkZWZhdWx0cztcblxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0cykpIHtcbiAgICAgIHZhbHVlID0gZGVmYXVsdHMuc2xpY2UoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhbHVlID0geyAuLi5kZWZhdWx0cyB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgYFN0YXRlRmFjdG9yeWAgY2xhc3MgYWRkcyByb290IGFuZCBmZWF0dXJlIHN0YXRlcyB0byB0aGUgZ3JhcGguXG4gKiBUaGlzIGV4dHJhY3RzIHN0YXRlIG5hbWVzIGZyb20gc3RhdGUgY2xhc3NlcywgY2hlY2tzIGlmIHRoZXkgYWxyZWFkeVxuICogZXhpc3QgaW4gdGhlIGdsb2JhbCBncmFwaCwgdGhyb3dzIGVycm9ycyBpZiB0aGVpciBuYW1lcyBhcmUgaW52YWxpZCwgZXRjLlxuICpcbiAqIFJvb3QgYW5kIGZlYXR1cmUgaW5pdGlhbGl6ZXJzIGNhbGwgYGFkZEFuZFJldHVybkRlZmF1bHRzKClgIHRvIGFkZCB0aG9zZSBzdGF0ZXNcbiAqIHRvIHRoZSBnbG9iYWwgZ3JhcGguIFNpbmNlIGBhZGRBbmRSZXR1cm5EZWZhdWx0c2AgcnVucyB3aXRoaW4gdGhlIGluamVjdGlvblxuICogY29udGV4dCAod2hpY2ggbWlnaHQgYmUgdGhlIHJvb3QgaW5qZWN0b3Igb3IgYSBmZWF0dXJlIGluamVjdG9yKSwgd2UgY2FuXG4gKiByZXRyaWV2ZSBhbiBpbnN0YW5jZSBvZiB0aGUgc3RhdGUgY2xhc3MgdXNpbmcgYGluamVjdChTdGF0ZUNsYXNzKWAuXG4gKiBAaWdub3JlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3RhdGVGYWN0b3J5IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWcgPSBpbmplY3QoTmd4c0NvbmZpZyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dEZhY3RvcnkgPSBpbmplY3QoU3RhdGVDb250ZXh0RmFjdG9yeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGlvbnMgPSBpbmplY3QoSW50ZXJuYWxBY3Rpb25zKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aW9uUmVzdWx0cyA9IGluamVjdChJbnRlcm5hbERpc3BhdGNoZWRBY3Rpb25SZXN1bHRzKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbFN0YXRlID0gaW5qZWN0KMm1SU5JVElBTF9TVEFURV9UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aW9uUmVnaXN0cnkgPSBpbmplY3QoTmd4c0FjdGlvblJlZ2lzdHJ5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvcEdldHRlciA9IGluamVjdCjJtVBST1BfR0VUVEVSKTtcblxuICBwcml2YXRlIF9hY3Rpb25zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9uZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyOiBOZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyID0gbnVsbCE7XG5cbiAgcHJpdmF0ZSBfc3RhdGVzOiBNYXBwZWRTdG9yZVtdID0gW107XG4gIHByaXZhdGUgX3N0YXRlc0J5TmFtZTogU3RhdGVzQnlOYW1lID0ge307XG4gIHByaXZhdGUgX3N0YXRlUGF0aHM6IMm1UGxhaW5PYmplY3RPZjxzdHJpbmc+ID0ge307XG5cbiAgZ2V0UnVudGltZVNlbGVjdG9yQ29udGV4dCA9IMm1bWVtb2l6ZSgoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc3RhdGVGYWN0b3J5ID0gdGhpcztcbiAgICBjb25zdCBwcm9wR2V0dGVyID0gc3RhdGVGYWN0b3J5Ll9wcm9wR2V0dGVyO1xuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZUdldHRlcihrZXk6IHN0cmluZykge1xuICAgICAgY29uc3QgcGF0aCA9IHN0YXRlRmFjdG9yeS5fc3RhdGVQYXRoc1trZXldO1xuICAgICAgcmV0dXJuIHBhdGggPyBwcm9wR2V0dGVyKHBhdGguc3BsaXQoJy4nKSkgOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IMm1UnVudGltZVNlbGVjdG9yQ29udGV4dCA9IHtcbiAgICAgIGdldFN0YXRlR2V0dGVyKGtleTogc3RyaW5nKSB7XG4gICAgICAgIC8vIFVzZSBgQF9fSU5MSU5FX19gIGFubm90YXRpb24gdG8gZm9yY2VseSBpbmxpbmUgYHJlc29sdmVHZXR0ZXJgLlxuICAgICAgICAvLyBUaGlzIGlzIGEgVGVyc2VyIGFubm90YXRpb24sIHdoaWNoIHdpbGwgZnVuY3Rpb24gb25seSBpbiB0aGUgcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgICBsZXQgZ2V0dGVyID0gLypAX19JTkxJTkVfXyovIHJlc29sdmVHZXR0ZXIoa2V5KTtcbiAgICAgICAgaWYgKGdldHRlcikge1xuICAgICAgICAgIHJldHVybiBnZXR0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgLy8gTGF0ZSBsb2FkZWQgZ2V0dGVyXG4gICAgICAgICAgaWYgKCFnZXR0ZXIpIHtcbiAgICAgICAgICAgIGdldHRlciA9IC8qQF9fSU5MSU5FX18qLyByZXNvbHZlR2V0dGVyKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBnZXR0ZXIgPyBnZXR0ZXIoLi4uYXJncykgOiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZ2V0U2VsZWN0b3JPcHRpb25zKGxvY2FsT3B0aW9ucz86IMm1U2hhcmVkU2VsZWN0b3JPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbFNlbGVjdG9yT3B0aW9ucyA9IHN0YXRlRmFjdG9yeS5fY29uZmlnLnNlbGVjdG9yT3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5nbG9iYWxTZWxlY3Rvck9wdGlvbnMsXG4gICAgICAgICAgLi4uKGxvY2FsT3B0aW9ucyB8fCB7fSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9KTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBzdGF0ZSB0byB0aGUgZ2xvYmFsIGRlZnMuXG4gICAqL1xuICBwcml2YXRlIGFkZChzdGF0ZUNsYXNzZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW10pOiBNYXBwZWRTdG9yZVtdIHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlKSB7XG4gICAgICBlbnN1cmVTdGF0ZXNBcmVEZWNvcmF0ZWQoc3RhdGVDbGFzc2VzKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG5ld1N0YXRlcyB9ID0gdGhpcy5hZGRUb1N0YXRlc01hcChzdGF0ZUNsYXNzZXMpO1xuICAgIGlmICghbmV3U3RhdGVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgc3RhdGVHcmFwaDogU3RhdGVLZXlHcmFwaCA9IGJ1aWxkR3JhcGgobmV3U3RhdGVzKTtcbiAgICBjb25zdCBzb3J0ZWRTdGF0ZXM6IHN0cmluZ1tdID0gdG9wb2xvZ2ljYWxTb3J0KHN0YXRlR3JhcGgpO1xuICAgIGNvbnN0IHBhdGhzOiDJtVBsYWluT2JqZWN0T2Y8c3RyaW5nPiA9IGZpbmRGdWxsUGFyZW50UGF0aChzdGF0ZUdyYXBoKTtcbiAgICBjb25zdCBuYW1lR3JhcGg6IMm1UGxhaW5PYmplY3RPZjzJtVN0YXRlQ2xhc3NJbnRlcm5hbD4gPSBuYW1lVG9TdGF0ZShuZXdTdGF0ZXMpO1xuICAgIGNvbnN0IGJvb3RzdHJhcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHNvcnRlZFN0YXRlcykge1xuICAgICAgY29uc3Qgc3RhdGVDbGFzczogybVTdGF0ZUNsYXNzSW50ZXJuYWwgPSBuYW1lR3JhcGhbbmFtZV07XG4gICAgICBjb25zdCBwYXRoOiBzdHJpbmcgPSBwYXRoc1tuYW1lXTtcbiAgICAgIGNvbnN0IG1ldGE6IMm1TWV0YURhdGFNb2RlbCA9IHN0YXRlQ2xhc3NbybVNRVRBX0tFWV0hO1xuXG4gICAgICB0aGlzLmFkZFJ1bnRpbWVJbmZvVG9NZXRhKG1ldGEsIHBhdGgpO1xuXG4gICAgICAvLyBOb3RlOiBwcmV2aW91c2x5IHdlIGNhbGxlZCBgZW5zdXJlU3RhdGVDbGFzc0lzSW5qZWN0YWJsZWAgd2l0aGluIHRoZVxuICAgICAgLy8gYFN0YXRlYCBkZWNvcmF0b3IuIFRoaXMgY2hlY2sgaXMgbW92ZWQgaGVyZSBiZWNhdXNlIHRoZSBgybVwcm92YCBwcm9wZXJ0eVxuICAgICAgLy8gd2lsbCBub3QgZXhpc3Qgb24gdGhlIGNsYXNzIGluIEpJVCBtb2RlIChiZWNhdXNlIGl0J3Mgc2V0IGFzeW5jaHJvbm91c2x5XG4gICAgICAvLyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uIHRocm91Z2ggYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWApLlxuICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgICAgICBlbnN1cmVTdGF0ZUNsYXNzSXNJbmplY3RhYmxlKHN0YXRlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0ZU1hcDogTWFwcGVkU3RvcmUgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGlzSW5pdGlhbGlzZWQ6IGZhbHNlLFxuICAgICAgICBhY3Rpb25zOiBtZXRhLmFjdGlvbnMsXG4gICAgICAgIGluc3RhbmNlOiBpbmplY3Qoc3RhdGVDbGFzcyksXG4gICAgICAgIGRlZmF1bHRzOiBjbG9uZURlZmF1bHRzKG1ldGEuZGVmYXVsdHMpXG4gICAgICB9O1xuXG4gICAgICAvLyBlbnN1cmUgb3VyIHN0b3JlIGhhc24ndCBhbHJlYWR5IGJlZW4gYWRkZWRcbiAgICAgIC8vIGJ1dCBkb24ndCB0aHJvdyBzaW5jZSBpdCBjb3VsZCBiZSBsYXp5XG4gICAgICAvLyBsb2FkZWQgZnJvbSBkaWZmZXJlbnQgcGF0aHNcbiAgICAgIGlmICghdGhpcy5oYXNCZWVuTW91bnRlZEFuZEJvb3RzdHJhcHBlZChuYW1lLCBwYXRoKSkge1xuICAgICAgICBib290c3RyYXBwZWRTdG9yZXMucHVzaChzdGF0ZU1hcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0YXRlcy5wdXNoKHN0YXRlTWFwKTtcbiAgICAgIHRoaXMuaHlkcmF0ZUFjdGlvbk1ldGFzTWFwKHN0YXRlTWFwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9vdHN0cmFwcGVkU3RvcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNldCBvZiBzdGF0ZXMgdG8gdGhlIHN0b3JlIGFuZCByZXR1cm4gdGhlIGRlZmF1bHRzXG4gICAqL1xuICBhZGRBbmRSZXR1cm5EZWZhdWx0cyhzdGF0ZUNsYXNzZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW10pOiBTdGF0ZXNBbmREZWZhdWx0cyB7XG4gICAgY29uc3QgY2xhc3NlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXSA9IHN0YXRlQ2xhc3NlcyB8fCBbXTtcblxuICAgIGNvbnN0IG1hcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSA9IHRoaXMuYWRkKGNsYXNzZXMpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gbWFwcGVkU3RvcmVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQ6IGFueSwgbWFwcGVkU3RvcmU6IE1hcHBlZFN0b3JlKSA9PlxuICAgICAgICBzZXRWYWx1ZShyZXN1bHQsIG1hcHBlZFN0b3JlLnBhdGgsIG1hcHBlZFN0b3JlLmRlZmF1bHRzKSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICByZXR1cm4geyBkZWZhdWx0cywgc3RhdGVzOiBtYXBwZWRTdG9yZXMgfTtcbiAgfVxuXG4gIGNvbm5lY3RBY3Rpb25IYW5kbGVycygpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aW9uc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoY3R4OiBBY3Rpb25Db250ZXh0KSA9PiBjdHguc3RhdHVzID09PSBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZCksXG4gICAgICAgIG1lcmdlTWFwKGN0eCA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uOiBhbnkgPSBjdHguYWN0aW9uO1xuICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUFjdGlvbnMoYWN0aW9uKS5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IDxBY3Rpb25Db250ZXh0PnsgYWN0aW9uLCBzdGF0dXM6IEFjdGlvblN0YXR1cy5TdWNjZXNzZnVsIH0pLFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkoPEFjdGlvbkNvbnRleHQ+eyBhY3Rpb24sIHN0YXR1czogQWN0aW9uU3RhdHVzLkNhbmNlbGVkIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5neHNVbmhhbmRsZWRFcnJvckhhbmRsZXIgPSAodGhpcy5fbmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlciB8fD1cbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlcikpO1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVhYmxlRXJyb3IgPSBhc3NpZ25VbmhhbmRsZWRDYWxsYmFjayhlcnJvciwgKCkgPT5cbiAgICAgICAgICAgICAgICBuZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yLCB7IGFjdGlvbiB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gb2YoPEFjdGlvbkNvbnRleHQ+e1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBzdGF0dXM6IEFjdGlvblN0YXR1cy5FcnJvcmVkLFxuICAgICAgICAgICAgICAgIGVycm9yOiBoYW5kbGVhYmxlRXJyb3JcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGN0eCA9PiB0aGlzLl9hY3Rpb25SZXN1bHRzLm5leHQoY3R4KSk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGFjdGlvbnMgb24gdGhlIHN0YXRlcy5cbiAgICovXG4gIHByaXZhdGUgaW52b2tlQWN0aW9ucyhhY3Rpb246IGFueSk6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgY29uc3QgdHlwZSA9IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UoYWN0aW9uKSE7XG4gICAgY29uc3QgcmVzdWx0czogT2JzZXJ2YWJsZTx1bmtub3duPltdID0gW107XG5cbiAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRpc3BhdGNoZWQgYWN0aW9uIGhhcyBiZWVuIGhhbmRsZWQsIHRoaXMgaXMgYXNzaWduZWRcbiAgICAvLyB0byBgdHJ1ZWAgd2l0aGluIHRoZSBiZWxvdyBgZm9yYCBsb29wIGlmIGFueSBgYWN0aW9uTWV0YXNgIGhhcyBiZWVuIGZvdW5kLlxuICAgIGxldCBhY3Rpb25IYXNCZWVuSGFuZGxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgYWN0aW9uSGFuZGxlcnMgPSB0aGlzLl9hY3Rpb25SZWdpc3RyeS5nZXQodHlwZSk7XG5cbiAgICBpZiAoYWN0aW9uSGFuZGxlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uSGFuZGxlciBvZiBhY3Rpb25IYW5kbGVycykge1xuICAgICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gYWN0aW9uSGFuZGxlcihhY3Rpb24pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdGhyb3dFcnJvcigoKSA9PiBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuXG4gICAgICAgIGFjdGlvbkhhc0JlZW5IYW5kbGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgYE5neHNVbmhhbmRsZWRBY3Rpb25zTG9nZ2VyYCBpcyBhIHRyZWUtc2hha2FibGUgY2xhc3Mgd2hpY2ggZnVuY3Rpb25zXG4gICAgLy8gb25seSBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSAmJiAhYWN0aW9uSGFzQmVlbkhhbmRsZWQpIHtcbiAgICAgIGNvbnN0IHVuaGFuZGxlZEFjdGlvbnNMb2dnZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoTmd4c1VuaGFuZGxlZEFjdGlvbnNMb2dnZXIsIG51bGwpO1xuICAgICAgLy8gVGhlIGBOZ3hzVW5oYW5kbGVkQWN0aW9uc0xvZ2dlcmAgd2lsbCBub3QgYmUgcmVzb2x2ZWQgYnkgdGhlIGluamVjdG9yIGlmIHRoZVxuICAgICAgLy8gYE5neHNEZXZlbG9wbWVudE1vZHVsZWAgaXMgbm90IHByb3ZpZGVkLiBJdCdzIGVub3VnaCB0byBjaGVjayB3aGV0aGVyIHRoZSBgaW5qZWN0b3IuZ2V0YFxuICAgICAgLy8gZGlkbid0IHJldHVybiBgbnVsbGAgc28gd2UgbWF5IGVuc3VyZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGltcG9ydGVkLlxuICAgICAgdW5oYW5kbGVkQWN0aW9uc0xvZ2dlcj8ud2FybihhY3Rpb24pO1xuICAgIH1cblxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdHMucHVzaChvZih1bmRlZmluZWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ya0pvaW4ocmVzdWx0cyk7XG4gIH1cblxuICBwcml2YXRlIGFkZFRvU3RhdGVzTWFwKHN0YXRlQ2xhc3NlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IHtcbiAgICBuZXdTdGF0ZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW107XG4gIH0ge1xuICAgIGNvbnN0IG5ld1N0YXRlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXSA9IFtdO1xuICAgIGNvbnN0IHN0YXRlc01hcDogU3RhdGVzQnlOYW1lID0gdGhpcy5fc3RhdGVzQnlOYW1lO1xuXG4gICAgZm9yIChjb25zdCBzdGF0ZUNsYXNzIG9mIHN0YXRlQ2xhc3Nlcykge1xuICAgICAgY29uc3Qgc3RhdGVOYW1lID0gybVnZXRTdG9yZU1ldGFkYXRhKHN0YXRlQ2xhc3MpLm5hbWUhO1xuICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgICAgICBlbnN1cmVTdGF0ZU5hbWVJc1VuaXF1ZShzdGF0ZU5hbWUsIHN0YXRlQ2xhc3MsIHN0YXRlc01hcCk7XG4gICAgICB9XG4gICAgICBjb25zdCB1bm1vdW50ZWRTdGF0ZSA9ICFzdGF0ZXNNYXBbc3RhdGVOYW1lXTtcbiAgICAgIGlmICh1bm1vdW50ZWRTdGF0ZSkge1xuICAgICAgICBuZXdTdGF0ZXMucHVzaChzdGF0ZUNsYXNzKTtcbiAgICAgICAgc3RhdGVzTWFwW3N0YXRlTmFtZV0gPSBzdGF0ZUNsYXNzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IG5ld1N0YXRlcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSdW50aW1lSW5mb1RvTWV0YShtZXRhOiDJtU1ldGFEYXRhTW9kZWwsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlUGF0aHNbbWV0YS5uYW1lIV0gPSBwYXRoO1xuICAgIC8vIFRPRE86IHZlcnNpb25zIGFmdGVyIHYzIC0gd2UgcGxhbiB0byBnZXQgcmlkIG9mIHRoZSBgcGF0aGAgcHJvcGVydHkgYmVjYXVzZSBpdCBpcyBub24tZGV0ZXJtaW5pc3RpY1xuICAgIC8vIHdlIGNhbiBkbyB0aGlzIHdoZW4gd2UgZ2V0IHJpZCBvZiB0aGUgaW5jb3JyZWN0bHkgZXhwb3NlZCBnZXRTdG9yZU1ldGFkYXRhXG4gICAgLy8gV2Ugd2lsbCBuZWVkIHRvIGNvbWUgdXAgd2l0aCBhbiBhbHRlcm5hdGl2ZSB0byB3aGF0IHdhcyBleHBvc2VkIGluIHYzIGJlY2F1c2UgdGhpcyBpcyB1c2VkIGJ5IG1hbnkgcGx1Z2luc1xuICAgIG1ldGEucGF0aCA9IHBhdGg7XG4gIH1cblxuICBwcml2YXRlIGhhc0JlZW5Nb3VudGVkQW5kQm9vdHN0cmFwcGVkKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVJc0Jvb3RzdHJhcHBlZEluSW5pdGlhbFN0YXRlOiBib29sZWFuID1cbiAgICAgIGdldFZhbHVlKHRoaXMuX2luaXRpYWxTdGF0ZSwgcGF0aCkgIT09IHVuZGVmaW5lZDtcbiAgICAvLyBUaGlzIGNoZWNrcyB3aGV0aGVyIGEgc3RhdGUgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZCB0byB0aGUgZ2xvYmFsIGdyYXBoIGFuZFxuICAgIC8vIGl0cyBsaWZlY3ljbGUgaXMgaW4gJ2Jvb3RzdHJhcHBlZCcgc3RhdGUuXG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlc0J5TmFtZVtuYW1lXSAmJiB2YWx1ZUlzQm9vdHN0cmFwcGVkSW5Jbml0aWFsU3RhdGU7XG4gIH1cblxuICBwcml2YXRlIGh5ZHJhdGVBY3Rpb25NZXRhc01hcCh7IHBhdGgsIGFjdGlvbnMsIGluc3RhbmNlIH06IE1hcHBlZFN0b3JlKTogdm9pZCB7XG4gICAgY29uc3QgeyBkaXNwYXRjaGVkJCB9ID0gdGhpcy5fYWN0aW9ucztcbiAgICBmb3IgKGNvbnN0IGFjdGlvblR5cGUgb2YgT2JqZWN0LmtleXMoYWN0aW9ucykpIHtcbiAgICAgIGNvbnN0IGFjdGlvbkhhbmRsZXJzID0gYWN0aW9uc1thY3Rpb25UeXBlXS5tYXAoYWN0aW9uTWV0YSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbmNlbGFibGUgPSAhIWFjdGlvbk1ldGEub3B0aW9ucy5jYW5jZWxVbmNvbXBsZXRlZDtcblxuICAgICAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVDb250ZXh0ID0gdGhpcy5fc3RhdGVDb250ZXh0RmFjdG9yeS5jcmVhdGVTdGF0ZUNvbnRleHQocGF0aCk7XG5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gaW5zdGFuY2VbYWN0aW9uTWV0YS5mbl0oc3RhdGVDb250ZXh0LCBhY3Rpb24pO1xuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byB1c2UgYGlzUHJvbWlzZWAgaW5zdGVhZCBvZiBjaGVja2luZyB3aGV0aGVyXG4gICAgICAgICAgLy8gYHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2VgLiBJbiB6b25lLmpzIHBhdGNoZWQgZW52aXJvbm1lbnRzLCBgZ2xvYmFsLlByb21pc2VgXG4gICAgICAgICAgLy8gaXMgdGhlIGBab25lQXdhcmVQcm9taXNlYC4gU29tZSBBUElzLCB3aGljaCBhcmUgbGlrZWx5IG5vdCBwYXRjaGVkIGJ5IHpvbmUuanNcbiAgICAgICAgICAvLyBmb3IgY2VydGFpbiByZWFzb25zLCBtaWdodCBub3Qgd29yayB3aXRoIGBpbnN0YW5jZW9mYC4gRm9yIGluc3RhbmNlLCB0aGUgZHluYW1pY1xuICAgICAgICAgIC8vIGltcG9ydCByZXR1cm5zIGEgbmF0aXZlIHByb21pc2UgKG5vdCBhIGBab25lQXdhcmVQcm9taXNlYCksIGNhdXNpbmcgdGhpcyBjaGVjayB0b1xuICAgICAgICAgIC8vIGJlIGZhbHN5LlxuICAgICAgICAgIGlmICjJtWlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBmcm9tKHJlc3VsdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucGlwZShcbiAgICAgICAgICAgICAgbWVyZ2VNYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoybVpc1Byb21pc2UodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyBvYnNlcnZhYmxlIGhhcyBjb21wbGV0ZWQgd2l0aG91dCBlbWl0dGluZyBhbnkgdmFsdWVzLFxuICAgICAgICAgICAgICAvLyB3ZSB3b3VsZG4ndCB3YW50IHRvIGNvbXBsZXRlIHRoZSBlbnRpcmUgY2hhaW4gb2YgYWN0aW9ucy5cbiAgICAgICAgICAgICAgLy8gSWYgYW55IG9ic2VydmFibGUgY29tcGxldGVzLCB0aGVuIHRoZSBhY3Rpb24gd2lsbCBiZSBjYW5jZWxlZC5cbiAgICAgICAgICAgICAgLy8gRm9yIGluc3RhbmNlLCBpZiBhbnkgYWN0aW9uIGhhbmRsZXIgaGFkIGEgc3RhdGVtZW50IGxpa2VcbiAgICAgICAgICAgICAgLy8gYGhhbmRsZXIoY3R4KSB7IHJldHVybiBFTVBUWTsgfWAsIHRoZW4gdGhlIGFjdGlvbiB3b3VsZCBiZSBjYW5jZWxlZC5cbiAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZ3hzL3N0b3JlL2lzc3Vlcy8xNTY4XG4gICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXR1cm4gdHlwZTsgd2Ugb25seSBjYXJlXG4gICAgICAgICAgICAgIC8vIGFib3V0IGVtaXNzaW9uLCBhbmQgdGh1cyBgdW5kZWZpbmVkYCBpcyBhcHBsaWNhYmxlIGJ5IHRoZSBmcmFtZXdvcmsuXG4gICAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChjYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vdGlmaWVyJCA9IGRpc3BhdGNoZWQkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKGFjdGlvbikpO1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucGlwZSh0YWtlVW50aWwobm90aWZpZXIkKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKFxuICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgdXNlIHRoZSBgZmluYWxpemVgIG9wZXJhdG9yIG9ubHkgd2hlbiB0aGUgYWN0aW9uIGhhbmRsZXJcbiAgICAgICAgICAgICAgLy8gcmV0dXJucyBhbiBvYnNlcnZhYmxlLiBJZiB0aGUgYWN0aW9uIGhhbmRsZXIgaXMgc3luY2hyb25vdXMsIHdlIGRvIG5vdFxuICAgICAgICAgICAgICAvLyBuZWVkIHRvIHNldCB0aGUgc3RhdGUgY29udGV4dCBmdW5jdGlvbnMgdG8gYG5vb3BgLCBhcyB0aGUgYWJzZW5jZSBvZiBhXG4gICAgICAgICAgICAgIC8vIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgbm8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uYWxpdHkuIElmIHRoZSBoYW5kbGVyJ3NcbiAgICAgICAgICAgICAgLy8gcmVzdWx0IGlzIHVuc3Vic2NyaWJlZCAoZWl0aGVyIGJlY2F1c2UgdGhlIG9ic2VydmFibGUgaGFzIGNvbXBsZXRlZCBvciBpdFxuICAgICAgICAgICAgICAvLyB3YXMgdW5zdWJzY3JpYmVkIGJ5IGB0YWtlVW50aWxgIGR1ZSB0byBhIG5ldyBhY3Rpb24gYmVpbmcgZGlzcGF0Y2hlZCksXG4gICAgICAgICAgICAgIC8vIHdlIHByZXZlbnQgd3JpdGluZyB0byB0aGUgc3RhdGUgY29udGV4dC5cbiAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlQ29udGV4dC5zZXRTdGF0ZSA9IG5vb3A7XG4gICAgICAgICAgICAgICAgc3RhdGVDb250ZXh0LnBhdGNoU3RhdGUgPSBub29wO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGlvbiBoYW5kbGVyIGlzIHN5bmNocm9ub3VzIGFuZCByZXR1cm5zIG5vdGhpbmcgKGB2b2lkYCksIHdlXG4gICAgICAgICAgICAvLyBzdGlsbCBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCB0byBhIHN5bmNocm9ub3VzIG9ic2VydmFibGUuXG4gICAgICAgICAgICByZXN1bHQgPSBvZih1bmRlZmluZWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb25IYW5kbGVyIG9mIGFjdGlvbkhhbmRsZXJzKSB7XG4gICAgICAgIHRoaXMuX2FjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKGFjdGlvblR5cGUsIGFjdGlvbkhhbmRsZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIGlzIHVzZWQgdG8gcmVwbGFjZSBgc2V0U3RhdGVgIGFuZCBgcGF0Y2hTdGF0ZWAgb25jZSB0aGUgYWN0aW9uXG4vLyBoYW5kbGVyIGhhcyBiZWVuIHVuc3Vic2NyaWJlZCBvciBjb21wbGV0ZWQsIHRvIHByZXZlbnQgd3JpdGluZ1xuLy8gdG8gdGhlIHN0YXRlIGNvbnRleHQuXG5mdW5jdGlvbiBub29wKCkge31cbiJdfQ==
@@ -1,13 +1,11 @@
1
1
  import { FEATURE_STATE_TOKEN } from '../symbols';
2
2
  import { PluginManager } from '../plugin-manager';
3
- import { StateFactory } from '../internal/state-factory';
4
3
  /**
5
4
  * This function provides the required providers when calling `NgxsModule.forFeature`
6
5
  * or `provideStates`. It is shared between the NgModule and standalone APIs.
7
6
  */
8
7
  export function getFeatureProviders(states) {
9
8
  return [
10
- StateFactory,
11
9
  PluginManager,
12
10
  ...states,
13
11
  {
@@ -17,4 +15,4 @@ export function getFeatureProviders(states) {
17
15
  }
18
16
  ];
19
17
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RhbmRhbG9uZS1mZWF0dXJlcy9mZWF0dXJlLXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBcUI7SUFDdkQsT0FBTztRQUNMLFlBQVk7UUFDWixhQUFhO1FBQ2IsR0FBRyxNQUFNO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLEtBQUssRUFBRSxJQUFJO1lBQ1gsUUFBUSxFQUFFLE1BQU07U0FDakI7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyDJtVN0YXRlQ2xhc3MgfSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBGRUFUVVJFX1NUQVRFX1RPS0VOIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQgeyBQbHVnaW5NYW5hZ2VyIH0gZnJvbSAnLi4vcGx1Z2luLW1hbmFnZXInO1xuaW1wb3J0IHsgU3RhdGVGYWN0b3J5IH0gZnJvbSAnLi4vaW50ZXJuYWwvc3RhdGUtZmFjdG9yeSc7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUgcmVxdWlyZWQgcHJvdmlkZXJzIHdoZW4gY2FsbGluZyBgTmd4c01vZHVsZS5mb3JGZWF0dXJlYFxuICogb3IgYHByb3ZpZGVTdGF0ZXNgLiBJdCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgTmdNb2R1bGUgYW5kIHN0YW5kYWxvbmUgQVBJcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZlYXR1cmVQcm92aWRlcnMoc3RhdGVzOiDJtVN0YXRlQ2xhc3NbXSk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIFN0YXRlRmFjdG9yeSxcbiAgICBQbHVnaW5NYW5hZ2VyLFxuICAgIC4uLnN0YXRlcyxcbiAgICB7XG4gICAgICBwcm92aWRlOiBGRUFUVVJFX1NUQVRFX1RPS0VOLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VWYWx1ZTogc3RhdGVzXG4gICAgfVxuICBdO1xufVxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RhbmRhbG9uZS1mZWF0dXJlcy9mZWF0dXJlLXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFxQjtJQUN2RCxPQUFPO1FBQ0wsYUFBYTtRQUNiLEdBQUcsTUFBTTtRQUNUO1lBQ0UsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgybVTdGF0ZUNsYXNzIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcblxuaW1wb3J0IHsgRkVBVFVSRV9TVEFURV9UT0tFTiB9IGZyb20gJy4uL3N5bWJvbHMnO1xuaW1wb3J0IHsgUGx1Z2luTWFuYWdlciB9IGZyb20gJy4uL3BsdWdpbi1tYW5hZ2VyJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSByZXF1aXJlZCBwcm92aWRlcnMgd2hlbiBjYWxsaW5nIGBOZ3hzTW9kdWxlLmZvckZlYXR1cmVgXG4gKiBvciBgcHJvdmlkZVN0YXRlc2AuIEl0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBOZ01vZHVsZSBhbmQgc3RhbmRhbG9uZSBBUElzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVhdHVyZVByb3ZpZGVycyhzdGF0ZXM6IMm1U3RhdGVDbGFzc1tdKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAgUGx1Z2luTWFuYWdlcixcbiAgICAuLi5zdGF0ZXMsXG4gICAge1xuICAgICAgcHJvdmlkZTogRkVBVFVSRV9TVEFURV9UT0tFTixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlVmFsdWU6IHN0YXRlc1xuICAgIH1cbiAgXTtcbn1cbiJdfQ==
@@ -1,6 +1,5 @@
1
1
  import { APP_BOOTSTRAP_LISTENER, inject } from '@angular/core';
2
2
  import { ɵNgxsAppBootstrappedState } from '@ngxs/store/internals';
3
- import { StateFactory } from '../internal/state-factory';
4
3
  import { CUSTOM_NGXS_EXECUTION_STRATEGY } from '../execution/symbols';
5
4
  import { ROOT_STATE_TOKEN, NGXS_OPTIONS } from '../symbols';
6
5
  /**
@@ -9,7 +8,6 @@ import { ROOT_STATE_TOKEN, NGXS_OPTIONS } from '../symbols';
9
8
  */
10
9
  export function getRootProviders(states, options) {
11
10
  return [
12
- StateFactory,
13
11
  ...states,
14
12
  {
15
13
  provide: ROOT_STATE_TOKEN,
@@ -33,4 +31,4 @@ export function getRootProviders(states, options) {
33
31
  }
34
32
  ];
35
33
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RhbmRhbG9uZS1mZWF0dXJlcy9yb290LXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQVksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBZSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RSxPQUFPLEVBQXFCLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE1BQXFCLEVBQ3JCLE9BQTBCO0lBRTFCLE9BQU87UUFDTCxZQUFZO1FBQ1osR0FBRyxNQUFNO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsc0JBQXNCO1lBQy9CLFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNEO1lBQ0UsT0FBTyxFQUFFLFlBQVk7WUFDckIsUUFBUSxFQUFFLE9BQU87U0FDbEI7UUFDRDtZQUNFLE9BQU8sRUFBRSw4QkFBOEI7WUFDdkMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7U0FDcEM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9CT09UU1RSQVBfTElTVEVORVIsIFByb3ZpZGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IMm1U3RhdGVDbGFzcywgybVOZ3hzQXBwQm9vdHN0cmFwcGVkU3RhdGUgfSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBTdGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9pbnRlcm5hbC9zdGF0ZS1mYWN0b3J5JztcbmltcG9ydCB7IENVU1RPTV9OR1hTX0VYRUNVVElPTl9TVFJBVEVHWSB9IGZyb20gJy4uL2V4ZWN1dGlvbi9zeW1ib2xzJztcbmltcG9ydCB7IE5neHNNb2R1bGVPcHRpb25zLCBST09UX1NUQVRFX1RPS0VOLCBOR1hTX09QVElPTlMgfSBmcm9tICcuLi9zeW1ib2xzJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSByZXF1aXJlZCBwcm92aWRlcnMgd2hlbiBpbnZva2luZyBgTmd4c01vZHVsZS5mb3JSb290YFxuICogb3IgYHByb3ZpZGVTdG9yZWAuIEl0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBOZ01vZHVsZSBhbmQgc3RhbmRhbG9uZSBBUElzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdFByb3ZpZGVycyhcbiAgc3RhdGVzOiDJtVN0YXRlQ2xhc3NbXSxcbiAgb3B0aW9uczogTmd4c01vZHVsZU9wdGlvbnNcbik6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIFN0YXRlRmFjdG9yeSxcbiAgICAuLi5zdGF0ZXMsXG4gICAge1xuICAgICAgcHJvdmlkZTogUk9PVF9TVEFURV9UT0tFTixcbiAgICAgIHVzZVZhbHVlOiBzdGF0ZXNcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9CT09UU1RSQVBfTElTVEVORVIsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcEJvb3RzdHJhcHBlZFN0YXRlID0gaW5qZWN0KMm1Tmd4c0FwcEJvb3RzdHJhcHBlZFN0YXRlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGFwcEJvb3RzdHJhcHBlZFN0YXRlLmJvb3RzdHJhcCgpO1xuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR1hTX09QVElPTlMsXG4gICAgICB1c2VWYWx1ZTogb3B0aW9uc1xuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQ1VTVE9NX05HWFNfRVhFQ1VUSU9OX1NUUkFURUdZLFxuICAgICAgdXNlVmFsdWU6IG9wdGlvbnMuZXhlY3V0aW9uU3RyYXRlZ3lcbiAgICB9XG4gIF07XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RhbmRhbG9uZS1mZWF0dXJlcy9yb290LXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQVksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBZSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9FLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFBcUIsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsTUFBcUIsRUFDckIsT0FBMEI7SUFFMUIsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNUO1lBQ0UsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixRQUFRLEVBQUUsTUFBTTtTQUNqQjtRQUNEO1lBQ0UsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNmLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQy9ELE9BQU8sR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEQsQ0FBQztZQUNELEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRDtZQUNFLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFFBQVEsRUFBRSxPQUFPO1NBQ2xCO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLFFBQVEsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1NBQ3BDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLCBQcm92aWRlciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyDJtVN0YXRlQ2xhc3MsIMm1Tmd4c0FwcEJvb3RzdHJhcHBlZFN0YXRlIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcblxuaW1wb3J0IHsgQ1VTVE9NX05HWFNfRVhFQ1VUSU9OX1NUUkFURUdZIH0gZnJvbSAnLi4vZXhlY3V0aW9uL3N5bWJvbHMnO1xuaW1wb3J0IHsgTmd4c01vZHVsZU9wdGlvbnMsIFJPT1RfU1RBVEVfVE9LRU4sIE5HWFNfT1BUSU9OUyB9IGZyb20gJy4uL3N5bWJvbHMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgdGhlIHJlcXVpcmVkIHByb3ZpZGVycyB3aGVuIGludm9raW5nIGBOZ3hzTW9kdWxlLmZvclJvb3RgXG4gKiBvciBgcHJvdmlkZVN0b3JlYC4gSXQgaXMgc2hhcmVkIGJldHdlZW4gdGhlIE5nTW9kdWxlIGFuZCBzdGFuZGFsb25lIEFQSXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290UHJvdmlkZXJzKFxuICBzdGF0ZXM6IMm1U3RhdGVDbGFzc1tdLFxuICBvcHRpb25zOiBOZ3hzTW9kdWxlT3B0aW9uc1xuKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAgLi4uc3RhdGVzLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPT1RfU1RBVEVfVE9LRU4sXG4gICAgICB1c2VWYWx1ZTogc3RhdGVzXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICBjb25zdCBhcHBCb290c3RyYXBwZWRTdGF0ZSA9IGluamVjdCjJtU5neHNBcHBCb290c3RyYXBwZWRTdGF0ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiBhcHBCb290c3RyYXBwZWRTdGF0ZS5ib290c3RyYXAoKTtcbiAgICAgIH0sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdYU19PUFRJT05TLFxuICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IENVU1RPTV9OR1hTX0VYRUNVVElPTl9TVFJBVEVHWSxcbiAgICAgIHVzZVZhbHVlOiBvcHRpb25zLmV4ZWN1dGlvblN0cmF0ZWd5XG4gICAgfVxuICBdO1xufVxuIl19
@@ -1241,20 +1241,17 @@ function cloneDefaults(defaults) {
1241
1241
  * The `StateFactory` class adds root and feature states to the graph.
1242
1242
  * This extracts state names from state classes, checks if they already
1243
1243
  * exist in the global graph, throws errors if their names are invalid, etc.
1244
- * See its constructor, state factories inject state factories that are
1245
- * parent-level providers. This is required to get feature states from the
1246
- * injector on the same level.
1247
1244
  *
1248
- * The `NgxsModule.forFeature(...)` returns `providers: [StateFactory, ...states]`.
1249
- * The `StateFactory` is initialized on the feature level and goes through `...states`
1250
- * to get them from the injector through `injector.get(state)`.
1245
+ * Root and feature initializers call `addAndReturnDefaults()` to add those states
1246
+ * to the global graph. Since `addAndReturnDefaults` runs within the injection
1247
+ * context (which might be the root injector or a feature injector), we can
1248
+ * retrieve an instance of the state class using `inject(StateClass)`.
1251
1249
  * @ignore
1252
1250
  */
1253
1251
  class StateFactory {
1254
1252
  constructor() {
1255
1253
  this._injector = inject(Injector);
1256
1254
  this._config = inject(NgxsConfig);
1257
- this._parentFactory = inject(StateFactory, { optional: true, skipSelf: true });
1258
1255
  this._stateContextFactory = inject(StateContextFactory);
1259
1256
  this._actions = inject(InternalActions);
1260
1257
  this._actionResults = inject(InternalDispatchedActionResults);
@@ -1271,47 +1268,36 @@ class StateFactory {
1271
1268
  const stateFactory = this;
1272
1269
  const propGetter = stateFactory._propGetter;
1273
1270
  function resolveGetter(key) {
1274
- const path = stateFactory.statePaths[key];
1271
+ const path = stateFactory._statePaths[key];
1275
1272
  return path ? propGetter(path.split('.')) : null;
1276
1273
  }
1277
- const context = this._parentFactory
1278
- ? this._parentFactory.getRuntimeSelectorContext()
1279
- : {
1280
- getStateGetter(key) {
1281
- // Use `@__INLINE__` annotation to forcely inline `resolveGetter`.
1282
- // This is a Terser annotation, which will function only in the production mode.
1283
- let getter = /*@__INLINE__*/ resolveGetter(key);
1284
- if (getter) {
1285
- return getter;
1286
- }
1287
- return (...args) => {
1288
- // Late loaded getter
1289
- if (!getter) {
1290
- getter = /*@__INLINE__*/ resolveGetter(key);
1291
- }
1292
- return getter ? getter(...args) : undefined;
1293
- };
1294
- },
1295
- getSelectorOptions(localOptions) {
1296
- const globalSelectorOptions = stateFactory._config.selectorOptions;
1297
- return {
1298
- ...globalSelectorOptions,
1299
- ...(localOptions || {})
1300
- };
1274
+ const context = {
1275
+ getStateGetter(key) {
1276
+ // Use `@__INLINE__` annotation to forcely inline `resolveGetter`.
1277
+ // This is a Terser annotation, which will function only in the production mode.
1278
+ let getter = /*@__INLINE__*/ resolveGetter(key);
1279
+ if (getter) {
1280
+ return getter;
1301
1281
  }
1302
- };
1282
+ return (...args) => {
1283
+ // Late loaded getter
1284
+ if (!getter) {
1285
+ getter = /*@__INLINE__*/ resolveGetter(key);
1286
+ }
1287
+ return getter ? getter(...args) : undefined;
1288
+ };
1289
+ },
1290
+ getSelectorOptions(localOptions) {
1291
+ const globalSelectorOptions = stateFactory._config.selectorOptions;
1292
+ return {
1293
+ ...globalSelectorOptions,
1294
+ ...(localOptions || {})
1295
+ };
1296
+ }
1297
+ };
1303
1298
  return context;
1304
1299
  });
1305
1300
  }
1306
- get states() {
1307
- return this._parentFactory ? this._parentFactory.states : this._states;
1308
- }
1309
- get statesByName() {
1310
- return this._parentFactory ? this._parentFactory.statesByName : this._statesByName;
1311
- }
1312
- get statePaths() {
1313
- return this._parentFactory ? this._parentFactory.statePaths : this._statePaths;
1314
- }
1315
1301
  ngOnDestroy() {
1316
1302
  this._actionsSubscription?.unsubscribe();
1317
1303
  }
@@ -1347,7 +1333,7 @@ class StateFactory {
1347
1333
  path,
1348
1334
  isInitialised: false,
1349
1335
  actions: meta.actions,
1350
- instance: this._injector.get(stateClass),
1336
+ instance: inject(stateClass),
1351
1337
  defaults: cloneDefaults(meta.defaults)
1352
1338
  };
1353
1339
  // ensure our store hasn't already been added
@@ -1356,7 +1342,7 @@ class StateFactory {
1356
1342
  if (!this.hasBeenMountedAndBootstrapped(name, path)) {
1357
1343
  bootstrappedStores.push(stateMap);
1358
1344
  }
1359
- this.states.push(stateMap);
1345
+ this._states.push(stateMap);
1360
1346
  this.hydrateActionMetasMap(stateMap);
1361
1347
  }
1362
1348
  return bootstrappedStores;
@@ -1371,12 +1357,6 @@ class StateFactory {
1371
1357
  return { defaults, states: mappedStores };
1372
1358
  }
1373
1359
  connectActionHandlers() {
1374
- // Note: We have to connect actions only once when the `StateFactory`
1375
- // is being created for the first time. This checks if we're in
1376
- // a child state factory and the parent state factory already exists.
1377
- if (this._parentFactory || this._actionsSubscription !== null) {
1378
- return;
1379
- }
1380
1360
  this._actionsSubscription = this._actions
1381
1361
  .pipe(filter((ctx) => ctx.status === "DISPATCHED" /* ActionStatus.Dispatched */), mergeMap$1(ctx => {
1382
1362
  const action = ctx.action;
@@ -1432,7 +1412,7 @@ class StateFactory {
1432
1412
  }
1433
1413
  addToStatesMap(stateClasses) {
1434
1414
  const newStates = [];
1435
- const statesMap = this.statesByName;
1415
+ const statesMap = this._statesByName;
1436
1416
  for (const stateClass of stateClasses) {
1437
1417
  const stateName = _getStoreMetadata(stateClass).name;
1438
1418
  if (typeof ngDevMode !== 'undefined' && ngDevMode) {
@@ -1447,7 +1427,7 @@ class StateFactory {
1447
1427
  return { newStates };
1448
1428
  }
1449
1429
  addRuntimeInfoToMeta(meta, path) {
1450
- this.statePaths[meta.name] = path;
1430
+ this._statePaths[meta.name] = path;
1451
1431
  // TODO: versions after v3 - we plan to get rid of the `path` property because it is non-deterministic
1452
1432
  // we can do this when we get rid of the incorrectly exposed getStoreMetadata
1453
1433
  // We will need to come up with an alternative to what was exposed in v3 because this is used by many plugins
@@ -1457,7 +1437,7 @@ class StateFactory {
1457
1437
  const valueIsBootstrappedInInitialState = getValue(this._initialState, path) !== undefined;
1458
1438
  // This checks whether a state has been already added to the global graph and
1459
1439
  // its lifecycle is in 'bootstrapped' state.
1460
- return this.statesByName[name] && valueIsBootstrappedInInitialState;
1440
+ return this._statesByName[name] && valueIsBootstrappedInInitialState;
1461
1441
  }
1462
1442
  hydrateActionMetasMap({ path, actions, instance }) {
1463
1443
  const { dispatched$ } = this._actions;
@@ -1528,10 +1508,11 @@ class StateFactory {
1528
1508
  }
1529
1509
  }
1530
1510
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1531
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory }); }
1511
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, providedIn: 'root' }); }
1532
1512
  }
1533
1513
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, decorators: [{
1534
- type: Injectable
1514
+ type: Injectable,
1515
+ args: [{ providedIn: 'root' }]
1535
1516
  }] });
1536
1517
  // This is used to replace `setState` and `patchState` once the action
1537
1518
  // handler has been unsubscribed or completed, to prevent writing
@@ -1883,7 +1864,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
1883
1864
  */
1884
1865
  function getRootProviders(states, options) {
1885
1866
  return [
1886
- StateFactory,
1887
1867
  ...states,
1888
1868
  {
1889
1869
  provide: ROOT_STATE_TOKEN,
@@ -1914,7 +1894,6 @@ function getRootProviders(states, options) {
1914
1894
  */
1915
1895
  function getFeatureProviders(states) {
1916
1896
  return [
1917
- StateFactory,
1918
1897
  PluginManager,
1919
1898
  ...states,
1920
1899
  {