@hmcts/ccd-case-ui-toolkit 7.0.72 → 7.0.74-special-characters

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.
Files changed (20) hide show
  1. package/esm2022/lib/shared/components/case-editor/case-edit-utils/case-edit.utils.mjs +35 -0
  2. package/esm2022/lib/shared/components/case-editor/services/cases.service.mjs +12 -6
  3. package/esm2022/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.mjs +12 -5
  4. package/esm2022/lib/shared/components/event-start/services/event-start-state-machine.service.mjs +1 -1
  5. package/esm2022/lib/shared/components/palette/complex/read-complex-field-table.component.mjs +21 -5
  6. package/esm2022/lib/shared/components/palette/yes-no/write-yes-no-field.component.mjs +5 -6
  7. package/esm2022/lib/shared/directives/conditional-show/services/condition-parser.service.mjs +4 -2
  8. package/esm2022/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.mjs +9 -2
  9. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +91 -20
  10. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  11. package/lib/shared/components/case-editor/case-edit-utils/case-edit.utils.d.ts +8 -0
  12. package/lib/shared/components/case-editor/case-edit-utils/case-edit.utils.d.ts.map +1 -0
  13. package/lib/shared/components/case-editor/services/cases.service.d.ts.map +1 -1
  14. package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts +1 -0
  15. package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts.map +1 -1
  16. package/lib/shared/components/palette/complex/read-complex-field-table.component.d.ts +7 -1
  17. package/lib/shared/components/palette/complex/read-complex-field-table.component.d.ts.map +1 -1
  18. package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts.map +1 -1
  19. package/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.d.ts.map +1 -1
  20. package/package.json +1 -1
