@dsivd/prestations-ng 17.8.1 → 17.8.2-beta.2

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/CHANGELOG.md CHANGED
@@ -6,6 +6,20 @@
6
6
 
7
7
  ---
8
8
 
9
+ ## [17.8.2]
10
+
11
+ ### Fixed
12
+
13
+ - [foehn-autocomplete.component.ts](projects/prestations-ng/src/foehn-autocomplete/foehn-autocomplete.component.ts)
14
+ - Added a `setTimeout` when selecting value to display to fix component having a model but not displaying it on screen
15
+
16
+ ### Updated
17
+
18
+ - [foehn-table.component.ts](projects/prestations-ng/src/foehn-table/foehn-table.component.ts)
19
+ - Now extends `FoehnInputComponent` so when using templates with components extending `FoehnInputComponent`, they can be registered properly into form for validation
20
+ - `[list]` attribut has been deprecated. Use `[model]` instead.
21
+ - Templates containing any component extending `FoehnInputComponent` must be placed inside `<foehn-table>[HERE]</foehn-table>` for registration
22
+
9
23
  ## [17.8.1]
10
24
 
11
25
  ### Fixed
package/UPGRADING_V17.md CHANGED
@@ -302,6 +302,12 @@ you should set `dispatchFormErrors` to `true` :
302
302
 
303
303
  Otherwise the pills wil be set to "Renseigné" after a recovery registration even if some errors remains.
304
304
 
305
+ ### foehn-table now extends FoehnInputComponent
306
+
307
+ - use `[model]` instead of `[list]` because it is deprecated
308
+ - add a `[name]` attribut to your component
309
+ - put `FoehnTableColumnConfiguration` templates inside `<foehn-table>[HERE]</foehn-table>` when they contain components extending `FoehnInputComponent`
310
+
305
311
  ### Language deprecations
306
312
 
307
313
  When using `intellij`, you can run code inspection on your project to fix manually deprecations. Two ways:
@@ -1,6 +1,6 @@
1
1
  import { Component, forwardRef, Input, ViewChild } from '@angular/core';
2
2
  import { BehaviorSubject, combineLatest, of } from 'rxjs';
3
- import { debounceTime, distinctUntilChanged, map, shareReplay, switchMap, tap } from 'rxjs/operators';
3
+ import { catchError, debounceTime, distinctUntilChanged, map, shareReplay, switchMap, tap } from 'rxjs/operators';
4
4
  import { FoehnInputComponent } from '../foehn-input/foehn-input.component';
5
5
  import { ObjectHelper } from '../helpers/object.helper';
6
6
  import { FoehnInputForeignLocalityComponent } from './foehn-input-foreign-locality.component';
@@ -256,7 +256,8 @@ export class FoehnInputAddressComponent extends FoehnInputComponent {
256
256
  return !this.street || !!this.postOfficeBoxText;
257
257
  }
258
258
  getCountries() {
259
- return this.httpClient.get(this.countriesUrl);
259
+ return this.httpClient.get(this.countriesUrl).pipe(catchError(() => of([])) // emit even when an error occurs
260
+ );
260
261
  }
261
262
  getLocalities(iso2Id) {
262
263
  if (iso2Id !== SWISS_ISO_ID) {
@@ -266,10 +267,16 @@ export class FoehnInputAddressComponent extends FoehnInputComponent {
266
267
  ? '?withCompanyLocalities=true'
267
268
  : '';
268
269
  if (!!this.specifiedCanton) {
269
- return this.httpClient.get(`api/refinf/locality/${this.specifiedCanton}${queryParams}`);
270
+ return this.httpClient
271
+ .get(`api/refinf/locality/${this.specifiedCanton}${queryParams}`)
272
+ .pipe(catchError(() => of([])) // emit even when an error occurs
273
+ );
270
274
  }
271
275
  else {
272
- return this.httpClient.get(`api/refinf/locality/all${queryParams}`);
276
+ return this.httpClient
277
+ .get(`api/refinf/locality/all${queryParams}`)
278
+ .pipe(catchError(() => of([])) // emit even when an error occurs
279
+ );
273
280
  }
274
281
  }
275
282
  getStreetNumberFor(estrid) {
@@ -277,14 +284,16 @@ export class FoehnInputAddressComponent extends FoehnInputComponent {
277
284
  return of([]);
278
285
  }
279
286
  const url = `api/refinf/addresses/${estrid}`;
280
- return this.httpClient.get(url);
287
+ return this.httpClient.get(url).pipe(catchError(() => of([])) // emit even when an error occurs
288
+ );
281
289
  }
282
290
  getStreetsFor(zipCodeId) {
283
291
  if (!zipCodeId) {
284
292
  return of([]);
285
293
  }
286
294
  const url = `api/refinf/streets/${zipCodeId}`;
287
- return this.httpClient.get(url);
295
+ return this.httpClient.get(url).pipe(catchError(() => of([])) // emit even when an error occurs
296
+ );
288
297
  }
289
298
  clearAutocompletesWhenCountryIsUnappropriatedToComponentConfiguration() {
290
299
  if (this.isModelEmpty()) {
@@ -485,4 +494,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
485
494
  }], withDefaultCountry: [{
486
495
  type: Input
487
496
  }] } });