@@ -0,0 +1,35 @@
1
+ export function convertNonASCIICharacter(character) {
2
+ if (character === '£') {
3
+ // pound sign will be frequently used and works for btoa despite being non-ASCII
4
+ // note: this could be done for other characters provided they work for btoa()
5
+ return character;
6
+ }
7
+ // Note: Will convert to HTML entity
8
+ return CaseEditUtils.PREFIX + character.charCodeAt(0) + CaseEditUtils.SUFFIX;
9
+ }
10
+ export class CaseEditUtils {
11
+ static PREFIX = '&#';
12
+ static SUFFIX = ';';
13
+ convertNonASCIICharacters(rawString) {
14
+ return rawString ? rawString.replace(/[^\x20-\x7E]/g, function (c) {
15
+ return convertNonASCIICharacter(c);
16
+ }) : '';
17
+ }
18
+ convertHTMLEntities(editedString) {
19
+ const revertedCharacterList = editedString.split(CaseEditUtils.PREFIX);
20
+ let rawString = revertedCharacterList[0];
21
+ for (let index = 1; index < revertedCharacterList.length; index++) {
22
+ const currentSection = revertedCharacterList[index];
23
+ if (!currentSection.includes(CaseEditUtils.SUFFIX)) {
24
+ return rawString.concat(currentSection);
25
+ }
26
+ else {
27
+ const suffixSplitList = currentSection.split(CaseEditUtils.SUFFIX);
28
+ const characterCode = Number(suffixSplitList[0]);
29
+ rawString = rawString.concat(String.fromCharCode(characterCode), suffixSplitList[1]);
30
+ }
31
+ }
32
+ return rawString;
33
+ }
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2Nhc2UtZWRpdG9yL2Nhc2UtZWRpdC11dGlscy9jYXNlLWVkaXQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxVQUFVLHdCQUF3QixDQUFDLFNBQWlCO0lBQ3hELElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLGdGQUFnRjtRQUNoRiw4RUFBOEU7UUFDOUUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELG9DQUFvQztJQUNwQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0FBQy9FLENBQUM7QUFFRCxNQUFNLE9BQU8sYUFBYTtJQUVqQixNQUFNLENBQVUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUM5QixNQUFNLENBQVUsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUU3Qix5QkFBeUIsQ0FBQyxTQUFpQjtRQUNoRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDO1lBQy9ELE9BQU8sd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxZQUFvQjtRQUM3QyxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksU0FBUyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsRSxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnROb25BU0NJSUNoYXJhY3RlcihjaGFyYWN0ZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChjaGFyYWN0ZXIgPT09ICfCoycpIHtcbiAgICAvLyBwb3VuZCBzaWduIHdpbGwgYmUgZnJlcXVlbnRseSB1c2VkIGFuZCB3b3JrcyBmb3IgYnRvYSBkZXNwaXRlIGJlaW5nIG5vbi1BU0NJSVxuICAgIC8vIG5vdGU6IHRoaXMgY291bGQgYmUgZG9uZSBmb3Igb3RoZXIgY2hhcmFjdGVycyBwcm92aWRlZCB0aGV5IHdvcmsgZm9yIGJ0b2EoKVxuICAgIHJldHVybiBjaGFyYWN0ZXI7XG4gIH1cbiAgLy8gTm90ZTogV2lsbCBjb252ZXJ0IHRvIEhUTUwgZW50aXR5XG4gIHJldHVybiBDYXNlRWRpdFV0aWxzLlBSRUZJWCArIGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApICsgQ2FzZUVkaXRVdGlscy5TVUZGSVg7XG59XG5cbmV4cG9ydCBjbGFzcyBDYXNlRWRpdFV0aWxzIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBSRUZJWCA9ICcmIyc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1VGRklYID0gJzsnO1xuXG4gIHB1YmxpYyBjb252ZXJ0Tm9uQVNDSUlDaGFyYWN0ZXJzKHJhd1N0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmF3U3RyaW5nID8gcmF3U3RyaW5nLnJlcGxhY2UoL1teXFx4MjAtXFx4N0VdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gY29udmVydE5vbkFTQ0lJQ2hhcmFjdGVyKGMpO1xuICAgIH0pIDogJyc7XG4gIH1cblxuICBwdWJsaWMgY29udmVydEhUTUxFbnRpdGllcyhlZGl0ZWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmV2ZXJ0ZWRDaGFyYWN0ZXJMaXN0ID0gZWRpdGVkU3RyaW5nLnNwbGl0KENhc2VFZGl0VXRpbHMuUFJFRklYKTtcbiAgICBsZXQgcmF3U3RyaW5nID0gcmV2ZXJ0ZWRDaGFyYWN0ZXJMaXN0WzBdO1xuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXZlcnRlZENoYXJhY3Rlckxpc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50U2VjdGlvbiA9IHJldmVydGVkQ2hhcmFjdGVyTGlzdFtpbmRleF07XG4gICAgICBpZiAoIWN1cnJlbnRTZWN0aW9uLmluY2x1ZGVzKENhc2VFZGl0VXRpbHMuU1VGRklYKSkge1xuICAgICAgICByZXR1cm4gcmF3U3RyaW5nLmNvbmNhdChjdXJyZW50U2VjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdWZmaXhTcGxpdExpc3QgPSBjdXJyZW50U2VjdGlvbi5zcGxpdChDYXNlRWRpdFV0aWxzLlNVRkZJWCk7XG4gICAgICAgIGNvbnN0IGNoYXJhY3RlckNvZGUgPSBOdW1iZXIoc3VmZml4U3BsaXRMaXN0WzBdKTtcbiAgICAgICAgcmF3U3RyaW5nID0gcmF3U3RyaW5nLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJhY3RlckNvZGUpLCBzdWZmaXhTcGxpdExpc3RbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmF3U3RyaW5nO1xuICB9XG59XG4iXX0=
@@ -9,6 +9,7 @@ import { CaseEventTrigger, Draft } from '../../../domain';
9
9
  import { FieldsUtils, HttpErrorService, HttpService, LoadingService, OrderService, RetryUtil, SessionStorageService } from '../../../services';
10
10
  import { CaseAccessUtils } from '../case-access-utils';
11
11
  import { WizardPageFieldToCaseFieldMapper } from './wizard-page-field-to-case-field.mapper';
12
+ import { CaseEditUtils } from '../case-edit-utils/case-edit.utils';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "../../../services";
14
15
  import * as i2 from "../../../../app.config";
@@ -301,8 +302,12 @@ export class CasesService {
301
302
  addClientContextHeader(headers) {
302
303
  const clientContextDetails = this.sessionStorageService.getItem('clientContext');
303
304
  if (clientContextDetails) {
304
- // may require URI encoding in certain circumstances
305
- const clientContext = window.btoa(clientContextDetails);
305
+ let clientContextEdit = JSON.parse(clientContextDetails);
306
+ clientContextEdit.client_context.user_task.task_data.name = 'Review ㅪ the ㋚ appeal \`';
307
+ const caseEditUtils = new CaseEditUtils();
308
+ // below changes non-ASCII characters
309
+ const editedClientContext = caseEditUtils.convertNonASCIICharacters(clientContextDetails);
310
+ const clientContext = window.btoa(editedClientContext);
306
311
  if (clientContext) {
307
312
  headers = headers.set('Client-Context', clientContext);
308
313
  }
@@ -310,11 +315,12 @@ export class CasesService {
310
315
  return headers;
311
316
  }
312
317
  updateClientContextStorage(headers) {
313
- // for mocking - TODO: Kasi Remove/Uncomment for testing
314
- // headers = this.setMockClientContextHeader(headers);
315
318
  if (headers && headers.get('Client-Context')) {
319
+ const caseEditUtils = new CaseEditUtils();
316
320
  const clientContextString = window.atob(headers.get('Client-Context'));
317
- this.sessionStorageService.setItem('clientContext', clientContextString);
321
+ // below reverts non-ASCII characters
322
+ const editedClientContextString = caseEditUtils.convertHTMLEntities(clientContextString);
323
+ this.sessionStorageService.setItem('clientContext', editedClientContextString);
318
324
  }
319
325
  }
320
326
  static ɵfac = function CasesService_Factory(t) { return new (t || CasesService)(i0.ɵɵinject(i1.HttpService), i0.ɵɵinject(i2.AbstractAppConfig), i0.ɵɵinject(i1.OrderService), i0.ɵɵinject(i1.HttpErrorService), i0.ɵɵinject(i3.WizardPageFieldToCaseFieldMapper), i0.ɵɵinject(i1.LoadingService), i0.ɵɵinject(i1.SessionStorageService), i0.ɵɵinject(i1.RetryUtil)); };
@@ -323,4 +329,4 @@ export class CasesService {
323
329
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CasesService, [{
324
330
  type: Injectable
325
331
  }], () => [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }, { type: i1.OrderService }, { type: i1.HttpErrorService }, { type: i3.WizardPageFieldToCaseFieldMapper }, { type: i1.LoadingService }, { type: i1.SessionStorageService }, { type: i1.RetryUtil }], null); })();
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUVMLGdCQUFnQixFQUdTLEtBQUssRUFJL0IsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRS9JLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7QUFHNUYsTUFBTSxPQUFPLFlBQVk7SUEyQ2I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ1M7SUFDQTtJQWpEbkIsb0JBQW9CO0lBQ2IsTUFBTSxDQUFVLHNCQUFzQixHQUFHLHNFQUFz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QyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakYsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pCLG9EQUFvRDtZQUNwRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDeEQsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sMEJBQTBCLENBQUMsT0FBb0I7UUFDckQsd0RBQXdEO1FBQ3hELHNEQUFzRDtRQUN0RCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQztzRUFyWVUsWUFBWTtnRUFBWixZQUFZLFdBQVosWUFBWTs7aUZBQVosWUFBWTtjQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgU2hvd0NvbmRpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHtcbiAgQ2FzZUV2ZW50RGF0YSxcbiAgQ2FzZUV2ZW50VHJpZ2dlcixcbiAgQ2FzZVByaW50RG9jdW1lbnQsXG4gIENhc2VWaWV3LFxuICBDaGFsbGVuZ2VkQWNjZXNzUmVxdWVzdCwgRHJhZnQsXG4gIFJvbGVBc3NpZ25tZW50UmVzcG9uc2UsXG4gIFJvbGVDYXRlZ29yeSxcbiAgUm9sZVJlcXVlc3RQYXlsb2FkLCBTcGVjaWZpY0FjY2Vzc1JlcXVlc3Rcbn0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3VzZXIvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzLCBIdHRwRXJyb3JTZXJ2aWNlLCBIdHRwU2VydmljZSwgTG9hZGluZ1NlcnZpY2UsIE9yZGVyU2VydmljZSwgUmV0cnlVdGlsLCBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1Jlc3BvbnNlIH0gZnJvbSAnLi4vLi4vcGFsZXR0ZS9saW5rZWQtY2FzZXMvZG9tYWluL2xpbmtlZC1jYXNlcy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlQWNjZXNzVXRpbHMgfSBmcm9tICcuLi9jYXNlLWFjY2Vzcy11dGlscyc7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vZG9tYWluJztcbmltcG9ydCB7IFdpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyIH0gZnJvbSAnLi93aXphcmQtcGFnZS1maWVsZC10by1jYXNlLWZpZWxkLm1hcHBlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXNlc1NlcnZpY2Uge1xuICAvLyBJbnRlcm5hbCAoVUkpIEFQSVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9DQVNFX1ZJRVcgPSAnYXBwbGljYXRpb24vdm5kLnVrLmdvdi5obWN0cy5jY2QtZGF0YS1zdG9yZS1hcGkudWktY2FzZS12aWV3LnYyK2pzb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9TVEFSVF9DQVNFX1RSSUdHRVIgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS51aS1zdGFydC1jYXNlLXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfU1RBUlRfRVZFTlRfVFJJR0dFUiA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLnVpLXN0YXJ0LWV2ZW50LXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfU1RBUlRfRFJBRlRfVFJJR0dFUiA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLnVpLXN0YXJ0LWRyYWZ0LXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcblxuICAvLyBFeHRlcm5hbCAoRGF0YSBTdG9yZSkgQVBJXG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfQ0FTRV9ET0NVTUVOVFMgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jYXNlLWRvY3VtZW50cy52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVjJfTUVESUFUWVBFX0NBU0VfREFUQV9WQUxJREFURSA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLmNhc2UtZGF0YS12YWxpZGF0ZS52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9DUkVBVEVfRVZFTlQgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jcmVhdGUtZXZlbnQudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfQ1JFQVRFX0NBU0UgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jcmVhdGUtY2FzZS52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFVJX0NBU0VfTUFOQUdFUiA9ICdwdWktY2FzZS1tYW5hZ2VyJztcblxuICBwdWJsaWMgZ2V0ID0gdGhpcy5nZXRDYXNlVmlldztcblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZUNoYWxsZW5nZWRBY2Nlc3NSZXF1ZXN0QXR0cmlidXRlcyhodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBjYXNlSWQ6IHN0cmluZywgYXR0cmlidXRlc1RvVXBkYXRlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSlcbiAgICA6IE9ic2VydmFibGU8Um9sZUFzc2lnbm1lbnRSZXNwb25zZT4ge1xuICAgIHJldHVybiBodHRwQ2xpZW50LnBvc3Q8Um9sZUFzc2lnbm1lbnRSZXNwb25zZT4oYC9hcGkvY2hhbGxlbmdlZC1hY2Nlc3MtcmVxdWVzdC91cGRhdGUtYXR0cmlidXRlc2AsIHtcbiAgICAgIGNhc2VJZCxcbiAgICAgIGF0dHJpYnV0ZXNUb1VwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB1cGRhdGVTcGVjaWZpY0FjY2Vzc1JlcXVlc3RBdHRyaWJ1dGVzKGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIGNhc2VJZDogc3RyaW5nLCBhdHRyaWJ1dGVzVG9VcGRhdGU6IHsgW3g6IHN0cmluZ106IGFueSB9KVxuICAgIDogT2JzZXJ2YWJsZTxSb2xlQXNzaWdubWVudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGh0dHBDbGllbnQucG9zdDxSb2xlQXNzaWdubWVudFJlc3BvbnNlPihgL2FwaS9zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdC91cGRhdGUtYXR0cmlidXRlc2AsIHtcbiAgICAgIGNhc2VJZCxcbiAgICAgIGF0dHJpYnV0ZXNUb1VwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQWJzdHJhY3RBcHBDb25maWcsXG4gICAgcHJpdmF0ZSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogSHR0cEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIHdpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyOiBXaXphcmRQYWdlRmllbGRUb0Nhc2VGaWVsZE1hcHBlcixcbiAgICBwcml2YXRlIGxvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmV0cnlVdGlsOiBSZXRyeVV0aWxcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZVZpZXcoanVyaXNkaWN0aW9uSWQ6IHN0cmluZyxcbiAgICBjYXNlVHlwZUlkOiBzdHJpbmcsXG4gICAgY2FzZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENhc2VWaWV3PiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0QXBpVXJsKCl9L2Nhc2V3b3JrZXJzLzp1aWQvanVyaXNkaWN0aW9ucy8ke2p1cmlzZGljdGlvbklkfS9jYXNlLXR5cGVzLyR7Y2FzZVR5cGVJZH0vY2FzZXMvJHtjYXNlSWR9YDtcbiAgICBjb25zdCBsb2FkaW5nVG9rZW4gPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLnJlZ2lzdGVyKCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmwpXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ1NlcnZpY2UudW5yZWdpc3Rlcihsb2FkaW5nVG9rZW4pKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNlVmlld1YyKGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlVmlldz4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCl9L2ludGVybmFsL2Nhc2VzLyR7Y2FzZUlkfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCdleHBlcmltZW50YWwnLCAndHJ1ZScpXG4gICAgICAuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX0NBU0VfVklFVylcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgY29uc3QgbG9hZGluZ1Rva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuXG4gICAgbGV0IGh0dHAkID0gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycywgb2JzZXJ2ZTogJ2JvZHknIH0pO1xuXG4gICAgY29uc3QgYXJ0aWZpY2lhbERlbGF5OiBudW1iZXIgPSB0aGlzLmFwcENvbmZpZy5nZXRUaW1lb3V0c0Nhc2VSZXRyaWV2YWxBcnRpZmljaWFsRGVsYXkoKTtcbiAgICBjb25zdCB0aW1lb3V0UGVyaW9kcyA9IHRoaXMuYXBwQ29uZmlnLmdldFRpbWVvdXRzRm9yQ2FzZVJldHJpZXZhbCgpO1xuICAgIGNvbnNvbGUubG9nKGBUaW1lb3V0IHBlcmlvZHM6ICR7dGltZW91dFBlcmlvZHN9IHNlY29uZHMuYCk7XG4gICAgaWYgKHRpbWVvdXRQZXJpb2RzICYmIHRpbWVvdXRQZXJpb2RzLmxlbmd0aCA+IDAgJiYgdGltZW91dFBlcmlvZHNbMF0gPiAwKSB7XG4gICAgICBodHRwJCA9IHRoaXMucmV0cnlVdGlsLnBpcGVUaW1lb3V0TWVjaGFuaXNtT24oaHR0cCQsIGFydGlmaWNpYWxEZWxheSwgdGltZW91dFBlcmlvZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1NraXBwaW5nIHRvIHBpcGUgYSByZXRyeSBtZWNoYW5pc20hJyk7XG4gICAgfVxuXG4gICAgaHR0cCQgPSB0aGlzLnBpcGVFcnJvclByb2Nlc3NvcihodHRwJCk7XG5cbiAgICBodHRwJCA9IGh0dHAkLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5maW5hbGl6ZUdldENhc2VWaWV3V2l0aChjYXNlSWQsIGxvYWRpbmdUb2tlbikpKTtcblxuICAgIHJldHVybiBodHRwJDtcbiAgfVxuXG4gIHByaXZhdGUgcGlwZUVycm9yUHJvY2Vzc29yKGluJDogT2JzZXJ2YWJsZTxDYXNlVmlldz4pOiBPYnNlcnZhYmxlPENhc2VWaWV3PiB7XG4gICAgY29uc3Qgb3V0JCA9IGluJC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igd2hpbGUgZ2V0dGluZyBjYXNlIHZpZXcgd2l0aCBnZXRDYXNlVmlld1YyISBFcnJvciB0eXBlOiAnJHt0eXBlb2YgZXJyb3J9LCBFcnJvciBuYW1lOiAnJHtlcnJvcj8ubmFtZX0nYCk7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICB9KSk7XG4gICAgcmV0dXJuIG91dCQ7XG4gIH1cblxuICBwcml2YXRlIGZpbmFsaXplR2V0Q2FzZVZpZXdXaXRoKGNhc2VJZDogc3RyaW5nLCBsb2FkaW5nVG9rZW46IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZ1NlcnZpY2UudW5yZWdpc3Rlcihsb2FkaW5nVG9rZW4pO1xuICB9XG5cbiAgcHVibGljIHN5bmNXYWl0KHNlY29uZHMpIHtcbiAgICBjb25zdCBlbmQgPSBEYXRlLm5vdygpICsgc2Vjb25kcyAqIDEwMDA7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBlbmQpIGNvbnRpbnVlO1xuICB9XG5cbiAgcHVibGljIGdldEV2ZW50VHJpZ2dlcihjYXNlVHlwZUlkOiBzdHJpbmcsXG4gICAgZXZlbnRUcmlnZ2VySWQ6IHN0cmluZyxcbiAgICBjYXNlSWQ/OiBzdHJpbmcsXG4gICAgaWdub3JlV2FybmluZz86IHN0cmluZyk6IE9ic2VydmFibGU8Q2FzZUV2ZW50VHJpZ2dlcj4ge1xuICAgIGlnbm9yZVdhcm5pbmcgPSB1bmRlZmluZWQgIT09IGlnbm9yZVdhcm5pbmcgPyBpZ25vcmVXYXJuaW5nIDogJ2ZhbHNlJztcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkRXZlbnRUcmlnZ2VyVXJsKGNhc2VUeXBlSWQsIGV2ZW50VHJpZ2dlcklkLCBjYXNlSWQsIGlnbm9yZVdhcm5pbmcpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ2V4cGVyaW1lbnRhbCcsICd0cnVlJyk7XG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIGhlYWRlcnMgPSB0aGlzLmFkZENsaWVudENvbnRleHRIZWFkZXIoaGVhZGVycyk7XG5cbiAgICBpZiAoRHJhZnQuaXNEcmFmdChjYXNlSWQpKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIENhc2VzU2VydmljZS5WMl9NRURJQVRZUEVfU1RBUlRfRFJBRlRfVFJJR0dFUik7XG4gICAgfSBlbHNlIGlmIChjYXNlSWQgIT09IHVuZGVmaW5lZCAmJiBjYXNlSWQgIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9TVEFSVF9FVkVOVF9UUklHR0VSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX1NUQVJUX0NBU0VfVFJJR0dFUik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmwsIHsgaGVhZGVycywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAnYm9keSd9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNsaWVudENvbnRleHRTdG9yYWdlKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHJldHVybiBGaWVsZHNVdGlscy5oYW5kbGVOZXN0ZWREeW5hbWljTGlzdHMocmVzcG9uc2UuYm9keSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKChwKSA9PiBwbGFpblRvQ2xhc3MoQ2FzZUV2ZW50VHJpZ2dlciwgcCkpLFxuICAgICAgICB0YXAoZXZlbnRUcmlnZ2VyID0+IHRoaXMuaW5pdGlhbGlzZUV2ZW50VHJpZ2dlcihldmVudFRyaWdnZXIpKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVFdmVudChjYXNlRGV0YWlsczogQ2FzZVZpZXcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IE9ic2VydmFibGU8e30+IHtcbiAgICBjb25zdCBjYXNlSWQgPSBjYXNlRGV0YWlscy5jYXNlX2lkO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCl9L2Nhc2VzLyR7Y2FzZUlkfS9ldmVudHNgO1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICAgIC5zZXQoJ2V4cGVyaW1lbnRhbCcsICd0cnVlJylcbiAgICAgIC5zZXQoJ0FjY2VwdCcsIENhc2VzU2VydmljZS5WMl9NRURJQVRZUEVfQ1JFQVRFX0VWRU5UKVxuICAgICAgLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICBoZWFkZXJzID0gdGhpcy5hZGRDbGllbnRDb250ZXh0SGVhZGVyKGhlYWRlcnMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHVybCwgZXZlbnREYXRhLCB7IGhlYWRlcnMsIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ2JvZHknIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2xpZW50Q29udGV4dFN0b3JhZ2UocmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZUNhc2UoY3RpZDogc3RyaW5nLCBldmVudERhdGE6IENhc2VFdmVudERhdGEsIHBhZ2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICBjb25zdCBwYWdlSWRTdHJpbmcgPSBwYWdlSWQgPyBgP3BhZ2VJZD0ke3BhZ2VJZH1gIDogJyc7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKX0vY2FzZS10eXBlcy8ke2N0aWR9L3ZhbGlkYXRlJHtwYWdlSWRTdHJpbmd9YDtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCdleHBlcmltZW50YWwnLCAndHJ1ZScpXG4gICAgICAuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX0NBU0VfREFUQV9WQUxJREFURSlcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgaGVhZGVycyA9IHRoaXMuYWRkQ2xpZW50Q29udGV4dEhlYWRlcihoZWFkZXJzKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIGV2ZW50RGF0YSwgeyBoZWFkZXJzLCBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdib2R5JyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNsaWVudENvbnRleHRTdG9yYWdlKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ2FzZShjdGlkOiBzdHJpbmcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgbGV0IGlnbm9yZVdhcm5pbmcgPSAnZmFsc2UnO1xuICAgIGlmIChldmVudERhdGEuaWdub3JlX3dhcm5pbmcpIHtcbiAgICAgIGlnbm9yZVdhcm5pbmcgPSAndHJ1ZSc7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCl9L2Nhc2UtdHlwZXMvJHtjdGlkfS9jYXNlcz9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcblxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICAgIC5zZXQoJ2V4cGVyaW1lbnRhbCcsICd0cnVlJylcbiAgICAgIC5zZXQoJ0FjY2VwdCcsIENhc2VzU2VydmljZS5WMl9NRURJQVRZUEVfQ1JFQVRFX0NBU0UpXG4gICAgICAuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIGhlYWRlcnMgPSB0aGlzLmFkZENsaWVudENvbnRleHRIZWFkZXIoaGVhZGVycyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCBldmVudERhdGEsIHsgaGVhZGVycywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAnYm9keScgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDbGllbnRDb250ZXh0U3RvcmFnZShyZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFByaW50RG9jdW1lbnRzKGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlUHJpbnREb2N1bWVudFtdPiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKX0vY2FzZXMvJHtjYXNlSWR9L2RvY3VtZW50c2A7XG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgICAgLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9DQVNFX0RPQ1VNRU5UUylcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgaGVhZGVycyA9IHRoaXMuYWRkQ2xpZW50Q29udGV4dEhlYWRlcihoZWFkZXJzKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwgeyBoZWFkZXJzLCBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdib2R5JyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNsaWVudENvbnRleHRTdG9yYWdlKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5LmRvY3VtZW50UmVzb3VyY2VzO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRXZlbnRUcmlnZ2VyVXJsKGNhc2VUeXBlSWQ6IHN0cmluZyxcbiAgICBldmVudFRyaWdnZXJJZDogc3RyaW5nLFxuICAgIGNhc2VJZD86IHN0cmluZyxcbiAgICBpZ25vcmVXYXJuaW5nPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKX0vaW50ZXJuYWxgO1xuICAgIGlmIChEcmFmdC5pc0RyYWZ0KGNhc2VJZCkpIHtcbiAgICAgIHVybCArPSBgL2RyYWZ0cy8ke2Nhc2VJZH1gXG4gICAgICAgICsgYC9ldmVudC10cmlnZ2VyYFxuICAgICAgICArIGA/aWdub3JlLXdhcm5pbmc9JHtpZ25vcmVXYXJuaW5nfWA7XG4gICAgfSBlbHNlIGlmIChjYXNlVHlwZUlkID09PSB1bmRlZmluZWQgfHwgY2FzZVR5cGVJZCA9PT0gbnVsbCkge1xuICAgICAgdXJsICs9IGAvY2FzZXMvJHtjYXNlSWR9YFxuICAgICAgICArIGAvZXZlbnQtdHJpZ2dlcnMvJHtldmVudFRyaWdnZXJJZH1gXG4gICAgICAgICsgYD9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsICs9IGAvY2FzZS10eXBlcy8ke2Nhc2VUeXBlSWR9YFxuICAgICAgICArIGAvZXZlbnQtdHJpZ2dlcnMvJHtldmVudFRyaWdnZXJJZH1gXG4gICAgICAgICsgYD9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXNlRXZlbnRUcmlnZ2VyKGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcikge1xuICAgIGlmICghZXZlbnRUcmlnZ2VyLndpemFyZF9wYWdlcykge1xuICAgICAgZXZlbnRUcmlnZ2VyLndpemFyZF9wYWdlcyA9IFtdO1xuICAgIH1cblxuICAgIGV2ZW50VHJpZ2dlci53aXphcmRfcGFnZXMuZm9yRWFjaCgod2l6YXJkUGFnZTogV2l6YXJkUGFnZSkgPT4ge1xuICAgICAgd2l6YXJkUGFnZS5wYXJzZWRTaG93Q29uZGl0aW9uID0gU2hvd0NvbmRpdGlvbi5nZXRJbnN0YW5jZSh3aXphcmRQYWdlLnNob3dfY29uZGl0aW9uKTtcbiAgICAgIHdpemFyZFBhZ2UuY2FzZV9maWVsZHMgPSB0aGlzLm9yZGVyU2VydmljZS5zb3J0KFxuICAgICAgICB0aGlzLndpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyLm1hcEFsbCh3aXphcmRQYWdlLndpemFyZF9wYWdlX2ZpZWxkcywgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291cnRPckhlYXJpbmdDZW50cmVOYW1lKGxvY2F0aW9uSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvYXBpL2xvY2F0aW9ucy9nZXRMb2NhdGlvbnNCeUlkYCwgeyBsb2NhdGlvbnM6IFt7IGxvY2F0aW9uSWQgfV0gfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ2hhbGxlbmdlZEFjY2Vzc1JlcXVlc3QoY2FzZUlkOiBzdHJpbmcsIHJlcXVlc3Q6IENoYWxsZW5nZWRBY2Nlc3NSZXF1ZXN0KTogT2JzZXJ2YWJsZTxSb2xlQXNzaWdubWVudFJlc3BvbnNlPiB7XG4gICAgLy8gQXNzaWdubWVudCBBUEkgZW5kcG9pbnRcbiAgICBjb25zdCB1c2VySW5mb1N0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJyk7XG4gICAgY29uc3QgY2FtVXRpbHMgPSBuZXcgQ2FzZUFjY2Vzc1V0aWxzKCk7XG4gICAgbGV0IHVzZXJJbmZvOiBVc2VySW5mbztcbiAgICBpZiAodXNlckluZm9TdHIpIHtcbiAgICAgIHVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VySW5mb1N0cik7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZUNhdGVnb3J5OiBSb2xlQ2F0ZWdvcnkgPSB1c2VySW5mby5yb2xlQ2F0ZWdvcnkgfHwgY2FtVXRpbHMuZ2V0TWFwcGVkUm9sZUNhdGVnb3J5KHVzZXJJbmZvLnJvbGVzLCB1c2VySW5mby5yb2xlQ2F0ZWdvcmllcyk7XG4gICAgY29uc3Qgcm9sZU5hbWUgPSBjYW1VdGlscy5nZXRBTVJvbGVOYW1lKCdjaGFsbGVuZ2VkJywgcm9sZUNhdGVnb3J5KTtcbiAgICBjb25zdCBiZWdpblRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldFVUQ0hvdXJzKDIzLCA1OSwgNTksIDk5OSkpO1xuICAgIGNvbnN0IGlkID0gdXNlckluZm8uaWQgPyB1c2VySW5mby5pZCA6IHVzZXJJbmZvLnVpZDtcbiAgICBjb25zdCBpc05ldyA9IHRydWU7XG5cbiAgICBjb25zdCBwYXlsb2FkOiBSb2xlUmVxdWVzdFBheWxvYWQgPSBjYW1VdGlscy5nZXRBTVBheWxvYWQoaWQsXG4gICAgICBpZCxcbiAgICAgIHJvbGVOYW1lLFxuICAgICAgcm9sZUNhdGVnb3J5LFxuICAgICAgJ0NIQUxMRU5HRUQnLFxuICAgICAgY2FzZUlkLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIGJlZ2luVGltZSxcbiAgICAgIGVuZFRpbWUsXG4gICAgICBpc05ld1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYC9hcGkvY2hhbGxlbmdlZC1hY2Nlc3MtcmVxdWVzdGAsIHBheWxvYWQpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVNwZWNpZmljQWNjZXNzUmVxdWVzdChjYXNlSWQ6IHN0cmluZywgc2FyOiBTcGVjaWZpY0FjY2Vzc1JlcXVlc3QpOiBPYnNlcnZhYmxlPFJvbGVBc3NpZ25tZW50UmVzcG9uc2U+IHtcbiAgICAvLyBBc3NpZ25tZW50IEFQSSBlbmRwb2ludFxuICAgIGNvbnN0IHVzZXJJbmZvU3RyID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgndXNlckRldGFpbHMnKTtcblxuICAgIGNvbnN0IGNhbVV0aWxzID0gbmV3IENhc2VBY2Nlc3NVdGlscygpO1xuICAgIGxldCB1c2VySW5mbzogVXNlckluZm87XG4gICAgaWYgKHVzZXJJbmZvU3RyKSB7XG4gICAgICB1c2VySW5mbyA9IEpTT04ucGFyc2UodXNlckluZm9TdHIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVDYXRlZ29yeTogUm9sZUNhdGVnb3J5ID0gdXNlckluZm8ucm9sZUNhdGVnb3J5IHx8IGNhbVV0aWxzLmdldE1hcHBlZFJvbGVDYXRlZ29yeSh1c2VySW5mby5yb2xlcywgdXNlckluZm8ucm9sZUNhdGVnb3JpZXMpO1xuICAgIGNvbnN0IHJvbGVOYW1lID0gY2FtVXRpbHMuZ2V0QU1Sb2xlTmFtZSgnc3BlY2lmaWMnLCByb2xlQ2F0ZWdvcnkpO1xuICAgIGNvbnN0IGlkID0gdXNlckluZm8uaWQgPyB1c2VySW5mby5pZCA6IHVzZXJJbmZvLnVpZDtcbiAgICBjb25zdCBwYXlsb2FkOiBSb2xlUmVxdWVzdFBheWxvYWQgPSBjYW1VdGlscy5nZXRBTVBheWxvYWQobnVsbCwgaWQsXG4gICAgICByb2xlTmFtZSwgcm9sZUNhdGVnb3J5LCAnU1BFQ0lGSUMnLCBjYXNlSWQsIHNhciwgbnVsbCwgbnVsbCwgdHJ1ZSk7XG5cbiAgICBwYXlsb2FkLnJvbGVSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bG9hZC5yb2xlUmVxdWVzdCxcbiAgICAgIHByb2Nlc3M6ICdzcGVjaWZpYy1hY2Nlc3MnLFxuICAgICAgcmVwbGFjZUV4aXN0aW5nOiB0cnVlLFxuICAgICAgYXNzaWduZXJJZDogcGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXS5hY3RvcklkLFxuICAgICAgcmVmZXJlbmNlOiBgJHtjYXNlSWR9LyR7cm9sZU5hbWV9LyR7cGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXS5hY3RvcklkfWBcbiAgICB9O1xuXG4gICAgcGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXSA9IHtcbiAgICAgIC4uLnBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0sXG4gICAgICByb2xlTmFtZTogJ3NwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0ZWQnLFxuICAgICAgcm9sZUNhdGVnb3J5LFxuICAgICAgY2xhc3NpZmljYXRpb246ICdQUklWQVRFJyxcbiAgICAgIGVuZFRpbWU6IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0RGF0ZShuZXcgRGF0ZSgpLmdldERhdGUoKSArIDMwKSksXG4gICAgICBiZWdpblRpbWU6IG51bGwsXG4gICAgICBncmFudFR5cGU6ICdCQVNJQycsXG4gICAgICByZWFkT25seTogdHJ1ZVxuICAgIH07XG5cbiAgICBwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmF0dHJpYnV0ZXMgPSB7XG4gICAgICAuLi5wYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmF0dHJpYnV0ZXMsXG4gICAgICByZXF1ZXN0ZWRSb2xlOiByb2xlTmFtZSxcbiAgICAgIHNwZWNpZmljQWNjZXNzUmVhc29uOiBzYXIuc3BlY2lmaWNSZWFzb25cbiAgICB9O1xuXG4gICAgcGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXS5ub3Rlc1swXSA9IHtcbiAgICAgIC4uLnBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0ubm90ZXNbMF0sXG4gICAgICB1c2VySWQ6IHBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0uYWN0b3JJZFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICBgL2FwaS9zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMaW5rZWRDYXNlcyhjYXNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TGlua2VkQ2FzZXNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhU3RvcmVBcGlVcmwoKX0vJHtjYXNlSWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhyb3dFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xpZW50Q29udGV4dEhlYWRlcihoZWFkZXJzOiBIdHRwSGVhZGVycyk6IEh0dHBIZWFkZXJzIHtcbiAgICBjb25zdCBjbGllbnRDb250ZXh0RGV0YWlscyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2NsaWVudENvbnRleHQnKTtcbiAgICBpZiAoY2xpZW50Q29udGV4dERldGFpbHMpIHtcbiAgICAgIC8vIG1heSByZXF1aXJlIFVSSSBlbmNvZGluZyBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXNcbiAgICAgIGNvbnN0IGNsaWVudENvbnRleHQgPSB3aW5kb3cuYnRvYShjbGllbnRDb250ZXh0RGV0YWlscyk7XG4gICAgICBpZiAoY2xpZW50Q29udGV4dCkge1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NsaWVudC1Db250ZXh0JywgY2xpZW50Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbGllbnRDb250ZXh0U3RvcmFnZShoZWFkZXJzOiBIdHRwSGVhZGVycyk6IHZvaWQge1xuICAgIC8vIGZvciBtb2NraW5nIC0gVE9ETzogS2FzaSBSZW1vdmUvVW5jb21tZW50IGZvciB0ZXN0aW5nXG4gICAgLy8gaGVhZGVycyA9IHRoaXMuc2V0TW9ja0NsaWVudENvbnRleHRIZWFkZXIoaGVhZGVycyk7XG4gICAgaWYgKGhlYWRlcnMgJiYgaGVhZGVycy5nZXQoJ0NsaWVudC1Db250ZXh0JykpIHtcbiAgICAgIGNvbnN0IGNsaWVudENvbnRleHRTdHJpbmcgPSB3aW5kb3cuYXRvYihoZWFkZXJzLmdldCgnQ2xpZW50LUNvbnRleHQnKSk7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCdjbGllbnRDb250ZXh0JywgY2xpZW50Q29udGV4dFN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9yIG1vY2tpbmcgLSBUT0RPOiBLYXNpIFJlbW92ZS9VbmNvbW1lbnQgZm9yIHRlc3RpbmdcbiAgLyogcHJpdmF0ZSBzZXRNb2NrQ2xpZW50Q29udGV4dEhlYWRlcihoZWFkZXJzOiBIdHRwSGVhZGVycyk6IEh0dHBIZWFkZXJzIHtcbiAgICBjb25zdCBtb2NrQ2xpZW50Q29udGV4dCA9IHsgY2xpZW50X2NvbnRleHQ6IHtcbiAgICAgIHVzZXJfdGFzazoge1xuICAgICAgICB0YXNrX2RhdGE6IHtcbiAgICAgICAgICAvLyBSZXBsYWNlIHdpdGggcmVsZXZhbnQgdGFzayBpZCB0byBjb21wbGV0ZSBvdGhlci9jdXJyZW50IHRhc2tcbiAgICAgICAgICBpZDogXCIyYzdlMDNjYy0xOGU4LTExZWYtYmZkMC03NjMzMTliMjFjZWFcIixcbiAgICAgICAgICAvLyBDYW4gZWRpdCBvdGhlciBkZXRhaWxzIHRvIGNoZWNrIHRoZXkgdXBkYXRlXG4gICAgICAgICAgbmFtZTogXCJSZXZpZXcgdGhlIGFwcGVhbCAtIFRlc3QgbW9ja2VkXCIsXG4gICAgICAgICAgYXNzaWduZWU6IFwiZGZkNGMyZDEtNjdiMS00MGY5LTg2ODAtYzk1NTE2MzJmNWQ5XCIsXG4gICAgICAgICAgdHlwZTogXCJyZXZpZXdUaGVBcHBlYWxcIixcbiAgICAgICAgICB0YXNrX3N0YXRlOiBcImFzc2lnbmVkXCIsXG4gICAgICAgICAgdGFza19zeXN0ZW06IFwiU0VMRlwiLFxuICAgICAgICAgIHNlY3VyaXR5X2NsYXNzaWZpY2F0aW9uOiBcIlBVQkxJQ1wiLFxuICAgICAgICAgIHRhc2tfdGl0bGU6IFwiUmV2aWV3IHRoZSBhcHBlYWxcIixcbiAgICAgICAgICBjcmVhdGVkX2RhdGU6IFwiMjAyNC0wNS0yM1QwOTozODoxMiswMDAwXCIsXG4gICAgICAgICAgZHVlX2RhdGU6IFwiMjAyNC0wNS0yOFQwOTozOTowMCswMDAwXCIsXG4gICAgICAgICAgbG9jYXRpb25fbmFtZTogXCJUYXlsb3IgSG91c2VcIixcbiAgICAgICAgICBsb2NhdGlvbjogXCI3NjUzMjRcIixcbiAgICAgICAgICBleGVjdXRpb25fdHlwZTogXCJDYXNlIE1hbmFnZW1lbnQgVGFza1wiLFxuICAgICAgICAgIGp1cmlzZGljdGlvbjogXCJJQVwiLFxuICAgICAgICAgIHJlZ2lvbjogXCIxXCIsXG4gICAgICAgICAgY2FzZV90eXBlX2lkOiBcIkFzeWx1bVwiLFxuICAgICAgICAgIGNhc2VfaWQ6IFwiMTcxNjQ1NjkyNjUwMjY5OFwiLFxuICAgICAgICAgIGNhc2VfY2F0ZWdvcnk6IFwiUHJvdGVjdGlvblwiLFxuICAgICAgICAgIGNhc2VfbmFtZTogXCJBaXBwIENoZWNrXCIsXG4gICAgICAgICAgYXV0b19hc3NpZ25lZDogZmFsc2UsXG4gICAgICAgICAgd2FybmluZ3M6IGZhbHNlLFxuICAgICAgICAgIHdhcm5pbmdfbGlzdDogeyB2YWx1ZXM6IFtdIH0sXG4gICAgICAgICAgY2FzZV9tYW5hZ2VtZW50X2NhdGVnb3J5OiBcIlByb3RlY3Rpb25cIixcbiAgICAgICAgICB3b3JrX3R5cGVfaWQ6IFwiZGVjaXNpb25fbWFraW5nX3dvcmtcIixcbiAgICAgICAgICB3b3JrX3R5cGVfbGFiZWw6IFwiRGVjaXNpb24tbWFraW5nIHdvcmtcIixcbiAgICAgICAgICBwZXJtaXNzaW9uczogeyB2YWx1ZXMgOiBbXCJSZWFkXCIsXCJPd25cIixcIk1hbmFnZVwiLFwiRXhlY3V0ZVwiLFwiQ2FuY2VsXCIsXCJDb21wbGV0ZVwiLFwiQ2xhaW1cIixcIkFzc2lnblwiLFwiVW5hc3NpZ25cIl0gfSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJbUmVxdWVzdCByZXNwb25kZW50IGV2aWRlbmNlXSgvY2FzZS9JQS9Bc3lsdW0vJHtbQ0FTRV9SRUZFUkVOQ0VdfS90cmlnZ2VyL3JlcXVlc3RSZXNwb25kZW50RXZpZGVuY2UpXCIsXG4gICAgICAgICAgcm9sZV9jYXRlZ29yeTogXCJMRUdBTF9PUEVSQVRJT05TXCIsXG4gICAgICAgICAgbWlub3JfcHJpb3JpdHk6IDUwMCxcbiAgICAgICAgICBtYWpvcl9wcmlvcml0eTogNTAwMCxcbiAgICAgICAgICBwcmlvcml0eV9kYXRlOiBcIjIwMjQtMDUtMjhUMDk6Mzk6MDArMDAwMFwiXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGRldGVybWluZXMgd2hldGhlciB0YXNrIHdpbGwgYmUgY29tcGxldGVkIC0gc2V0cyBkZWZhdWx0IHRvIHRydWUgdmlhIEVYVUlcbiAgICAgICAgY29tcGxldGVfdGFzazogdHJ1ZVxuICAgICAgfVxuICAgIH19O1xuICAgIGNvbnN0IGVuY29kZWRNb2NrZWRDbGllbnRDb250ZXh0ID0gd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkobW9ja0NsaWVudENvbnRleHQpKTtcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NsaWVudC1Db250ZXh0JywgZW5jb2RlZE1vY2tlZENsaWVudENvbnRleHQpO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9ICovXG59XG4iXX0=
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUVMLGdCQUFnQixFQUdTLEtBQUssRUFJL0IsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRS9JLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBR25FLE1BQU0sT0FBTyxZQUFZO0lBMkNiO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNTO0lBQ0E7SUFq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QUMsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztzRUExWVUsWUFBWTtnRUFBWixZQUFZLFdBQVosWUFBWTs7aUZBQVosWUFBWTtjQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgU2hvd0NvbmRpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHtcbiAgQ2FzZUV2ZW50RGF0YSxcbiAgQ2FzZUV2ZW50VHJpZ2dlcixcbiAgQ2FzZVByaW50RG9jdW1lbnQsXG4gIENhc2VWaWV3LFxuICBDaGFsbGVuZ2VkQWNjZXNzUmVxdWVzdCwgRHJhZnQsXG4gIFJvbGVBc3NpZ25tZW50UmVzcG9uc2UsXG4gIFJvbGVDYXRlZ29yeSxcbiAgUm9sZVJlcXVlc3RQYXlsb2FkLCBTcGVjaWZpY0FjY2Vzc1JlcXVlc3Rcbn0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3VzZXIvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzLCBIdHRwRXJyb3JTZXJ2aWNlLCBIdHRwU2VydmljZSwgTG9hZGluZ1NlcnZpY2UsIE9yZGVyU2VydmljZSwgUmV0cnlVdGlsLCBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1Jlc3BvbnNlIH0gZnJvbSAnLi4vLi4vcGFsZXR0ZS9saW5rZWQtY2FzZXMvZG9tYWluL2xpbmtlZC1jYXNlcy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlQWNjZXNzVXRpbHMgfSBmcm9tICcuLi9jYXNlLWFjY2Vzcy11dGlscyc7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vZG9tYWluJztcbmltcG9ydCB7IFdpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyIH0gZnJvbSAnLi93aXphcmQtcGFnZS1maWVsZC10by1jYXNlLWZpZWxkLm1hcHBlcic7XG5pbXBvcnQgeyBDYXNlRWRpdFV0aWxzIH0gZnJvbSAnLi4vY2FzZS1lZGl0LXV0aWxzL2Nhc2UtZWRpdC51dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXNlc1NlcnZpY2Uge1xuICAvLyBJbnRlcm5hbCAoVUkpIEFQSVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9DQVNFX1ZJRVcgPSAnYXBwbGljYXRpb24vdm5kLnVrLmdvdi5obWN0cy5jY2QtZGF0YS1zdG9yZS1hcGkudWktY2FzZS12aWV3LnYyK2pzb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9TVEFSVF9DQVNFX1RSSUdHRVIgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS51aS1zdGFydC1jYXNlLXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfU1RBUlRfRVZFTlRfVFJJR0dFUiA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLnVpLXN0YXJ0LWV2ZW50LXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfU1RBUlRfRFJBRlRfVFJJR0dFUiA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLnVpLXN0YXJ0LWRyYWZ0LXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcblxuICAvLyBFeHRlcm5hbCAoRGF0YSBTdG9yZSkgQVBJXG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfQ0FTRV9ET0NVTUVOVFMgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jYXNlLWRvY3VtZW50cy52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVjJfTUVESUFUWVBFX0NBU0VfREFUQV9WQUxJREFURSA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLmNhc2UtZGF0YS12YWxpZGF0ZS52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9DUkVBVEVfRVZFTlQgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jcmVhdGUtZXZlbnQudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfQ1JFQVRFX0NBU0UgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jcmVhdGUtY2FzZS52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFVJX0NBU0VfTUFOQUdFUiA9ICdwdWktY2FzZS1tYW5hZ2VyJztcblxuICBwdWJsaWMgZ2V0ID0gdGhpcy5nZXRDYXNlVmlldztcblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZUNoYWxsZW5nZWRBY2Nlc3NSZXF1ZXN0QXR0cmlidXRlcyhodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBjYXNlSWQ6IHN0cmluZywgYXR0cmlidXRlc1RvVXBkYXRlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSlcbiAgICA6IE9ic2VydmFibGU8Um9sZUFzc2lnbm1lbnRSZXNwb25zZT4ge1xuICAgIHJldHVybiBodHRwQ2xpZW50LnBvc3Q8Um9sZUFzc2lnbm1lbnRSZXNwb25zZT4oYC9hcGkvY2hhbGxlbmdlZC1hY2Nlc3MtcmVxdWVzdC91cGRhdGUtYXR0cmlidXRlc2AsIHtcbiAgICAgIGNhc2VJZCxcbiAgICAgIGF0dHJpYnV0ZXNUb1VwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB1cGRhdGVTcGVjaWZpY0FjY2Vzc1JlcXVlc3RBdHRyaWJ1dGVzKGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIGNhc2VJZDogc3RyaW5nLCBhdHRyaWJ1dGVzVG9VcGRhdGU6IHsgW3g6IHN0cmluZ106IGFueSB9KVxuICAgIDogT2JzZXJ2YWJsZTxSb2xlQXNzaWdubWVudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGh0dHBDbGllbnQucG9zdDxSb2xlQXNzaWdubWVudFJlc3BvbnNlPihgL2FwaS9zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdC91cGRhdGUtYXR0cmlidXRlc2AsIHtcbiAgICAgIGNhc2VJZCxcbiAgICAgIGF0dHJpYnV0ZXNUb1VwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQWJzdHJhY3RBcHBDb25maWcsXG4gICAgcHJpdmF0ZSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogSHR0cEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIHdpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyOiBXaXphcmRQYWdlRmllbGRUb0Nhc2VGaWVsZE1hcHBlcixcbiAgICBwcml2YXRlIGxvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmV0cnlVdGlsOiBSZXRyeVV0aWxcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZVZpZXcoanVyaXNkaWN0aW9uSWQ6IHN0cmluZyxcbiAgICBjYXNlVHlwZUlkOiBzdHJpbmcsXG4gICAgY2FzZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENhc2VWaWV3PiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0QXBpVXJsKCl9L2Nhc2V3b3JrZXJzLzp1aWQvanVyaXNkaWN0aW9ucy8ke2p1cmlzZGljdGlvbklkfS9jYXNlLXR5cGVzLyR7Y2FzZVR5cGVJZH0vY2FzZXMvJHtjYXNlSWR9YDtcbiAgICBjb25zdCBsb2FkaW5nVG9rZW4gPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLnJlZ2lzdGVyKCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmwpXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ1NlcnZpY2UudW5yZWdpc3Rlcihsb2FkaW5nVG9rZW4pKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNlVmlld1YyKGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlVmlldz4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCl9L2ludGVybmFsL2Nhc2VzLyR7Y2FzZUlkfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCdleHBlcmltZW50YWwnLCAndHJ1ZScpXG4gICAgICAuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX0NBU0VfVklFVylcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgY29uc3QgbG9hZGluZ1Rva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuXG4gICAgbGV0IGh0dHAkID0gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycywgb2JzZXJ2ZTogJ2JvZHknIH0pO1xuXG4gICAgY29uc3QgYXJ0aWZpY2lhbERlbGF5OiBudW1iZXIgPSB0aGlzLmFwcENvbmZpZy5nZXRUaW1lb3V0c0Nhc2VSZXRyaWV2YWxBcnRpZmljaWFsRGVsYXkoKTtcbiAgICBjb25zdCB0aW1lb3V0UGVyaW9kcyA9IHRoaXMuYXBwQ29uZmlnLmdldFRpbWVvdXRzRm9yQ2FzZVJldHJpZXZhbCgpO1xuICAgIGNvbnNvbGUubG9nKGBUaW1lb3V0IHBlcmlvZHM6ICR7dGltZW91dFBlcmlvZHN9IHNlY29uZHMuYCk7XG4gICAgaWYgKHRpbWVvdXRQZXJpb2RzICYmIHRpbWVvdXRQZXJpb2RzLmxlbmd0aCA+IDAgJiYgdGltZW91dFBlcmlvZHNbMF0gPiAwKSB7XG4gICAgICBodHRwJCA9IHRoaXMucmV0cnlVdGlsLnBpcGVUaW1lb3V0TWVjaGFuaXNtT24oaHR0cCQsIGFydGlmaWNpYWxEZWxheSwgdGltZW91dFBlcmlvZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1NraXBwaW5nIHRvIHBpcGUgYSByZXRyeSBtZWNoYW5pc20hJyk7XG4gICAgfVxuXG4gICAgaHR0cCQgPSB0aGlzLnBpcGVFcnJvclByb2Nlc3NvcihodHRwJCk7XG5cbiAgICBodHRwJCA9IGh0dHAkLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5maW5hbGl6ZUdldENhc2VWaWV3V2l0aChjYXNlSWQsIGxvYWRpbmdUb2tlbikpKTtcblxuICAgIHJldHVybiBodHRwJDtcbiAgfVxuXG4gIHByaXZhdGUgcGlwZUVycm9yUHJvY2Vzc29yKGluJDogT2JzZXJ2YWJsZTxDYXNlVmlldz4pOiBPYnNlcnZhYmxlPENhc2VWaWV3PiB7XG4gICAgY29uc3Qgb3V0JCA9IGluJC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igd2hpbGUgZ2V0dGluZyBjYXNlIHZpZXcgd2l0aCBnZXRDYXNlVmlld1YyISBFcnJvciB0eXBlOiAnJHt0eXBlb2YgZXJyb3J9LCBFcnJvciBuYW1lOiAnJHtlcnJvcj8ubmFtZX0nYCk7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICB9KSk7XG4gICAgcmV0dXJuIG91dCQ7XG4gIH1cblxuICBwcml2YXRlIGZpbmFsaXplR2V0Q2FzZVZpZXdXaXRoKGNhc2VJZDogc3RyaW5nLCBsb2FkaW5nVG9rZW46IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZ1NlcnZpY2UudW5yZWdpc3Rlcihsb2FkaW5nVG9rZW4pO1xuICB9XG5cbiAgcHVibGljIHN5bmNXYWl0KHNlY29uZHMpIHtcbiAgICBjb25zdCBlbmQgPSBEYXRlLm5vdygpICsgc2Vjb25kcyAqIDEwMDA7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBlbmQpIGNvbnRpbnVlO1xuICB9XG5cbiAgcHVibGljIGdldEV2ZW50VHJpZ2dlcihjYXNlVHlwZUlkOiBzdHJpbmcsXG4gICAgZXZlbnRUcmlnZ2VySWQ6IHN0cmluZyxcbiAgICBjYXNlSWQ/OiBzdHJpbmcsXG4gICAgaWdub3JlV2FybmluZz86IHN0cmluZyk6IE9ic2VydmFibGU8Q2FzZUV2ZW50VHJpZ2dlcj4ge1xuICAgIGlnbm9yZVdhcm5pbmcgPSB1bmRlZmluZWQgIT09IGlnbm9yZVdhcm5pbmcgPyBpZ25vcmVXYXJuaW5nIDogJ2ZhbHNlJztcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkRXZlbnRUcmlnZ2VyVXJsKGNhc2VUeXBlSWQsIGV2ZW50VHJpZ2dlcklkLCBjYXNlSWQsIGlnbm9yZVdhcm5pbmcpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ2V4cGVyaW1lbnRhbCcsICd0cnVlJyk7XG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIGhlYWRlcnMgPSB0aGlzLmFkZENsaWVudENvbnRleHRIZWFkZXIoaGVhZGVycyk7XG5cbiAgICBpZiAoRHJhZnQuaXNEcmFmdChjYXNlSWQpKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIENhc2VzU2VydmljZS5WMl9NRURJQVRZUEVfU1RBUlRfRFJBRlRfVFJJR0dFUik7XG4gICAgfSBlbHNlIGlmIChjYXNlSWQgIT09IHVuZGVmaW5lZCAmJiBjYXNlSWQgIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9TVEFSVF9FVkVOVF9UUklHR0VSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX1NUQVJUX0NBU0VfVFJJR0dFUik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmwsIHsgaGVhZGVycywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAnYm9keSd9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNsaWVudENvbnRleHRTdG9yYWdlKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHJldHVybiBGaWVsZHNVdGlscy5oYW5kbGVOZXN0ZWREeW5hbWljTGlzdHMocmVzcG9uc2UuYm9keSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKChwKSA9PiBwbGFpblRvQ2xhc3MoQ2FzZUV2ZW50VHJpZ2dlciwgcCkpLFxuICAgICAgICB0YXAoZXZlbnRUcmlnZ2VyID0+IHRoaXMuaW5pdGlhbGlzZUV2ZW50VHJpZ2dlcihldmVudFRyaWdnZXIpKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVFdmVudChjYXNlRGV0YWlsczogQ2FzZVZpZXcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IE9ic2VydmFibGU8e30+IHtcbiAgICBjb25zdCBjYXNlSWQgPSBjYXNlRGV0YWlscy5jYXNlX2lkO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCl9L2Nhc2VzLyR7Y2FzZUlkfS9ldmVudHNgO1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICAgIC5zZXQoJ2V4cGVyaW1lbnRhbCcsICd0cnVlJylcbiAgICAgIC5zZXQoJ0FjY2VwdCcsIENhc2VzU2VydmljZS5WMl9NRURJQVRZUEVfQ1JFQVRFX0VWRU5UKVxuICAgICAgLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICBoZWFkZXJzID0gdGhpcy5hZGRDbGllbnRDb250ZXh0SGVhZGVyKGhlYWRlcnMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHVybCwgZXZlbnREYXRhLCB7IGhlYWRlcnMsIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ2JvZHknIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2xpZW50Q29udGV4dFN0b3JhZ2UocmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZUNhc2UoY3RpZDogc3RyaW5nLCBldmVudERhdGE6IENhc2VFdmVudERhdGEsIHBhZ2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICBjb25zdCBwYWdlSWRTdHJpbmcgPSBwYWdlSWQgPyBgP3BhZ2VJZD0ke3BhZ2VJZH1gIDogJyc7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKX0vY2FzZS10eXBlcy8ke2N0aWR9L3ZhbGlkYXRlJHtwYWdlSWRTdHJpbmd9YDtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCdleHBlcmltZW50YWwnLCAndHJ1ZScpXG4gICAgICAuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX0NBU0VfREFUQV9WQUxJREFURSlcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgaGVhZGVycyA9IHRoaXMuYWRkQ2xpZW50Q29udGV4dEhlYWRlcihoZWFkZXJzKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIGV2ZW50RGF0YSwgeyBoZWFkZXJzLCBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdib2R5JyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNsaWVudENvbnRleHRTdG9yYWdlKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ2FzZShjdGlkOiBzdHJpbmcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgbGV0IGlnbm9yZVdhcm5pbmcgPSAnZmFsc2UnO1xuICAgIGlmIChldmVudERhdGEuaWdub3JlX3dhcm5pbmcpIHtcbiAgICAgIGlnbm9yZVdhcm5pbmcgPSAndHJ1ZSc7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCl9L2Nhc2UtdHlwZXMvJHtjdGlkfS9jYXNlcz9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcblxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICAgIC5zZXQoJ2V4cGVyaW1lbnRhbCcsICd0cnVlJylcbiAgICAgIC5zZXQoJ0FjY2VwdCcsIENhc2VzU2VydmljZS5WMl9NRURJQVRZUEVfQ1JFQVRFX0NBU0UpXG4gICAgICAuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIGhlYWRlcnMgPSB0aGlzLmFkZENsaWVudENvbnRleHRIZWFkZXIoaGVhZGVycyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCBldmVudERhdGEsIHsgaGVhZGVycywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAnYm9keScgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDbGllbnRDb250ZXh0U3RvcmFnZShyZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFByaW50RG9jdW1lbnRzKGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlUHJpbnREb2N1bWVudFtdPiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKX0vY2FzZXMvJHtjYXNlSWR9L2RvY3VtZW50c2A7XG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgICAgLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9DQVNFX0RPQ1VNRU5UUylcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgaGVhZGVycyA9IHRoaXMuYWRkQ2xpZW50Q29udGV4dEhlYWRlcihoZWFkZXJzKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwgeyBoZWFkZXJzLCBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdib2R5JyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNsaWVudENvbnRleHRTdG9yYWdlKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5LmRvY3VtZW50UmVzb3VyY2VzO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRXZlbnRUcmlnZ2VyVXJsKGNhc2VUeXBlSWQ6IHN0cmluZyxcbiAgICBldmVudFRyaWdnZXJJZDogc3RyaW5nLFxuICAgIGNhc2VJZD86IHN0cmluZyxcbiAgICBpZ25vcmVXYXJuaW5nPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKX0vaW50ZXJuYWxgO1xuICAgIGlmIChEcmFmdC5pc0RyYWZ0KGNhc2VJZCkpIHtcbiAgICAgIHVybCArPSBgL2RyYWZ0cy8ke2Nhc2VJZH1gXG4gICAgICAgICsgYC9ldmVudC10cmlnZ2VyYFxuICAgICAgICArIGA/aWdub3JlLXdhcm5pbmc9JHtpZ25vcmVXYXJuaW5nfWA7XG4gICAgfSBlbHNlIGlmIChjYXNlVHlwZUlkID09PSB1bmRlZmluZWQgfHwgY2FzZVR5cGVJZCA9PT0gbnVsbCkge1xuICAgICAgdXJsICs9IGAvY2FzZXMvJHtjYXNlSWR9YFxuICAgICAgICArIGAvZXZlbnQtdHJpZ2dlcnMvJHtldmVudFRyaWdnZXJJZH1gXG4gICAgICAgICsgYD9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsICs9IGAvY2FzZS10eXBlcy8ke2Nhc2VUeXBlSWR9YFxuICAgICAgICArIGAvZXZlbnQtdHJpZ2dlcnMvJHtldmVudFRyaWdnZXJJZH1gXG4gICAgICAgICsgYD9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXNlRXZlbnRUcmlnZ2VyKGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcikge1xuICAgIGlmICghZXZlbnRUcmlnZ2VyLndpemFyZF9wYWdlcykge1xuICAgICAgZXZlbnRUcmlnZ2VyLndpemFyZF9wYWdlcyA9IFtdO1xuICAgIH1cblxuICAgIGV2ZW50VHJpZ2dlci53aXphcmRfcGFnZXMuZm9yRWFjaCgod2l6YXJkUGFnZTogV2l6YXJkUGFnZSkgPT4ge1xuICAgICAgd2l6YXJkUGFnZS5wYXJzZWRTaG93Q29uZGl0aW9uID0gU2hvd0NvbmRpdGlvbi5nZXRJbnN0YW5jZSh3aXphcmRQYWdlLnNob3dfY29uZGl0aW9uKTtcbiAgICAgIHdpemFyZFBhZ2UuY2FzZV9maWVsZHMgPSB0aGlzLm9yZGVyU2VydmljZS5zb3J0KFxuICAgICAgICB0aGlzLndpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyLm1hcEFsbCh3aXphcmRQYWdlLndpemFyZF9wYWdlX2ZpZWxkcywgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291cnRPckhlYXJpbmdDZW50cmVOYW1lKGxvY2F0aW9uSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvYXBpL2xvY2F0aW9ucy9nZXRMb2NhdGlvbnNCeUlkYCwgeyBsb2NhdGlvbnM6IFt7IGxvY2F0aW9uSWQgfV0gfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ2hhbGxlbmdlZEFjY2Vzc1JlcXVlc3QoY2FzZUlkOiBzdHJpbmcsIHJlcXVlc3Q6IENoYWxsZW5nZWRBY2Nlc3NSZXF1ZXN0KTogT2JzZXJ2YWJsZTxSb2xlQXNzaWdubWVudFJlc3BvbnNlPiB7XG4gICAgLy8gQXNzaWdubWVudCBBUEkgZW5kcG9pbnRcbiAgICBjb25zdCB1c2VySW5mb1N0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJyk7XG4gICAgY29uc3QgY2FtVXRpbHMgPSBuZXcgQ2FzZUFjY2Vzc1V0aWxzKCk7XG4gICAgbGV0IHVzZXJJbmZvOiBVc2VySW5mbztcbiAgICBpZiAodXNlckluZm9TdHIpIHtcbiAgICAgIHVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VySW5mb1N0cik7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZUNhdGVnb3J5OiBSb2xlQ2F0ZWdvcnkgPSB1c2VySW5mby5yb2xlQ2F0ZWdvcnkgfHwgY2FtVXRpbHMuZ2V0TWFwcGVkUm9sZUNhdGVnb3J5KHVzZXJJbmZvLnJvbGVzLCB1c2VySW5mby5yb2xlQ2F0ZWdvcmllcyk7XG4gICAgY29uc3Qgcm9sZU5hbWUgPSBjYW1VdGlscy5nZXRBTVJvbGVOYW1lKCdjaGFsbGVuZ2VkJywgcm9sZUNhdGVnb3J5KTtcbiAgICBjb25zdCBiZWdpblRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldFVUQ0hvdXJzKDIzLCA1OSwgNTksIDk5OSkpO1xuICAgIGNvbnN0IGlkID0gdXNlckluZm8uaWQgPyB1c2VySW5mby5pZCA6IHVzZXJJbmZvLnVpZDtcbiAgICBjb25zdCBpc05ldyA9IHRydWU7XG5cbiAgICBjb25zdCBwYXlsb2FkOiBSb2xlUmVxdWVzdFBheWxvYWQgPSBjYW1VdGlscy5nZXRBTVBheWxvYWQoaWQsXG4gICAgICBpZCxcbiAgICAgIHJvbGVOYW1lLFxuICAgICAgcm9sZUNhdGVnb3J5LFxuICAgICAgJ0NIQUxMRU5HRUQnLFxuICAgICAgY2FzZUlkLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIGJlZ2luVGltZSxcbiAgICAgIGVuZFRpbWUsXG4gICAgICBpc05ld1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYC9hcGkvY2hhbGxlbmdlZC1hY2Nlc3MtcmVxdWVzdGAsIHBheWxvYWQpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVNwZWNpZmljQWNjZXNzUmVxdWVzdChjYXNlSWQ6IHN0cmluZywgc2FyOiBTcGVjaWZpY0FjY2Vzc1JlcXVlc3QpOiBPYnNlcnZhYmxlPFJvbGVBc3NpZ25tZW50UmVzcG9uc2U+IHtcbiAgICAvLyBBc3NpZ25tZW50IEFQSSBlbmRwb2ludFxuICAgIGNvbnN0IHVzZXJJbmZvU3RyID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgndXNlckRldGFpbHMnKTtcblxuICAgIGNvbnN0IGNhbVV0aWxzID0gbmV3IENhc2VBY2Nlc3NVdGlscygpO1xuICAgIGxldCB1c2VySW5mbzogVXNlckluZm87XG4gICAgaWYgKHVzZXJJbmZvU3RyKSB7XG4gICAgICB1c2VySW5mbyA9IEpTT04ucGFyc2UodXNlckluZm9TdHIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVDYXRlZ29yeTogUm9sZUNhdGVnb3J5ID0gdXNlckluZm8ucm9sZUNhdGVnb3J5IHx8IGNhbVV0aWxzLmdldE1hcHBlZFJvbGVDYXRlZ29yeSh1c2VySW5mby5yb2xlcywgdXNlckluZm8ucm9sZUNhdGVnb3JpZXMpO1xuICAgIGNvbnN0IHJvbGVOYW1lID0gY2FtVXRpbHMuZ2V0QU1Sb2xlTmFtZSgnc3BlY2lmaWMnLCByb2xlQ2F0ZWdvcnkpO1xuICAgIGNvbnN0IGlkID0gdXNlckluZm8uaWQgPyB1c2VySW5mby5pZCA6IHVzZXJJbmZvLnVpZDtcbiAgICBjb25zdCBwYXlsb2FkOiBSb2xlUmVxdWVzdFBheWxvYWQgPSBjYW1VdGlscy5nZXRBTVBheWxvYWQobnVsbCwgaWQsXG4gICAgICByb2xlTmFtZSwgcm9sZUNhdGVnb3J5LCAnU1BFQ0lGSUMnLCBjYXNlSWQsIHNhciwgbnVsbCwgbnVsbCwgdHJ1ZSk7XG5cbiAgICBwYXlsb2FkLnJvbGVSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bG9hZC5yb2xlUmVxdWVzdCxcbiAgICAgIHByb2Nlc3M6ICdzcGVjaWZpYy1hY2Nlc3MnLFxuICAgICAgcmVwbGFjZUV4aXN0aW5nOiB0cnVlLFxuICAgICAgYXNzaWduZXJJZDogcGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXS5hY3RvcklkLFxuICAgICAgcmVmZXJlbmNlOiBgJHtjYXNlSWR9LyR7cm9sZU5hbWV9LyR7cGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXS5hY3RvcklkfWBcbiAgICB9O1xuXG4gICAgcGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXSA9IHtcbiAgICAgIC4uLnBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0sXG4gICAgICByb2xlTmFtZTogJ3NwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0ZWQnLFxuICAgICAgcm9sZUNhdGVnb3J5LFxuICAgICAgY2xhc3NpZmljYXRpb246ICdQUklWQVRFJyxcbiAgICAgIGVuZFRpbWU6IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0RGF0ZShuZXcgRGF0ZSgpLmdldERhdGUoKSArIDMwKSksXG4gICAgICBiZWdpblRpbWU6IG51bGwsXG4gICAgICBncmFudFR5cGU6ICdCQVNJQycsXG4gICAgICByZWFkT25seTogdHJ1ZVxuICAgIH07XG5cbiAgICBwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmF0dHJpYnV0ZXMgPSB7XG4gICAgICAuLi5wYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmF0dHJpYnV0ZXMsXG4gICAgICByZXF1ZXN0ZWRSb2xlOiByb2xlTmFtZSxcbiAgICAgIHNwZWNpZmljQWNjZXNzUmVhc29uOiBzYXIuc3BlY2lmaWNSZWFzb25cbiAgICB9O1xuXG4gICAgcGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXS5ub3Rlc1swXSA9IHtcbiAgICAgIC4uLnBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0ubm90ZXNbMF0sXG4gICAgICB1c2VySWQ6IHBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0uYWN0b3JJZFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICBgL2FwaS9zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMaW5rZWRDYXNlcyhjYXNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TGlua2VkQ2FzZXNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhU3RvcmVBcGlVcmwoKX0vJHtjYXNlSWR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhyb3dFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xpZW50Q29udGV4dEhlYWRlcihoZWFkZXJzOiBIdHRwSGVhZGVycyk6IEh0dHBIZWFkZXJzIHtcbiAgICBjb25zdCBjbGllbnRDb250ZXh0RGV0YWlscyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2NsaWVudENvbnRleHQnKTtcbiAgICBpZiAoY2xpZW50Q29udGV4dERldGFpbHMpIHtcbiAgICAgIGxldCBjbGllbnRDb250ZXh0RWRpdCA9IEpTT04ucGFyc2UoY2xpZW50Q29udGV4dERldGFpbHMpO1xuICAgICAgY2xpZW50Q29udGV4dEVkaXQuY2xpZW50X2NvbnRleHQudXNlcl90YXNrLnRhc2tfZGF0YS5uYW1lID0gJ1JldmlldyDjhaogdGhlIOOLmiBhcHBlYWwgXFxgJztcbiAgICAgIGNvbnN0IGNhc2VFZGl0VXRpbHMgPSBuZXcgQ2FzZUVkaXRVdGlscygpO1xuICAgICAgLy8gYmVsb3cgY2hhbmdlcyBub24tQVNDSUkgY2hhcmFjdGVycyBcbiAgICAgIGNvbnN0IGVkaXRlZENsaWVudENvbnRleHQgPSBjYXNlRWRpdFV0aWxzLmNvbnZlcnROb25BU0NJSUNoYXJhY3RlcnMoY2xpZW50Q29udGV4dERldGFpbHMpO1xuICAgICAgY29uc3QgY2xpZW50Q29udGV4dCA9IHdpbmRvdy5idG9hKGVkaXRlZENsaWVudENvbnRleHQpO1xuICAgICAgaWYgKGNsaWVudENvbnRleHQpIHtcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDbGllbnQtQ29udGV4dCcsIGNsaWVudENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2xpZW50Q29udGV4dFN0b3JhZ2UoaGVhZGVyczogSHR0cEhlYWRlcnMpOiB2b2lkIHtcbiAgICBpZiAoaGVhZGVycyAmJiBoZWFkZXJzLmdldCgnQ2xpZW50LUNvbnRleHQnKSkge1xuICAgICAgY29uc3QgY2FzZUVkaXRVdGlscyA9IG5ldyBDYXNlRWRpdFV0aWxzKCk7XG4gICAgICBjb25zdCBjbGllbnRDb250ZXh0U3RyaW5nID0gd2luZG93LmF0b2IoaGVhZGVycy5nZXQoJ0NsaWVudC1Db250ZXh0JykpO1xuICAgICAgLy8gYmVsb3cgcmV2ZXJ0cyBub24tQVNDSUkgY2hhcmFjdGVycyBcbiAgICAgIGNvbnN0IGVkaXRlZENsaWVudENvbnRleHRTdHJpbmcgPSBjYXNlRWRpdFV0aWxzLmNvbnZlcnRIVE1MRW50aXRpZXMoY2xpZW50Q29udGV4dFN0cmluZyk7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCdjbGllbnRDb250ZXh0JywgZWRpdGVkQ2xpZW50Q29udGV4dFN0cmluZyk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
@@ -43,6 +43,7 @@ export class CaseSpecificAccessRequestComponent {
43
43
  $roleAssignmentResponseSubscription;
44
44
  genericError = 'There is a problem';
45
45
  specificReasonControlName = 'specificReason';
46
+ getSpecificAccessError = false;
46
47
  constructor(fb, router, casesService, route, caseNotifier) {
47
48
  this.fb = fb;
48
49
  this.router = router;
@@ -97,9 +98,15 @@ export class CaseSpecificAccessRequestComponent {
97
98
  .subscribe(() => {
98
99
  // Would have been nice to pass the caseId within state.data, but this isn't part of NavigationExtras until
99
100
  // Angular 7.2
101
+ this.getSpecificAccessError = false;
100
102
  this.router.navigate(['success'], { relativeTo: this.route });
101
103
  }, () => {
102
- // Navigate to error page
104
+ // Show the generic error message
105
+ this.getSpecificAccessError = true;
106
+ this.errorMessage = {
107
+ title: this.genericError,
108
+ description: 'Sorry, there is a problem with the service; Try again later.'
109
+ };
103
110
  });
104
111
  }
105
112
  }
@@ -116,7 +123,7 @@ export class CaseSpecificAccessRequestComponent {
116
123
  return input.value === null || input.value.trim().length === 0;
117
124
  }
118
125
  static ɵfac = function CaseSpecificAccessRequestComponent_Factory(t) { return new (t || CaseSpecificAccessRequestComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i3.CasesService), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i3.CaseNotifier)); };