488
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4taW5wdXQtYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tYWRkcmVzcy9mb2Vobi1pbnB1dC1hZGRyZXNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hZGRyZXNzL2ZvZWhuLWlucHV0LWFkZHJlc3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQU1MLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFFYixFQUFFLEVBRUwsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDOUYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7O0FBRTFGLHNDQUFzQztBQUN0QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBRWpDLE1BQU0sT0FBTyxZQUFZO0NBRXhCO0FBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFjLEVBQVcsRUFBRSxDQUMxQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUM7QUFFdEMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFvQixF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QW9CO3NCQURuQixLQUFLO2dCQUlOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFJTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIFN1YnNjcmlwdGlvblxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIG1hcCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRm9laG5BdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb2VobklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvZWhuSW5wdXRUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JqZWN0SGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9vYmplY3QuaGVscGVyJztcbmltcG9ydCB7IFNka0RpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2RrLWRpY3Rpb25hcnkvc2RrLWRpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBBZGRyZXNzLCBDb3VudHJ5LCBMb2NhbGl0eSwgU3RyZWV0IH0gZnJvbSAnLi9hZGRyZXNzLnR5cGUnO1xuaW1wb3J0IHsgRm9laG5JbnB1dEZvcmVpZ25Mb2NhbGl0eUNvbXBvbmVudCB9IGZyb20gJy4vZm9laG4taW5wdXQtZm9yZWlnbi1sb2NhbGl0eS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9laG5JbnB1dEZvcmVpZ25TdHJlZXRDb21wb25lbnQgfSBmcm9tICcuL2ZvZWhuLWlucHV0LWZvcmVpZ24tc3RyZWV0LmNvbXBvbmVudCc7XG5cbi8vIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlXG5leHBvcnQgY29uc3QgU1dJU1NfSVNPX0lEID0gJ0NIJztcblxuZXhwb3J0IGNsYXNzIFN0cmVldE51bWJlciB7XG4gICAgbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBpc0RlZmluZWQgPSAodmFsdWU6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gICAgdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlO1xuXG5jb25zdCBoYXNJbnB1dENoYW5nZWQgPSAoY2hhbmdlOiBTaW1wbGVDaGFuZ2UpOiBib29sZWFuID0+XG4gICAgY2hhbmdlICYmICFPYmplY3RIZWxwZXIuaXNFcXVhbChjaGFuZ2UucHJldmlvdXNWYWx1ZSwgY2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4taW5wdXQtYWRkcmVzcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLWlucHV0LWFkZHJlc3MuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGb2VobklucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9laG5JbnB1dEFkZHJlc3NDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9laG5JbnB1dEFkZHJlc3NDb21wb25lbnRcbiAgICBleHRlbmRzIEZvZWhuSW5wdXRDb21wb25lbnQ8QWRkcmVzcz5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgICBAVmlld0NoaWxkKEZvZWhuSW5wdXRGb3JlaWduTG9jYWxpdHlDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGZvcmVpZ25Mb2NhbGl0eUNvbXBvbmVudDogRm9laG5JbnB1dEZvcmVpZ25Mb2NhbGl0eUNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoRm9laG5JbnB1dEZvcmVpZ25TdHJlZXRDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGZvcmVpZ25TdHJlZXRDb21wb25lbnQ6IEZvZWhuSW5wdXRGb3JlaWduU3RyZWV0Q29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgnZm9yZWlnbkhvdXNlTnVtYmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgZm9yZWlnbkhvdXNlTnVtYmVyOiBGb2VobklucHV0VGV4dENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvdW50cnlBdXRvY29tcGxldGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBjb3VudHJ5QXV0b2NvbXBsZXRlOiBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpXG4gICAgY291bnRyaWVzVXJsID0gJ2FwaS9yZWZpbmYvY291bnRyaWVzJztcblxuICAgIEBJbnB1dCgpXG4gICAgaXNPbmx5U3dpc3MgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBzaG93UG9zdE9mZmljZUJveFRleHQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd0FkcmVzc0xpbmVzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd0FkcmVzc0xpbmUxID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd0FkcmVzc0xpbmUyID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc3BlY2lmaWVkQ2FudG9uOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIGNvdW50cnlSZXF1aXJlZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHN3aXNzTnBhTG9jYWxpdHlSZXF1aXJlZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHN0cmVldFJlcXVpcmVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBzdHJlZXROdW1iZXJSZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBoaWRlTm90UmVxdWlyZWRFeHRyYUxhYmVsU3RyZWV0TnVtYmVyID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZm9yZWlnblppcENvZGVSZXF1aXJlZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGZvcmVpZ25Mb2NhbGl0eVJlcXVpcmVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZm9yZWlnblN0cmVldFJlcXVpcmVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBmb3JlaWduU3RyZWV0TnVtYmVyUmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcG9zdE9mZmljZUJveFRleHRSZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpXG4gICAgYWRkcmVzc0xpbmUxUmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWRkcmVzc0xpbmUyUmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgd2l0aENvbXBhbnlMb2NhbGl0aWVzID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHdpdGhEZWZhdWx0Q291bnRyeSA9IHRydWU7XG5cbiAgICBjb3VudHJ5OiBDb3VudHJ5O1xuICAgIGxvY2FsaXR5OiBMb2NhbGl0eTtcbiAgICBzdHJlZXQ6IFN0cmVldDtcbiAgICBob3VzZU51bWJlcjogc3RyaW5nO1xuICAgIHBvc3RPZmZpY2VCb3hUZXh0OiBzdHJpbmc7XG4gICAgYWRkcmVzc0xpbmUxOiBzdHJpbmc7XG4gICAgYWRkcmVzc0xpbmUyOiBzdHJpbmc7XG5cbiAgICBjb3VudHJpZXM6IE9ic2VydmFibGU8Q291bnRyeVtdPjtcbiAgICBsb2NhbGl0aWVzOiBPYnNlcnZhYmxlPExvY2FsaXR5W10+O1xuICAgIHN0cmVldHM6IE9ic2VydmFibGU8U3RyZWV0W10+O1xuICAgIHN0cmVldE51bWJlcnM6IE9ic2VydmFibGU8U3RyZWV0TnVtYmVyW10+O1xuXG4gICAgc3RyZWV0Q3VzdG9tRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICBwcml2YXRlIGlzbzJJZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XG4gICAgcHJpdmF0ZSB6aXBDb2RlSWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KG51bGwpO1xuICAgIHByaXZhdGUgZXN0cklkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcblxuICAgIHByaXZhdGUgY291bnRyeU1vZGVsQ2hhbmdlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q291bnRyeT4obnVsbCk7XG4gICAgcHJpdmF0ZSBpc09ubHlTd2lzc0NoYW5nZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHByaXZhdGUgbWFuYWdlRGVmYXVsdENvdW50cnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgIHByaXZhdGUgZGljdGlvbmFyeVNlcnZpY2U6IFNka0RpY3Rpb25hcnlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaWRlbnRpdHkgPSA8VD4objogVCk6IFQgPT4gbjtcbiAgICBjb3VudHJ5SWRlbnRpdHkgPSAoY291bnRyeTogQ291bnRyeSk6IHN0cmluZyA9PiBjb3VudHJ5LmlzbzJJZDtcbiAgICBsb2NhbGl0eUlkZW50aXR5ID0gKGxvYzogTG9jYWxpdHkpOiBzdHJpbmcgPT4gbG9jLnppcENvZGVJZDtcbiAgICBzdHJlZXRJZGVudGl0eSA9IChzdHJlZXQ6IFN0cmVldCk6IHN0cmluZyA9PiBzdHJlZXQuZXN0cmlkO1xuICAgIHN0cmVldEdlbmVyYXRvciA9IChsb25nTmFtZTogc3RyaW5nKTogU3RyZWV0ID0+ICh7XG4gICAgICAgIGVzdHJpZDogbnVsbCxcbiAgICAgICAgbG9uZ05hbWVcbiAgICB9KTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm1hbmFnZURlZmF1bHRDb3VudHJ5U3Vic2NyaXB0aW9uID0gdGhpcy5tYW5hZ2VEZWZhdWx0Q291bnRyeSgpO1xuXG4gICAgICAgIGlmICghdGhpcy5zaG93UG9zdE9mZmljZUJveFRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RyZWV0Q3VzdG9tRXJyb3JzLkF0TGVhc3RPbmVOb3ROdWxsID1cbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldEtleVN5bmMoJ2Vycm9ycy5Ob3ROdWxsJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuZ2V0Q291bnRyaWVzKCk7XG5cbiAgICAgICAgdGhpcy5sb2NhbGl0aWVzID0gdGhpcy5pc28ySWRTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgLy8gVGhlIGxpc3Qgb2YgbG9jYWxpdGllcywgb3IgYW4gZW1wdHkgYXJyYXkgYXMgdGhlIGRlZmF1bHQgdmFsdWUuXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaXNvMklkID0+IHRoaXMuZ2V0TG9jYWxpdGllcyhpc28ySWQpKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdHJlZXRzID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLnppcENvZGVJZFN1YmplY3QsXG4gICAgICAgICAgICB0aGlzLmxvY2FsaXRpZXNcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIC8vIFRoZSB6aXBDb2RlSWQgd2hlbiBsb2NhbGl0eSBjaGFuZ2VzIG9yIG1hdGNoIGxvY2FsaXR5IChwb3N0YWxMb2NhbGl0eUhpc3RvcnlJZCkgZnJvbSBtb2RlbFxuICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgIChbemlwQ29kZUlkLCBsb2NhbGl0aWVzXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgemlwQ29kZUlkIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdExvY2FsaXR5WmlwQ29kZUlkKGxvY2FsaXRpZXMsIHRoaXMubG9jYWxpdHkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIC8vIFRoZSBsaXN0IG9mIHN0cmVldHMgb3IgYSBkZWZhdWx0IHZhbHVlIHRvIGFuIGVtcHR5IGFycmF5XG4gICAgICAgICAgICBzd2l0Y2hNYXAoemlwQ29kZUlkID0+IHRoaXMuZ2V0U3RyZWV0c0Zvcih6aXBDb2RlSWQpKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJzID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLmVzdHJJZFN1YmplY3QsXG4gICAgICAgICAgICB0aGlzLnN0cmVldHNcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIC8vIFRoZSBlc3RyaWQgd2hlbiBzdHJlZXQgY2hhbmdlcyBvciBtYXRjaCBzdHJlZXQgKGxvbmdOYW1lKSBmcm9tIG1vZGVsXG4gICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgKFtlc3RyaWQsIHN0cmVldHNdKSA9PlxuICAgICAgICAgICAgICAgICAgICBlc3RyaWQgfHwgdGhpcy5leHRyYWN0U3RyZWV0RXN0cmlkKHN0cmVldHMsIHRoaXMuc3RyZWV0KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAvLyBUaGUgbGlzdCBvZiBzdHJlZXRzIG9yIGEgZGVmYXVsdCB2YWx1ZSB0byBhbiBlbXB0eSBhcnJheVxuICAgICAgICAgICAgc3dpdGNoTWFwKGVzdHJpZCA9PiB0aGlzLmdldFN0cmVldE51bWJlckZvcihlc3RyaWQpKSxcbiAgICAgICAgICAgIC8vIFNvbWUgc3RyZWV0IG1pZ2h0IG5vdCBoYXZlIGFuIG5hbWUsIFJlZkluZiBzb21ldGltZXMgcmV0dXJucyB3ZWlyZCBkYXRhLlxuICAgICAgICAgICAgbWFwKHZhbHVlcyA9PiB2YWx1ZXMuZmlsdGVyKHN0cmVldE51bWJlciA9PiAhIXN0cmVldE51bWJlci5uYW1lKSksXG4gICAgICAgICAgICBtYXAodmFsdWVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xsYXRvciA9IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICBudW1lcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZW5zaXRpdml0eTogJ2Jhc2UnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5zb3J0KChhLCBiKSA9PiBjb2xsYXRvci5jb21wYXJlKGEubmFtZSwgYi5uYW1lKSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMubWFuYWdlRGVmYXVsdENvdW50cnlTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb2RlbENoYW5nZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy5tb2RlbDtcbiAgICAgICAgY29uc3QgaXNPbmx5U3dpc3M6IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXMuaXNPbmx5U3dpc3M7XG5cbiAgICAgICAgaWYgKGhhc0lucHV0Q2hhbmdlZChtb2RlbENoYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY291bnRyeU1vZGVsQ2hhbmdlU3ViamVjdC5uZXh0KFxuICAgICAgICAgICAgICAgIG1vZGVsQ2hhbmdlLmN1cnJlbnRWYWx1ZT8uY291bnRyeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzSW5wdXRDaGFuZ2VkKGlzT25seVN3aXNzKSkge1xuICAgICAgICAgICAgdGhpcy5pc09ubHlTd2lzc0NoYW5nZVN1YmplY3QubmV4dChpc09ubHlTd2lzcy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQWRkcmVzcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsaWRWYWx1ZSA9IHRoaXMuZ2V0VmFsaWRWYWx1ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbGlkVmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5nTW9kZWwodmFsaWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVOZ01vZGVsKHZhbHVlOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgICAgIGlmICghIXZhbHVlKSB7XG4gICAgICAgICAgICAvLyBhdm9pZCB3cm9uZ2Z1bGwgcHJlZmlsbCBieSBzZXNzaW9uIGluZm9cbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93QWRyZXNzTGluZXMgfHwgIXRoaXMuc2hvd0FkcmVzc0xpbmUxKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYWRkcmVzc0xpbmUxID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93QWRyZXNzTGluZXMgfHwgIXRoaXMuc2hvd0FkcmVzc0xpbmUyKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYWRkcmVzc0xpbmUyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93UG9zdE9mZmljZUJveFRleHQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5wb3N0T2ZmaWNlQm94VGV4dCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBuZXZlciB1cGRhdGFibGUgaW4gdGhlIGNvbXBvbmVudFxuICAgICAgICAgICAgdmFsdWUucG9zdE9mZmljZUJveE51bWJlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci51cGRhdGVOZ01vZGVsKHZhbHVlKTtcbiAgICB9XG5cbiAgICBoYW5kbGVVc2VySW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbGlkVmFsdWUgPSB0aGlzLmdldFZhbGlkVmFsdWUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsaWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5ID0gdmFsdWUuY291bnRyeTtcbiAgICAgICAgICAgIHRoaXMubG9jYWxpdHkgPSB2YWx1ZS5sb2NhbGl0eTtcbiAgICAgICAgICAgIHRoaXMuc3RyZWV0ID0gdmFsdWUuc3RyZWV0O1xuICAgICAgICAgICAgdGhpcy5ob3VzZU51bWJlciA9IHZhbHVlLmhvdXNlTnVtYmVyO1xuICAgICAgICAgICAgdGhpcy5wb3N0T2ZmaWNlQm94VGV4dCA9IHZhbHVlLnBvc3RPZmZpY2VCb3hUZXh0O1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzTGluZTEgPSB2YWx1ZS5hZGRyZXNzTGluZTE7XG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NMaW5lMiA9IHZhbHVlLmFkZHJlc3NMaW5lMjtcbiAgICAgICAgfSBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGNvdW50cnkgaXMgbWFuYWdlZCBieSBgbWFuYWdlRGVmYXVsdENvdW50cnkoKWBcbiAgICAgICAgICAgIHRoaXMubG9jYWxpdHkgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zdHJlZXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ob3VzZU51bWJlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBvc3RPZmZpY2VCb3hUZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc0xpbmUxID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc0xpbmUyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU3dpc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgIHRoaXMuaXNPbmx5U3dpc3MgfHxcbiAgICAgICAgICAgICh0aGlzLmNvdW50cnkgJiYgdGhpcy5jb3VudHJ5LmlzbzJJZCA9PT0gU1dJU1NfSVNPX0lEKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVzZXJJbnB1dENvdW50cnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuemlwQ29kZUlkU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLmVzdHJJZFN1YmplY3QubmV4dChudWxsKTtcblxuICAgICAgICB0aGlzLmxvY2FsaXR5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdHJlZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5wb3N0T2ZmaWNlQm94VGV4dCA9IG51bGw7XG4gICAgICAgIHRoaXMuYWRkcmVzc0xpbmUxID0gbnVsbDtcbiAgICAgICAgdGhpcy5hZGRyZXNzTGluZTIgPSBudWxsO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQWRkcmVzcygpO1xuICAgICAgICB0aGlzLmhhbmRsZVVzZXJJbnB1dCgpO1xuICAgIH1cblxuICAgIHVzZXJJbnB1dExvY2FsaXR5KGxvY2FsaXR5OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGlmICghbG9jYWxpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuemlwQ29kZUlkU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsd2F5cyByZXNldCBzdWdnZXN0aW9uIGxpc3Qgb2YgaG91c2VOdW1iZXIgd2hlbiBsb2NhbGl0eSBjaGFuZ2VzXG4gICAgICAgIHRoaXMuZXN0cklkU3ViamVjdC5uZXh0KG51bGwpO1xuXG4gICAgICAgIHRoaXMuc3RyZWV0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5ob3VzZU51bWJlciA9IG51bGw7XG5cbiAgICAgICAgdGhpcy51cGRhdGVBZGRyZXNzKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlVXNlcklucHV0KCk7XG4gICAgfVxuXG4gICAgdXNlcklucHV0U3RyZWV0KHN0cmVldDogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBpZiAoIXN0cmVldCkge1xuICAgICAgICAgICAgdGhpcy5lc3RySWRTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3VzZU51bWJlciA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFuZGxlVXNlcklucHV0KCk7XG4gICAgfVxuXG4gICAgY291bnRyeVVwZGF0ZWQoY291bnRyeTogQ291bnRyeSk6IHZvaWQge1xuICAgICAgICAvLyBObyBkb3VibGUtYmluZGluZyBvbiBjb3VudHJ5IGluIHZpZXcgdG8gZW5zdXJlIHdlIHVwZGF0ZSBwcm9wZXJseSBtb2RlbFxuICAgICAgICB0aGlzLmNvdW50cnkgPSBjb3VudHJ5O1xuICAgICAgICB0aGlzLnVwZGF0ZUFkZHJlc3MoKTtcblxuICAgICAgICBpZiAoIWNvdW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaXNvMklkIH0gPSBjb3VudHJ5O1xuICAgICAgICB0aGlzLmlzbzJJZFN1YmplY3QubmV4dChpc28ySWQpO1xuICAgIH1cblxuICAgIGdldExvY2FsaXR5RGlzcGxheWVkTmFtZShsb2NhbGl0eTogTG9jYWxpdHkpOiBzdHJpbmcgfCB2b2lkIHtcbiAgICAgICAgaWYgKCFsb2NhbGl0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke2xvY2FsaXR5LnppcENvZGV9ICR7bG9jYWxpdHkubG9uZ05hbWV9YDtcbiAgICB9XG5cbiAgICBsb2NhbGl0eVVwZGF0ZWQobG9jYWxpdHk6IExvY2FsaXR5KTogdm9pZCB7XG4gICAgICAgIC8vIE5vIGRvdWJsZS1iaW5kaW5nIG9uIGxvY2FsaXR5IGluIHZpZXcgdG8gZW5zdXJlIHdlIHVwZGF0ZSBwcm9wZXJseSBtb2RlbFxuICAgICAgICB0aGlzLmxvY2FsaXR5ID0gbG9jYWxpdHk7XG4gICAgICAgIHRoaXMudXBkYXRlQWRkcmVzcygpO1xuXG4gICAgICAgIGlmICghbG9jYWxpdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgemlwQ29kZUlkIH0gPSBsb2NhbGl0eTtcbiAgICAgICAgdGhpcy56aXBDb2RlSWRTdWJqZWN0Lm5leHQoemlwQ29kZUlkKTtcbiAgICB9XG5cbiAgICBzdHJlZXRVcGRhdGVkKHN0cmVldDogU3RyZWV0KTogdm9pZCB7XG4gICAgICAgIC8vIE5vIGRvdWJsZS1iaW5kaW5nIG9uIHN0cmVldCBpbiB2aWV3IHRvIGVuc3VyZSB3ZSB1cGRhdGUgcHJvcGVybHkgbW9kZWxcbiAgICAgICAgdGhpcy5zdHJlZXQgPSBzdHJlZXQ7XG4gICAgICAgIHRoaXMudXBkYXRlQWRkcmVzcygpO1xuXG4gICAgICAgIGlmICghc3RyZWV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGVzdHJpZCB9ID0gc3RyZWV0O1xuICAgICAgICB0aGlzLmVzdHJJZFN1YmplY3QubmV4dChlc3RyaWQpO1xuICAgIH1cblxuICAgIGlzU3RyZWV0UmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5zdHJlZXRSZXF1aXJlZCkpIHtcbiAgICAgICAgICAgIC8vIHJlc3BlY3Qgb3ZlcnJpZGVuIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlZXRSZXF1aXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zaG93UG9zdE9mZmljZUJveFRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLnBvc3RPZmZpY2VCb3hUZXh0IHx8ICEhdGhpcy5zdHJlZXQ7XG4gICAgfVxuXG4gICAgaXNGb3JlaWduU3RyZWV0UmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5mb3JlaWduU3RyZWV0UmVxdWlyZWQpKSB7XG4gICAgICAgICAgICAvLyByZXNwZWN0IG92ZXJyaWRlbiB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yZWlnblN0cmVldFJlcXVpcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNob3dQb3N0T2ZmaWNlQm94VGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIXRoaXMucG9zdE9mZmljZUJveFRleHQgfHwgISF0aGlzLnN0cmVldDtcbiAgICB9XG5cbiAgICBpc1Bvc3RPZmZpY2VCb3hUZXh0UmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5wb3N0T2ZmaWNlQm94VGV4dFJlcXVpcmVkKSkge1xuICAgICAgICAgICAgLy8gcmVzcGVjdCBvdmVycmlkZW4gdmFsdWVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RPZmZpY2VCb3hUZXh0UmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF0aGlzLnN0cmVldCB8fCAhIXRoaXMucG9zdE9mZmljZUJveFRleHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb3VudHJpZXMoKTogT2JzZXJ2YWJsZTxDb3VudHJ5W10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8Q291bnRyeVtdPih0aGlzLmNvdW50cmllc1VybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMb2NhbGl0aWVzKGlzbzJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2NhbGl0eVtdPiB7XG4gICAgICAgIGlmIChpc28ySWQgIT09IFNXSVNTX0lTT19JRCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gISF0aGlzLndpdGhDb21wYW55TG9jYWxpdGllc1xuICAgICAgICAgICAgPyAnP3dpdGhDb21wYW55TG9jYWxpdGllcz10cnVlJ1xuICAgICAgICAgICAgOiAnJztcblxuICAgICAgICBpZiAoISF0aGlzLnNwZWNpZmllZENhbnRvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8TG9jYWxpdHlbXT4oXG4gICAgICAgICAgICAgICAgYGFwaS9yZWZpbmYvbG9jYWxpdHkvJHt0aGlzLnNwZWNpZmllZENhbnRvbn0ke3F1ZXJ5UGFyYW1zfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxMb2NhbGl0eVtdPihcbiAgICAgICAgICAgICAgICBgYXBpL3JlZmluZi9sb2NhbGl0eS9hbGwke3F1ZXJ5UGFyYW1zfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0cmVldE51bWJlckZvcihlc3RyaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8U3RyZWV0TnVtYmVyW10+IHtcbiAgICAgICAgaWYgKCFlc3RyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmwgPSBgYXBpL3JlZmluZi9hZGRyZXNzZXMvJHtlc3RyaWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8U3RyZWV0TnVtYmVyW10+KHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdHJlZXRzRm9yKHppcENvZGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTdHJlZXRbXT4ge1xuICAgICAgICBpZiAoIXppcENvZGVJZCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVybCA9IGBhcGkvcmVmaW5mL3N0cmVldHMvJHt6aXBDb2RlSWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8U3RyZWV0W10+KHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckF1dG9jb21wbGV0ZXNXaGVuQ291bnRyeUlzVW5hcHByb3ByaWF0ZWRUb0NvbXBvbmVudENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc09ubHlTd2lzcyAmJiB0aGlzLmNvdW50cnk/LmlzbzJJZCAhPT0gU1dJU1NfSVNPX0lEKSB7XG4gICAgICAgICAgICAvLyBEbyBub3QgcmVtb3ZlIHRoaXMgd2FybmluZy4gTmVlZGVkIGZvciBkZWJ1Z2dpbmcgYXQgYWxsIHRpbWUuXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICBgQ291bnRyeSBhZGRyZXNzIHdhcyAnJHt0aGlzLmNvdW50cnkuaXNvMklkfScuIE9ubHkgc3dpc3MgaXMgYXNrZWQgaW4gY29tcG9uZW50ICdmb2Vobi1pbnB1dC1hZGRyZXNzJyBjb25maWd1cmF0aW9uLiBBZGRyZXNzIG1vZGVsIHJlc2V0dGVkLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQXV0b2NvbXBsZXRlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTd2lzc0NvdW50cnkoKTogQ291bnRyeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc28ySWQ6IFNXSVNTX0lTT19JRCxcbiAgICAgICAgICAgIHNob3J0TmFtZUZyOiAnU3Vpc3NlJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdENvdW50cnkoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMud2l0aERlZmF1bHRDb3VudHJ5ICYmXG4gICAgICAgICAgICAodGhpcy5pc09ubHlTd2lzcyB8fCAhdGhpcy5jb3VudHJ5IHx8ICF0aGlzLmNvdW50cnkuaXNvMklkKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY291bnRyeSA9IHRoaXMuZ2V0U3dpc3NDb3VudHJ5KCk7XG4gICAgICAgICAgICB0aGlzLmlzbzJJZFN1YmplY3QubmV4dChTV0lTU19JU09fSUQpO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFkZHJlc3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJBdXRvY29tcGxldGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvdW50cnkgPSBudWxsO1xuICAgICAgICB0aGlzLnN0cmVldCA9IG51bGw7XG4gICAgICAgIHRoaXMubG9jYWxpdHkgPSBudWxsO1xuICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gbnVsbDtcbiAgICAgICAgLy8gTm8gdXBkYXRlQWRkcmVzcygpIGhlcmUgYmVjYXVzZSBkb25lIGluIHNldERlZmF1bHRDb3VudHJ5KClcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RMb2NhbGl0eVppcENvZGVJZChcbiAgICAgICAgbG9jYWxpdGllczogTG9jYWxpdHlbXSxcbiAgICAgICAgbG9jYWxpdHlUb01hdGNoOiBMb2NhbGl0eVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGlmIChsb2NhbGl0eVRvTWF0Y2ggJiYgbG9jYWxpdHlUb01hdGNoLnBvc3RhbExvY2FsaXR5SGlzdG9yeUlkKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gbG9jYWxpdGllcy5maW5kKFxuICAgICAgICAgICAgICAgIChsb2NhbGl0eTogTG9jYWxpdHkpID0+XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsaXR5LnBvc3RhbExvY2FsaXR5SGlzdG9yeUlkID09PVxuICAgICAgICAgICAgICAgICAgICBsb2NhbGl0eVRvTWF0Y2gucG9zdGFsTG9jYWxpdHlIaXN0b3J5SWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkLnppcENvZGVJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdFN0cmVldEVzdHJpZChcbiAgICAgICAgc3RyZWV0czogU3RyZWV0W10sXG4gICAgICAgIHN0cmVldFRvTWF0Y2g6IFN0cmVldFxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGlmIChzdHJlZXRUb01hdGNoICYmIHN0cmVldFRvTWF0Y2gubG9uZ05hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBzdHJlZXRzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHN0cmVldDogU3RyZWV0KSA9PiBzdHJlZXQubG9uZ05hbWUgPT09IHN0cmVldFRvTWF0Y2gubG9uZ05hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkLmVzdHJpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsaWRDb3VudHJ5KCk6IENvdW50cnkge1xuICAgICAgICAvLyBCZSBzdXJlIHRvIGFsd2F5cyBzZW5kIFN3aXNzIGNvdW50cnkgd2hlbiAnaXNPbmx5U3dpc3MnIGlzIHNldCB0byB0cnVlXG4gICAgICAgIHJldHVybiB0aGlzLmlzT25seVN3aXNzID8gdGhpcy5nZXRTd2lzc0NvdW50cnkoKSA6IHRoaXMuY291bnRyeTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbGlkVmFsdWUoKTogQWRkcmVzcyB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy5pc01vZGVsRW1wdHkoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWxfICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291bnRyeTogdGhpcy5nZXRWYWxpZENvdW50cnkoKSxcbiAgICAgICAgICAgIGxvY2FsaXR5OiB0aGlzLmdldFZhbGlkTG9jYWxpdHkodGhpcy5sb2NhbGl0eSksXG4gICAgICAgICAgICBzdHJlZXQ6IHRoaXMuc3RyZWV0LFxuICAgICAgICAgICAgaG91c2VOdW1iZXI6IHRoaXMuaG91c2VOdW1iZXIsXG4gICAgICAgICAgICBwb3N0T2ZmaWNlQm94VGV4dDogdGhpcy5wb3N0T2ZmaWNlQm94VGV4dCxcbiAgICAgICAgICAgIGFkZHJlc3NMaW5lMTogdGhpcy5hZGRyZXNzTGluZTEsXG4gICAgICAgICAgICBhZGRyZXNzTGluZTI6IHRoaXMuYWRkcmVzc0xpbmUyXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZExvY2FsaXR5KHZhbHVlOiBMb2NhbGl0eSk6IExvY2FsaXR5IHtcbiAgICAgICAgLy8gUFJFU1RBS0lULTM1MjogTmVlZCBhIGZha2UgJ3ppcENvZGVJZCcgZm9yIGluZGl2aWR1YWwgZXJyb3JzIG9uICd6aXBDb2RlJyBhbmQgJ2xvbmdOYW1lJ1xuICAgICAgICBpZiAoIXRoaXMuaXNTd2lzcygpICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgemlwQ29kZUlkOiAnLTEnIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc01vZGVsRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy5pc09ubHlTd2lzcyB8fFxuICAgICAgICAgICAgICAgICF0aGlzLmNvdW50cnkgfHxcbiAgICAgICAgICAgICAgICBPYmplY3RIZWxwZXIuaXNFbXB0eSh0aGlzLmNvdW50cnkpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLmxvY2FsaXR5IHx8IE9iamVjdEhlbHBlci5pc0VtcHR5KHRoaXMubG9jYWxpdHkpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLnN0cmVldCB8fCBPYmplY3RIZWxwZXIuaXNFbXB0eSh0aGlzLnN0cmVldCkpICYmXG4gICAgICAgICAgICB0aGlzLmlzRW1wdHkodGhpcy5ob3VzZU51bWJlcikgJiZcbiAgICAgICAgICAgIHRoaXMuaXNFbXB0eSh0aGlzLnBvc3RPZmZpY2VCb3hUZXh0KSAmJlxuICAgICAgICAgICAgdGhpcy5pc0VtcHR5KHRoaXMuYWRkcmVzc0xpbmUxKSAmJlxuICAgICAgICAgICAgdGhpcy5pc0VtcHR5KHRoaXMuYWRkcmVzc0xpbmUyKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFuYWdlRGVmYXVsdENvdW50cnkoKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeU1vZGVsQ2hhbmdlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzPy5pc28ySWQgPT09IGN1cnJlbnQ/LmlzbzJJZFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLmlzT25seVN3aXNzQ2hhbmdlU3ViamVjdFxuICAgICAgICAgICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKChbY291bnRyeSwgaXNPbmx5U3dpc3NdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzT25seVN3aXNzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNvdW50cnkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc0NvdW50cnlJbnB1dERpcnR5KClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdENvdW50cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09ubHlTd2lzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlcmUgaXMgYSBjb3VudHJ5LCB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGhhcyB0byBiZSBjbGVhbmVkIGFuZCBzZXQgdG8gZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWNvdW50cnkgJiYgIU9iamVjdEhlbHBlci5pc0VtcHR5KGNvdW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJBdXRvY29tcGxldGVzV2hlbkNvdW50cnlJc1VuYXBwcm9wcmlhdGVkVG9Db21wb25lbnRDb25maWd1cmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdENvdW50cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzLWFuZ3VsYXIvcHJlZmVyLWFzeW5jLXBpcGVcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ291bnRyeUlucHV0RGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5jb3VudHJ5QXV0b2NvbXBsZXRlPy5pbnB1dE1vZGVsTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50cnlBdXRvY29tcGxldGUuaW5wdXRNb2RlbExpc3RcbiAgICAgICAgICAgIC5maWx0ZXIobmdNb2RlbCA9PiBuZ01vZGVsLm5hbWUgPT09IHRoaXMuY291bnRyeUF1dG9jb21wbGV0ZS5uYW1lKVxuICAgICAgICAgICAgLm1hcChuZ01vZGVsID0+IG5nTW9kZWwuY29udHJvbC5kaXJ0eSlcbiAgICAgICAgICAgIC5ldmVyeSh2YWx1ZSA9PiB2YWx1ZSA9PT0gdHJ1ZSk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoKSArICdDb250YWluZXInXCJcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgIFtjbGFzcy5oYXMtZGFuZ2VyXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICBbY2xhc3MudmQtZm9ybS1ncm91cC1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFt0YWJJbmRleF09XCItMVwiXG4+XG4gICAgPGZpZWxkc2V0XG4gICAgICAgIGNsYXNzPVwibWItM1wiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ2V0RGVzY3JpYmVkQnkoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKSB8fCBudWxsXCJcbiAgICA+XG4gICAgICAgIDxsZWdlbmRcbiAgICAgICAgICAgICpuZ0lmPVwiISFsYWJlbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpc0xhYmVsU3JPbmx5ID8gJ3Zpc3VhbGx5LWhpZGRlbicgOiAndmQtcCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZXF1aXJlZCAmJiAhaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnZm9laG4taW5wdXQub3B0aW9uYWwnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sZWdlbmQ+XG5cbiAgICAgICAgPGZvZWhuLXZhbGlkYXRpb24tYWxlcnRzIFtjb21wb25lbnRdPVwidGhpc1wiPjwvZm9laG4tdmFsaWRhdGlvbi1hbGVydHM+XG5cbiAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoKSArICdIZWxwJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgICAgICA+PC9zbWFsbD5cblxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPGZvZWhuLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgKm5nSWY9XCIhaXNPbmx5U3dpc3NcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidmb2Vobi1pbnB1dC1hZGRyZXNzLmNvdW50cnkubGFiZWwnIHwgZnJvbURpY3Rpb25hcnlcIlxuICAgICAgICAgICAgW2VsZW1lbnRzXT1cImNvdW50cmllcyB8IGFzeW5jXCJcbiAgICAgICAgICAgIGVsZW1lbnRMYWJlbD1cInNob3J0TmFtZUZyXCJcbiAgICAgICAgICAgIFtlbGVtZW50VmFsdWVdPVwiaWRlbnRpdHlcIlxuICAgICAgICAgICAgW2VsZW1lbnRWYWx1ZUlkZW50aXR5XT1cImNvdW50cnlJZGVudGl0eVwiXG4gICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiY291bnRyeVVwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAodXNlcklucHV0KT1cInVzZXJJbnB1dENvdW50cnkoKVwiXG4gICAgICAgICAgICBbbW9kZWxdPVwiY291bnRyeVwiXG4gICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJy5jb3VudHJ5J1wiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiY291bnRyeVJlcXVpcmVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAjY291bnRyeUF1dG9jb21wbGV0ZVxuICAgICAgICA+PC9mb2Vobi1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3dpc3MoKVwiPlxuICAgICAgICAgICAgPGZvZWhuLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZm9laG4taW5wdXQtYWRkcmVzcy5sb2NhbGl0eS5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRzXT1cImxvY2FsaXRpZXMgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRMYWJlbF09XCJnZXRMb2NhbGl0eURpc3BsYXllZE5hbWVcIlxuICAgICAgICAgICAgICAgIFtlbGVtZW50VmFsdWVdPVwiaWRlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtlbGVtZW50VmFsdWVJZGVudGl0eV09XCJsb2NhbGl0eUlkZW50aXR5XCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwibG9jYWxpdHlVcGRhdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICh1c2VySW5wdXQpPVwidXNlcklucHV0TG9jYWxpdHkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImxvY2FsaXR5XCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJy5sb2NhbGl0eSdcIlxuICAgICAgICAgICAgICAgIFthbGxvd0N1c3RvbVZhbHVlXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwic3dpc3NOcGFMb2NhbGl0eVJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgPjwvZm9laG4tYXV0b2NvbXBsZXRlPlxuXG4gICAgICAgICAgICA8Zm9laG4tYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidmb2Vobi1pbnB1dC1hZGRyZXNzLnN0cmVldC5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRzXT1cInN0cmVldHMgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgZWxlbWVudExhYmVsPVwibG9uZ05hbWVcIlxuICAgICAgICAgICAgICAgIFtlbGVtZW50VmFsdWVdPVwiaWRlbnRpdHlcIlxuICAgICAgICAgICAgICAgIFtlbGVtZW50VmFsdWVJZGVudGl0eV09XCJzdHJlZXRJZGVudGl0eVwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInN0cmVldFVwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cInN0cmVldFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICcuc3RyZWV0J1wiXG4gICAgICAgICAgICAgICAgW2FsbG93Q3VzdG9tVmFsdWVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbVZhbHVlTW9kZWxHZW5lcmF0b3JdPVwic3RyZWV0R2VuZXJhdG9yXCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNTdHJlZXRSZXF1aXJlZCgpXCJcbiAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICdmb2Vobi1pbnB1dC1hZGRyZXNzLnN0cmVldC5oZWxwLXRleHQnIHwgZnJvbURpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtjdXN0b21FcnJvcnNdPVwic3RyZWV0Q3VzdG9tRXJyb3JzXCJcbiAgICAgICAgICAgICAgICAodXNlcklucHV0KT1cInVzZXJJbnB1dFN0cmVldCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgPjwvZm9laG4tYXV0b2NvbXBsZXRlPlxuXG4gICAgICAgICAgICA8Zm9laG4tYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAnZm9laG4taW5wdXQtYWRkcmVzcy5ob3VzZU51bWJlci5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRzXT1cInN0cmVldE51bWJlcnMgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgZWxlbWVudExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgZWxlbWVudFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgWyhtb2RlbCldPVwiaG91c2VOdW1iZXJcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLmhvdXNlTnVtYmVyJ1wiXG4gICAgICAgICAgICAgICAgW2FsbG93Q3VzdG9tVmFsdWVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAnZm9laG4taW5wdXQtYWRkcmVzcy5ob3VzZU51bWJlci5oZWxwLXRleHQnIHwgZnJvbURpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJ1cGRhdGVBZGRyZXNzKClcIlxuICAgICAgICAgICAgICAgICh1c2VySW5wdXQpPVwiaGFuZGxlVXNlcklucHV0KClcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJzdHJlZXROdW1iZXJSZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgW2hpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgIGhpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWxTdHJlZXROdW1iZXJcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA+PC9mb2Vobi1hdXRvY29tcGxldGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTd2lzcygpXCI+XG4gICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICBDb21wb25lbnQgPGZvZWhuLWlucHV0LWZvcmVpZ24tbG9jYWxpdHk+IGlzIHNwZWNpYWwgYmVjYXVzZSB3ZSB1c2UgdGhlIHNhbWUgbW9kZWwgd2hlbiBzd2lzcyBvciBmb3JlaWduZXIuXG4gICAgICAgICAgICBUbyBkbyBzbywgd2UgbmVlZDpcbiAgICAgICAgICAgICAgICAtIEVycm9ycyB3aWxsIGJlIGJpbmQgb24gJ2xvY2FsaXR5JyB3aGVuIE5VTEwgb3Igb24gJ3ppcENvZGUnIGFuZCAnbG9uZ05hbWUnIG1vZGVsIGluc2lkZSBjb21wb25lbnQgd2hlbiBFTVBUWVxuICAgICAgICAgICAgICAgIC0gSGlkZSBsYWJlbCBmcm9tIGNvbXBvbmVudCBiZWNhdXNlIHdlIG5lZWQgbGFiZWwgZnJvbSBjaGlsZHJlbiB0byBiZSBkaXNwbGF5ZWQgKGlzTGFiZWxTck9ubHk6IHRydWUpXG4gICAgICAgICAgICAgICAgLSByZXF1aXJlZCBhbmQgZGlzYWJsZWQgcGFyYW1zIGFyZSB0cmFuc21pdHRlZCB0byBjaGlsZHJlblxuICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPGZvZWhuLWlucHV0LWZvcmVpZ24tbG9jYWxpdHlcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2ZvZWhuLWlucHV0LWFkZHJlc3MubG9jYWxpdHkubGFiZWwnIHwgZnJvbURpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLmxvY2FsaXR5J1wiXG4gICAgICAgICAgICAgICAgWyhtb2RlbCldPVwibG9jYWxpdHlcIlxuICAgICAgICAgICAgICAgIFt6aXBDb2RlUmVxdWlyZWRdPVwiZm9yZWlnblppcENvZGVSZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgW2xvY2FsaXR5UmVxdWlyZWRdPVwiZm9yZWlnbkxvY2FsaXR5UmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIFtpc0xhYmVsU3JPbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY291bnRyeSB8fCBkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInVwZGF0ZUFkZHJlc3MoKVwiXG4gICAgICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICA+PC9mb2Vobi1pbnB1dC1mb3JlaWduLWxvY2FsaXR5PlxuICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgQ29tcG9uZW50IDxmb2Vobi1pbnB1dC1mb3JlaWduLXN0cmVldD4gaXMgc3BlY2lhbCBiZWNhdXNlIHdlIHVzZSB0aGUgc2FtZSBtb2RlbCB3aGVuIHN3aXNzIG9yIGZvcmVpZ25lci5cbiAgICAgICAgICAgIFRvIGRvIHNvLCB3ZSBuZWVkOlxuICAgICAgICAgICAgICAgIC0gRXJyb3JzIHdpbGwgYmUgYmluZCBvbiAnc3RyZWV0JyB3aGVuIE5VTEwgb3Igb24gJ2xvbmdOYW1lJyBtb2RlbCBpbnNpZGUgY29tcG9uZW50IHdoZW4gRU1QVFlcbiAgICAgICAgICAgICAgICAtIHJlcXVpcmVkLCBoZWxwVGV4dCwgaXNMYWJlbFNyT25seSBhbmQgZGlzYWJsZWQgIHBhcmFtcyBhcmUgdHJhbnNtaXR0ZWQgdG8gY2hpbGRyZW5cbiAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDxmb2Vobi1pbnB1dC1mb3JlaWduLXN0cmVldFxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZm9laG4taW5wdXQtYWRkcmVzcy5zdHJlZXQubGFiZWwnIHwgZnJvbURpY3Rpb25hcnlcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLnN0cmVldCdcIlxuICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInN0cmVldFwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzRm9yZWlnblN0cmVldFJlcXVpcmVkKClcIlxuICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgJ2ZvZWhuLWlucHV0LWFkZHJlc3Muc3RyZWV0LmhlbHAtdGV4dCcgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUVycm9yc109XCJzdHJlZXRDdXN0b21FcnJvcnNcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY291bnRyeSB8fCBkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInVwZGF0ZUFkZHJlc3MoKVwiXG4gICAgICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICA+PC9mb2Vobi1pbnB1dC1mb3JlaWduLXN0cmVldD5cblxuICAgICAgICAgICAgPGZvZWhuLWlucHV0LXRleHRcbiAgICAgICAgICAgICAgICAjZm9yZWlnbkhvdXNlTnVtYmVyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAnZm9laG4taW5wdXQtYWRkcmVzcy5ob3VzZU51bWJlci5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICcuaG91c2VOdW1iZXInXCJcbiAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJob3VzZU51bWJlclwiXG4gICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAnZm9laG4taW5wdXQtYWRkcmVzcy5ob3VzZU51bWJlci5oZWxwLXRleHQnIHwgZnJvbURpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY291bnRyeSB8fCBkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInVwZGF0ZUFkZHJlc3MoKVwiXG4gICAgICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZvcmVpZ25TdHJlZXROdW1iZXJSZXF1aXJlZFwiXG4gICAgICAgICAgICA+PC9mb2Vobi1pbnB1dC10ZXh0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8Zm9laG4taW5wdXQtdGV4dFxuICAgICAgICAgICAgKm5nSWY9XCJzaG93UG9zdE9mZmljZUJveFRleHRcIlxuICAgICAgICAgICAgWyhtb2RlbCldPVwicG9zdE9mZmljZUJveFRleHRcIlxuICAgICAgICAgICAgW2hlbHBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICdmb2Vobi1pbnB1dC1hZGRyZXNzLnBvc3RPZmZpY2VCb3hUZXh0LmhlbHAtdGV4dCdcbiAgICAgICAgICAgICAgICAgICAgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAnZm9laG4taW5wdXQtYWRkcmVzcy5wb3N0T2ZmaWNlQm94VGV4dC5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLnBvc3RPZmZpY2VCb3hUZXh0J1wiXG4gICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwidXBkYXRlQWRkcmVzcygpXCJcbiAgICAgICAgICAgICh1c2VySW5wdXQpPVwiaGFuZGxlVXNlcklucHV0KClcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUG9zdE9mZmljZUJveFRleHRSZXF1aXJlZCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgID48L2ZvZWhuLWlucHV0LXRleHQ+XG5cbiAgICAgICAgPGZvZWhuLWlucHV0LXRleHRcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0FkcmVzc0xpbmVzICYmIHNob3dBZHJlc3NMaW5lMVwiXG4gICAgICAgICAgICBbKG1vZGVsKV09XCJhZGRyZXNzTGluZTFcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidmb2Vobi1pbnB1dC1hZGRyZXNzLmFkZHJlc3NMaW5lMS5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJy5hZGRyZXNzTGluZTEnXCJcbiAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJ1cGRhdGVBZGRyZXNzKClcIlxuICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiYWRkcmVzc0xpbmUxUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCInYWRkcmVzcy1saW5lMidcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgPjwvZm9laG4taW5wdXQtdGV4dD5cblxuICAgICAgICA8Zm9laG4taW5wdXQtdGV4dFxuICAgICAgICAgICAgKm5nSWY9XCJzaG93QWRyZXNzTGluZXMgJiYgc2hvd0FkcmVzc0xpbmUyXCJcbiAgICAgICAgICAgIFsobW9kZWwpXT1cImFkZHJlc3NMaW5lMlwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2ZvZWhuLWlucHV0LWFkZHJlc3MuYWRkcmVzc0xpbmUyLmxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLmFkZHJlc3NMaW5lMidcIlxuICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInVwZGF0ZUFkZHJlc3MoKVwiXG4gICAgICAgICAgICAodXNlcklucHV0KT1cImhhbmRsZVVzZXJJbnB1dCgpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJhZGRyZXNzTGluZTJSZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cIidhZGRyZXNzLWxpbmUzJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICA+PC9mb2Vobi1pbnB1dC10ZXh0PlxuICAgIDwvZmllbGRzZXQ+XG48L2Rpdj5cbiJdfQ==
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4taW5wdXQtYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tYWRkcmVzcy9mb2Vobi1pbnB1dC1hZGRyZXNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1hZGRyZXNzL2ZvZWhuLWlucHV0LWFkZHJlc3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQU1MLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFFYixFQUFFLEVBRUwsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0gsVUFBVSxFQUNWLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7OztBQUUxRixzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztBQUVqQyxNQUFNLE9BQU8sWUFBWTtDQUV4QjtBQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUUsQ0FDMUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDO0FBRXRDLE1BQU0sZUFBZSxHQUFHLENB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QU0sRUFBRSxLQUFLLEVBQUU7Z0JBSW5ELFlBQVk7c0JBRFgsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4scUJBQXFCO3NCQURwQixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBSU4scUNBQXFDO3NCQURwQyxLQUFLO2dCQUlOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFJTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBSU4scUJBQXFCO3NCQURwQixLQUFLO2dCQUlOLDJCQUEyQjtzQkFEMUIsS0FBSztnQkFJTix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBSU4sb0JBQW9CO3NCQURuQixLQUFLO2dCQUlOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFJTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIFN1YnNjcmlwdGlvblxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgY2F0Y2hFcnJvcixcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgbWFwLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2ZvZWhuLWF1dG9jb21wbGV0ZS9mb2Vobi1hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZvZWhuSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9laG5JbnB1dFRleHRDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYmplY3RIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL29iamVjdC5oZWxwZXInO1xuaW1wb3J0IHsgU2RrRGljdGlvbmFyeVNlcnZpY2UgfSBmcm9tICcuLi9zZGstZGljdGlvbmFyeS9zZGstZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFkZHJlc3MsIENvdW50cnksIExvY2FsaXR5LCBTdHJlZXQgfSBmcm9tICcuL2FkZHJlc3MudHlwZSc7XG5pbXBvcnQgeyBGb2VobklucHV0Rm9yZWlnbkxvY2FsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi9mb2Vobi1pbnB1dC1mb3JlaWduLWxvY2FsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb2VobklucHV0Rm9yZWlnblN0cmVldENvbXBvbmVudCB9IGZyb20gJy4vZm9laG4taW5wdXQtZm9yZWlnbi1zdHJlZXQuY29tcG9uZW50JztcblxuLy8gZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGVcbmV4cG9ydCBjb25zdCBTV0lTU19JU09fSUQgPSAnQ0gnO1xuXG5leHBvcnQgY2xhc3MgU3RyZWV0TnVtYmVyIHtcbiAgICBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IGlzRGVmaW5lZCA9ICh2YWx1ZTogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgICB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG5cbmNvbnN0IGhhc0lucHV0Q2hhbmdlZCA9IChjaGFuZ2U6IFNpbXBsZUNoYW5nZSk6IGJvb2xlYW4gPT5cbiAgICBjaGFuZ2UgJiYgIU9iamVjdEhlbHBlci5pc0VxdWFsKGNoYW5nZS5wcmV2aW91c1ZhbHVlLCBjaGFuZ2UuY3VycmVudFZhbHVlKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmb2Vobi1pbnB1dC1hZGRyZXNzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9laG4taW5wdXQtYWRkcmVzcy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvZWhuSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb2VobklucHV0QWRkcmVzc0NvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb2VobklucHV0QWRkcmVzc0NvbXBvbmVudFxuICAgIGV4dGVuZHMgRm9laG5JbnB1dENvbXBvbmVudDxBZGRyZXNzPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICAgIEBWaWV3Q2hpbGQoRm9laG5JbnB1dEZvcmVpZ25Mb2NhbGl0eUNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgZm9yZWlnbkxvY2FsaXR5Q29tcG9uZW50OiBGb2VobklucHV0Rm9yZWlnbkxvY2FsaXR5Q29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZChGb2VobklucHV0Rm9yZWlnblN0cmVldENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgZm9yZWlnblN0cmVldENvbXBvbmVudDogRm9laG5JbnB1dEZvcmVpZ25TdHJlZXRDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdmb3JlaWduSG91c2VOdW1iZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBmb3JlaWduSG91c2VOdW1iZXI6IEZvZWhuSW5wdXRUZXh0Q29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgnY291bnRyeUF1dG9jb21wbGV0ZScsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIGNvdW50cnlBdXRvY29tcGxldGU6IEZvZWhuQXV0b2NvbXBsZXRlQ29tcG9uZW50O1xuXG4gICAgQElucHV0KClcbiAgICBjb3VudHJpZXNVcmwgPSAnYXBpL3JlZmluZi9jb3VudHJpZXMnO1xuXG4gICAgQElucHV0KClcbiAgICBpc09ubHlTd2lzcyA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dQb3N0T2ZmaWNlQm94VGV4dCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBzaG93QWRyZXNzTGluZXMgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBzaG93QWRyZXNzTGluZTEgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBzaG93QWRyZXNzTGluZTIgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBzcGVjaWZpZWRDYW50b246IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgY291bnRyeVJlcXVpcmVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc3dpc3NOcGFMb2NhbGl0eVJlcXVpcmVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc3RyZWV0UmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHN0cmVldE51bWJlclJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGhpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWxTdHJlZXROdW1iZXIgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBmb3JlaWduWmlwQ29kZVJlcXVpcmVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZm9yZWlnbkxvY2FsaXR5UmVxdWlyZWQgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBmb3JlaWduU3RyZWV0UmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIGZvcmVpZ25TdHJlZXROdW1iZXJSZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwb3N0T2ZmaWNlQm94VGV4dFJlcXVpcmVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBhZGRyZXNzTGluZTFSZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBhZGRyZXNzTGluZTJSZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICB3aXRoQ29tcGFueUxvY2FsaXRpZXMgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgd2l0aERlZmF1bHRDb3VudHJ5ID0gdHJ1ZTtcblxuICAgIGNvdW50cnk6IENvdW50cnk7XG4gICAgbG9jYWxpdHk6IExvY2FsaXR5O1xuICAgIHN0cmVldDogU3RyZWV0O1xuICAgIGhvdXNlTnVtYmVyOiBzdHJpbmc7XG4gICAgcG9zdE9mZmljZUJveFRleHQ6IHN0cmluZztcbiAgICBhZGRyZXNzTGluZTE6IHN0cmluZztcbiAgICBhZGRyZXNzTGluZTI6IHN0cmluZztcblxuICAgIGNvdW50cmllczogT2JzZXJ2YWJsZTxDb3VudHJ5W10+O1xuICAgIGxvY2FsaXRpZXM6IE9ic2VydmFibGU8TG9jYWxpdHlbXT47XG4gICAgc3RyZWV0czogT2JzZXJ2YWJsZTxTdHJlZXRbXT47XG4gICAgc3RyZWV0TnVtYmVyczogT2JzZXJ2YWJsZTxTdHJlZXROdW1iZXJbXT47XG5cbiAgICBzdHJlZXRDdXN0b21FcnJvcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICAgIHByaXZhdGUgaXNvMklkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcbiAgICBwcml2YXRlIHppcENvZGVJZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XG4gICAgcHJpdmF0ZSBlc3RySWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KG51bGwpO1xuXG4gICAgcHJpdmF0ZSBjb3VudHJ5TW9kZWxDaGFuZ2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb3VudHJ5PihudWxsKTtcbiAgICBwcml2YXRlIGlzT25seVN3aXNzQ2hhbmdlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcHJpdmF0ZSBtYW5hZ2VEZWZhdWx0Q291bnRyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBkaWN0aW9uYXJ5U2VydmljZTogU2RrRGljdGlvbmFyeVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBpZGVudGl0eSA9IDxUPihuOiBUKTogVCA9PiBuO1xuICAgIGNvdW50cnlJZGVudGl0eSA9IChjb3VudHJ5OiBDb3VudHJ5KTogc3RyaW5nID0+IGNvdW50cnkuaXNvMklkO1xuICAgIGxvY2FsaXR5SWRlbnRpdHkgPSAobG9jOiBMb2NhbGl0eSk6IHN0cmluZyA9PiBsb2MuemlwQ29kZUlkO1xuICAgIHN0cmVldElkZW50aXR5ID0gKHN0cmVldDogU3RyZWV0KTogc3RyaW5nID0+IHN0cmVldC5lc3RyaWQ7XG4gICAgc3RyZWV0R2VuZXJhdG9yID0gKGxvbmdOYW1lOiBzdHJpbmcpOiBTdHJlZXQgPT4gKHtcbiAgICAgICAgZXN0cmlkOiBudWxsLFxuICAgICAgICBsb25nTmFtZVxuICAgIH0pO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMubWFuYWdlRGVmYXVsdENvdW50cnlTdWJzY3JpcHRpb24gPSB0aGlzLm1hbmFnZURlZmF1bHRDb3VudHJ5KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNob3dQb3N0T2ZmaWNlQm94VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5zdHJlZXRDdXN0b21FcnJvcnMuQXRMZWFzdE9uZU5vdE51bGwgPVxuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYygnZXJyb3JzLk5vdE51bGwnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY291bnRyaWVzID0gdGhpcy5nZXRDb3VudHJpZXMoKTtcblxuICAgICAgICB0aGlzLmxvY2FsaXRpZXMgPSB0aGlzLmlzbzJJZFN1YmplY3QucGlwZShcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAvLyBUaGUgbGlzdCBvZiBsb2NhbGl0aWVzLCBvciBhbiBlbXB0eSBhcnJheSBhcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgICAgICAgICAgIHN3aXRjaE1hcChpc28ySWQgPT4gdGhpcy5nZXRMb2NhbGl0aWVzKGlzbzJJZCkpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN0cmVldHMgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuemlwQ29kZUlkU3ViamVjdCxcbiAgICAgICAgICAgIHRoaXMubG9jYWxpdGllc1xuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgLy8gVGhlIHppcENvZGVJZCB3aGVuIGxvY2FsaXR5IGNoYW5nZXMgb3IgbWF0Y2ggbG9jYWxpdHkgKHBvc3RhbExvY2FsaXR5SGlzdG9yeUlkKSBmcm9tIG1vZGVsXG4gICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgKFt6aXBDb2RlSWQsIGxvY2FsaXRpZXNdKSA9PlxuICAgICAgICAgICAgICAgICAgICB6aXBDb2RlSWQgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHRyYWN0TG9jYWxpdHlaaXBDb2RlSWQobG9jYWxpdGllcywgdGhpcy5sb2NhbGl0eSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgLy8gVGhlIGxpc3Qgb2Ygc3RyZWV0cyBvciBhIGRlZmF1bHQgdmFsdWUgdG8gYW4gZW1wdHkgYXJyYXlcbiAgICAgICAgICAgIHN3aXRjaE1hcCh6aXBDb2RlSWQgPT4gdGhpcy5nZXRTdHJlZXRzRm9yKHppcENvZGVJZCkpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN0cmVldE51bWJlcnMgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuZXN0cklkU3ViamVjdCxcbiAgICAgICAgICAgIHRoaXMuc3RyZWV0c1xuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgLy8gVGhlIGVzdHJpZCB3aGVuIHN0cmVldCBjaGFuZ2VzIG9yIG1hdGNoIHN0cmVldCAobG9uZ05hbWUpIGZyb20gbW9kZWxcbiAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAoW2VzdHJpZCwgc3RyZWV0c10pID0+XG4gICAgICAgICAgICAgICAgICAgIGVzdHJpZCB8fCB0aGlzLmV4dHJhY3RTdHJlZXRFc3RyaWQoc3RyZWV0cywgdGhpcy5zdHJlZXQpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIC8vIFRoZSBsaXN0IG9mIHN0cmVldHMgb3IgYSBkZWZhdWx0IHZhbHVlIHRvIGFuIGVtcHR5IGFycmF5XG4gICAgICAgICAgICBzd2l0Y2hNYXAoZXN0cmlkID0+IHRoaXMuZ2V0U3RyZWV0TnVtYmVyRm9yKGVzdHJpZCkpLFxuICAgICAgICAgICAgLy8gU29tZSBzdHJlZXQgbWlnaHQgbm90IGhhdmUgYW4gbmFtZSwgUmVmSW5mIHNvbWV0aW1lcyByZXR1cm5zIHdlaXJkIGRhdGEuXG4gICAgICAgICAgICBtYXAodmFsdWVzID0+IHZhbHVlcy5maWx0ZXIoc3RyZWV0TnVtYmVyID0+ICEhc3RyZWV0TnVtYmVyLm5hbWUpKSxcbiAgICAgICAgICAgIG1hcCh2YWx1ZXMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxhdG9yID0gbmV3IEludGwuQ29sbGF0b3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgIG51bWVyaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbnNpdGl2aXR5OiAnYmFzZSdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLnNvcnQoKGEsIGIpID0+IGNvbGxhdG9yLmNvbXBhcmUoYS5uYW1lLCBiLm5hbWUpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5tYW5hZ2VEZWZhdWx0Q291bnRyeVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vZGVsQ2hhbmdlOiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLm1vZGVsO1xuICAgICAgICBjb25zdCBpc09ubHlTd2lzczogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy5pc09ubHlTd2lzcztcblxuICAgICAgICBpZiAoaGFzSW5wdXRDaGFuZ2VkKG1vZGVsQ2hhbmdlKSkge1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5TW9kZWxDaGFuZ2VTdWJqZWN0Lm5leHQoXG4gICAgICAgICAgICAgICAgbW9kZWxDaGFuZ2UuY3VycmVudFZhbHVlPy5jb3VudHJ5XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNJbnB1dENoYW5nZWQoaXNPbmx5U3dpc3MpKSB7XG4gICAgICAgICAgICB0aGlzLmlzT25seVN3aXNzQ2hhbmdlU3ViamVjdC5uZXh0KGlzT25seVN3aXNzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVBZGRyZXNzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZFZhbHVlID0gdGhpcy5nZXRWYWxpZFZhbHVlKCk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbCh2YWxpZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZU5nTW9kZWwodmFsdWU6IEFkZHJlc3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGF2b2lkIHdyb25nZnVsbCBwcmVmaWxsIGJ5IHNlc3Npb24gaW5mb1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dBZHJlc3NMaW5lcyB8fCAhdGhpcy5zaG93QWRyZXNzTGluZTEpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5hZGRyZXNzTGluZTEgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dBZHJlc3NMaW5lcyB8fCAhdGhpcy5zaG93QWRyZXNzTGluZTIpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5hZGRyZXNzTGluZTIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dQb3N0T2ZmaWNlQm94VGV4dCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLnBvc3RPZmZpY2VCb3hUZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5ldmVyIHVwZGF0YWJsZSBpbiB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICB2YWx1ZS5wb3N0T2ZmaWNlQm94TnVtYmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLnVwZGF0ZU5nTW9kZWwodmFsdWUpO1xuICAgIH1cblxuICAgIGhhbmRsZVVzZXJJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsaWRWYWx1ZSA9IHRoaXMuZ2V0VmFsaWRWYWx1ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbGlkVmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWxpZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UodmFsdWU6IEFkZHJlc3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvdW50cnkgPSB2YWx1ZS5jb3VudHJ5O1xuICAgICAgICAgICAgdGhpcy5sb2NhbGl0eSA9IHZhbHVlLmxvY2FsaXR5O1xuICAgICAgICAgICAgdGhpcy5zdHJlZXQgPSB2YWx1ZS5zdHJlZXQ7XG4gICAgICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gdmFsdWUuaG91c2VOdW1iZXI7XG4gICAgICAgICAgICB0aGlzLnBvc3RPZmZpY2VCb3hUZXh0ID0gdmFsdWUucG9zdE9mZmljZUJveFRleHQ7XG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NMaW5lMSA9IHZhbHVlLmFkZHJlc3NMaW5lMTtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc0xpbmUyID0gdmFsdWUuYWRkcmVzc0xpbmUyO1xuICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgLy8gY291bnRyeSBpcyBtYW5hZ2VkIGJ5IGBtYW5hZ2VEZWZhdWx0Q291bnRyeSgpYFxuICAgICAgICAgICAgdGhpcy5sb2NhbGl0eSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnN0cmVldCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucG9zdE9mZmljZUJveFRleHQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzTGluZTEgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzTGluZTIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTd2lzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKFxuICAgICAgICAgICAgdGhpcy5pc09ubHlTd2lzcyB8fFxuICAgICAgICAgICAgKHRoaXMuY291bnRyeSAmJiB0aGlzLmNvdW50cnkuaXNvMklkID09PSBTV0lTU19JU09fSUQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXNlcklucHV0Q291bnRyeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy56aXBDb2RlSWRTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuZXN0cklkU3ViamVjdC5uZXh0KG51bGwpO1xuXG4gICAgICAgIHRoaXMubG9jYWxpdHkgPSBudWxsO1xuICAgICAgICB0aGlzLnN0cmVldCA9IG51bGw7XG4gICAgICAgIHRoaXMuaG91c2VOdW1iZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnBvc3RPZmZpY2VCb3hUZXh0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5hZGRyZXNzTGluZTEgPSBudWxsO1xuICAgICAgICB0aGlzLmFkZHJlc3NMaW5lMiA9IG51bGw7XG5cbiAgICAgICAgdGhpcy51cGRhdGVBZGRyZXNzKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlVXNlcklucHV0KCk7XG4gICAgfVxuXG4gICAgdXNlcklucHV0TG9jYWxpdHkobG9jYWxpdHk6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFsb2NhbGl0eSkge1xuICAgICAgICAgICAgdGhpcy56aXBDb2RlSWRTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWx3YXlzIHJlc2V0IHN1Z2dlc3Rpb24gbGlzdCBvZiBob3VzZU51bWJlciB3aGVuIGxvY2FsaXR5IGNoYW5nZXNcbiAgICAgICAgdGhpcy5lc3RySWRTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgICAgdGhpcy5zdHJlZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gbnVsbDtcblxuICAgICAgICB0aGlzLnVwZGF0ZUFkZHJlc3MoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVVc2VySW5wdXQoKTtcbiAgICB9XG5cbiAgICB1c2VySW5wdXRTdHJlZXQoc3RyZWV0OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGlmICghc3RyZWV0KSB7XG4gICAgICAgICAgICB0aGlzLmVzdHJJZFN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5oYW5kbGVVc2VySW5wdXQoKTtcbiAgICB9XG5cbiAgICBjb3VudHJ5VXBkYXRlZChjb3VudHJ5OiBDb3VudHJ5KTogdm9pZCB7XG4gICAgICAgIC8vIE5vIGRvdWJsZS1iaW5kaW5nIG9uIGNvdW50cnkgaW4gdmlldyB0byBlbnN1cmUgd2UgdXBkYXRlIHByb3Blcmx5IG1vZGVsXG4gICAgICAgIHRoaXMuY291bnRyeSA9IGNvdW50cnk7XG4gICAgICAgIHRoaXMudXBkYXRlQWRkcmVzcygpO1xuXG4gICAgICAgIGlmICghY291bnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBpc28ySWQgfSA9IGNvdW50cnk7XG4gICAgICAgIHRoaXMuaXNvMklkU3ViamVjdC5uZXh0KGlzbzJJZCk7XG4gICAgfVxuXG4gICAgZ2V0TG9jYWxpdHlEaXNwbGF5ZWROYW1lKGxvY2FsaXR5OiBMb2NhbGl0eSk6IHN0cmluZyB8IHZvaWQge1xuICAgICAgICBpZiAoIWxvY2FsaXR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7bG9jYWxpdHkuemlwQ29kZX0gJHtsb2NhbGl0eS5sb25nTmFtZX1gO1xuICAgIH1cblxuICAgIGxvY2FsaXR5VXBkYXRlZChsb2NhbGl0eTogTG9jYWxpdHkpOiB2b2lkIHtcbiAgICAgICAgLy8gTm8gZG91YmxlLWJpbmRpbmcgb24gbG9jYWxpdHkgaW4gdmlldyB0byBlbnN1cmUgd2UgdXBkYXRlIHByb3Blcmx5IG1vZGVsXG4gICAgICAgIHRoaXMubG9jYWxpdHkgPSBsb2NhbGl0eTtcbiAgICAgICAgdGhpcy51cGRhdGVBZGRyZXNzKCk7XG5cbiAgICAgICAgaWYgKCFsb2NhbGl0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB6aXBDb2RlSWQgfSA9IGxvY2FsaXR5O1xuICAgICAgICB0aGlzLnppcENvZGVJZFN1YmplY3QubmV4dCh6aXBDb2RlSWQpO1xuICAgIH1cblxuICAgIHN0cmVldFVwZGF0ZWQoc3RyZWV0OiBTdHJlZXQpOiB2b2lkIHtcbiAgICAgICAgLy8gTm8gZG91YmxlLWJpbmRpbmcgb24gc3RyZWV0IGluIHZpZXcgdG8gZW5zdXJlIHdlIHVwZGF0ZSBwcm9wZXJseSBtb2RlbFxuICAgICAgICB0aGlzLnN0cmVldCA9IHN0cmVldDtcbiAgICAgICAgdGhpcy51cGRhdGVBZGRyZXNzKCk7XG5cbiAgICAgICAgaWYgKCFzdHJlZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZXN0cmlkIH0gPSBzdHJlZXQ7XG4gICAgICAgIHRoaXMuZXN0cklkU3ViamVjdC5uZXh0KGVzdHJpZCk7XG4gICAgfVxuXG4gICAgaXNTdHJlZXRSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnN0cmVldFJlcXVpcmVkKSkge1xuICAgICAgICAgICAgLy8gcmVzcGVjdCBvdmVycmlkZW4gdmFsdWVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVldFJlcXVpcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNob3dQb3N0T2ZmaWNlQm94VGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIXRoaXMucG9zdE9mZmljZUJveFRleHQgfHwgISF0aGlzLnN0cmVldDtcbiAgICB9XG5cbiAgICBpc0ZvcmVpZ25TdHJlZXRSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLmZvcmVpZ25TdHJlZXRSZXF1aXJlZCkpIHtcbiAgICAgICAgICAgIC8vIHJlc3BlY3Qgb3ZlcnJpZGVuIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JlaWduU3RyZWV0UmVxdWlyZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2hvd1Bvc3RPZmZpY2VCb3hUZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhdGhpcy5wb3N0T2ZmaWNlQm94VGV4dCB8fCAhIXRoaXMuc3RyZWV0O1xuICAgIH1cblxuICAgIGlzUG9zdE9mZmljZUJveFRleHRSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBvc3RPZmZpY2VCb3hUZXh0UmVxdWlyZWQpKSB7XG4gICAgICAgICAgICAvLyByZXNwZWN0IG92ZXJyaWRlbiB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdE9mZmljZUJveFRleHRSZXF1aXJlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXRoaXMuc3RyZWV0IHx8ICEhdGhpcy5wb3N0T2ZmaWNlQm94VGV4dDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvdW50cmllcygpOiBPYnNlcnZhYmxlPENvdW50cnlbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxDb3VudHJ5W10+KHRoaXMuY291bnRyaWVzVXJsKS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihbXSkpIC8vIGVtaXQgZXZlbiB3aGVuIGFuIGVycm9yIG9jY3Vyc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TG9jYWxpdGllcyhpc28ySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYWxpdHlbXT4ge1xuICAgICAgICBpZiAoaXNvMklkICE9PSBTV0lTU19JU09fSUQpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9ICEhdGhpcy53aXRoQ29tcGFueUxvY2FsaXRpZXNcbiAgICAgICAgICAgID8gJz93aXRoQ29tcGFueUxvY2FsaXRpZXM9dHJ1ZSdcbiAgICAgICAgICAgIDogJyc7XG5cbiAgICAgICAgaWYgKCEhdGhpcy5zcGVjaWZpZWRDYW50b24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAuZ2V0PFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl0eVtdXG4gICAgICAgICAgICAgICAgPihgYXBpL3JlZmluZi9sb2NhbGl0eS8ke3RoaXMuc3BlY2lmaWVkQ2FudG9ufSR7cXVlcnlQYXJhbXN9YClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihbXSkpIC8vIGVtaXQgZXZlbiB3aGVuIGFuIGVycm9yIG9jY3Vyc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLmdldDxMb2NhbGl0eVtdPihgYXBpL3JlZmluZi9sb2NhbGl0eS9hbGwke3F1ZXJ5UGFyYW1zfWApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKSAvLyBlbWl0IGV2ZW4gd2hlbiBhbiBlcnJvciBvY2N1cnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdHJlZXROdW1iZXJGb3IoZXN0cmlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFN0cmVldE51bWJlcltdPiB7XG4gICAgICAgIGlmICghZXN0cmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsID0gYGFwaS9yZWZpbmYvYWRkcmVzc2VzLyR7ZXN0cmlkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PFN0cmVldE51bWJlcltdPih1cmwpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKFtdKSkgLy8gZW1pdCBldmVuIHdoZW4gYW4gZXJyb3Igb2NjdXJzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdHJlZXRzRm9yKHppcENvZGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTdHJlZXRbXT4ge1xuICAgICAgICBpZiAoIXppcENvZGVJZCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVybCA9IGBhcGkvcmVmaW5mL3N0cmVldHMvJHt6aXBDb2RlSWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8U3RyZWV0W10+KHVybCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKSAvLyBlbWl0IGV2ZW4gd2hlbiBhbiBlcnJvciBvY2N1cnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQXV0b2NvbXBsZXRlc1doZW5Db3VudHJ5SXNVbmFwcHJvcHJpYXRlZFRvQ29tcG9uZW50Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb2RlbEVtcHR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzT25seVN3aXNzICYmIHRoaXMuY291bnRyeT8uaXNvMklkICE9PSBTV0lTU19JU09fSUQpIHtcbiAgICAgICAgICAgIC8vIERvIG5vdCByZW1vdmUgdGhpcyB3YXJuaW5nLiBOZWVkZWQgZm9yIGRlYnVnZ2luZyBhdCBhbGwgdGltZS5cbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgICAgIGBDb3VudHJ5IGFkZHJlc3Mgd2FzICcke3RoaXMuY291bnRyeS5pc28ySWR9Jy4gT25seSBzd2lzcyBpcyBhc2tlZCBpbiBjb21wb25lbnQgJ2ZvZWhuLWlucHV0LWFkZHJlc3MnIGNvbmZpZ3VyYXRpb24uIEFkZHJlc3MgbW9kZWwgcmVzZXR0ZWQuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBdXRvY29tcGxldGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN3aXNzQ291bnRyeSgpOiBDb3VudHJ5IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzbzJJZDogU1dJU1NfSVNPX0lELFxuICAgICAgICAgICAgc2hvcnROYW1lRnI6ICdTdWlzc2UnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0Q291bnRyeSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy53aXRoRGVmYXVsdENvdW50cnkgJiZcbiAgICAgICAgICAgICh0aGlzLmlzT25seVN3aXNzIHx8ICF0aGlzLmNvdW50cnkgfHwgIXRoaXMuY291bnRyeS5pc28ySWQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5ID0gdGhpcy5nZXRTd2lzc0NvdW50cnkoKTtcbiAgICAgICAgICAgIHRoaXMuaXNvMklkU3ViamVjdC5uZXh0KFNXSVNTX0lTT19JRCk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWRkcmVzcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckF1dG9jb21wbGV0ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY291bnRyeSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RyZWV0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5sb2NhbGl0eSA9IG51bGw7XG4gICAgICAgIHRoaXMuaG91c2VOdW1iZXIgPSBudWxsO1xuICAgICAgICAvLyBObyB1cGRhdGVBZGRyZXNzKCkgaGVyZSBiZWNhdXNlIGRvbmUgaW4gc2V0RGVmYXVsdENvdW50cnkoKVxuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdExvY2FsaXR5WmlwQ29kZUlkKFxuICAgICAgICBsb2NhbGl0aWVzOiBMb2NhbGl0eVtdLFxuICAgICAgICBsb2NhbGl0eVRvTWF0Y2g6IExvY2FsaXR5XG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGxvY2FsaXR5VG9NYXRjaCAmJiBsb2NhbGl0eVRvTWF0Y2gucG9zdGFsTG9jYWxpdHlIaXN0b3J5SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBsb2NhbGl0aWVzLmZpbmQoXG4gICAgICAgICAgICAgICAgKGxvY2FsaXR5OiBMb2NhbGl0eSkgPT5cbiAgICAgICAgICAgICAgICAgICAgbG9jYWxpdHkucG9zdGFsTG9jYWxpdHlIaXN0b3J5SWQgPT09XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsaXR5VG9NYXRjaC5wb3N0YWxMb2NhbGl0eUhpc3RvcnlJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQuemlwQ29kZUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRyYWN0U3RyZWV0RXN0cmlkKFxuICAgICAgICBzdHJlZXRzOiBTdHJlZXRbXSxcbiAgICAgICAgc3RyZWV0VG9NYXRjaDogU3RyZWV0XG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHN0cmVldFRvTWF0Y2ggJiYgc3RyZWV0VG9NYXRjaC5sb25nTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHN0cmVldHMuZmluZChcbiAgICAgICAgICAgICAgICAoc3RyZWV0OiBTdHJlZXQpID0+IHN0cmVldC5sb25nTmFtZSA9PT0gc3RyZWV0VG9NYXRjaC5sb25nTmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQuZXN0cmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZENvdW50cnkoKTogQ291bnRyeSB7XG4gICAgICAgIC8vIEJlIHN1cmUgdG8gYWx3YXlzIHNlbmQgU3dpc3MgY291bnRyeSB3aGVuICdpc09ubHlTd2lzcycgaXMgc2V0IHRvIHRydWVcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPbmx5U3dpc3MgPyB0aGlzLmdldFN3aXNzQ291bnRyeSgpIDogdGhpcy5jb3VudHJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsaWRWYWx1ZSgpOiBBZGRyZXNzIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbF8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3VudHJ5OiB0aGlzLmdldFZhbGlkQ291bnRyeSgpLFxuICAgICAgICAgICAgbG9jYWxpdHk6IHRoaXMuZ2V0VmFsaWRMb2NhbGl0eSh0aGlzLmxvY2FsaXR5KSxcbiAgICAgICAgICAgIHN0cmVldDogdGhpcy5zdHJlZXQsXG4gICAgICAgICAgICBob3VzZU51bWJlcjogdGhpcy5ob3VzZU51bWJlcixcbiAgICAgICAgICAgIHBvc3RPZmZpY2VCb3hUZXh0OiB0aGlzLnBvc3RPZmZpY2VCb3hUZXh0LFxuICAgICAgICAgICAgYWRkcmVzc0xpbmUxOiB0aGlzLmFkZHJlc3NMaW5lMSxcbiAgICAgICAgICAgIGFkZHJlc3NMaW5lMjogdGhpcy5hZGRyZXNzTGluZTJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbGlkTG9jYWxpdHkodmFsdWU6IExvY2FsaXR5KTogTG9jYWxpdHkge1xuICAgICAgICAvLyBQUkVTVEFLSVQtMzUyOiBOZWVkIGEgZmFrZSAnemlwQ29kZUlkJyBmb3IgaW5kaXZpZHVhbCBlcnJvcnMgb24gJ3ppcENvZGUnIGFuZCAnbG9uZ05hbWUnXG4gICAgICAgIGlmICghdGhpcy5pc1N3aXNzKCkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4geyB6aXBDb2RlSWQ6ICctMScgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTW9kZWxFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLmlzT25seVN3aXNzIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuY291bnRyeSB8fFxuICAgICAgICAgICAgICAgIE9iamVjdEhlbHBlci5pc0VtcHR5KHRoaXMuY291bnRyeSkpICYmXG4gICAgICAgICAgICAoIXRoaXMubG9jYWxpdHkgfHwgT2JqZWN0SGVscGVyLmlzRW1wdHkodGhpcy5sb2NhbGl0eSkpICYmXG4gICAgICAgICAgICAoIXRoaXMuc3RyZWV0IHx8IE9iamVjdEhlbHBlci5pc0VtcHR5KHRoaXMuc3RyZWV0KSkgJiZcbiAgICAgICAgICAgIHRoaXMuaXNFbXB0eSh0aGlzLmhvdXNlTnVtYmVyKSAmJlxuICAgICAgICAgICAgdGhpcy5pc0VtcHR5KHRoaXMucG9zdE9mZmljZUJveFRleHQpICYmXG4gICAgICAgICAgICB0aGlzLmlzRW1wdHkodGhpcy5hZGRyZXNzTGluZTEpICYmXG4gICAgICAgICAgICB0aGlzLmlzRW1wdHkodGhpcy5hZGRyZXNzTGluZTIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYW5hZ2VEZWZhdWx0Q291bnRyeSgpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TW9kZWxDaGFuZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXM/LmlzbzJJZCA9PT0gY3VycmVudD8uaXNvMklkXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNPbmx5U3dpc3NDaGFuZ2VTdWJqZWN0XG4gICAgICAgICAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKFtjb3VudHJ5LCBpc09ubHlTd2lzc10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNPbmx5U3dpc3MgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY291bnRyeSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmlzQ291bnRyeUlucHV0RGlydHkoKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0Q291bnRyeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT25seVN3aXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBhIGNvdW50cnksIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgaGFzIHRvIGJlIGNsZWFuZWQgYW5kIHNldCB0byBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhY291bnRyeSAmJiAhT2JqZWN0SGVscGVyLmlzRW1wdHkoY291bnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckF1dG9jb21wbGV0ZXNXaGVuQ291bnRyeUlzVW5hcHByb3ByaWF0ZWRUb0NvbXBvbmVudENvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0Q291bnRyeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNDb3VudHJ5SW5wdXREaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvdW50cnlBdXRvY29tcGxldGU/LmlucHV0TW9kZWxMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRyeUF1dG9jb21wbGV0ZS5pbnB1dE1vZGVsTGlzdFxuICAgICAgICAgICAgLmZpbHRlcihuZ01vZGVsID0+IG5nTW9kZWwubmFtZSA9PT0gdGhpcy5jb3VudHJ5QXV0b2NvbXBsZXRlLm5hbWUpXG4gICAgICAgICAgICAubWFwKG5nTW9kZWwgPT4gbmdNb2RlbC5jb250cm9sLmRpcnR5KVxuICAgICAgICAgICAgLmV2ZXJ5KHZhbHVlID0+IHZhbHVlID09PSB0cnVlKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgW2F0dHIuaWRdPVwiYnVpbGRJZCgpICsgJ0NvbnRhaW5lcidcIlxuICAgIGNsYXNzPVwiZm9ybS1ncm91cFwiXG4gICAgW2NsYXNzLmhhcy1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW3RhYkluZGV4XT1cIi0xXCJcbj5cbiAgICA8ZmllbGRzZXRcbiAgICAgICAgY2xhc3M9XCJtYi0zXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJnZXREZXNjcmliZWRCeSgpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpIHx8IG51bGxcIlxuICAgID5cbiAgICAgICAgPGxlZ2VuZFxuICAgICAgICAgICAgKm5nSWY9XCIhIWxhYmVsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImlzTGFiZWxTck9ubHkgPyAndmlzdWFsbHktaGlkZGVuJyA6ICd2ZC1wJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJlcXVpcmVkICYmICFoaWRlTm90UmVxdWlyZWRFeHRyYUxhYmVsXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdmb2Vobi1pbnB1dC5vcHRpb25hbCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xlZ2VuZD5cblxuICAgICAgICA8Zm9laG4tdmFsaWRhdGlvbi1hbGVydHMgW2NvbXBvbmVudF09XCJ0aGlzXCI+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICpuZ0lmPVwiaGVscFRleHRcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRJZCgpICsgJ0hlbHAnXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJoZWxwVGV4dFwiXG4gICAgICAgID48L3NtYWxsPlxuXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgICAgICA8Zm9laG4tYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAqbmdJZj1cIiFpc09ubHlTd2lzc1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2ZvZWhuLWlucHV0LWFkZHJlc3MuY291bnRyeS5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgICAgICBbZWxlbWVudHNdPVwiY291bnRyaWVzIHwgYXN5bmNcIlxuICAgICAgICAgICAgZWxlbWVudExhYmVsPVwic2hvcnROYW1lRnJcIlxuICAgICAgICAgICAgW2VsZW1lbnRWYWx1ZV09XCJpZGVudGl0eVwiXG4gICAgICAgICAgICBbZWxlbWVudFZhbHVlSWRlbnRpdHldPVwiY291bnRyeUlkZW50aXR5XCJcbiAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjb3VudHJ5VXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICh1c2VySW5wdXQpPVwidXNlcklucHV0Q291bnRyeSgpXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJjb3VudHJ5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLmNvdW50cnknXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjb3VudHJ5UmVxdWlyZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICNjb3VudHJ5QXV0b2NvbXBsZXRlXG4gICAgICAgID48L2ZvZWhuLWF1dG9jb21wbGV0ZT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTd2lzcygpXCI+XG4gICAgICAgICAgICA8Zm9laG4tYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidmb2Vobi1pbnB1dC1hZGRyZXNzLmxvY2FsaXR5LmxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgICAgICBbZWxlbWVudHNdPVwibG9jYWxpdGllcyB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbZWxlbWVudExhYmVsXT1cImdldExvY2FsaXR5RGlzcGxheWVkTmFtZVwiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRWYWx1ZV09XCJpZGVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRWYWx1ZUlkZW50aXR5XT1cImxvY2FsaXR5SWRlbnRpdHlcIlxuICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJsb2NhbGl0eVVwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJ1c2VySW5wdXRMb2NhbGl0eSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwibG9jYWxpdHlcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLmxvY2FsaXR5J1wiXG4gICAgICAgICAgICAgICAgW2FsbG93Q3VzdG9tVmFsdWVdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJzd2lzc05wYUxvY2FsaXR5UmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA+PC9mb2Vobi1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgICAgIDxmb2Vobi1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2ZvZWhuLWlucHV0LWFkZHJlc3Muc3RyZWV0LmxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgICAgICBbZWxlbWVudHNdPVwic3RyZWV0cyB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBlbGVtZW50TGFiZWw9XCJsb25nTmFtZVwiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRWYWx1ZV09XCJpZGVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRWYWx1ZUlkZW50aXR5XT1cInN0cmVldElkZW50aXR5XCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwic3RyZWV0VXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwic3RyZWV0XCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJy5zdHJlZXQnXCJcbiAgICAgICAgICAgICAgICBbYWxsb3dDdXN0b21WYWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tVmFsdWVNb2RlbEdlbmVyYXRvcl09XCJzdHJlZXRHZW5lcmF0b3JcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1N0cmVldFJlcXVpcmVkKClcIlxuICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgJ2ZvZWhuLWlucHV0LWFkZHJlc3Muc3RyZWV0LmhlbHAtdGV4dCcgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUVycm9yc109XCJzdHJlZXRDdXN0b21FcnJvcnNcIlxuICAgICAgICAgICAgICAgICh1c2VySW5wdXQpPVwidXNlcklucHV0U3RyZWV0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA+PC9mb2Vobi1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgICAgIDxmb2Vobi1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICdmb2Vobi1pbnB1dC1hZGRyZXNzLmhvdXNlTnVtYmVyLmxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbZWxlbWVudHNdPVwic3RyZWV0TnVtYmVycyB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBlbGVtZW50TGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBlbGVtZW50VmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJob3VzZU51bWJlclwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICcuaG91c2VOdW1iZXInXCJcbiAgICAgICAgICAgICAgICBbYWxsb3dDdXN0b21WYWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICdmb2Vobi1pbnB1dC1hZGRyZXNzLmhvdXNlTnVtYmVyLmhlbHAtdGV4dCcgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInVwZGF0ZUFkZHJlc3MoKVwiXG4gICAgICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInN0cmVldE51bWJlclJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbFN0cmVldE51bWJlclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgID48L2ZvZWhuLWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1N3aXNzKClcIj5cbiAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgIENvbXBvbmVudCA8Zm9laG4taW5wdXQtZm9yZWlnbi1sb2NhbGl0eT4gaXMgc3BlY2lhbCBiZWNhdXNlIHdlIHVzZSB0aGUgc2FtZSBtb2RlbCB3aGVuIHN3aXNzIG9yIGZvcmVpZ25lci5cbiAgICAgICAgICAgIFRvIGRvIHNvLCB3ZSBuZWVkOlxuICAgICAgICAgICAgICAgIC0gRXJyb3JzIHdpbGwgYmUgYmluZCBvbiAnbG9jYWxpdHknIHdoZW4gTlVMTCBvciBvbiAnemlwQ29kZScgYW5kICdsb25nTmFtZScgbW9kZWwgaW5zaWRlIGNvbXBvbmVudCB3aGVuIEVNUFRZXG4gICAgICAgICAgICAgICAgLSBIaWRlIGxhYmVsIGZyb20gY29tcG9uZW50IGJlY2F1c2Ugd2UgbmVlZCBsYWJlbCBmcm9tIGNoaWxkcmVuIHRvIGJlIGRpc3BsYXllZCAoaXNMYWJlbFNyT25seTogdHJ1ZSlcbiAgICAgICAgICAgICAgICAtIHJlcXVpcmVkIGFuZCBkaXNhYmxlZCBwYXJhbXMgYXJlIHRyYW5zbWl0dGVkIHRvIGNoaWxkcmVuXG4gICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICA8Zm9laG4taW5wdXQtZm9yZWlnbi1sb2NhbGl0eVxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZm9laG4taW5wdXQtYWRkcmVzcy5sb2NhbGl0eS5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICcubG9jYWxpdHknXCJcbiAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJsb2NhbGl0eVwiXG4gICAgICAgICAgICAgICAgW3ppcENvZGVSZXF1aXJlZF09XCJmb3JlaWduWmlwQ29kZVJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxpdHlSZXF1aXJlZF09XCJmb3JlaWduTG9jYWxpdHlSZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgW2lzTGFiZWxTck9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjb3VudHJ5IHx8IGRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwidXBkYXRlQWRkcmVzcygpXCJcbiAgICAgICAgICAgICAgICAodXNlcklucHV0KT1cImhhbmRsZVVzZXJJbnB1dCgpXCJcbiAgICAgICAgICAgID48L2ZvZWhuLWlucHV0LWZvcmVpZ24tbG9jYWxpdHk+XG4gICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICBDb21wb25lbnQgPGZvZWhuLWlucHV0LWZvcmVpZ24tc3RyZWV0PiBpcyBzcGVjaWFsIGJlY2F1c2Ugd2UgdXNlIHRoZSBzYW1lIG1vZGVsIHdoZW4gc3dpc3Mgb3IgZm9yZWlnbmVyLlxuICAgICAgICAgICAgVG8gZG8gc28sIHdlIG5lZWQ6XG4gICAgICAgICAgICAgICAgLSBFcnJvcnMgd2lsbCBiZSBiaW5kIG9uICdzdHJlZXQnIHdoZW4gTlVMTCBvciBvbiAnbG9uZ05hbWUnIG1vZGVsIGluc2lkZSBjb21wb25lbnQgd2hlbiBFTVBUWVxuICAgICAgICAgICAgICAgIC0gcmVxdWlyZWQsIGhlbHBUZXh0LCBpc0xhYmVsU3JPbmx5IGFuZCBkaXNhYmxlZCAgcGFyYW1zIGFyZSB0cmFuc21pdHRlZCB0byBjaGlsZHJlblxuICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPGZvZWhuLWlucHV0LWZvcmVpZ24tc3RyZWV0XG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidmb2Vobi1pbnB1dC1hZGRyZXNzLnN0cmVldC5sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICcuc3RyZWV0J1wiXG4gICAgICAgICAgICAgICAgWyhtb2RlbCldPVwic3RyZWV0XCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNGb3JlaWduU3RyZWV0UmVxdWlyZWQoKVwiXG4gICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAnZm9laG4taW5wdXQtYWRkcmVzcy5zdHJlZXQuaGVscC10ZXh0JyB8IGZyb21EaWN0aW9uYXJ5XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tRXJyb3JzXT1cInN0cmVldEN1c3RvbUVycm9yc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjb3VudHJ5IHx8IGRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwidXBkYXRlQWRkcmVzcygpXCJcbiAgICAgICAgICAgICAgICAodXNlcklucHV0KT1cImhhbmRsZVVzZXJJbnB1dCgpXCJcbiAgICAgICAgICAgID48L2ZvZWhuLWlucHV0LWZvcmVpZ24tc3RyZWV0PlxuXG4gICAgICAgICAgICA8Zm9laG4taW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgICNmb3JlaWduSG91c2VOdW1iZXJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICdmb2Vobi1pbnB1dC1hZGRyZXNzLmhvdXNlTnVtYmVyLmxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJy5ob3VzZU51bWJlcidcIlxuICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cImhvdXNlTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICdmb2Vobi1pbnB1dC1hZGRyZXNzLmhvdXNlTnVtYmVyLmhlbHAtdGV4dCcgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjb3VudHJ5IHx8IGRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwidXBkYXRlQWRkcmVzcygpXCJcbiAgICAgICAgICAgICAgICAodXNlcklucHV0KT1cImhhbmRsZVVzZXJJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZm9yZWlnblN0cmVldE51bWJlclJlcXVpcmVkXCJcbiAgICAgICAgICAgID48L2ZvZWhuLWlucHV0LXRleHQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxmb2Vobi1pbnB1dC10ZXh0XG4gICAgICAgICAgICAqbmdJZj1cInNob3dQb3N0T2ZmaWNlQm94VGV4dFwiXG4gICAgICAgICAgICBbKG1vZGVsKV09XCJwb3N0T2ZmaWNlQm94VGV4dFwiXG4gICAgICAgICAgICBbaGVscFRleHRdPVwiXG4gICAgICAgICAgICAgICAgJ2ZvZWhuLWlucHV0LWFkZHJlc3MucG9zdE9mZmljZUJveFRleHQuaGVscC10ZXh0J1xuICAgICAgICAgICAgICAgICAgICB8IGZyb21EaWN0aW9uYXJ5XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICdmb2Vobi1pbnB1dC1hZGRyZXNzLnBvc3RPZmZpY2VCb3hUZXh0LmxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICcucG9zdE9mZmljZUJveFRleHQnXCJcbiAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJ1cGRhdGVBZGRyZXNzKClcIlxuICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNQb3N0T2ZmaWNlQm94VGV4dFJlcXVpcmVkKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgPjwvZm9laG4taW5wdXQtdGV4dD5cblxuICAgICAgICA8Zm9laG4taW5wdXQtdGV4dFxuICAgICAgICAgICAgKm5nSWY9XCJzaG93QWRyZXNzTGluZXMgJiYgc2hvd0FkcmVzc0xpbmUxXCJcbiAgICAgICAgICAgIFsobW9kZWwpXT1cImFkZHJlc3NMaW5lMVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2ZvZWhuLWlucHV0LWFkZHJlc3MuYWRkcmVzc0xpbmUxLmxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnLmFkZHJlc3NMaW5lMSdcIlxuICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInVwZGF0ZUFkZHJlc3MoKVwiXG4gICAgICAgICAgICAodXNlcklucHV0KT1cImhhbmRsZVVzZXJJbnB1dCgpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJhZGRyZXNzTGluZTFSZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cIidhZGRyZXNzLWxpbmUyJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICA+PC9mb2Vobi1pbnB1dC10ZXh0PlxuXG4gICAgICAgIDxmb2Vobi1pbnB1dC10ZXh0XG4gICAgICAgICAgICAqbmdJZj1cInNob3dBZHJlc3NMaW5lcyAmJiBzaG93QWRyZXNzTGluZTJcIlxuICAgICAgICAgICAgWyhtb2RlbCldPVwiYWRkcmVzc0xpbmUyXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInZm9laG4taW5wdXQtYWRkcmVzcy5hZGRyZXNzTGluZTIubGFiZWwnIHwgZnJvbURpY3Rpb25hcnlcIlxuICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICcuYWRkcmVzc0xpbmUyJ1wiXG4gICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwidXBkYXRlQWRkcmVzcygpXCJcbiAgICAgICAgICAgICh1c2VySW5wdXQpPVwiaGFuZGxlVXNlcklucHV0KClcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImFkZHJlc3NMaW5lMlJlcXVpcmVkXCJcbiAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiJ2FkZHJlc3MtbGluZTMnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgID48L2ZvZWhuLWlucHV0LXRleHQ+XG4gICAgPC9maWVsZHNldD5cbjwvZGl2PlxuIl19