119
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseSpecificAccessRequestComponent, selectors: [["ccd-case-specific-access-request"]], decls: 50, vars: 42, consts: [[3, "error", 4, "ngIf"], ["type", "information"], [3, "submit", "formGroup"], [1, "govuk-form-group", 3, "ngClass"], ["aria-describedby", "reason-hint", 1, "govuk-fieldset"], [1, "govuk-fieldset__legend", "govuk-fieldset__legend--l"], [1, "govuk-fieldset__heading"], ["data-module", "govuk-details", "role", "group", 1, "govuk-details"], ["role", "button", "aria-expanded", "false", 1, "govuk-details__summary"], [1, "govuk-details__summary-text"], ["aria-hidden", "true", 1, "govuk-details__text"], [1, "govuk-body"], [1, "govuk-list", "govuk-list--bullet"], ["id", "reason-hint", 1, "govuk-hint"], ["id", "conditional-reason-3"], [1, "govuk-form-group"], ["id", "specific-reason-error-message", "class", "govuk-error-message", 4, "ngIf"], ["id", "specific-reason", "name", "specific-reason", "rows", "8", "formControlName", "specificReason", 1, "govuk-textarea", 3, "ngClass"], [1, "govuk-button-group"], ["type", "submit", 1, "govuk-button", "govuk-!-margin-right-3"], [1, "govuk-grid-column-full", "govuk-!-padding-left-0"], ["href", "javascript:void(0)", 1, "govuk-body", 3, "click"], [3, "error"], ["id", "specific-reason-error-message", 1, "govuk-error-message"]], template: function CaseSpecificAccessRequestComponent_Template(rf, ctx) { if (rf & 1) {
126
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseSpecificAccessRequestComponent, selectors: [["ccd-case-specific-access-request"]], decls: 50, vars: 42, consts: [[3, "error", 4, "ngIf"], ["type", "information"], [3, "submit", "formGroup"], [1, "govuk-form-group", 3, "ngClass"], ["aria-describedby", "reason-hint", 1, "govuk-fieldset"], [1, "govuk-fieldset__legend", "govuk-fieldset__legend--l"], [1, "govuk-fieldset__heading"], ["data-module", "govuk-details", "role", "group", 1, "govuk-details"], ["aria-expanded", "false", 1, "govuk-details__summary"], [1, "govuk-details__summary-text"], ["aria-hidden", "true", 1, "govuk-details__text"], [1, "govuk-body"], [1, "govuk-list", "govuk-list--bullet"], ["id", "reason-hint", 1, "govuk-hint"], ["id", "conditional-reason-3"], [1, "govuk-form-group"], ["id", "specific-reason-error-message", "class", "govuk-error-message", 4, "ngIf"], ["id", "specific-reason", "name", "specific-reason", "rows", "8", "formControlName", "specificReason", 1, "govuk-textarea", 3, "ngClass"], [1, "govuk-button-group"], ["type", "submit", 1, "govuk-button", "govuk-!-margin-right-3"], [1, "govuk-grid-column-full", "govuk-!-padding-left-0"], ["href", "javascript:void(0)", 1, "govuk-body", 3, "click"], [3, "error"], ["id", "specific-reason-error-message", 1, "govuk-error-message"]], template: function CaseSpecificAccessRequestComponent_Template(rf, ctx) { if (rf & 1) {
120
127
  i0.ɵɵtemplate(0, CaseSpecificAccessRequestComponent_exui_error_message_0_Template, 1, 1, "exui-error-message", 0);
121
128
  i0.ɵɵelementStart(1, "cut-alert", 1);
122
129
  i0.ɵɵtext(2);
@@ -170,7 +177,7 @@ export class CaseSpecificAccessRequestComponent {
170
177
  i0.ɵɵpipe(49, "rpxTranslate");
171
178
  i0.ɵɵelementEnd()()()()();
172
179
  } if (rf & 2) {
173
- i0.ɵɵproperty("ngIf", ctx.formGroup.invalid && ctx.submitted);
180
+ i0.ɵɵproperty("ngIf", ctx.formGroup.invalid && ctx.submitted || ctx.getSpecificAccessError);
174
181
  i0.ɵɵadvance(2);
175
182
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 16, "Authorisation is needed to access this case."), "");
176
183
  i0.ɵɵadvance(3);
@@ -205,7 +212,7 @@ export class CaseSpecificAccessRequestComponent {
205
212
  }
206
213
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseSpecificAccessRequestComponent, [{
207
214
  type: Component,
208
- args: [{ selector: 'ccd-case-specific-access-request', template: "<exui-error-message\n *ngIf=\"formGroup.invalid && submitted\"\n [error]=\"errorMessage\"></exui-error-message>\n<cut-alert type=\"information\">\n {{'Authorisation is needed to access this case.' | rpxTranslate}}<br />\n {{'This could be because it\\'s outside your jurisdiction, or you may be excluded from the case. If you request access to this case, it will be logged for auditing purposes.' | rpxTranslate}}\n</cut-alert>\n<form [formGroup]=\"formGroup\" (submit)=\"onSubmit()\">\n <div class=\"govuk-form-group\"\n [ngClass]=\"{ 'form-group-error': formGroup.invalid && submitted }\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"reason-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"govuk-fieldset__heading\">\n {{ title | rpxTranslate }}\n </h1>\n </legend>\n\n <details class=\"govuk-details\" data-module=\"govuk-details\" role=\"group\">\n <summary\n class=\"govuk-details__summary\"\n role=\"button\"\n aria-expanded=\"false\">\n <span class=\"govuk-details__summary-text\">\n {{'Help with requesting case access' | rpxTranslate}}\n </span>\n </summary>\n <div\n class=\"govuk-details__text\"\n aria-hidden=\"true\">\n <p class=\"govuk-body\">{{'You could include:' | rpxTranslate}}</p>\n <ul class=\"govuk-list govuk-list--bullet\">\n <li>{{'the case reference of the linked case' | rpxTranslate}}</li>\n <li>{{'how long you require access to this case' | rpxTranslate}}</li>\n <li>{{'any other reasons why you require access' | rpxTranslate}}</li>\n </ul>\n </div>\n </details>\n\n <div id=\"reason-hint\" class=\"govuk-hint\">\n {{ hint | rpxTranslate }}\n </div>\n <div id=\"conditional-reason-3\">\n <div class=\"govuk-form-group\">\n <div\n id=\"specific-reason-error-message\"\n class=\"govuk-error-message\"\n *ngIf=\"formGroup.get('specificReason').invalid && submitted\">\n {{ errorMessage.description | rpxTranslate }}\n </div>\n <textarea\n class=\"govuk-textarea\"\n [ngClass]=\"{\n 'govuk-textarea--error':\n formGroup.get('specificReason').invalid && submitted\n }\"\n id=\"specific-reason\"\n name=\"specific-reason\"\n rows=\"8\"\n formControlName=\"specificReason\">\n </textarea>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-!-margin-right-3\" type=\"submit\">\n {{'Submit' | rpxTranslate}}\n </button>\n <div class=\"govuk-grid-column-full govuk-!-padding-left-0\">\n <p>\n <a class=\"govuk-body\" (click)=\"onCancel()\" href=\"javascript:void(0)\">\n {{'Cancel' | rpxTranslate}}\n </a>\n </p>\n </div>\n </div>\n</form>\n" }]
215
+ args: [{ selector: 'ccd-case-specific-access-request', template: "<exui-error-message\n *ngIf=\"(formGroup.invalid && submitted) || getSpecificAccessError\"\n [error]=\"errorMessage\"></exui-error-message>\n<cut-alert type=\"information\">\n {{'Authorisation is needed to access this case.' | rpxTranslate}}<br />\n {{'This could be because it\\'s outside your jurisdiction, or you may be excluded from the case. If you request access to this case, it will be logged for auditing purposes.' | rpxTranslate}}\n</cut-alert>\n<form [formGroup]=\"formGroup\" (submit)=\"onSubmit()\">\n <div class=\"govuk-form-group\"\n [ngClass]=\"{ 'form-group-error': formGroup.invalid && submitted }\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"reason-hint\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--l\">\n <h1 class=\"govuk-fieldset__heading\">\n {{ title | rpxTranslate }}\n </h1>\n </legend>\n\n <details class=\"govuk-details\" data-module=\"govuk-details\" role=\"group\">\n <summary\n class=\"govuk-details__summary\"\n aria-expanded=\"false\">\n <span class=\"govuk-details__summary-text\">\n {{'Help with requesting case access' | rpxTranslate}}\n </span>\n </summary>\n <div\n class=\"govuk-details__text\"\n aria-hidden=\"true\">\n <p class=\"govuk-body\">{{'You could include:' | rpxTranslate}}</p>\n <ul class=\"govuk-list govuk-list--bullet\">\n <li>{{'the case reference of the linked case' | rpxTranslate}}</li>\n <li>{{'how long you require access to this case' | rpxTranslate}}</li>\n <li>{{'any other reasons why you require access' | rpxTranslate}}</li>\n </ul>\n </div>\n </details>\n\n <div id=\"reason-hint\" class=\"govuk-hint\">\n {{ hint | rpxTranslate }}\n </div>\n <div id=\"conditional-reason-3\">\n <div class=\"govuk-form-group\">\n <div\n id=\"specific-reason-error-message\"\n class=\"govuk-error-message\"\n *ngIf=\"formGroup.get('specificReason').invalid && submitted\">\n {{ errorMessage.description | rpxTranslate }}\n </div>\n <textarea\n class=\"govuk-textarea\"\n [ngClass]=\"{\n 'govuk-textarea--error':\n formGroup.get('specificReason').invalid && submitted\n }\"\n id=\"specific-reason\"\n name=\"specific-reason\"\n rows=\"8\"\n formControlName=\"specificReason\">\n </textarea>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-!-margin-right-3\" type=\"submit\">\n {{'Submit' | rpxTranslate}}\n </button>\n <div class=\"govuk-grid-column-full govuk-!-padding-left-0\">\n <p>\n <a class=\"govuk-body\" (click)=\"onCancel()\" href=\"javascript:void(0)\">\n {{'Cancel' | rpxTranslate}}\n </a>\n </p>\n </div>\n </div>\n</form>\n" }]
209
216
  }], () => [{ type: i1.FormBuilder }, { type: i2.Router }, { type: i3.CasesService }, { type: i2.ActivatedRoute }, { type: i3.CaseNotifier }], null); })();
210
217
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseSpecificAccessRequestComponent, { className: "CaseSpecificAccessRequestComponent", filePath: "lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.ts", lineNumber: 22 }); })();
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS12aWV3ZXIvY2FzZS1zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdC9jYXNlLXNwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLXZpZXdlci9jYXNlLXNwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0L2Nhc2Utc3BlY2lmaWMtYWNjZXNzLXJlcXVlc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUVMLFdBQVcsRUFDWCxXQUFXLEVBRVosTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9ELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsNkJBQTZCLEVBQzlCLE1BQU0sVUFBVSxDQUFDOzs7Ozs7OztJQ2ZsQix5Q0FFOEM7OztJQUE1QywyQ0FBc0I7OztJQXlDZCwrQkFHK0Q7SUFDN0QsWUFDRjs7SUFBQSxpQkFBTTs7O0lBREosY0FDRjtJQURFLHNGQUNGOztBRDNCVixNQUFNLE9BQU8sa0NBQWtDO0lBZTFCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFsQlosTUFB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YVIsZUFDRjtZQURFLGlFQUNGO1lBSU0sZUFDRjtZQURFLGlFQUNGOzs7aUZEcERLLGtDQUFrQztjQUo5QyxTQUFTOzJCQUNFLGtDQUFrQzs7a0ZBR2pDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXBcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IENhc2VOb3RpZmllciwgQ2FzZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FzZS1lZGl0b3InO1xuaW1wb3J0IHtcbiAgU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0RXJyb3JzLFxuICBTcGVjaWZpY0FjY2Vzc1JlcXVlc3RQYWdlVGV4dFxufSBmcm9tICcuL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1jYXNlLXNwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nhc2Utc3BlY2lmaWMtYWNjZXNzLXJlcXVlc3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBDYXNlU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwdWJsaWMgc3RhdGljIENBTkNFTF9MSU5LX0RFU1RJTkFUSU9OID0gJy93b3JrL215LXdvcmsvbGlzdCc7XG4gIHB1YmxpYyBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlUmVmTGFiZWw6IHN0cmluZztcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgc3VibWl0dGVkID0gZmFsc2U7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZTtcbiAgcHVibGljICRyb2xlQXNzaWdubWVudFJlc3BvbnNlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmljRXJyb3IgPSAnVGhlcmUgaXMgYSBwcm9ibGVtJztcbiAgcHJpdmF0ZSByZWFkb25seSBzcGVjaWZpY1JlYXNvbkNvbnRyb2xOYW1lID0gJ3NwZWNpZmljUmVhc29uJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZXNTZXJ2aWNlOiBDYXNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllclxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlID0gU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0UGFnZVRleHQuVElUTEU7XG4gICAgdGhpcy5oaW50ID0gU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0UGFnZVRleHQuSElOVDtcbiAgICB0aGlzLmNhc2VSZWZMYWJlbCA9IFNwZWNpZmljQWNjZXNzUmVxdWVzdFBhZ2VUZXh0LkNBU0VfUkVGO1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICByYWRpb1NlbGVjdGVkOiBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbnVsbCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgdGhpcy5zcGVjaWZpY1JlYXNvbkNvbnRyb2xOYW1lLFxuICAgICAgbmV3IEZvcm1Db250cm9sKCcnLCB7XG4gICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0RW1wdHkoY29udHJvbCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgaW52YWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdXBkYXRlT246ICdzdWJtaXQnLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgLy8gQ2xlYXIgdGhlIFwic3BlY2lmaWMgcmVhc29uXCIgZmllbGRzIG1hbnVhbGx5LiBUaGlzIHByZXZlbnRzIGFueSBwcmV2aW91cyB2YWx1ZSBiZWluZyByZXRhaW5lZCBieVxuICAgIC8vIHRoZSBmaWVsZCdzIEZvcm1Db250cm9sIHdoZW4gdGhlIGZpZWxkIGl0c2VsZiBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBieSAqbmdJZi4gKElmIGl0IGlzIHN1YnNlcXVlbnRseSBhZGRlZCBiYWNrXG4gICAgLy8gdG8gdGhlIERPTSBieSAqbmdJZiwgaXQgd2lsbCBhcHBlYXIgZW1wdHkgYnV0IHRoZSBhc3NvY2lhdGVkIEZvcm1Db250cm9sIHN0aWxsIGhhcyB0aGUgcHJldmlvdXMgdmFsdWUuKVxuICAgIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNwZWNpZmljUmVhc29uQ29udHJvbE5hbWUpLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNwZWNpZmljUmVhc29uQ29udHJvbE5hbWUpLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0ge1xuICAgICAgICB0aXRsZTogdGhpcy5nZW5lcmljRXJyb3IsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBTcGVjaWZpY0FjY2Vzc1JlcXVlc3RFcnJvcnMuTk9fUkVBU09OLFxuICAgICAgICBmaWVsZElkOiAnc3BlY2lmaWMtcmVhc29uJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhdGUgU3BlY2lmaWMgQWNjZXNzIFJlcXVlc3RcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIC8vIEdldCB0aGUgQ2FzZSBSZWZlcmVuY2UgKGZvciB3aGljaCBhY2Nlc3MgaXMgYmVpbmcgcmVxdWVzdGVkKSBmcm9tIHRoZSBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGRhdGFcbiAgICAgIGNvbnN0IGNhc2VJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmNpZDtcbiAgICAgIGNvbnN0IHNwZWNpZmljQWNjZXNzUmVxdWVzdCA9IHtcbiAgICAgICAgc3BlY2lmaWNSZWFzb246IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNwZWNpZmljUmVhc29uQ29udHJvbE5hbWUpLnZhbHVlXG4gICAgICB9IGFzIFNwZWNpZmljQWNjZXNzUmVxdWVzdDtcblxuICAgICAgdGhpcy4kcm9sZUFzc2lnbm1lbnRSZXNwb25zZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2FzZXNTZXJ2aWNlLmNyZWF0ZVNwZWNpZmljQWNjZXNzUmVxdWVzdChjYXNlSWQsIHNwZWNpZmljQWNjZXNzUmVxdWVzdClcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMuY2FzZU5vdGlmaWVyLmZldGNoQW5kUmVmcmVzaChjYXNlSWQpKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyBXb3VsZCBoYXZlIGJlZW4gbmljZSB0byBwYXNzIHRoZSBjYXNlSWQgd2l0aGluIHN0YXRlLmRhdGEsIGJ1dCB0aGlzIGlzbid0IHBhcnQgb2YgTmF2aWdhdGlvbkV4dHJhcyB1bnRpbFxuICAgICAgICAgICAgLy8gQW5ndWxhciA3LjJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc3VjY2VzcyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byBlcnJvciBwYWdlXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgcGFnZSBiZWZvcmUgcHJldmlvdXMgb25lIChzaG91bGQgYmUgU2VhcmNoIFJlc3VsdHMgb3IgQ2FzZSBMaXN0IHBhZ2UsIGZvciBleGFtcGxlKVxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoQ2FzZVNwZWNpZmljQWNjZXNzUmVxdWVzdENvbXBvbmVudC5DQU5DRUxfTElOS19ERVNUSU5BVElPTik7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuJHJvbGVBc3NpZ25tZW50UmVzcG9uc2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuJHJvbGVBc3NpZ25tZW50UmVzcG9uc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlucHV0RW1wdHkoaW5wdXQ6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbnB1dC52YWx1ZSA9PT0gbnVsbCB8fCBpbnB1dC52YWx1ZS50cmltKCkubGVuZ3RoID09PSAwO1xuICB9XG59XG4iLCI8ZXh1aS1lcnJvci1tZXNzYWdlXG4gICpuZ0lmPVwiZm9ybUdyb3VwLmludmFsaWQgJiYgc3VibWl0dGVkXCJcbiAgW2Vycm9yXT1cImVycm9yTWVzc2FnZVwiPjwvZXh1aS1lcnJvci1tZXNzYWdlPlxuPGN1dC1hbGVydCB0eXBlPVwiaW5mb3JtYXRpb25cIj5cbiAge3snQXV0aG9yaXNhdGlvbiBpcyBuZWVkZWQgdG8gYWNjZXNzIHRoaXMgY2FzZS4nIHwgcnB4VHJhbnNsYXRlfX08YnIgLz5cbiAge3snVGhpcyBjb3VsZCBiZSBiZWNhdXNlIGl0XFwncyBvdXRzaWRlIHlvdXIganVyaXNkaWN0aW9uLCBvciB5b3UgbWF5IGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNhc2UuIElmIHlvdSByZXF1ZXN0IGFjY2VzcyB0byB0aGlzIGNhc2UsIGl0IHdpbGwgYmUgbG9nZ2VkIGZvciBhdWRpdGluZyBwdXJwb3Nlcy4nIHwgcnB4VHJhbnNsYXRlfX1cbjwvY3V0LWFsZXJ0PlxuPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAoc3VibWl0KT1cIm9uU3VibWl0KClcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2Zvcm0tZ3JvdXAtZXJyb3InOiBmb3JtR3JvdXAuaW52YWxpZCAmJiBzdWJtaXR0ZWQgfVwiPlxuICAgIDxmaWVsZHNldCBjbGFzcz1cImdvdnVrLWZpZWxkc2V0XCIgYXJpYS1kZXNjcmliZWRieT1cInJlYXNvbi1oaW50XCI+XG4gICAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZCBnb3Z1ay1maWVsZHNldF9fbGVnZW5kLS1sXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWZpZWxkc2V0X19oZWFkaW5nXCI+XG4gICAgICAgICAge3sgdGl0bGUgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9oMT5cbiAgICAgIDwvbGVnZW5kPlxuXG4gICAgICA8ZGV0YWlscyBjbGFzcz1cImdvdnVrLWRldGFpbHNcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWRldGFpbHNcIiByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgPHN1bW1hcnlcbiAgICAgICAgICBjbGFzcz1cImdvdnVrLWRldGFpbHNfX3N1bW1hcnlcIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstZGV0YWlsc19fc3VtbWFyeS10ZXh0XCI+XG4gICAgICAgICAgICB7eydIZWxwIHdpdGggcmVxdWVzdGluZyBjYXNlIGFjY2VzcycgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zdW1tYXJ5PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnb3Z1ay1kZXRhaWxzX190ZXh0XCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj57eydZb3UgY291bGQgaW5jbHVkZTonIHwgcnB4VHJhbnNsYXRlfX08L3A+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1saXN0LS1idWxsZXRcIj5cbiAgICAgICAgICAgIDxsaT57eyd0aGUgY2FzZSByZWZlcmVuY2Ugb2YgdGhlIGxpbmtlZCBjYXNlJyB8IHJweFRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgIDxsaT57eydob3cgbG9uZyB5b3UgcmVxdWlyZSBhY2Nlc3MgdG8gdGhpcyBjYXNlJyB8IHJweFRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgIDxsaT57eydhbnkgb3RoZXIgcmVhc29ucyB3aHkgeW91IHJlcXVpcmUgYWNjZXNzJyB8IHJweFRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGV0YWlscz5cblxuICAgICAgPGRpdiBpZD1cInJlYXNvbi1oaW50XCIgY2xhc3M9XCJnb3Z1ay1oaW50XCI+XG4gICAgICAgIHt7IGhpbnQgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cImNvbmRpdGlvbmFsLXJlYXNvbi0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9XCJzcGVjaWZpYy1yZWFzb24tZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KCdzcGVjaWZpY1JlYXNvbicpLmludmFsaWQgJiYgc3VibWl0dGVkXCI+XG4gICAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb24gfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGNsYXNzPVwiZ292dWstdGV4dGFyZWFcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnZ292dWstdGV4dGFyZWEtLWVycm9yJzpcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdzcGVjaWZpY1JlYXNvbicpLmludmFsaWQgJiYgc3VibWl0dGVkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGlkPVwic3BlY2lmaWMtcmVhc29uXCJcbiAgICAgICAgICAgIG5hbWU9XCJzcGVjaWZpYy1yZWFzb25cIlxuICAgICAgICAgICAgcm93cz1cIjhcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3BlY2lmaWNSZWFzb25cIj5cbiAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmllbGRzZXQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTNcIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICB7eydTdWJtaXQnIHwgcnB4VHJhbnNsYXRlfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbCBnb3Z1ay0hLXBhZGRpbmctbGVmdC0wXCI+XG4gICAgICA8cD5cbiAgICAgICAgPGEgY2xhc3M9XCJnb3Z1ay1ib2R5XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+XG4gICAgICAgICAge3snQ2FuY2VsJyB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS12aWV3ZXIvY2FzZS1zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdC9jYXNlLXNwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLXZpZXdlci9jYXNlLXNwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0L2Nhc2Utc3BlY2lmaWMtYWNjZXNzLXJlcXVlc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUVMLFdBQVcsRUFDWCxXQUFXLEVBRVosTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9ELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsNkJBQTZCLEVBQzlCLE1BQU0sVUFBVSxDQUFDOzs7Ozs7OztJQ2ZsQix5Q0FFOEM7OztJQUE1QywyQ0FBc0I7OztJQXdDZCwrQkFHK0Q7SUFDN0QsWUFDRjs7SUFBQSxpQkFBTTs7O0lBREosY0FDRjtJQURFLHNGQUNGOztBRDFCVixNQUFNLE9BQU8sa0NBQWtDO0lBZ0IxQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbkJaLE1B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QURFLGtFQUNGO1lBUUksZUFDRjtZQURFLDJGQUNGO1lBS3NCLGVBQXVDO1lBQXZDLGtFQUF1QztZQUV2RCxlQUEwRDtZQUExRCxxRkFBMEQ7WUFDMUQsZUFBNkQ7WUFBN0Qsd0ZBQTZEO1lBQzdELGVBQTZEO1lBQTdELHdGQUE2RDtZQU1yRSxlQUNGO1lBREUsaUVBQ0Y7WUFNTyxlQUEwRDtZQUExRCxtRkFBMEQ7WUFLM0QsY0FHRTtZQUhGLG1IQUdFO1lBYVIsZUFDRjtZQURFLGlFQUNGO1lBSU0sZUFDRjtZQURFLGlFQUNGOzs7aUZEbkRLLGtDQUFrQztjQUo5QyxTQUFTOzJCQUNFLGtDQUFrQzs7a0ZBR2pDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXBcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IENhc2VOb3RpZmllciwgQ2FzZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FzZS1lZGl0b3InO1xuaW1wb3J0IHtcbiAgU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0RXJyb3JzLFxuICBTcGVjaWZpY0FjY2Vzc1JlcXVlc3RQYWdlVGV4dFxufSBmcm9tICcuL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1jYXNlLXNwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nhc2Utc3BlY2lmaWMtYWNjZXNzLXJlcXVlc3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBDYXNlU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwdWJsaWMgc3RhdGljIENBTkNFTF9MSU5LX0RFU1RJTkFUSU9OID0gJy93b3JrL215LXdvcmsvbGlzdCc7XG4gIHB1YmxpYyBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlUmVmTGFiZWw6IHN0cmluZztcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgc3VibWl0dGVkID0gZmFsc2U7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZTtcbiAgcHVibGljICRyb2xlQXNzaWdubWVudFJlc3BvbnNlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmljRXJyb3IgPSAnVGhlcmUgaXMgYSBwcm9ibGVtJztcbiAgcHJpdmF0ZSByZWFkb25seSBzcGVjaWZpY1JlYXNvbkNvbnRyb2xOYW1lID0gJ3NwZWNpZmljUmVhc29uJztcbiAgcHVibGljIGdldFNwZWNpZmljQWNjZXNzRXJyb3IgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZXNTZXJ2aWNlOiBDYXNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllclxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlID0gU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0UGFnZVRleHQuVElUTEU7XG4gICAgdGhpcy5oaW50ID0gU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0UGFnZVRleHQuSElOVDtcbiAgICB0aGlzLmNhc2VSZWZMYWJlbCA9IFNwZWNpZmljQWNjZXNzUmVxdWVzdFBhZ2VUZXh0LkNBU0VfUkVGO1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICByYWRpb1NlbGVjdGVkOiBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbnVsbCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgdGhpcy5zcGVjaWZpY1JlYXNvbkNvbnRyb2xOYW1lLFxuICAgICAgbmV3IEZvcm1Db250cm9sKCcnLCB7XG4gICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0RW1wdHkoY29udHJvbCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgaW52YWxpZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdXBkYXRlT246ICdzdWJtaXQnLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgLy8gQ2xlYXIgdGhlIFwic3BlY2lmaWMgcmVhc29uXCIgZmllbGRzIG1hbnVhbGx5LiBUaGlzIHByZXZlbnRzIGFueSBwcmV2aW91cyB2YWx1ZSBiZWluZyByZXRhaW5lZCBieVxuICAgIC8vIHRoZSBmaWVsZCdzIEZvcm1Db250cm9sIHdoZW4gdGhlIGZpZWxkIGl0c2VsZiBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBieSAqbmdJZi4gKElmIGl0IGlzIHN1YnNlcXVlbnRseSBhZGRlZCBiYWNrXG4gICAgLy8gdG8gdGhlIERPTSBieSAqbmdJZiwgaXQgd2lsbCBhcHBlYXIgZW1wdHkgYnV0IHRoZSBhc3NvY2lhdGVkIEZvcm1Db250cm9sIHN0aWxsIGhhcyB0aGUgcHJldmlvdXMgdmFsdWUuKVxuICAgIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNwZWNpZmljUmVhc29uQ29udHJvbE5hbWUpLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNwZWNpZmljUmVhc29uQ29udHJvbE5hbWUpLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0ge1xuICAgICAgICB0aXRsZTogdGhpcy5nZW5lcmljRXJyb3IsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBTcGVjaWZpY0FjY2Vzc1JlcXVlc3RFcnJvcnMuTk9fUkVBU09OLFxuICAgICAgICBmaWVsZElkOiAnc3BlY2lmaWMtcmVhc29uJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhdGUgU3BlY2lmaWMgQWNjZXNzIFJlcXVlc3RcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIC8vIEdldCB0aGUgQ2FzZSBSZWZlcmVuY2UgKGZvciB3aGljaCBhY2Nlc3MgaXMgYmVpbmcgcmVxdWVzdGVkKSBmcm9tIHRoZSBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGRhdGFcbiAgICAgIGNvbnN0IGNhc2VJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmNpZDtcbiAgICAgIGNvbnN0IHNwZWNpZmljQWNjZXNzUmVxdWVzdCA9IHtcbiAgICAgICAgc3BlY2lmaWNSZWFzb246IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNwZWNpZmljUmVhc29uQ29udHJvbE5hbWUpLnZhbHVlXG4gICAgICB9IGFzIFNwZWNpZmljQWNjZXNzUmVxdWVzdDtcblxuICAgICAgdGhpcy4kcm9sZUFzc2lnbm1lbnRSZXNwb25zZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2FzZXNTZXJ2aWNlLmNyZWF0ZVNwZWNpZmljQWNjZXNzUmVxdWVzdChjYXNlSWQsIHNwZWNpZmljQWNjZXNzUmVxdWVzdClcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMuY2FzZU5vdGlmaWVyLmZldGNoQW5kUmVmcmVzaChjYXNlSWQpKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyBXb3VsZCBoYXZlIGJlZW4gbmljZSB0byBwYXNzIHRoZSBjYXNlSWQgd2l0aGluIHN0YXRlLmRhdGEsIGJ1dCB0aGlzIGlzbid0IHBhcnQgb2YgTmF2aWdhdGlvbkV4dHJhcyB1bnRpbFxuICAgICAgICAgICAgLy8gQW5ndWxhciA3LjJcbiAgICAgICAgICAgIHRoaXMuZ2V0U3BlY2lmaWNBY2Nlc3NFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzdWNjZXNzJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIC8vIFNob3cgdGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZVxuICAgICAgICAgICAgdGhpcy5nZXRTcGVjaWZpY0FjY2Vzc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0ge1xuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZW5lcmljRXJyb3IsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU29ycnksIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBzZXJ2aWNlOyBUcnkgYWdhaW4gbGF0ZXIuJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBwYWdlIGJlZm9yZSBwcmV2aW91cyBvbmUgKHNob3VsZCBiZSBTZWFyY2ggUmVzdWx0cyBvciBDYXNlIExpc3QgcGFnZSwgZm9yIGV4YW1wbGUpXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChDYXNlU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0Q29tcG9uZW50LkNBTkNFTF9MSU5LX0RFU1RJTkFUSU9OKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4kcm9sZUFzc2lnbm1lbnRSZXNwb25zZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy4kcm9sZUFzc2lnbm1lbnRSZXNwb25zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5wdXRFbXB0eShpbnB1dDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlucHV0LnZhbHVlID09PSBudWxsIHx8IGlucHV0LnZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDA7XG4gIH1cbn1cbiIsIjxleHVpLWVycm9yLW1lc3NhZ2VcbiAgKm5nSWY9XCIoZm9ybUdyb3VwLmludmFsaWQgJiYgc3VibWl0dGVkKSB8fCBnZXRTcGVjaWZpY0FjY2Vzc0Vycm9yXCJcbiAgW2Vycm9yXT1cImVycm9yTWVzc2FnZVwiPjwvZXh1aS1lcnJvci1tZXNzYWdlPlxuPGN1dC1hbGVydCB0eXBlPVwiaW5mb3JtYXRpb25cIj5cbiAge3snQXV0aG9yaXNhdGlvbiBpcyBuZWVkZWQgdG8gYWNjZXNzIHRoaXMgY2FzZS4nIHwgcnB4VHJhbnNsYXRlfX08YnIgLz5cbiAge3snVGhpcyBjb3VsZCBiZSBiZWNhdXNlIGl0XFwncyBvdXRzaWRlIHlvdXIganVyaXNkaWN0aW9uLCBvciB5b3UgbWF5IGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNhc2UuIElmIHlvdSByZXF1ZXN0IGFjY2VzcyB0byB0aGlzIGNhc2UsIGl0IHdpbGwgYmUgbG9nZ2VkIGZvciBhdWRpdGluZyBwdXJwb3Nlcy4nIHwgcnB4VHJhbnNsYXRlfX1cbjwvY3V0LWFsZXJ0PlxuPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAoc3VibWl0KT1cIm9uU3VibWl0KClcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2Zvcm0tZ3JvdXAtZXJyb3InOiBmb3JtR3JvdXAuaW52YWxpZCAmJiBzdWJtaXR0ZWQgfVwiPlxuICAgIDxmaWVsZHNldCBjbGFzcz1cImdvdnVrLWZpZWxkc2V0XCIgYXJpYS1kZXNjcmliZWRieT1cInJlYXNvbi1oaW50XCI+XG4gICAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZCBnb3Z1ay1maWVsZHNldF9fbGVnZW5kLS1sXCI+XG4gICAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWZpZWxkc2V0X19oZWFkaW5nXCI+XG4gICAgICAgICAge3sgdGl0bGUgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9oMT5cbiAgICAgIDwvbGVnZW5kPlxuXG4gICAgICA8ZGV0YWlscyBjbGFzcz1cImdvdnVrLWRldGFpbHNcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWRldGFpbHNcIiByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgPHN1bW1hcnlcbiAgICAgICAgICBjbGFzcz1cImdvdnVrLWRldGFpbHNfX3N1bW1hcnlcIlxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstZGV0YWlsc19fc3VtbWFyeS10ZXh0XCI+XG4gICAgICAgICAgICB7eydIZWxwIHdpdGggcmVxdWVzdGluZyBjYXNlIGFjY2VzcycgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zdW1tYXJ5PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnb3Z1ay1kZXRhaWxzX190ZXh0XCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj57eydZb3UgY291bGQgaW5jbHVkZTonIHwgcnB4VHJhbnNsYXRlfX08L3A+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1saXN0LS1idWxsZXRcIj5cbiAgICAgICAgICAgIDxsaT57eyd0aGUgY2FzZSByZWZlcmVuY2Ugb2YgdGhlIGxpbmtlZCBjYXNlJyB8IHJweFRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgIDxsaT57eydob3cgbG9uZyB5b3UgcmVxdWlyZSBhY2Nlc3MgdG8gdGhpcyBjYXNlJyB8IHJweFRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgIDxsaT57eydhbnkgb3RoZXIgcmVhc29ucyB3aHkgeW91IHJlcXVpcmUgYWNjZXNzJyB8IHJweFRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGV0YWlscz5cblxuICAgICAgPGRpdiBpZD1cInJlYXNvbi1oaW50XCIgY2xhc3M9XCJnb3Z1ay1oaW50XCI+XG4gICAgICAgIHt7IGhpbnQgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cImNvbmRpdGlvbmFsLXJlYXNvbi0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9XCJzcGVjaWZpYy1yZWFzb24tZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KCdzcGVjaWZpY1JlYXNvbicpLmludmFsaWQgJiYgc3VibWl0dGVkXCI+XG4gICAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb24gfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGNsYXNzPVwiZ292dWstdGV4dGFyZWFcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnZ292dWstdGV4dGFyZWEtLWVycm9yJzpcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdzcGVjaWZpY1JlYXNvbicpLmludmFsaWQgJiYgc3VibWl0dGVkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGlkPVwic3BlY2lmaWMtcmVhc29uXCJcbiAgICAgICAgICAgIG5hbWU9XCJzcGVjaWZpYy1yZWFzb25cIlxuICAgICAgICAgICAgcm93cz1cIjhcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3BlY2lmaWNSZWFzb25cIj5cbiAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmllbGRzZXQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTNcIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICB7eydTdWJtaXQnIHwgcnB4VHJhbnNsYXRlfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbCBnb3Z1ay0hLXBhZGRpbmctbGVmdC0wXCI+XG4gICAgICA8cD5cbiAgICAgICAgPGEgY2xhc3M9XCJnb3Z1ay1ib2R5XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+XG4gICAgICAgICAge3snQ2FuY2VsJyB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
@@ -198,4 +198,4 @@ export class EventStartStateMachineService {
198
198
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventStartStateMachineService, [{
199
199
  type: Injectable
200
200
  }], null, null); })();
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtc3RhcnQtc3RhdGUtbWFjaGluZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2V2ZW50LXN0YXJ0L3NlcnZpY2VzL2V2ZW50LXN0YXJ0LXN0YXRlLW1hY2hpbmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFpQyxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFJNUUsTUFBTSxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztBQUdsRCxNQUFNLE9BQU8sNkJBQTZCO0lBQ2pDLDBCQUEwQixDQUFRO0lBQ2xDLFdBQVcsQ0FBUTtJQUNuQixZQUFZLENBQVE7SUFDcEIsbUJBQW1CLENBQVE7SUFDM0IsdUJBQXVCLENBQVE7SUFDL0IsMEJBQTBCLENBQVE7SUFDbEMsZ0NBQWdDLENBQVE7SUFDeEMsbUJBQW1CLENBQVE7SUFDM0IsVUFBVSxDQUFRO0lBRWxCLHNCQUFzQixDQUFDLE9BQXNDO1FBQ2xFLE9BQU8sSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLFlBQVksQ0FBQyxZQUEwQjtRQUM1QyxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFlBQVksQ0FBQyxXQUFXLENBQ3hELGdCQUFnQixDQUFDLHdCQUF3QixFQUN6QyxLQUFLLEVBQ0wsSUFBSSxDQUFDLHdDQUF3QyxDQUM5QyxDQUFDO1FBRUYsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FDekMsZ0JBQWdCLENBQUMsT0FBTyxF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Q0FBQyxVQUFVLENBQ2hCLENBQUM7SUFDSixDQUFDO3VGQTVSVSw2QkFBNkI7Z0VBQTdCLDZCQUE2QixXQUE3Qiw2QkFBNkI7O2lGQUE3Qiw2QkFBNkI7Y0FEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdGF0ZSwgU3RhdGVNYWNoaW5lIH0gZnJvbSAnQGVkaXVtL2ZzbSc7XG5pbXBvcnQgeyBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCwgRXZlbnRTdGFydFN0YXRlcyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBUYXNrRXZlbnRDb21wbGV0aW9uSW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vVGFzayc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItaW5mby5tb2RlbCc7XG5cbmNvbnN0IEVWRU5UX1NUQVRFX01BQ0hJTkUgPSAnRVZFTlQgU1RBVEUgTUFDSElORSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lU2VydmljZSB7XG4gIHB1YmxpYyBzdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrczogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZU5vVGFzazogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZU9uZVRhc2s6IFN0YXRlO1xuICBwdWJsaWMgc3RhdGVPbmVPck1vcmVUYXNrczogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZVRhc2tBc3NpZ25lZFRvVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZU9uZVRhc2tBc3NpZ25lZFRvVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZU11bHRpcGxlVGFza3NBc3NpZ25lZFRvVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZVRhc2tVbmFzc2lnbmVkOiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlRmluYWw6IFN0YXRlO1xuXG4gIHB1YmxpYyBpbml0aWFsaXNlU3RhdGVNYWNoaW5lKGNvbnRleHQ6IEV2ZW50U3RhcnRTdGF0ZU1hY2hpbmVDb250ZXh0KTogU3RhdGVNYWNoaW5lIHtcbiAgICByZXR1cm4gbmV3IFN0YXRlTWFjaGluZShFVkVOVF9TVEFURV9NQUNISU5FLCBjb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVTdGF0ZXMoc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmUpOiB2b2lkIHtcbiAgICAvLyBJbml0aWFsIHN0YXRlXG4gICAgdGhpcy5zdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcyA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuQ0hFQ0tfRk9SX01BVENISU5HX1RBU0tTLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVDaGVja0Zvck1hdGNoaW5nVGFza3NcbiAgICApO1xuXG4gICAgLy8gU3RhdGVzIGJhc2VkIG9uIG51bWJlciBvZiB0YXNrcyBhdmFpbGFibGVcbiAgICB0aGlzLnN0YXRlTm9UYXNrID0gc3RhdGVNYWNoaW5lLmNyZWF0ZVN0YXRlKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5OT19UQVNLLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVOb1Rhc2tcbiAgICApO1xuICAgIHRoaXMuc3RhdGVPbmVPck1vcmVUYXNrcyA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuT05FX09SX01PUkVfVEFTS1MsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZW50cnlBY3Rpb25Gb3JTdGF0ZU9uZU9yTW9yZVRhc2tzXG4gICAgKTtcblxuICAgIC8vIFN0YXRlcyBiYXNlZCBvbiBudW1iZXIgb2YgdGFza3MgYXNzaWduZWQgdG8gdXNlclxuICAgIHRoaXMuc3RhdGVUYXNrVW5hc3NpZ25lZCA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuVEFTS19VTkFTU0lHTkVELFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVUYXNrVW5Bc3NpZ25lZFxuICAgICk7XG4gICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvVXNlciA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuVEFTS19BU1NJR05FRF9UT19VU0VSLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVUYXNrQXNzaWduZWRUb1VzZXJcbiAgICApO1xuICAgIHRoaXMuc3RhdGVPbmVUYXNrQXNzaWduZWRUb1VzZXIgPSBzdGF0ZU1hY2hpbmUuY3JlYXRlU3RhdGUoXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLk9ORV9UQVNLX0FTU0lHTkVEX1RPX1VTRVIsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZW50cnlBY3Rpb25Gb3JTdGF0ZU9uZVRhc2tBc3NpZ25lZFRvVXNlclxuICAgICk7XG4gICAgdGhpcy5zdGF0ZU11bHRpcGxlVGFza3NBc3NpZ25lZFRvVXNlciA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuTVVMVElQTEVfVEFTS1NfQVNTSUdORURfVE9fVVNFUixcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5lbnRyeUFjdGlvbkZvclN0YXRlTXVsdGlwbGVUYXNrc0Fzc2lnbmVkVG9Vc2VyXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBmaW5hbCBzdGF0ZSwgdGhlIHNlY29uZCBwYXJhbSBpc0NvbXBsZXRlIGlzIHNldCB0byB0cnVlIHRvIG1ha2Ugc3VyZSBzdGF0ZSBtYWNoaW5lIGZpbmlzaGVkIHJ1bm5pbmdcbiAgICB0aGlzLnN0YXRlRmluYWwgPSBzdGF0ZU1hY2hpbmUuY3JlYXRlU3RhdGUoXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLkZJTkFMLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMuZmluYWxBY3Rpb25cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWwgdHJhbnNpdGlvblxuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcygpO1xuXG4gICAgLy8gVHJhbnNpdGlvbnMgYmFzZWQgb24gbnVtYmVyIG9mIHRhc2tzIGF2YWlsYWJsZVxuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZU5vVGFzaygpO1xuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZU9uZU9yTW9yZVRhc2tzKCk7XG5cbiAgICAvLyBUcmFuc2l0aW9ucyBiYXNlZCBvbiBudW1iZXIgb2YgdGFza3MgYXNzaWduZWQgdG8gdXNlclxuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tVbmFzc2lnbmVkKCk7XG4gICAgdGhpcy5hZGRUcmFuc2l0aW9uc0ZvclN0YXRlVGFza0Fzc2lnbmVkVG9Vc2VyKCk7XG4gICAgdGhpcy5hZGRUcmFuc2l0aW9uc0ZvclN0YXRlT25lVGFza0Fzc2lnbmVkVG9Vc2VyKCk7XG4gICAgdGhpcy5hZGRUcmFuc2l0aW9uc0ZvclN0YXRlTXVsdGlwbGVUYXNrc0Fzc2lnbmVkVG9Vc2VyKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmUpOiB2b2lkIHtcbiAgICBzdGF0ZU1hY2hpbmUuc3RhcnQodGhpcy5zdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbCBlbnRyeSBhY3Rpb24gZm9yIHN0YXRlIGNoZWNrIGZvciBtYXRjaGluZyB0YXNrcywgZGVjaWRlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHRhc2tzXG4gICAqL1xuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcyhzdGF0ZTogU3RhdGUsIGNvbnRleHQ6IEV2ZW50U3RhcnRTdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgdGFza0NvdW50ID0gY29udGV4dCAmJiBjb250ZXh0LnRhc2tzID8gY29udGV4dC50YXNrcy5sZW5ndGggOiAwO1xuXG4gICAgaWYgKHRhc2tDb3VudCA9PT0gMCkge1xuICAgICAgLy8gVHJpZ2dlciBzdGF0ZSBubyB0YXNrXG4gICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50U3RhcnRTdGF0ZXMuTk9fVEFTSyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyaWdnZXIgc3RhdGUgb25lIG9yIG1vcmUgdGFza3NcbiAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRTdGFydFN0YXRlcy5PTkVfT1JfTU9SRV9UQVNLUyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVudHJ5QWN0aW9uRm9yU3RhdGVOb1Rhc2soc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIC8vIFRyaWdnZXIgZmluYWwgc3RhdGUgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBzdGF0ZSBtYWNoaW5lXG4gICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLkZJTkFMKTtcbiAgICAvLyBOYXZpZ2F0ZSB0byBubyB0YXNrcyBhdmFpbGFibGUgZXJyb3IgcGFnZVxuICAgIGNvbnRleHQucm91dGVyLm5hdmlnYXRlKFtgL2Nhc2VzL2Nhc2UtZGV0YWlscy8ke2NvbnRleHQuY2FzZUlkfS9uby10YXNrcy1hdmFpbGFibGVgXSwgeyByZWxhdGl2ZVRvOiBjb250ZXh0LnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIGVudHJ5QWN0aW9uRm9yU3RhdGVPbmVPck1vcmVUYXNrcyhzdGF0ZTogU3RhdGUsIGNvbnRleHQ6IEV2ZW50U3RhcnRTdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLlRBU0tfQVNTSUdORURfVE9fVVNFUik7XG4gIH1cblxuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZU11bHRpcGxlVGFza3Moc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRTdGFydFN0YXRlcy5NVUxUSVBMRV9UQVNLU19BU1NJR05FRF9UT19VU0VSKTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlVGFza0Fzc2lnbmVkVG9Vc2VyKHN0YXRlOiBTdGF0ZSwgY29udGV4dDogRXZlbnRTdGFydFN0YXRlTWFjaGluZUNvbnRleHQpOiB2b2lkIHtcbiAgICAvLyBHZXQgbnVtYmVyIG9mIHRhc2tzIGFzc2lnbmVkIHRvIHVzZXJcbiAgICBjb25zdCB1c2VySW5mb1N0ciA9IGNvbnRleHQuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJyk7XG4gICAgY29uc3QgdXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJJbmZvU3RyKTtcbiAgICBjb25zdCB0YXNrc0Fzc2lnbmVkVG9Vc2VyID0gY29udGV4dC50YXNrcy5maWx0ZXIoeCA9PlxuICAgICAgICB4LnRhc2tfc3RhdGUgIT09ICd1bmFzc2lnbmVkJyAmJiB4LmFzc2lnbmVlID09PSB1c2VySW5mby5pZCB8fCB4LmFzc2lnbmVlID09PSB1c2VySW5mby51aWRcbiAgICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB1c2VyIGluaXRpYXRlZCB0aGUgZXZlbnQgZnJvbSB0YXNrIHRhYlxuICAgIGNvbnN0IGlzRXZlbnRJbml0aWF0ZWRGcm9tVGFza1RhYiA9IGNvbnRleHQudGFza0lkICE9PSB1bmRlZmluZWQgJiYgdGFza3NBc3NpZ25lZFRvVXNlci5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBjb250ZXh0LnRhc2tJZCkgPiAtMTtcblxuICAgIGlmIChpc0V2ZW50SW5pdGlhdGVkRnJvbVRhc2tUYWIpIHtcbiAgICAgIC8vIFVzZXIgaW5pdGlhdGVkIGV2ZW50IGZyb20gdGFzayB0YWJcbiAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRTdGFydFN0YXRlcy5PTkVfVEFTS19BU1NJR05FRF9UT19VU0VSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlciBpbml0aWF0ZWQgZXZlbnQgZnJvbSBkcm9wZG93blxuICAgICAgc3dpdGNoICh0YXNrc0Fzc2lnbmVkVG9Vc2VyLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgLy8gTm8gdGFza3MgYXNzaWduZWQgdG8gdXNlciwgdHJpZ2dlciBzdGF0ZSB0YXNrIHVuYXNzaWduZWRcbiAgICAgICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50U3RhcnRTdGF0ZXMuVEFTS19VTkFTU0lHTkVEKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIE9uZSB0YXNrIGFzc2lnbmVkIHRvIHVzZXJcbiAgICAgICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50U3RhcnRTdGF0ZXMuT05FX1RBU0tfQVNTSUdORURfVE9fVVNFUik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gTXVsdGlwbGUgdGFza3MgYXNzaWduZWQgdG8gdXNlciwgdHJpZ2dlciBzdGF0ZSBtdWx0aXBsZSB0YXNrcyBhc3NpZ25lZCB0byB1c2VyXG4gICAgICAgICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLk1VTFRJUExFX1RBU0tTX0FTU0lHTkVEX1RPX1VTRVIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlVGFza1VuQXNzaWduZWQoc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIGxldCBuYXZpZ2F0aW9uVVJMID0gJyc7XG4gICAgbGV0IHRoZVF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcblxuICAgIGlmIChjb250ZXh0LnRhc2tzWzBdLmFzc2lnbmVlKSB7XG4gICAgICAvLyBUYXNrIGlzIGFzc2lnbmVkIHRvIHNvbWUgb3RoZXIgdXNlciwgbmF2aWdhdGUgdG8gdGFzayBhc3NpZ25lZCBlcnJvciBwYWdlXG4gICAgICBuYXZpZ2F0aW9uVVJMID0gYC9jYXNlcy9jYXNlLWRldGFpbHMvJHtjb250ZXh0LmNhc2VJZH0vdGFzay1hc3NpZ25lZGA7XG4gICAgICB0aGVRdWVyeVBhcmFtcyA9IGNvbnRleHQudGFza3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRhc2sgaXMgdW5hc3NpZ25lZCwgbmF2aWdhdGUgdG8gdGFzayB1bmFzc2lnbmVkIGVycm9yIHBhZ2VcbiAgICAgIG5hdmlnYXRpb25VUkwgPSBgL2Nhc2VzL2Nhc2UtZGV0YWlscy8ke2NvbnRleHQuY2FzZUlkfS90YXNrLXVuYXNzaWduZWRgO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgZmluYWwgc3RhdGUgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBzdGF0ZSBtYWNoaW5lXG4gICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLkZJTkFMKTtcbiAgICAvLyBOYXZpZ2F0ZVxuICAgIGNvbnRleHQucm91dGVyLm5hdmlnYXRlKFtgJHtuYXZpZ2F0aW9uVVJMfWBdLCB7IHF1ZXJ5UGFyYW1zOiB0aGVRdWVyeVBhcmFtcywgcmVsYXRpdmVUbzogY29udGV4dC5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlT25lVGFza0Fzc2lnbmVkVG9Vc2VyKHN0YXRlOiBTdGF0ZSwgY29udGV4dDogRXZlbnRTdGFydFN0YXRlTWFjaGluZUNvbnRleHQpOiB2b2lkIHtcbiAgICAvLyBUcmlnZ2VyIGZpbmFsIHN0YXRlIHRvIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2Ygc3RhdGUgbWFjaGluZVxuICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRTdGFydFN0YXRlcy5GSU5BTCk7XG5cbiAgICAvLyBHZXQgdGFzayBhc3NpZ25lZCB0byB1c2VyXG4gICAgbGV0IHRhc2sgPSBjb250ZXh0LnRhc2tzLmZpbmQoeCA9PiB4LmlkID09PSBjb250ZXh0LnRhc2tJZCk7XG4gICAgaWYgKCF0YXNrKSB7XG4gICAgICB0YXNrID0gY29udGV4dC50YXNrc1swXTtcbiAgICB9XG5cbiAgICBjb25zdCB0YXNrU3RyPSBKU09OLnN0cmluZ2lmeSh0YXNrKTtcbiAgICBjb25zb2xlLmxvZygnZW50cnlBY3Rpb25Gb3JTdGF0ZU9uZVRhc2tBc3NpZ25lZFRvVXNlcjogc2V0dGluZyBjbGllbnQgY29udGV4dCB0YXNrX2RhdGEgdG8gJyArIHRhc2tTdHIpO1xuICAgIC8vIFN0b3JlIHRhc2sgdG8gc2Vzc2lvblxuICAgIGNvbnN0IGNsaWVudENvbnRleHQgPSB7XG4gICAgICBjbGllbnRfY29udGV4dDoge1xuICAgICAgICB1c2VyX3Rhc2s6IHtcbiAgICAgICAgICB0YXNrX2RhdGE6IHRhc2ssXG4gICAgICAgICAgY29tcGxldGVfdGFzazogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCdjbGllbnRDb250ZXh0JywgSlNPTi5zdHJpbmdpZnkoY2xpZW50Q29udGV4dCkpO1xuICAgIGxldCB1c2VySW5mbzogVXNlckluZm87XG4gICAgY29uc3QgdXNlckluZm9TdHIgPSBjb250ZXh0LnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd1c2VyRGV0YWlscycpO1xuICAgIGlmICh1c2VySW5mb1N0cikge1xuICAgICAgdXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJJbmZvU3RyKTtcbiAgICB9XG4gICAgLy8gU3RvcmUgdGFzayB0byBzZXNzaW9uXG4gICAgY29uc3QgdGFza0V2ZW50Q29tcGxldGlvbkluZm86IFRhc2tFdmVudENvbXBsZXRpb25JbmZvID0ge1xuICAgICAgY2FzZUlkOiBjb250ZXh0LmNhc2VJZCxcbiAgICAgIGV2ZW50SWQ6IGNvbnRleHQuZXZlbnRJZCxcbiAgICAgIHVzZXJJZDogdXNlckluZm8uaWQgPyB1c2VySW5mby5pZCA6IHVzZXJJbmZvLnVpZCxcbiAgICAgIHRhc2tJZDogdGFzay5pZCxcbiAgICAgIGNyZWF0ZWRUaW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgIGNvbnRleHQuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Rhc2tFdmVudENvbXBsZXRpb25JbmZvJywgSlNPTi5zdHJpbmdpZnkodGFza0V2ZW50Q29tcGxldGlvbkluZm8pKTtcbiAgICAvLyBBbGxvdyB1c2VyIHRvIHBlcmZvcm0gdGhlIGV2ZW50XG4gICAgY29udGV4dC5yb3V0ZXIubmF2aWdhdGUoW2AvY2FzZXMvY2FzZS1kZXRhaWxzLyR7Y29udGV4dC5jYXNlSWR9L3RyaWdnZXIvJHtjb250ZXh0LmV2ZW50SWR9YF0sXG4gICAgICB7IHJlbGF0aXZlVG86IGNvbnRleHQucm91dGUgfSk7XG4gIH1cblxuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZU11bHRpcGxlVGFza3NBc3NpZ25lZFRvVXNlcihzdGF0ZTogU3RhdGUsIGNvbnRleHQ6IEV2ZW50U3RhcnRTdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgLy8gVHJpZ2dlciBmaW5hbCBzdGF0ZSB0byBjb21wbGV0ZSBwcm9jZXNzaW5nIG9mIHN0YXRlIG1hY2hpbmVcbiAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50U3RhcnRTdGF0ZXMuRklOQUwpO1xuICAgIC8vIE5hdmlnYXRlIHRvIG11bHRpcGxlIHRhc2tzIGV4aXN0IGVycm9yIHBhZ2VcbiAgICBjb250ZXh0LnJvdXRlci5uYXZpZ2F0ZShbYC9jYXNlcy9jYXNlLWRldGFpbHMvJHtjb250ZXh0LmNhc2VJZH0vbXVsdGlwbGUtdGFza3MtZXhpc3RgXSwgeyByZWxhdGl2ZVRvOiBjb250ZXh0LnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIGZpbmFsQWN0aW9uKHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICAgIC8vIEZpbmFsIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBoZXJlLCB0aGUgc3RhdGUgbWFjaGluZSBmaW5pc2hlZCBydW5uaW5nXG4gICAgLy8gY29uc29sZS5sb2coJ0ZJTkFMJywgc3RhdGUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUcmFuc2l0aW9uc0ZvclN0YXRlQ2hlY2tGb3JNYXRjaGluZ1Rhc2tzKCk6IHZvaWQge1xuICAgIC8vIE5vIHRhc2tzXG4gICAgdGhpcy5zdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcy5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5OT19UQVNLLFxuICAgICAgdGhpcy5zdGF0ZU5vVGFza1xuICAgICk7XG4gICAgLy8gT25lIHRhc2tcbiAgICB0aGlzLnN0YXRlQ2hlY2tGb3JNYXRjaGluZ1Rhc2tzLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLk9ORV9PUl9NT1JFX1RBU0tTLFxuICAgICAgdGhpcy5zdGF0ZU9uZU9yTW9yZVRhc2tzXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUcmFuc2l0aW9uc0ZvclN0YXRlTm9UYXNrKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVOb1Rhc2suYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuRklOQUwsXG4gICAgICB0aGlzLnN0YXRlRmluYWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zRm9yU3RhdGVPbmVPck1vcmVUYXNrcygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlT25lT3JNb3JlVGFza3MuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuVEFTS19BU1NJR05FRF9UT19VU0VSLFxuICAgICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvVXNlclxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tVbmFzc2lnbmVkKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVUYXNrVW5hc3NpZ25lZC5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5GSU5BTCxcbiAgICAgIHRoaXMuc3RhdGVGaW5hbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tBc3NpZ25lZFRvVXNlcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlVGFza0Fzc2lnbmVkVG9Vc2VyLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLk9ORV9UQVNLX0FTU0lHTkVEX1RPX1VTRVIsXG4gICAgICB0aGlzLnN0YXRlT25lVGFza0Fzc2lnbmVkVG9Vc2VyXG4gICAgKTtcbiAgICB0aGlzLnN0YXRlVGFza0Fzc2lnbmVkVG9Vc2VyLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLlRBU0tfVU5BU1NJR05FRCxcbiAgICAgIHRoaXMuc3RhdGVUYXNrVW5hc3NpZ25lZFxuICAgICk7XG4gICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvVXNlci5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5NVUxUSVBMRV9UQVNLU19BU1NJR05FRF9UT19VU0VSLFxuICAgICAgdGhpcy5zdGF0ZU11bHRpcGxlVGFza3NBc3NpZ25lZFRvVXNlclxuICAgICk7XG4gICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvVXNlci5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5GSU5BTCxcbiAgICAgIHRoaXMuc3RhdGVGaW5hbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZU9uZVRhc2tBc3NpZ25lZFRvVXNlcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlT25lVGFza0Fzc2lnbmVkVG9Vc2VyLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLkZJTkFMLFxuICAgICAgdGhpcy5zdGF0ZUZpbmFsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUcmFuc2l0aW9uc0ZvclN0YXRlTXVsdGlwbGVUYXNrc0Fzc2lnbmVkVG9Vc2VyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVNdWx0aXBsZVRhc2tzQXNzaWduZWRUb1VzZXIuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuRklOQUwsXG4gICAgICB0aGlzLnN0YXRlRmluYWxcbiAgICApO1xuICB9XG59XG4iXX0=
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtc3RhcnQtc3RhdGUtbWFjaGluZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2V2ZW50LXN0YXJ0L3NlcnZpY2VzL2V2ZW50LXN0YXJ0LXN0YXRlLW1hY2hpbmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFpQyxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFJNUUsTUFBTSxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztBQUdsRCxNQUFNLE9BQU8sNkJBQTZCO0lBQ2pDLDBCQUEwQixDQUFRO0lBQ2xDLFdBQVcsQ0FBUTtJQUNuQixZQUFZLENBQVE7SUFDcEIsbUJBQW1CLENBQVE7SUFDM0IsdUJBQXVCLENBQVE7SUFDL0IsMEJBQTBCLENBQVE7SUFDbEMsZ0NBQWdDLENBQVE7SUFDeEMsbUJBQW1CLENBQVE7SUFDM0IsVUFBVSxDQUFRO0lBRWxCLHNCQUFzQixDQUFDLE9BQXNDO1FBQ2xFLE9BQU8sSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLFlBQVksQ0FBQyxZQUEwQjtRQUM1QyxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFlBQVksQ0FBQyxXQUFXLENBQ3hELGdCQUFnQixDQUFDLHdCQUF3QixFQUN6QyxLQUFLLEVBQ0wsSUFBSSxDQUFDLHdDQUF3QyxDQUM5QyxDQUFDO1FBRUYsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FDekMsZ0JBQWdCLENBQUMsT0FBTyxF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Q0FBQyxVQUFVLENBQ2hCLENBQUM7SUFDSixDQUFDO3VGQTVSVSw2QkFBNkI7Z0VBQTdCLDZCQUE2QixXQUE3Qiw2QkFBNkI7O2lGQUE3Qiw2QkFBNkI7Y0FEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdGF0ZSwgU3RhdGVNYWNoaW5lIH0gZnJvbSAnQGVkaXVtL2ZzbSc7XG5pbXBvcnQgeyBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCwgRXZlbnRTdGFydFN0YXRlcyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBUYXNrRXZlbnRDb21wbGV0aW9uSW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vVGFzayc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItaW5mby5tb2RlbCc7XG5cbmNvbnN0IEVWRU5UX1NUQVRFX01BQ0hJTkUgPSAnRVZFTlQgU1RBVEUgTUFDSElORSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lU2VydmljZSB7XG4gIHB1YmxpYyBzdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrczogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZU5vVGFzazogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZU9uZVRhc2s6IFN0YXRlO1xuICBwdWJsaWMgc3RhdGVPbmVPck1vcmVUYXNrczogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZVRhc2tBc3NpZ25lZFRvVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZU9uZVRhc2tBc3NpZ25lZFRvVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZU11bHRpcGxlVGFza3NBc3NpZ25lZFRvVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZVRhc2tVbmFzc2lnbmVkOiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlRmluYWw6IFN0YXRlO1xuXG4gIHB1YmxpYyBpbml0aWFsaXNlU3RhdGVNYWNoaW5lKGNvbnRleHQ6IEV2ZW50U3RhcnRTdGF0ZU1hY2hpbmVDb250ZXh0KTogU3RhdGVNYWNoaW5lIHtcbiAgICByZXR1cm4gbmV3IFN0YXRlTWFjaGluZShFVkVOVF9TVEFURV9NQUNISU5FLCBjb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVTdGF0ZXMoc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmUpOiB2b2lkIHtcbiAgICAvLyBJbml0aWFsIHN0YXRlXG4gICAgdGhpcy5zdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcyA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuQ0hFQ0tfRk9SX01BVENISU5HX1RBU0tTLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVDaGVja0Zvck1hdGNoaW5nVGFza3NcbiAgICApO1xuXG4gICAgLy8gU3RhdGVzIGJhc2VkIG9uIG51bWJlciBvZiB0YXNrcyBhdmFpbGFibGVcbiAgICB0aGlzLnN0YXRlTm9UYXNrID0gc3RhdGVNYWNoaW5lLmNyZWF0ZVN0YXRlKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5OT19UQVNLLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVOb1Rhc2tcbiAgICApO1xuICAgIHRoaXMuc3RhdGVPbmVPck1vcmVUYXNrcyA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuT05FX09SX01PUkVfVEFTS1MsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZW50cnlBY3Rpb25Gb3JTdGF0ZU9uZU9yTW9yZVRhc2tzXG4gICAgKTtcblxuICAgIC8vIFN0YXRlcyBiYXNlZCBvbiBudW1iZXIgb2YgdGFza3MgYXNzaWduZWQgdG8gdXNlclxuICAgIHRoaXMuc3RhdGVUYXNrVW5hc3NpZ25lZCA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuVEFTS19VTkFTU0lHTkVELFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVUYXNrVW5Bc3NpZ25lZFxuICAgICk7XG4gICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvVXNlciA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuVEFTS19BU1NJR05FRF9UT19VU0VSLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVUYXNrQXNzaWduZWRUb1VzZXJcbiAgICApO1xuICAgIHRoaXMuc3RhdGVPbmVUYXNrQXNzaWduZWRUb1VzZXIgPSBzdGF0ZU1hY2hpbmUuY3JlYXRlU3RhdGUoXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLk9ORV9UQVNLX0FTU0lHTkVEX1RPX1VTRVIsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZW50cnlBY3Rpb25Gb3JTdGF0ZU9uZVRhc2tBc3NpZ25lZFRvVXNlclxuICAgICk7XG4gICAgdGhpcy5zdGF0ZU11bHRpcGxlVGFza3NBc3NpZ25lZFRvVXNlciA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuTVVMVElQTEVfVEFTS1NfQVNTSUdORURfVE9fVVNFUixcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5lbnRyeUFjdGlvbkZvclN0YXRlTXVsdGlwbGVUYXNrc0Fzc2lnbmVkVG9Vc2VyXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBmaW5hbCBzdGF0ZSwgdGhlIHNlY29uZCBwYXJhbSBpc0NvbXBsZXRlIGlzIHNldCB0byB0cnVlIHRvIG1ha2Ugc3VyZSBzdGF0ZSBtYWNoaW5lIGZpbmlzaGVkIHJ1bm5pbmdcbiAgICB0aGlzLnN0YXRlRmluYWwgPSBzdGF0ZU1hY2hpbmUuY3JlYXRlU3RhdGUoXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLkZJTkFMLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMuZmluYWxBY3Rpb25cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWwgdHJhbnNpdGlvblxuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcygpO1xuXG4gICAgLy8gVHJhbnNpdGlvbnMgYmFzZWQgb24gbnVtYmVyIG9mIHRhc2tzIGF2YWlsYWJsZVxuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZU5vVGFzaygpO1xuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZU9uZU9yTW9yZVRhc2tzKCk7XG5cbiAgICAvLyBUcmFuc2l0aW9ucyBiYXNlZCBvbiBudW1iZXIgb2YgdGFza3MgYXNzaWduZWQgdG8gdXNlclxuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tVbmFzc2lnbmVkKCk7XG4gICAgdGhpcy5hZGRUcmFuc2l0aW9uc0ZvclN0YXRlVGFza0Fzc2lnbmVkVG9Vc2VyKCk7XG4gICAgdGhpcy5hZGRUcmFuc2l0aW9uc0ZvclN0YXRlT25lVGFza0Fzc2lnbmVkVG9Vc2VyKCk7XG4gICAgdGhpcy5hZGRUcmFuc2l0aW9uc0ZvclN0YXRlTXVsdGlwbGVUYXNrc0Fzc2lnbmVkVG9Vc2VyKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmUpOiB2b2lkIHtcbiAgICBzdGF0ZU1hY2hpbmUuc3RhcnQodGhpcy5zdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbCBlbnRyeSBhY3Rpb24gZm9yIHN0YXRlIGNoZWNrIGZvciBtYXRjaGluZyB0YXNrcywgZGVjaWRlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHRhc2tzXG4gICAqL1xuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcyhzdGF0ZTogU3RhdGUsIGNvbnRleHQ6IEV2ZW50U3RhcnRTdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgdGFza0NvdW50ID0gY29udGV4dCAmJiBjb250ZXh0LnRhc2tzID8gY29udGV4dC50YXNrcy5sZW5ndGggOiAwO1xuXG4gICAgaWYgKHRhc2tDb3VudCA9PT0gMCkge1xuICAgICAgLy8gVHJpZ2dlciBzdGF0ZSBubyB0YXNrXG4gICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50U3RhcnRTdGF0ZXMuTk9fVEFTSyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyaWdnZXIgc3RhdGUgb25lIG9yIG1vcmUgdGFza3NcbiAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRTdGFydFN0YXRlcy5PTkVfT1JfTU9SRV9UQVNLUyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVudHJ5QWN0aW9uRm9yU3RhdGVOb1Rhc2soc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIC8vIFRyaWdnZXIgZmluYWwgc3RhdGUgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBzdGF0ZSBtYWNoaW5lXG4gICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLkZJTkFMKTtcbiAgICAvLyBOYXZpZ2F0ZSB0byBubyB0YXNrcyBhdmFpbGFibGUgZXJyb3IgcGFnZVxuICAgIGNvbnRleHQucm91dGVyLm5hdmlnYXRlKFtgL2Nhc2VzL2Nhc2UtZGV0YWlscy8ke2NvbnRleHQuY2FzZUlkfS9uby10YXNrcy1hdmFpbGFibGVgXSwgeyByZWxhdGl2ZVRvOiBjb250ZXh0LnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIGVudHJ5QWN0aW9uRm9yU3RhdGVPbmVPck1vcmVUYXNrcyhzdGF0ZTogU3RhdGUsIGNvbnRleHQ6IEV2ZW50U3RhcnRTdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLlRBU0tfQVNTSUdORURfVE9fVVNFUik7XG4gIH1cblxuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZU11bHRpcGxlVGFza3Moc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRTdGFydFN0YXRlcy5NVUxUSVBMRV9UQVNLU19BU1NJR05FRF9UT19VU0VSKTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlVGFza0Fzc2lnbmVkVG9Vc2VyKHN0YXRlOiBTdGF0ZSwgY29udGV4dDogRXZlbnRTdGFydFN0YXRlTWFjaGluZUNvbnRleHQpOiB2b2lkIHtcbiAgICAvLyBHZXQgbnVtYmVyIG9mIHRhc2tzIGFzc2lnbmVkIHRvIHVzZXJcbiAgICBjb25zdCB1c2VySW5mb1N0ciA9IGNvbnRleHQuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJyk7XG4gICAgY29uc3QgdXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJJbmZvU3RyKTtcbiAgICBjb25zdCB0YXNrc0Fzc2lnbmVkVG9Vc2VyID0gY29udGV4dC50YXNrcy5maWx0ZXIoeCA9PlxuICAgICAgICB4LnRhc2tfc3RhdGUgIT09ICd1bmFzc2lnbmVkJyAmJiB4LmFzc2lnbmVlID09PSB1c2VySW5mby5pZCB8fCB4LmFzc2lnbmVlID09PSB1c2VySW5mby51aWRcbiAgICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB1c2VyIGluaXRpYXRlZCB0aGUgZXZlbnQgZnJvbSB0YXNrIHRhYlxuICAgIGNvbnN0IGlzRXZlbnRJbml0aWF0ZWRGcm9tVGFza1RhYiA9IGNvbnRleHQudGFza0lkICE9PSB1bmRlZmluZWQgJiYgdGFza3NBc3NpZ25lZFRvVXNlci5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBjb250ZXh0LnRhc2tJZCkgPiAtMTtcblxuICAgIGlmIChpc0V2ZW50SW5pdGlhdGVkRnJvbVRhc2tUYWIpIHtcbiAgICAgIC8vIFVzZXIgaW5pdGlhdGVkIGV2ZW50IGZyb20gdGFzayB0YWJcbiAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRTdGFydFN0YXRlcy5PTkVfVEFTS19BU1NJR05FRF9UT19VU0VSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlciBpbml0aWF0ZWQgZXZlbnQgZnJvbSBkcm9wZG93blxuICAgICAgc3dpdGNoICh0YXNrc0Fzc2lnbmVkVG9Vc2VyLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgLy8gTm8gdGFza3MgYXNzaWduZWQgdG8gdXNlciwgdHJpZ2dlciBzdGF0ZSB0YXNrIHVuYXNzaWduZWRcbiAgICAgICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50U3RhcnRTdGF0ZXMuVEFTS19VTkFTU0lHTkVEKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIE9uZSB0YXNrIGFzc2lnbmVkIHRvIHVzZXJcbiAgICAgICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50U3RhcnRTdGF0ZXMuT05FX1RBU0tfQVNTSUdORURfVE9fVVNFUik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gTXVsdGlwbGUgdGFza3MgYXNzaWduZWQgdG8gdXNlciwgdHJpZ2dlciBzdGF0ZSBtdWx0aXBsZSB0YXNrcyBhc3NpZ25lZCB0byB1c2VyXG4gICAgICAgICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLk1VTFRJUExFX1RBU0tTX0FTU0lHTkVEX1RPX1VTRVIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlVGFza1VuQXNzaWduZWQoc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIGxldCBuYXZpZ2F0aW9uVVJMID0gJyc7XG4gICAgbGV0IHRoZVF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcblxuICAgIGlmIChjb250ZXh0LnRhc2tzWzBdLmFzc2lnbmVlKSB7XG4gICAgICAvLyBUYXNrIGlzIGFzc2lnbmVkIHRvIHNvbWUgb3RoZXIgdXNlciwgbmF2aWdhdGUgdG8gdGFzayBhc3NpZ25lZCBlcnJvciBwYWdlXG4gICAgICBuYXZpZ2F0aW9uVVJMID0gYC9jYXNlcy9jYXNlLWRldGFpbHMvJHtjb250ZXh0LmNhc2VJZH0vdGFzay1hc3NpZ25lZGA7XG4gICAgICB0aGVRdWVyeVBhcmFtcyA9IGNvbnRleHQudGFza3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRhc2sgaXMgdW5hc3NpZ25lZCwgbmF2aWdhdGUgdG8gdGFzayB1bmFzc2lnbmVkIGVycm9yIHBhZ2VcbiAgICAgIG5hdmlnYXRpb25VUkwgPSBgL2Nhc2VzL2Nhc2UtZGV0YWlscy8ke2NvbnRleHQuY2FzZUlkfS90YXNrLXVuYXNzaWduZWRgO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgZmluYWwgc3RhdGUgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBzdGF0ZSBtYWNoaW5lXG4gICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLkZJTkFMKTtcbiAgICAvLyBOYXZpZ2F0ZVxuICAgIGNvbnRleHQucm91dGVyLm5hdmlnYXRlKFtgJHtuYXZpZ2F0aW9uVVJMfWBdLCB7IHF1ZXJ5UGFyYW1zOiB0aGVRdWVyeVBhcmFtcywgcmVsYXRpdmVUbzogY29udGV4dC5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlT25lVGFza0Fzc2lnbmVkVG9Vc2VyKHN0YXRlOiBTdGF0ZSwgY29udGV4dDogRXZlbnRTdGFydFN0YXRlTWFjaGluZUNvbnRleHQpOiB2b2lkIHtcbiAgICAvLyBUcmlnZ2VyIGZpbmFsIHN0YXRlIHRvIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2Ygc3RhdGUgbWFjaGluZVxuICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRTdGFydFN0YXRlcy5GSU5BTCk7XG5cbiAgICAvLyBHZXQgdGFzayBhc3NpZ25lZCB0byB1c2VyXG4gICAgbGV0IHRhc2sgPSBjb250ZXh0LnRhc2tzLmZpbmQoeCA9PiB4LmlkID09PSBjb250ZXh0LnRhc2tJZCk7XG4gICAgaWYgKCF0YXNrKSB7XG4gICAgICB0YXNrID0gY29udGV4dC50YXNrc1swXTtcbiAgICB9XG5cbiAgICBjb25zdCB0YXNrU3RyID0gSlNPTi5zdHJpbmdpZnkodGFzayk7XG4gICAgY29uc29sZS5sb2coJ2VudHJ5QWN0aW9uRm9yU3RhdGVPbmVUYXNrQXNzaWduZWRUb1VzZXI6IHNldHRpbmcgY2xpZW50IGNvbnRleHQgdGFza19kYXRhIHRvICcgKyB0YXNrU3RyKTtcbiAgICAvLyBTdG9yZSB0YXNrIHRvIHNlc3Npb25cbiAgICBjb25zdCBjbGllbnRDb250ZXh0ID0ge1xuICAgICAgY2xpZW50X2NvbnRleHQ6IHtcbiAgICAgICAgdXNlcl90YXNrOiB7XG4gICAgICAgICAgdGFza19kYXRhOiB0YXNrLFxuICAgICAgICAgIGNvbXBsZXRlX3Rhc2s6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnY2xpZW50Q29udGV4dCcsIEpTT04uc3RyaW5naWZ5KGNsaWVudENvbnRleHQpKTtcbiAgICBsZXQgdXNlckluZm86IFVzZXJJbmZvO1xuICAgIGNvbnN0IHVzZXJJbmZvU3RyID0gY29udGV4dC5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgndXNlckRldGFpbHMnKTtcbiAgICBpZiAodXNlckluZm9TdHIpIHtcbiAgICAgIHVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VySW5mb1N0cik7XG4gICAgfVxuICAgIC8vIFN0b3JlIHRhc2sgdG8gc2Vzc2lvblxuICAgIGNvbnN0IHRhc2tFdmVudENvbXBsZXRpb25JbmZvOiBUYXNrRXZlbnRDb21wbGV0aW9uSW5mbyA9IHtcbiAgICAgIGNhc2VJZDogY29udGV4dC5jYXNlSWQsXG4gICAgICBldmVudElkOiBjb250ZXh0LmV2ZW50SWQsXG4gICAgICB1c2VySWQ6IHVzZXJJbmZvLmlkID8gdXNlckluZm8uaWQgOiB1c2VySW5mby51aWQsXG4gICAgICB0YXNrSWQ6IHRhc2suaWQsXG4gICAgICBjcmVhdGVkVGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICBjb250ZXh0LnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCd0YXNrRXZlbnRDb21wbGV0aW9uSW5mbycsIEpTT04uc3RyaW5naWZ5KHRhc2tFdmVudENvbXBsZXRpb25JbmZvKSk7XG4gICAgLy8gQWxsb3cgdXNlciB0byBwZXJmb3JtIHRoZSBldmVudFxuICAgIGNvbnRleHQucm91dGVyLm5hdmlnYXRlKFtgL2Nhc2VzL2Nhc2UtZGV0YWlscy8ke2NvbnRleHQuY2FzZUlkfS90cmlnZ2VyLyR7Y29udGV4dC5ldmVudElkfWBdLFxuICAgICAgeyByZWxhdGl2ZVRvOiBjb250ZXh0LnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIGVudHJ5QWN0aW9uRm9yU3RhdGVNdWx0aXBsZVRhc2tzQXNzaWduZWRUb1VzZXIoc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudFN0YXJ0U3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIC8vIFRyaWdnZXIgZmluYWwgc3RhdGUgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBzdGF0ZSBtYWNoaW5lXG4gICAgc3RhdGUudHJpZ2dlcihFdmVudFN0YXJ0U3RhdGVzLkZJTkFMKTtcbiAgICAvLyBOYXZpZ2F0ZSB0byBtdWx0aXBsZSB0YXNrcyBleGlzdCBlcnJvciBwYWdlXG4gICAgY29udGV4dC5yb3V0ZXIubmF2aWdhdGUoW2AvY2FzZXMvY2FzZS1kZXRhaWxzLyR7Y29udGV4dC5jYXNlSWR9L211bHRpcGxlLXRhc2tzLWV4aXN0YF0sIHsgcmVsYXRpdmVUbzogY29udGV4dC5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5hbEFjdGlvbihzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgICAvLyBGaW5hbCBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgaGVyZSwgdGhlIHN0YXRlIG1hY2hpbmUgZmluaXNoZWQgcnVubmluZ1xuICAgIC8vIGNvbnNvbGUubG9nKCdGSU5BTCcsIHN0YXRlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcygpOiB2b2lkIHtcbiAgICAvLyBObyB0YXNrc1xuICAgIHRoaXMuc3RhdGVDaGVja0Zvck1hdGNoaW5nVGFza3MuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuTk9fVEFTSyxcbiAgICAgIHRoaXMuc3RhdGVOb1Rhc2tcbiAgICApO1xuICAgIC8vIE9uZSB0YXNrXG4gICAgdGhpcy5zdGF0ZUNoZWNrRm9yTWF0Y2hpbmdUYXNrcy5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5PTkVfT1JfTU9SRV9UQVNLUyxcbiAgICAgIHRoaXMuc3RhdGVPbmVPck1vcmVUYXNrc1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZU5vVGFzaygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlTm9UYXNrLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLkZJTkFMLFxuICAgICAgdGhpcy5zdGF0ZUZpbmFsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUcmFuc2l0aW9uc0ZvclN0YXRlT25lT3JNb3JlVGFza3MoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZU9uZU9yTW9yZVRhc2tzLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLlRBU0tfQVNTSUdORURfVE9fVVNFUixcbiAgICAgIHRoaXMuc3RhdGVUYXNrQXNzaWduZWRUb1VzZXJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zRm9yU3RhdGVUYXNrVW5hc3NpZ25lZCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlVGFza1VuYXNzaWduZWQuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuRklOQUwsXG4gICAgICB0aGlzLnN0YXRlRmluYWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zRm9yU3RhdGVUYXNrQXNzaWduZWRUb1VzZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvVXNlci5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5PTkVfVEFTS19BU1NJR05FRF9UT19VU0VSLFxuICAgICAgdGhpcy5zdGF0ZU9uZVRhc2tBc3NpZ25lZFRvVXNlclxuICAgICk7XG4gICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvVXNlci5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5UQVNLX1VOQVNTSUdORUQsXG4gICAgICB0aGlzLnN0YXRlVGFza1VuYXNzaWduZWRcbiAgICApO1xuICAgIHRoaXMuc3RhdGVUYXNrQXNzaWduZWRUb1VzZXIuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuTVVMVElQTEVfVEFTS1NfQVNTSUdORURfVE9fVVNFUixcbiAgICAgIHRoaXMuc3RhdGVNdWx0aXBsZVRhc2tzQXNzaWduZWRUb1VzZXJcbiAgICApO1xuICAgIHRoaXMuc3RhdGVUYXNrQXNzaWduZWRUb1VzZXIuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50U3RhcnRTdGF0ZXMuRklOQUwsXG4gICAgICB0aGlzLnN0YXRlRmluYWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zRm9yU3RhdGVPbmVUYXNrQXNzaWduZWRUb1VzZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZU9uZVRhc2tBc3NpZ25lZFRvVXNlci5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRTdGFydFN0YXRlcy5GSU5BTCxcbiAgICAgIHRoaXMuc3RhdGVGaW5hbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZU11bHRpcGxlVGFza3NBc3NpZ25lZFRvVXNlcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlTXVsdGlwbGVUYXNrc0Fzc2lnbmVkVG9Vc2VyLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudFN0YXJ0U3RhdGVzLkZJTkFMLFxuICAgICAgdGhpcy5zdGF0ZUZpbmFsXG4gICAgKTtcbiAgfVxufVxuIl19