@adlfe/campaign-management-library 2.13.2 → 2.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (18) hide show
  1. package/bundles/adlfe-campaign-management-library.umd.js +70 -67
  2. package/bundles/adlfe-campaign-management-library.umd.js.map +1 -1
  3. package/bundles/adlfe-campaign-management-library.umd.min.js +1 -1
  4. package/bundles/adlfe-campaign-management-library.umd.min.js.map +1 -1
  5. package/esm2015/lib/campaign-management/models/general-information-wa-req.model.js +27 -30
  6. package/esm2015/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +40 -32
  7. package/esm2015/lib/campaign-management/modules/new-campaign/general-information/general-information.component.js +1 -2
  8. package/esm2015/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +6 -7
  9. package/esm5/lib/campaign-management/models/general-information-wa-req.model.js +27 -30
  10. package/esm5/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +40 -32
  11. package/esm5/lib/campaign-management/modules/new-campaign/general-information/general-information.component.js +1 -2
  12. package/esm5/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +6 -7
  13. package/fesm2015/adlfe-campaign-management-library.js +70 -67
  14. package/fesm2015/adlfe-campaign-management-library.js.map +1 -1
  15. package/fesm5/adlfe-campaign-management-library.js +70 -67
  16. package/fesm5/adlfe-campaign-management-library.js.map +1 -1
  17. package/lib/campaign-management/models/general-information-wa-req.model.d.ts +0 -5
  18. package/package.json +1 -1
@@ -295,6 +295,7 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
295
295
  this.initParam('pageNo', this.pageNoTemplateOption, 'number'),
296
296
  this.initParam('rowPerPage', 20, 'number'),
297
297
  this.initParam('platform', 'WA', 'string'),
298
+ this.initParam('templateType', 'all', 'string'),
298
299
  this.initParam('filter', filter, 'string'),
299
300
  this.initParam('status', 'APPROVED', 'string'),
300
301
  this.initParam('clientId', (_c = (_b = (_a = this.getControl('from')) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.clientId, (_c !== null && _c !== void 0 ? _c : '')), 'string'),
@@ -459,73 +460,80 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
459
460
  this.subscribers.push(subs);
460
461
  }
461
462
  get buttonParamsControls() {
462
- return this.form.get('buttonParams').controls;
463
+ const control = this.form.get('buttonParams');
464
+ return control ? control.controls : [];
463
465
  }
464
466
  get isUsingExcelBulk() {
465
467
  var _a;
466
468
  return ((_a = this.getControl('isUpload')) === null || _a === void 0 ? void 0 : _a.value) || false;
467
469
  }
468
470
  updateTemplate(template) {
469
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34;
471
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35;
470
472
  this.isShowParameter = false;
471
473
  if (!template)
472
474
  return;
475
+ const formStorage = (_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.generalInformation) === null || _b === void 0 ? void 0 : _b.form;
476
+ const savedButtonParams = ((_c = formStorage) === null || _c === void 0 ? void 0 : _c.buttonParams) || [];
473
477
  const buttonParamsArray = this.form.get('buttonParams');
474
478
  buttonParamsArray.clear();
475
479
  if (template && template.buttons && template.buttons.length > 0) {
476
480
  const quickReplyButtons = template.buttons.filter((btn) => btn.type === 'QUICK_REPLY');
477
- quickReplyButtons.forEach((btn) => {
481
+ quickReplyButtons.forEach((btn, index) => {
482
+ var _a;
483
+ const existingPayload = ((_a = savedButtonParams[index]) === null || _a === void 0 ? void 0 : _a.payload) || '';
478
484
  buttonParamsArray.push(new FormGroup({
479
485
  label: new FormControl(btn.text),
480
- payload: new FormControl('', [Validators.maxLength(256)]),
486
+ payload: new FormControl({
487
+ value: existingPayload,
488
+ disabled: this.isReadOnlyMode,
489
+ }, [Validators.maxLength(256)]),
481
490
  }));
482
491
  });
483
492
  }
484
493
  this.isHaveTemplateParam =
485
- (_c = (_b = (_a = template.header) === null || _a === void 0 ? void 0 : _a.examples) === null || _b === void 0 ? void 0 : _b.length, (_c !== null && _c !== void 0 ? _c : 0)) > 0 ||
486
- (_f = (_e = (_d = template.body) === null || _d === void 0 ? void 0 : _d.examples) === null || _e === void 0 ? void 0 : _e.length, (_f !== null && _f !== void 0 ? _f : 0)) > 0 ||
487
- (_h = (_g = template.buttons) === null || _g === void 0 ? void 0 : _g.length, (_h !== null && _h !== void 0 ? _h : 0)) > 0;
488
- if (['image', 'video', 'document'].includes((_l = (_k = (_j = template) === null || _j === void 0 ? void 0 : _j.header) === null || _k === void 0 ? void 0 : _k.type) === null || _l === void 0 ? void 0 : _l.toLowerCase())) {
489
- (_m = this.getControl('fileName')) === null || _m === void 0 ? void 0 : _m.setValue((_t = (_q = (_p = (_o = this.getCampaignStorage) === null || _o === void 0 ? void 0 : _o.generalInformation) === null || _p === void 0 ? void 0 : _p.form.fileName, (_q !== null && _q !== void 0 ? _q : (_s = (_r = this.getCampaignStorage) === null || _r === void 0 ? void 0 : _r.generalInformation) === null || _s === void 0 ? void 0 : _s.form.targetURL)), (_t !== null && _t !== void 0 ? _t : template.header.url)));
490
- (_u = this.getControl('targetURL')) === null || _u === void 0 ? void 0 : _u.setValue((_x = (_w = (_v = this.getCampaignStorage) === null || _v === void 0 ? void 0 : _v.generalInformation) === null || _w === void 0 ? void 0 : _w.form.targetURL, (_x !== null && _x !== void 0 ? _x : template.header.url)));
491
- this.fileTypeChange((_0 = (_z = (_y = template) === null || _y === void 0 ? void 0 : _y.header) === null || _z === void 0 ? void 0 : _z.type) === null || _0 === void 0 ? void 0 : _0.toLowerCase());
492
- }
493
- (_2 = (_1 = template.header.examples) === null || _1 === void 0 ? void 0 : _1.length, (_2 !== null && _2 !== void 0 ? _2 : 0)) > 0
494
- ? (_3 = this.getControl('paramHeader')) === null || _3 === void 0 ? void 0 : _3.setValidators(Validators.required) : (_4 = this.getControl('paramHeader')) === null || _4 === void 0 ? void 0 : _4.clearValidators();
495
- (_6 = (_5 = template.body.examples) === null || _5 === void 0 ? void 0 : _5.length, (_6 !== null && _6 !== void 0 ? _6 : 0)) > 0
496
- ? (_7 = this.getControl('paramBody')) === null || _7 === void 0 ? void 0 : _7.setValidators(Validators.required) : (_8 = this.getControl('paramBody')) === null || _8 === void 0 ? void 0 : _8.clearValidators();
497
- (_10 = (_9 = template.buttons) === null || _9 === void 0 ? void 0 : _9.length, (_10 !== null && _10 !== void 0 ? _10 : 0)) > 0
498
- ? (_11 = this.getControl('paramButton')) === null || _11 === void 0 ? void 0 : _11.setValidators(Validators.required) : (_12 = this.getControl('paramButton')) === null || _12 === void 0 ? void 0 : _12.clearValidators();
494
+ (_f = (_e = (_d = template.header) === null || _d === void 0 ? void 0 : _d.examples) === null || _e === void 0 ? void 0 : _e.length, (_f !== null && _f !== void 0 ? _f : 0)) > 0 ||
495
+ (_j = (_h = (_g = template.body) === null || _g === void 0 ? void 0 : _g.examples) === null || _h === void 0 ? void 0 : _h.length, (_j !== null && _j !== void 0 ? _j : 0)) > 0 ||
496
+ (_l = (_k = template.buttons) === null || _k === void 0 ? void 0 : _k.length, (_l !== null && _l !== void 0 ? _l : 0)) > 0;
497
+ if (['image', 'video', 'document'].includes((_p = (_o = (_m = template) === null || _m === void 0 ? void 0 : _m.header) === null || _o === void 0 ? void 0 : _o.type) === null || _p === void 0 ? void 0 : _p.toLowerCase())) {
498
+ (_q = this.getControl('fileName')) === null || _q === void 0 ? void 0 : _q.setValue((_w = (_t = (_s = (_r = this.getCampaignStorage) === null || _r === void 0 ? void 0 : _r.generalInformation) === null || _s === void 0 ? void 0 : _s.form.fileName, (_t !== null && _t !== void 0 ? _t : (_v = (_u = this.getCampaignStorage) === null || _u === void 0 ? void 0 : _u.generalInformation) === null || _v === void 0 ? void 0 : _v.form.targetURL)), (_w !== null && _w !== void 0 ? _w : template.header.url)));
499
+ (_x = this.getControl('targetURL')) === null || _x === void 0 ? void 0 : _x.setValue((_0 = (_z = (_y = this.getCampaignStorage) === null || _y === void 0 ? void 0 : _y.generalInformation) === null || _z === void 0 ? void 0 : _z.form.targetURL, (_0 !== null && _0 !== void 0 ? _0 : template.header.url)));
500
+ this.fileTypeChange((_3 = (_2 = (_1 = template) === null || _1 === void 0 ? void 0 : _1.header) === null || _2 === void 0 ? void 0 : _2.type) === null || _3 === void 0 ? void 0 : _3.toLowerCase());
501
+ }
502
+ (_5 = (_4 = template.header.examples) === null || _4 === void 0 ? void 0 : _4.length, (_5 !== null && _5 !== void 0 ? _5 : 0)) > 0
503
+ ? (_6 = this.getControl('paramHeader')) === null || _6 === void 0 ? void 0 : _6.setValidators(Validators.required) : (_7 = this.getControl('paramHeader')) === null || _7 === void 0 ? void 0 : _7.clearValidators();
504
+ (_9 = (_8 = template.body.examples) === null || _8 === void 0 ? void 0 : _8.length, (_9 !== null && _9 !== void 0 ? _9 : 0)) > 0
505
+ ? (_10 = this.getControl('paramBody')) === null || _10 === void 0 ? void 0 : _10.setValidators(Validators.required) : (_11 = this.getControl('paramBody')) === null || _11 === void 0 ? void 0 : _11.clearValidators();
506
+ (_13 = (_12 = template.buttons) === null || _12 === void 0 ? void 0 : _12.length, (_13 !== null && _13 !== void 0 ? _13 : 0)) > 0
507
+ ? (_14 = this.getControl('paramButton')) === null || _14 === void 0 ? void 0 : _14.setValidators(Validators.required) : (_15 = this.getControl('paramButton')) === null || _15 === void 0 ? void 0 : _15.clearValidators();
499
508
  this.form.get('paramHeader').controls = [];
500
509
  this.form.get('paramHeader').reset();
501
- (_13 = this.getControl('paramHeader')) === null || _13 === void 0 ? void 0 : _13.updateValueAndValidity();
510
+ (_16 = this.getControl('paramHeader')) === null || _16 === void 0 ? void 0 : _16.updateValueAndValidity();
502
511
  this.form.get('paramBody').controls = [];
503
512
  this.form.get('paramBody').reset();
504
- (_14 = this.getControl('paramBody')) === null || _14 === void 0 ? void 0 : _14.updateValueAndValidity();
513
+ (_17 = this.getControl('paramBody')) === null || _17 === void 0 ? void 0 : _17.updateValueAndValidity();
505
514
  this.form.get('paramButton').controls = [];
506
515
  this.form.get('paramButton').reset();
507
- (_15 = this.getControl('paramButton')) === null || _15 === void 0 ? void 0 : _15.updateValueAndValidity();
508
- (_16 = this.getControl('otpValue')) === null || _16 === void 0 ? void 0 : _16.setValue('');
509
- (_17 = this.getControl('otpValue')) === null || _17 === void 0 ? void 0 : _17.clearValidators();
510
- (_18 = this.getControl('otpValue')) === null || _18 === void 0 ? void 0 : _18.updateValueAndValidity();
511
- const formStorage = (_20 = (_19 = this.getCampaignStorage) === null || _19 === void 0 ? void 0 : _19.generalInformation) === null || _20 === void 0 ? void 0 : _20.form;
516
+ (_18 = this.getControl('paramButton')) === null || _18 === void 0 ? void 0 : _18.updateValueAndValidity();
517
+ (_19 = this.getControl('otpValue')) === null || _19 === void 0 ? void 0 : _19.setValue('');
518
+ (_20 = this.getControl('otpValue')) === null || _20 === void 0 ? void 0 : _20.clearValidators();
519
+ (_21 = this.getControl('otpValue')) === null || _21 === void 0 ? void 0 : _21.updateValueAndValidity();
512
520
  if (template.category === 'AUTHENTICATION') {
513
- (_21 = this.getControl('otpValue')) === null || _21 === void 0 ? void 0 : _21.setValue((_29 = (_23 = (_22 = formStorage) === null || _22 === void 0 ? void 0 : _22.otpValue, (_23 !== null && _23 !== void 0 ? _23 : (_28 = [...(_27 = (_26 = (_25 = (_24 = formStorage) === null || _24 === void 0 ? void 0 : _24.template) === null || _25 === void 0 ? void 0 : _25.body) === null || _26 === void 0 ? void 0 : _26.examples, (_27 !== null && _27 !== void 0 ? _27 : []))]) === null || _28 === void 0 ? void 0 : _28.pop())), (_29 !== null && _29 !== void 0 ? _29 : '')));
514
- (_30 = this.getControl('otpValue')) === null || _30 === void 0 ? void 0 : _30.setValidators(Validators.required);
515
- (_31 = this.getControl('otpValue')) === null || _31 === void 0 ? void 0 : _31.updateValueAndValidity();
521
+ (_22 = this.getControl('otpValue')) === null || _22 === void 0 ? void 0 : _22.setValue((_30 = (_24 = (_23 = formStorage) === null || _23 === void 0 ? void 0 : _23.otpValue, (_24 !== null && _24 !== void 0 ? _24 : (_29 = [...(_28 = (_27 = (_26 = (_25 = formStorage) === null || _25 === void 0 ? void 0 : _25.template) === null || _26 === void 0 ? void 0 : _26.body) === null || _27 === void 0 ? void 0 : _27.examples, (_28 !== null && _28 !== void 0 ? _28 : []))]) === null || _29 === void 0 ? void 0 : _29.pop())), (_30 !== null && _30 !== void 0 ? _30 : '')));
522
+ (_31 = this.getControl('otpValue')) === null || _31 === void 0 ? void 0 : _31.setValidators(Validators.required);
523
+ (_32 = this.getControl('otpValue')) === null || _32 === void 0 ? void 0 : _32.updateValueAndValidity();
516
524
  }
517
- (_32 = template.header.examples) === null || _32 === void 0 ? void 0 : _32.forEach((each, index) => {
525
+ (_33 = template.header.examples) === null || _33 === void 0 ? void 0 : _33.forEach((each, index) => {
518
526
  var _a, _b, _c, _d, _e, _f, _g;
519
527
  this.addParamHeader((_g = (_d = (_c = (_b = (_a = formStorage) === null || _a === void 0 ? void 0 : _a.paramHeader) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.name, (_d !== null && _d !== void 0 ? _d : (_f = (_e = formStorage) === null || _e === void 0 ? void 0 : _e.paramHeader) === null || _f === void 0 ? void 0 : _f[index])), (_g !== null && _g !== void 0 ? _g : '')));
520
528
  });
521
- (_33 = template.body.examples) === null || _33 === void 0 ? void 0 : _33.forEach((each, index) => {
529
+ (_34 = template.body.examples) === null || _34 === void 0 ? void 0 : _34.forEach((each, index) => {
522
530
  var _a, _b, _c, _d, _e, _f, _g;
523
531
  let paramValue = (_g = (_d = (_c = (_b = (_a = formStorage) === null || _a === void 0 ? void 0 : _a.paramBody) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.name, (_d !== null && _d !== void 0 ? _d : (_f = (_e = formStorage) === null || _e === void 0 ? void 0 : _e.paramBody) === null || _f === void 0 ? void 0 : _f[index])), (_g !== null && _g !== void 0 ? _g : ''));
524
532
  if (['$UnsubscribeAccount'].includes(each))
525
533
  paramValue = each;
526
534
  this.addParamBody(paramValue);
527
535
  });
528
- (_34 = template.buttons) === null || _34 === void 0 ? void 0 : _34.forEach((each, index) => {
536
+ (_35 = template.buttons) === null || _35 === void 0 ? void 0 : _35.forEach((each, index) => {
529
537
  var _a, _b, _c, _d;
530
538
  this.addParamButton();
531
539
  const button = this.getButton;
@@ -756,4 +764,4 @@ GeneralInformationWAComponent = __decorate([
756
764
  })
757
765
  ], GeneralInformationWAComponent);
758
766
  export { GeneralInformationWAComponent };
759
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1pbmZvcm1hdGlvbi13YS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWRsZmUvY2FtcGFpZ24tbWFuYWdlbWVudC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL2NhbXBhaWduLW1hbmFnZW1lbnQvbW9kdWxlcy9uZXctY2FtcGFpZ24vY29tcG9uZW50cy9nZW5lcmFsLWluZm9ybWF0aW9uLXdhL2dlbmVyYWwtaW5mb3JtYXRpb24td2EuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFM0MsT0FBTyxFQUNILDBDQUEwQyxFQUMxQyxvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3ZCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWV4RSxJQUFh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QUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQywwQ0FBRSxLQUFLLEdBQUc7WUFDbEMsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxLQUFLLEdBQUc7U0FDcEM7UUFFRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNwQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUks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QTJCO0FBM0N6Qyw2QkFBNkI7SUFMekMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxrczJDQUFzRDs7S0FFekQsQ0FBQztHQUNXLDZCQUE2QixDQXMzQnpDO1NBdDNCWSw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXBzQVBJTG9hZGVyIH0gZnJvbSAnQGFnbS9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE5nWm9uZSxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEFic3RyYWN0Q29udHJvbCxcclxuICAgIEZvcm1BcnJheSxcclxuICAgIEZvcm1CdWlsZGVyLFxyXG4gICAgRm9ybUNvbnRyb2wsXHJcbiAgICBGb3JtR3JvdXAsXHJcbiAgICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIEdlbmVyYWxJbmZvcm1hdGlvbldBTWVzc2FnZVZhbGlkYXRpb25Db25zdCxcclxuICAgIE1lZGlhVHlwZU9wdGlvbkNvbnN0LFxyXG4gICAgTXNnVHlwZVdBT3B0aW9uQ29uc3QsXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9jb25zdCc7XHJcbmltcG9ydCB7IFByb2R1Y3RDYXRlZ29yeUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2VudW1zJztcclxuaW1wb3J0IHsgQmFzZU9wdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1hZGFwdGVyLXNlcnZpY2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBwUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1kdG8vcmVzcG9uc2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpQWRhcHRlclNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IGdlbmVyYXRlRW51bU9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlV0FNb2RlbCwgV2hhdHNBcHBBY2NvdW50RHRvIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW51bURhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL2VudW1zJztcclxuaW1wb3J0IHsgVmFsaWRhdG9ycyBhcyBDdXN0b21WYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdmFsaWRhdG9ycyc7XHJcblxyXG5pbnRlcmZhY2UgSU1hcHMge1xyXG4gICAgem9vbTogbnVtYmVyO1xyXG4gICAgbGF0aXR1ZGU6IG51bWJlciB8IG51bGw7XHJcbiAgICBsb25naXR1ZGU6IG51bWJlciB8IG51bGw7XHJcbiAgICBpc0RyYWdnYWJsZTogYm9vbGVhbjtcclxuICAgIGlzRG91YmxlQ2xpY2tab29tOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWdlbmVyYWwtaW5mb3JtYXRpb24td2EnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYWwtaW5mb3JtYXRpb24td2EuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJhbC1pbmZvcm1hdGlvbi13YS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJhbEluZm9ybWF0aW9uV0FDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB1cGRhdGVHZW5lcmFsSW5mb3JtYXRpb25Gb3JtOiBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPjtcclxuXHJcbiAgICBwdWJsaWMgZm9ybSE6IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyBtc2dUeXBlV0FPcHRpb246IGFueVtdID0gW107XHJcbiAgICBwdWJsaWMgbWVkaWFUeXBlT3B0aW9uOiBhbnlbXSA9IFtdO1xyXG4gICAgcHVibGljIGNhdGVnb3J5T3B0aW9uITogQmFzZU9wdGlvbk1vZGVsW107XHJcbiAgICBwdWJsaWMgYWNjb3VudE9wdGlvbjogV2hhdHNBcHBBY2NvdW50RHRvW10gPSBbXTtcclxuICAgIHB1YmxpYyBpc0hhdmVOZXh0QWNjb3VudE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nQWNjb3VudE9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHRlbXBsYXRlT3B0aW9uOiBUZW1wbGF0ZVdBTW9kZWxbXSA9IFtdO1xyXG4gICAgcHVibGljIGlzSGF2ZU5leHRUZW1wbGF0ZU9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nVGVtcGxhdGVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0hhdmVUZW1wbGF0ZVBhcmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTaG93UGFyYW1ldGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmFsaWRhdGlvbk1lc3NhZ2VzOiBhbnk7XHJcbiAgICBwdWJsaWMgZXh0RmlsZUFjY2VwdGVkOiBzdHJpbmcgPSAnaW1hZ2UvKic7XHJcbiAgICBwdWJsaWMgbWFwcyE6IElNYXBzO1xyXG5cclxuICAgIHByaXZhdGUgcGFnZU5vQWNjb3VudE9wdGlvbjogbnVtYmVyID0gMTtcclxuICAgIHByaXZhdGUgcGFnZU5vVGVtcGxhdGVPcHRpb246IG51bWJlciA9IDE7XHJcbiAgICBwcml2YXRlIHN1YnNjcmliZXJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBnZW9Db2RlcjogYW55O1xyXG5cclxuICAgIHB1YmxpYyB0ZW1wbGF0ZXMgPSBbXHJcbiAgICAgICAgeyBsYWJlbDogJ0NyZWF0ZSBOZXcnLCB2YWx1ZTogZmFsc2UgfSxcclxuICAgICAgICB7IGxhYmVsOiAnVXNlIGV4aXN0aW5nIHRlbXBsYXRlJywgdmFsdWU6IHRydWUgfSxcclxuICAgIF07XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZE9ubHlNb2RlITogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGlzVG91Y2hlZEZvcm0oc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZUdlbmVyYWxJbmZvcm1hdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR2VuZXJhbEluZm9ybWF0aW9uRm9ybS5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWFwU2VhcmNoJykgbWFwU2VhcmNoUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgICBwdWJsaWMgaXNDaGVja1V0aWxpdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgbWFwc0FQSUxvYWRlcjogTWFwc0FQSUxvYWRlcixcclxuICAgICAgICBwcml2YXRlIGFwaUFkYXB0ZXJTZXJ2aWNlOiBBcGlBZGFwdGVyU2VydmljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYWxJbmZvcm1hdGlvbkZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tc2dUeXBlV0FPcHRpb24gPSBNc2dUeXBlV0FPcHRpb25Db25zdDtcclxuICAgICAgICB0aGlzLm1lZGlhVHlwZU9wdGlvbiA9IE1lZGlhVHlwZU9wdGlvbkNvbnN0O1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlPcHRpb24gPSBnZW5lcmF0ZUVudW1PcHRpb24oUHJvZHVjdENhdGVnb3J5RW51bSk7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBHZW5lcmFsSW5mb3JtYXRpb25XQU1lc3NhZ2VWYWxpZGF0aW9uQ29uc3Q7XHJcbiAgICAgICAgdGhpcy5tYXBzID0ge1xyXG4gICAgICAgICAgICB6b29tOiAxNSxcclxuICAgICAgICAgICAgbGF0aXR1ZGU6IG51bGwsXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbnVsbCxcclxuICAgICAgICAgICAgaXNEcmFnZ2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGlzRG91YmxlQ2xpY2tab29tOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICB0aGlzLmluaXREaXNhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5pbml0RWRpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFZhbGlkYXRpb24oKTtcclxuICAgICAgICB0aGlzLmdldEFjY291bnRPcHRpb25TZXJ2aWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtPy5tZWRpdW0gPT09ICdXQSdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybT8uZnJvbT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLyogdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTsgKi9cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0Q2FtcGFpZ25TdG9yYWdlKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgY2FtcGFpZ25EYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJyk7XHJcbiAgICAgICAgcmV0dXJuIGNhbXBhaWduRGF0YSA/IEpTT04ucGFyc2UoY2FtcGFpZ25EYXRhKSA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIGNoYW5uZWw6IG5ldyBGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgbWVkaWE6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgZnJvbTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICB0ZXh0OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIHRhcmdldFVSTDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBmaWxlVHlwZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBmaWxlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBwYXJhbUhlYWRlcjogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgIHBhcmFtQm9keTogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgIHBhcmFtQnV0dG9uOiBuZXcgRm9ybUFycmF5KFtdLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgb3RwVmFsdWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIGlzVXBsb2FkOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBmaWxlSWQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIGNhdGVnb3J5OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIHByb2R1Y3Q6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgY2F0YWxvZ3VlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGJvZHk6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgaXNVc2VFeGlzdGluZ1RlbXBsYXRlOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBpc05lZWRTYXZlOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICB0dGw6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgaXNEb3dubG9hZFZhcmlhYmxlWExTOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgICAgICB1c2VYbHN4OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBidXR0b25QYXJhbXM6IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmFsSW5mb3JtYXRpb25Gb3JtLmVtaXQodGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RGlzYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkT25seU1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRFZGl0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhID0gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U7XHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHN0b3JhZ2VEYXRhPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm07XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhc3RvcmFnZURhdGEgfHxcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3RvcmFnZURhdGEpLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgICBmb3JtVmFsdWVzPy5tZWRpdW0gIT09ICdXQSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LmNoYW5uZWwpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbWVkaWEnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8ubWVkaWEpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy5mcm9tKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8udGV4dCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8udGFyZ2V0VVJMKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnNldFZhbHVlKFxyXG4gICAgICAgICAgICBmb3JtVmFsdWVzPy5maWxlTmFtZSA/PyB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy52YWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy50ZW1wbGF0ZSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdpc1VwbG9hZCcpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy5pc1VwbG9hZCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlSWQnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8uZmlsZUlkKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/Lm90cFZhbHVlKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzVXNlRXhpc3RpbmdUZW1wbGF0ZScpPy5zZXRWYWx1ZSghIWZvcm1WYWx1ZXM/LnRlbXBsYXRlTmFtZSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdpc05lZWRTYXZlJyk/LnNldFZhbHVlKCEhZm9ybVZhbHVlcz8uaXNOZWVkU2F2ZSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0dGwnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8udHRsKTtcclxuICAgICAgICBjb25zdCBzYXZlZFZhcmlhYmxlcyA9IGZvcm1WYWx1ZXM/LnZhcmlhYmxlcztcclxuICAgICAgICBpZiAoc2F2ZWRWYXJpYWJsZXMgJiYgQXJyYXkuaXNBcnJheShzYXZlZFZhcmlhYmxlcykgJiYgc2F2ZWRWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5jbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IGl0ZW0ucGFyYW1OYW1lIHx8ICcnLCBkaXNhYmxlZDogdGhpcy5pc1JlYWRPbmx5TW9kZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNIYXZlVGVtcGxhdGVQYXJhbSA9IHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8udmFsdWU7XHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZU9wdGlvblNlcnZpY2UobnVsbCwgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy52YWx1ZT8ubmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0VmFsaWRhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZvcm0uY29udHJvbHMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNba2V5XS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1trZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldElzVGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzTWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdtZWRpYScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ21lZGlhJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNDYXRhbG9ndWUpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2F0ZWdvcnknKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRhbG9ndWUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwcm9kdWN0Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnYm9keScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCkpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NhdGVnb3J5Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRhbG9ndWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3Byb2R1Y3QnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2JvZHknKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc1V0aWxpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWxpZGF0b3JzKFtcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDI0KSxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndHRsJyk/LnNldFZhbGlkYXRvcnMoW1xyXG4gICAgICAgICAgICAgICAgQ3VzdG9tVmFsaWRhdG9ycy5taW4oMzAsICdNaW5pbXVtIFRUTCAzMCcpLFxyXG4gICAgICAgICAgICAgICAgQ3VzdG9tVmFsaWRhdG9ycy5tYXgoNDMyMDAsICdNYXhpbXVtIFRUTCA0MzIwMCcpLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0dGwnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3ZhcmlhYmxlcycpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybVJlc2V0KF9pc01lZGlhVHlwZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFfaXNNZWRpYVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdtZWRpYScpPy5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8ucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZU5hbWUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZVR5cGUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRlZ29yeScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncHJvZHVjdCcpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2F0YWxvZ3VlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdib2R5Jyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndmFyaWFibGVzJyk/LnJlc2V0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtSGVhZGVyID0gdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpIGFzIEZvcm1BcnJheSB8IG51bGw7XHJcbiAgICAgICAgaWYgKHBhcmFtSGVhZGVyKSB7XHJcbiAgICAgICAgICAgIHBhcmFtSGVhZGVyLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHBhcmFtSGVhZGVyLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbUJvZHkgPSB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpIGFzIEZvcm1BcnJheSB8IG51bGw7XHJcbiAgICAgICAgaWYgKHBhcmFtQm9keSkge1xyXG4gICAgICAgICAgICBwYXJhbUJvZHkuY2xlYXIoKTtcclxuICAgICAgICAgICAgcGFyYW1Cb2R5LnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbUJ1dHRvbiA9IHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkgfCBudWxsO1xyXG4gICAgICAgIGlmIChwYXJhbUJ1dHRvbikge1xyXG4gICAgICAgICAgICBwYXJhbUJ1dHRvbi5jbGVhcigpO1xyXG4gICAgICAgICAgICBwYXJhbUJ1dHRvbi5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbml0VmFsaWRhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q29udHJvbChjb250cm9sTmFtZTogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybSA/IHRoaXMuZm9ybS5nZXQoY29udHJvbE5hbWUpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRQYXJhbShfbmFtZTogc3RyaW5nLCBfdmFsdWU6IGFueSwgX3R5cGU6IHN0cmluZyk6IFBhcmFtZXRlciB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogX25hbWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBfdmFsdWUsXHJcbiAgICAgICAgICAgIGluOiAncXVlcnknLFxyXG4gICAgICAgICAgICB0eXBlOiBfdHlwZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0QWNjb3VudE9wdGlvblNlcnZpY2UoZmlsdGVyOiBzdHJpbmcgPSAnJywgaXNJbmZpbml0ZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdBY2NvdW50T3B0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdDogQXJyYXk8UGFyYW1ldGVyPiA9IFtcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3BhZ2VObycsIHRoaXMucGFnZU5vQWNjb3VudE9wdGlvbiwgJ251bWJlcicpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncm93UGVyUGFnZScsIDIwLCAnbnVtYmVyJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdwbGF0Zm9ybScsICdXQScsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3N0YXR1cycsICdBUFBST1ZFRCcsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ2ZpbHRlcicsIGZpbHRlciwgJ3N0cmluZycpLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmFwaUFkYXB0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leGVjdXRlQXBpUmVxdWVzdChwYXJhbWV0ZXJMaXN0LCAnL2FkbWluL2FjY291bnQnLCAnR0VUJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcDogQXBwUmVzcG9uc2U8V2hhdHNBcHBBY2NvdW50RHRvW10+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3AuZGF0YSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudE9wdGlvbiA9IGlzSW5maW5pdGUgPyBbLi4udGhpcy5hY2NvdW50T3B0aW9uLCAuLi5yZXNwLmRhdGFdIDogcmVzcC5kYXRhO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hhdmVOZXh0QWNjb3VudE9wdGlvbiA9IHJlc3AuaGF2ZU5leHQgPz8gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nQWNjb3VudE9wdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUZW1wbGF0ZU9wdGlvblNlcnZpY2UoXHJcbiAgICAgICAgZXZlbnQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgZmlsdGVyOiBzdHJpbmcgPSAnJyxcclxuICAgICAgICBpc0luZmluaXRlOiBib29sZWFuID0gZmFsc2VcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nVGVtcGxhdGVPcHRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncGFnZU5vJywgdGhpcy5wYWdlTm9UZW1wbGF0ZU9wdGlvbiwgJ251bWJlcicpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncm93UGVyUGFnZScsIDIwLCAnbnVtYmVyJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdwbGF0Zm9ybScsICdXQScsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ2ZpbHRlcicsIGZpbHRlciwgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnc3RhdHVzJywgJ0FQUFJPVkVEJywgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnY2xpZW50SWQnLCB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udmFsdWU/LmNsaWVudElkID8/ICcnLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCd3YWJhSWQnLCB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udmFsdWU/LndhYmFJZCA/PyAnJywgJ3N0cmluZycpLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHlNb2RlKSBwYXJhbWV0ZXJMaXN0LnB1c2godGhpcy5pbml0UGFyYW0oJ3N1bW1hcnknLCB0cnVlLCAnc3RyaW5nJykpO1xyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IHRoaXMuZm9ybS52YWx1ZT8uY2hhbm5lbDtcclxuXHJcbiAgICAgICAgaWYgKG1lc3NhZ2VUeXBlID09PSAndXRpbGl0eScpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyTGlzdC5wdXNoKHRoaXMuaW5pdFBhcmFtKCdpc0RpcmVjdFNlbmQnLCB0cnVlLCAnc3RyaW5nJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KHBhcmFtZXRlckxpc3QsICcvbWVzc2FnZS90ZW1wbGF0ZScsICdHRVQnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBBcHBSZXNwb25zZTxUZW1wbGF0ZVdBTW9kZWxbXT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy50ZW1wbGF0ZU9wdGlvbiB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSByZXNwLmRhdGEgfHwgW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlT3B0aW9uID0gaXNJbmZpbml0ZSA/IFsuLi5jdXJyZW50T3B0aW9ucywgLi4ubmV3RGF0YV0gOiBuZXdEYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIYXZlTmV4dFRlbXBsYXRlT3B0aW9uID0gcmVzcC5oYXZlTmV4dCA/PyB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdUZW1wbGF0ZU9wdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZU9wdGlvbj8uZmluZChcclxuICAgICAgICAgICAgICAgICAgICAodCkgPT4gdC5JRCA9PT0gdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy52YWx1ZT8uSURcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5wYXRjaFZhbHVlKHRlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8udmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURvd25sb2FkQ1NWKHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZSh0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRQYXJhbWV0ZXIoaXNCdXR0b246IGJvb2xlYW4gPSBmYWxzZSwgdmFsdWU6IHN0cmluZyA9ICcnKTogRm9ybUdyb3VwIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gaXNCdXR0b25cclxuICAgICAgICAgICAgPyBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc1JlYWRPbmx5TW9kZSB8fCBbJyRVbnN1YnNjcmliZUFjY291bnQnXS5pbmNsdWRlcyh2YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0UGFyYW1IZWFkZXIoKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRQYXJhbUhlYWRlcih2YWx1ZTogc3RyaW5nID0gJycpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5pbml0UGFyYW1ldGVyKGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRQYXJhbUJvZHkoKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5jb250cm9scyBhcyBGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkUGFyYW1Cb2R5KHZhbHVlOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmluaXRQYXJhbWV0ZXIoZmFsc2UsIHZhbHVlKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRCdXR0b24oKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJhbUJ1dHRvbihpbmRleDogbnVtYmVyKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgICAgIHJldHVybiAoZm9ybVtpbmRleF0uZ2V0KCduYW1lJykgYXMgRm9ybUFycmF5KS5jb250cm9scyBhcyBGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkUGFyYW1CdXR0b24oKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5pdFBhcmFtZXRlcih0cnVlKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAndGV4dCdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc01lZGlhKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICdtZWRpYSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc1RlbXBsYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICd0ZW1wbGF0ZSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc0NhdGFsb2d1ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAnY2F0YWxvZ3VlJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzVXRpbGl0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAndXRpbGl0eSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROZXh0QWNjb3VudEJhdGNoKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0hhdmVOZXh0QWNjb3VudE9wdGlvbikgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnBhZ2VOb0FjY291bnRPcHRpb24gKz0gMTtcclxuICAgICAgICB0aGlzLmdldEFjY291bnRPcHRpb25TZXJ2aWNlKCcnLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWNjb3VudFNlbGVjdGVkRGlzcGxheShcclxuICAgICAgICBhdHRyaWJ1dGUxOiBXaGF0c0FwcEFjY291bnREdG8sXHJcbiAgICAgICAgYXR0cmlidXRlMjogV2hhdHNBcHBBY2NvdW50RHRvXHJcbiAgICApOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGUxICYmIGF0dHJpYnV0ZTIgJiYgYXR0cmlidXRlMS5pZCA9PSBhdHRyaWJ1dGUyLmlkXHJcbiAgICAgICAgICAgID8gYCR7YXR0cmlidXRlMS5uYW1lfSAoJHthdHRyaWJ1dGUxLmFjY291bnROb30pYFxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROZXh0VGVtcGxhdGVCYXRjaCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNIYXZlTmV4dFRlbXBsYXRlT3B0aW9uKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMucGFnZU5vVGVtcGxhdGVPcHRpb24gKz0gMTtcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlT3B0aW9uU2VydmljZShudWxsLCAnJywgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRlbXBsYXRlU2VsZWN0ZWREaXNwbGF5KFxyXG4gICAgICAgIGF0dHJpYnV0ZTE6IFRlbXBsYXRlV0FNb2RlbCxcclxuICAgICAgICBhdHRyaWJ1dGUyOiBUZW1wbGF0ZVdBTW9kZWxcclxuICAgICk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTEgJiYgYXR0cmlidXRlMiAmJiBhdHRyaWJ1dGUxLm5hbWUgPT0gYXR0cmlidXRlMi5uYW1lXHJcbiAgICAgICAgICAgID8gYCR7YXR0cmlidXRlMS5uYW1lfWBcclxuICAgICAgICAgICAgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlsZTogRmlsZUxpc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzO1xyXG4gICAgICAgIGNvbnN0IGFjY2VwdCA9IHRoaXMuZXh0RmlsZUFjY2VwdGVkLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgbGV0IG1hdGNoVHlwZSA9IGFjY2VwdFswXTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGUubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4dEZpbGVBY2NlcHRlZCA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIG1hdGNoVHlwZSA9IGFjY2VwdFsxXTtcclxuXHJcbiAgICAgICAgaWYgKCFmaWxlWzBdLnR5cGUuaW5jbHVkZXMobWF0Y2hUeXBlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignU29ycnksIHRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlzIG5vdMKgYWxsb3dlZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsZVswXS5zaXplID4gMTAwMDAwMDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VwbG9hZCBtZWRpYSBmYWlsZWQsIG1heCBzaXplIDEwbWInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnNldFZhbHVlKGZpbGVbMF0pO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZVR5cGUnKT8uc2V0VmFsdWUoJ2ltYWdlJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy5zZXRWYWx1ZShmaWxlWzBdLm5hbWUpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZVswXS50eXBlLmluZGV4T2YoJ3ZpZGVvJykgPiAtMSkgdGhpcy5nZXRDb250cm9sKCdmaWxlVHlwZScpPy5zZXRWYWx1ZSgndmlkZW8nKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGxvYWRNZWRpYVNlcnZpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZE1lZGlhU2VydmljZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmlsZScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaW46ICdmb3JtRGF0YScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QocGFyYW1ldGVyTGlzdCwgJy9tZXNzYWdlL21lZGlhJywgJ1BPU1QnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBBcHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnNldFZhbHVlKHJlc3AuZGF0YS50YXJnZXRVUkwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnJlc2V0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVXBsb2FkIG1lZGlhIHN1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uUGFyYW1zQ29udHJvbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmZvcm0uZ2V0KCdidXR0b25QYXJhbXMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1VzaW5nRXhjZWxCdWxrKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRyb2woJ2lzVXBsb2FkJyk/LnZhbHVlIHx8IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVXQU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dQYXJhbWV0ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZW1wbGF0ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBidXR0b25QYXJhbXNBcnJheSA9IHRoaXMuZm9ybS5nZXQoJ2J1dHRvblBhcmFtcycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICBidXR0b25QYXJhbXNBcnJheS5jbGVhcigpO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGUgJiYgdGVtcGxhdGUuYnV0dG9ucyAmJiB0ZW1wbGF0ZS5idXR0b25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcXVpY2tSZXBseUJ1dHRvbnMgPSB0ZW1wbGF0ZS5idXR0b25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChidG46IGFueSkgPT4gYnRuLnR5cGUgPT09ICdRVUlDS19SRVBMWSdcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHF1aWNrUmVwbHlCdXR0b25zLmZvckVhY2goKGJ0bjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBidXR0b25QYXJhbXNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbmV3IEZvcm1Db250cm9sKGJ0bi50ZXh0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU2KV0pLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNIYXZlVGVtcGxhdGVQYXJhbSA9XHJcbiAgICAgICAgICAgICh0ZW1wbGF0ZS5oZWFkZXI/LmV4YW1wbGVzPy5sZW5ndGggPz8gMCkgPiAwIHx8XHJcbiAgICAgICAgICAgICh0ZW1wbGF0ZS5ib2R5Py5leGFtcGxlcz8ubGVuZ3RoID8/IDApID4gMCB8fFxyXG4gICAgICAgICAgICAodGVtcGxhdGUuYnV0dG9ucz8ubGVuZ3RoID8/IDApID4gMDtcclxuXHJcbiAgICAgICAgaWYgKFsnaW1hZ2UnLCAndmlkZW8nLCAnZG9jdW1lbnQnXS5pbmNsdWRlcyh0ZW1wbGF0ZT8uaGVhZGVyPy50eXBlPy50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnNldFZhbHVlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybS5maWxlTmFtZSA/P1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0udGFyZ2V0VVJMID8/XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaGVhZGVyLnVybFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0udGFyZ2V0VVJMID8/IHRlbXBsYXRlLmhlYWRlci51cmxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZVR5cGVDaGFuZ2UodGVtcGxhdGU/LmhlYWRlcj8udHlwZT8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAodGVtcGxhdGUuaGVhZGVyLmV4YW1wbGVzPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICAgICAgKHRlbXBsYXRlLmJvZHkuZXhhbXBsZXM/Lmxlbmd0aCA/PyAwKSA+IDBcclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgICAgICh0ZW1wbGF0ZS5idXR0b25zPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUhlYWRlcicpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSkuY29udHJvbHMgPSBbXTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybVN0b3JhZ2UgPSB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGUuY2F0ZWdvcnkgPT09ICdBVVRIRU5USUNBVElPTicpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgIGZvcm1TdG9yYWdlPy5vdHBWYWx1ZSA/P1xyXG4gICAgICAgICAgICAgICAgICAgIFsuLi4oZm9ybVN0b3JhZ2U/LnRlbXBsYXRlPy5ib2R5Py5leGFtcGxlcyA/PyBbXSldPy5wb3AoKSA/P1xyXG4gICAgICAgICAgICAgICAgICAgICcnXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGVtcGxhdGUuaGVhZGVyLmV4YW1wbGVzPy5mb3JFYWNoKChlYWNoLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFBhcmFtSGVhZGVyKFxyXG4gICAgICAgICAgICAgICAgZm9ybVN0b3JhZ2U/LnBhcmFtSGVhZGVyPy5baW5kZXhdPy5uYW1lID8/IGZvcm1TdG9yYWdlPy5wYXJhbUhlYWRlcj8uW2luZGV4XSA/PyAnJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0ZW1wbGF0ZS5ib2R5LmV4YW1wbGVzPy5mb3JFYWNoKChlYWNoLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1WYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICBmb3JtU3RvcmFnZT8ucGFyYW1Cb2R5Py5baW5kZXhdPy5uYW1lID8/IGZvcm1TdG9yYWdlPy5wYXJhbUJvZHk/LltpbmRleF0gPz8gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoWyckVW5zdWJzY3JpYmVBY2NvdW50J10uaW5jbHVkZXMoZWFjaCkpIHBhcmFtVmFsdWUgPSBlYWNoO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRQYXJhbUJvZHkocGFyYW1WYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRlbXBsYXRlLmJ1dHRvbnM/LmZvckVhY2goKGVhY2gsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUGFyYW1CdXR0b24oKTtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b247XHJcblxyXG4gICAgICAgICAgICBpZiAoZWFjaC5leGFtcGxlcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZWFjaC5leGFtcGxlcy5mb3JFYWNoKChfLCBwYXJhbUluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWFjaC50eXBlID09PSAnRkxPVycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybSA9IHRoaXMuaW5pdFBhcmFtZXRlcihmYWxzZSwgZWFjaC5mbG93X2lkKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1BhcmFtZXRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gPSB0aGlzLmluaXRQYXJhbWV0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TdG9yYWdlPy5wYXJhbUJ1dHRvbj8uW2luZGV4XT8ubmFtZT8uW3BhcmFtSW5kZXhdPy5uYW1lID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVN0b3JhZ2U/LnBhcmFtQnV0dG9uPy5baW5kZXhdPy5uYW1lPy5bcGFyYW1JbmRleF0gPz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtU3RvcmFnZT8ucGFyYW1CdXR0b24/LltpbmRleF0/LltwYXJhbUluZGV4XSA/P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uW2J1dHRvbi5sZW5ndGggLSAxXS5nZXQoJ25hbWUnKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb250cm9sID0gYnV0dG9uW2J1dHRvbi5sZW5ndGggLSAxXT8uZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICAgICAgICBsYXN0Q29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICBsYXN0Q29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZU1lZGlhVHlwZShfbWVkaWFUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoX21lZGlhVHlwZSA9PT0gRW51bURhdGEuTUVESUFfVFlQRV9MT0NBVElPTikgdGhpcy5pbml0TWFwcztcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtUmVzZXQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZUNoYW5nZShfbWVkaWFUeXBlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsZVR5cGVDaGFuZ2UodHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAnaW1hZ2UvKic7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBFbnVtRGF0YS5NRURJQV9UWVBFX1ZJREVPLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAndmlkZW8vKic7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBFbnVtRGF0YS5NRURJQV9UWVBFX0RPQ1VNRU5ULnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAnYXBwbGljYXRpb24vcGRmJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNlYXJjaChzZWFyY2hWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYWdlTm9UZW1wbGF0ZU9wdGlvbiA9IDE7XHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZU9wdGlvblNlcnZpY2UobnVsbCwgc2VhcmNoVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVTZWFyY2hBY2NvdW50KHNlYXJjaFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2VOb0FjY291bnRPcHRpb24gPSAxO1xyXG4gICAgICAgIHRoaXMuZ2V0QWNjb3VudE9wdGlvblNlcnZpY2Uoc2VhcmNoVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdE1hcHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXBzQVBJTG9hZGVyLmxvYWQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2VvQ29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFNlYXJjaFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZS5hZGRMaXN0ZW5lcigncGxhY2VfY2hhbmdlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCA9IGF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBsYWNlLmdlb21ldHJ5KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sYXRpdHVkZSA9IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uLmxhdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbi5sbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnNldFZhbHVlKHRoaXMubWFwcy5sYXRpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDdXJyZW50TG9jYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0Q29udHJvbCgnbG9uZ2l0dWRlJyk/LnZhbHVlICYmICF0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbGF0aXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xvbmdpdHVkZScpPy5zZXRWYWx1ZSh0aGlzLm1hcHMubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXJrZXJEcmFnRW5kKGV2ZW50OiBnb29nbGUubWFwcy5Nb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmxhdExuZykge1xyXG4gICAgICAgICAgICB0aGlzLm1hcHMubGF0aXR1ZGUgPSBldmVudC5sYXRMbmcubGF0KCk7XHJcbiAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBldmVudC5sYXRMbmcubG5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbGF0aXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEb3dubG9hZENTVihpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzVXBsb2FkJyk/LnNldFZhbHVlKGlzQ2hlY2tlZCk7XHJcblxyXG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcclxuICAgICAgICAgICAgKHRoaXMuZ2V0Q29udHJvbCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5yZXNldCgpO1xyXG4gICAgICAgICAgICAodGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICAgICAgKHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJykgYXMgRm9ybUFycmF5KS5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1Cb2R5Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZSh0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQ2hhbmdlVGVtcGxhdGUodXNlRXhpc3Rpbmc6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzRG93bmxvYWRWYXJpYWJsZVhMUycpPy5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy52YXJpYWJsZXMuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhYmxlRG93bmxvYWRYTFMoZmFsc2UpO1xyXG5cclxuICAgICAgICBpZiAodXNlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICAvL3RoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWx1ZSgnSGFsbyB7ezF9fSwgaW5pIGFkYWxhaCBrb2RlIHZlcmlmaWthc2kga2FtdToge3syfX0nKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KDEwMjQpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUNoYW5nZUZyb20odmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgaXNVc2VFeGlzdGluZ1RlbXBsYXRlIH0gPSB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICAgICAgaWYgKCFpc1VzZUV4aXN0aW5nVGVtcGxhdGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlT3B0aW9uU2VydmljZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhcmlhYmxlcygpOiBGb3JtQXJyYXkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRyb2woJ3ZhcmlhYmxlcycpIGFzIEZvcm1BcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRWYXJpYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIHBhcmFtTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZUdyb3VwKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGV4dENvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woJ3RleHQnKTtcclxuXHJcbiAgICAgICAgaWYgKHRleHRDb250cm9sKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCb2R5ID0gdGV4dENvbnRyb2wudmFsdWUgfHwgJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlcXVlbmNlID0gYHt7JHt0aGlzLnZhcmlhYmxlcy5jb250cm9scy5sZW5ndGh9fX1gO1xyXG4gICAgICAgICAgICB0ZXh0Q29udHJvbC5zZXRWYWx1ZShgJHtjdXJyZW50Qm9keX0gJHtuZXdTZXF1ZW5jZX1gLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVZhcmlhYmxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhcmlhYmxlcy5yZW1vdmVBdChpbmRleCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlcy5jb250cm9scy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd1c2VYbHN4Jyk/LnNldFZhbHVlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHRDb250cm9sID0gdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRTZXF1ZW5jZSA9IGluZGV4ICsgMTtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRCb2R5ID0gdGV4dENvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZW1vdmVSZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxzKlxcXFx7XFxcXHske3RhcmdldFNlcXVlbmNlfVxcXFx9XFxcXH1gLCAnZycpO1xyXG4gICAgICAgICAgICBjdXJyZW50Qm9keSA9IGN1cnJlbnRCb2R5LnJlcGxhY2UocmVtb3ZlUmVnZXgsICcnKTtcclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnRCb2R5ID0gY3VycmVudEJvZHkucmVwbGFjZSgvXFx7XFx7KFxcZCspXFx9XFx9L2csIChtYXRjaDogbnVtYmVyLCBudW1TdHI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQobnVtU3RyLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID4gdGFyZ2V0U2VxdWVuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHt7JHtudW0gLSAxfX19YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0ZXh0Q29udHJvbC5zZXRWYWx1ZShjdXJyZW50Qm9keS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVWYXJpYWJsZURvd25sb2FkWExTKGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc0FycmF5ID0gdGhpcy52YXJpYWJsZXM7XHJcbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICB2YXJpYWJsZXNBcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLmdldCgncGFyYW1OYW1lJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5nZXQoJ3BhcmFtTmFtZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhcmlhYmxlc0FycmF5LmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0KCdwYXJhbU5hbWUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0KCdwYXJhbU5hbWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChlYWNoKSA9PiBlYWNoLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
767
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1pbmZvcm1hdGlvbi13YS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWRsZmUvY2FtcGFpZ24tbWFuYWdlbWVudC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL2NhbXBhaWduLW1hbmFnZW1lbnQvbW9kdWxlcy9uZXctY2FtcGFpZ24vY29tcG9uZW50cy9nZW5lcmFsLWluZm9ybWF0aW9uLXdhL2dlbmVyYWwtaW5mb3JtYXRpb24td2EuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFM0MsT0FBTyxFQUNILDBDQUEwQyxFQUMxQyxvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3ZCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWV4RSxJQUFh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QUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQywwQ0FBRSxLQUFLLEdBQUc7WUFDbEMsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxLQUFLLEdBQUc7U0FDcEM7UUFFRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNwQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUks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c0JBQXNCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0osQ0FBQTs7WUEvMEJ1QixNQUFNO1lBQ0MsYUFBYTtZQUNULHdCQUF3QjtZQUNuQyxhQUFhO1lBQ1QsVUFBVTs7QUFsRGxDO0lBREMsTUFBTSxFQUFFO21GQUNvRDtBQTRCcEQ7SUFBUixLQUFLLEVBQUU7cUVBQWlDO0FBR3pDO0lBREMsS0FBSyxFQUFFO2tFQVNQO0FBRXVCO0lBQXZCLFNBQVMsQ0FBQyxXQUFXLENBQUM7bUVBQTJCO0FBM0N6Qyw2QkFBNkI7SUFMekMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxrczJDQUFzRDs7S0FFekQsQ0FBQztHQUNXLDZCQUE2QixDQSszQnpDO1NBLzNCWSw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXBzQVBJTG9hZGVyIH0gZnJvbSAnQGFnbS9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE5nWm9uZSxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEFic3RyYWN0Q29udHJvbCxcclxuICAgIEZvcm1BcnJheSxcclxuICAgIEZvcm1CdWlsZGVyLFxyXG4gICAgRm9ybUNvbnRyb2wsXHJcbiAgICBGb3JtR3JvdXAsXHJcbiAgICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIEdlbmVyYWxJbmZvcm1hdGlvbldBTWVzc2FnZVZhbGlkYXRpb25Db25zdCxcclxuICAgIE1lZGlhVHlwZU9wdGlvbkNvbnN0LFxyXG4gICAgTXNnVHlwZVdBT3B0aW9uQ29uc3QsXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9jb25zdCc7XHJcbmltcG9ydCB7IFByb2R1Y3RDYXRlZ29yeUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2VudW1zJztcclxuaW1wb3J0IHsgQmFzZU9wdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1hZGFwdGVyLXNlcnZpY2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBwUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1kdG8vcmVzcG9uc2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpQWRhcHRlclNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IGdlbmVyYXRlRW51bU9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlV0FNb2RlbCwgV2hhdHNBcHBBY2NvdW50RHRvIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW51bURhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL2VudW1zJztcclxuaW1wb3J0IHsgVmFsaWRhdG9ycyBhcyBDdXN0b21WYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdmFsaWRhdG9ycyc7XHJcblxyXG5pbnRlcmZhY2UgSU1hcHMge1xyXG4gICAgem9vbTogbnVtYmVyO1xyXG4gICAgbGF0aXR1ZGU6IG51bWJlciB8IG51bGw7XHJcbiAgICBsb25naXR1ZGU6IG51bWJlciB8IG51bGw7XHJcbiAgICBpc0RyYWdnYWJsZTogYm9vbGVhbjtcclxuICAgIGlzRG91YmxlQ2xpY2tab29tOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWdlbmVyYWwtaW5mb3JtYXRpb24td2EnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYWwtaW5mb3JtYXRpb24td2EuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJhbC1pbmZvcm1hdGlvbi13YS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJhbEluZm9ybWF0aW9uV0FDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB1cGRhdGVHZW5lcmFsSW5mb3JtYXRpb25Gb3JtOiBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPjtcclxuXHJcbiAgICBwdWJsaWMgZm9ybSE6IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyBtc2dUeXBlV0FPcHRpb246IGFueVtdID0gW107XHJcbiAgICBwdWJsaWMgbWVkaWFUeXBlT3B0aW9uOiBhbnlbXSA9IFtdO1xyXG4gICAgcHVibGljIGNhdGVnb3J5T3B0aW9uITogQmFzZU9wdGlvbk1vZGVsW107XHJcbiAgICBwdWJsaWMgYWNjb3VudE9wdGlvbjogV2hhdHNBcHBBY2NvdW50RHRvW10gPSBbXTtcclxuICAgIHB1YmxpYyBpc0hhdmVOZXh0QWNjb3VudE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nQWNjb3VudE9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHRlbXBsYXRlT3B0aW9uOiBUZW1wbGF0ZVdBTW9kZWxbXSA9IFtdO1xyXG4gICAgcHVibGljIGlzSGF2ZU5leHRUZW1wbGF0ZU9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nVGVtcGxhdGVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0hhdmVUZW1wbGF0ZVBhcmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTaG93UGFyYW1ldGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmFsaWRhdGlvbk1lc3NhZ2VzOiBhbnk7XHJcbiAgICBwdWJsaWMgZXh0RmlsZUFjY2VwdGVkOiBzdHJpbmcgPSAnaW1hZ2UvKic7XHJcbiAgICBwdWJsaWMgbWFwcyE6IElNYXBzO1xyXG5cclxuICAgIHByaXZhdGUgcGFnZU5vQWNjb3VudE9wdGlvbjogbnVtYmVyID0gMTtcclxuICAgIHByaXZhdGUgcGFnZU5vVGVtcGxhdGVPcHRpb246IG51bWJlciA9IDE7XHJcbiAgICBwcml2YXRlIHN1YnNjcmliZXJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBnZW9Db2RlcjogYW55O1xyXG5cclxuICAgIHB1YmxpYyB0ZW1wbGF0ZXMgPSBbXHJcbiAgICAgICAgeyBsYWJlbDogJ0NyZWF0ZSBOZXcnLCB2YWx1ZTogZmFsc2UgfSxcclxuICAgICAgICB7IGxhYmVsOiAnVXNlIGV4aXN0aW5nIHRlbXBsYXRlJywgdmFsdWU6IHRydWUgfSxcclxuICAgIF07XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZE9ubHlNb2RlITogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGlzVG91Y2hlZEZvcm0oc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZUdlbmVyYWxJbmZvcm1hdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR2VuZXJhbEluZm9ybWF0aW9uRm9ybS5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWFwU2VhcmNoJykgbWFwU2VhcmNoUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgICBwdWJsaWMgaXNDaGVja1V0aWxpdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgbWFwc0FQSUxvYWRlcjogTWFwc0FQSUxvYWRlcixcclxuICAgICAgICBwcml2YXRlIGFwaUFkYXB0ZXJTZXJ2aWNlOiBBcGlBZGFwdGVyU2VydmljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYWxJbmZvcm1hdGlvbkZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tc2dUeXBlV0FPcHRpb24gPSBNc2dUeXBlV0FPcHRpb25Db25zdDtcclxuICAgICAgICB0aGlzLm1lZGlhVHlwZU9wdGlvbiA9IE1lZGlhVHlwZU9wdGlvbkNvbnN0O1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlPcHRpb24gPSBnZW5lcmF0ZUVudW1PcHRpb24oUHJvZHVjdENhdGVnb3J5RW51bSk7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBHZW5lcmFsSW5mb3JtYXRpb25XQU1lc3NhZ2VWYWxpZGF0aW9uQ29uc3Q7XHJcbiAgICAgICAgdGhpcy5tYXBzID0ge1xyXG4gICAgICAgICAgICB6b29tOiAxNSxcclxuICAgICAgICAgICAgbGF0aXR1ZGU6IG51bGwsXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbnVsbCxcclxuICAgICAgICAgICAgaXNEcmFnZ2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGlzRG91YmxlQ2xpY2tab29tOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICB0aGlzLmluaXREaXNhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5pbml0RWRpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFZhbGlkYXRpb24oKTtcclxuICAgICAgICB0aGlzLmdldEFjY291bnRPcHRpb25TZXJ2aWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtPy5tZWRpdW0gPT09ICdXQSdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybT8uZnJvbT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLyogdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTsgKi9cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0Q2FtcGFpZ25TdG9yYWdlKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgY2FtcGFpZ25EYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJyk7XHJcbiAgICAgICAgcmV0dXJuIGNhbXBhaWduRGF0YSA/IEpTT04ucGFyc2UoY2FtcGFpZ25EYXRhKSA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIGNoYW5uZWw6IG5ldyBGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgbWVkaWE6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgZnJvbTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICB0ZXh0OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIHRhcmdldFVSTDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBmaWxlVHlwZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBmaWxlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBwYXJhbUhlYWRlcjogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgIHBhcmFtQm9keTogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgIHBhcmFtQnV0dG9uOiBuZXcgRm9ybUFycmF5KFtdLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgb3RwVmFsdWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIGlzVXBsb2FkOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBmaWxlSWQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIGNhdGVnb3J5OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIHByb2R1Y3Q6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgY2F0YWxvZ3VlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGJvZHk6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgaXNVc2VFeGlzdGluZ1RlbXBsYXRlOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBpc05lZWRTYXZlOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICB0dGw6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgaXNEb3dubG9hZFZhcmlhYmxlWExTOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgICAgICB1c2VYbHN4OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBidXR0b25QYXJhbXM6IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmFsSW5mb3JtYXRpb25Gb3JtLmVtaXQodGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RGlzYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkT25seU1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRFZGl0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhID0gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U7XHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHN0b3JhZ2VEYXRhPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm07XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhc3RvcmFnZURhdGEgfHxcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3RvcmFnZURhdGEpLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgICBmb3JtVmFsdWVzPy5tZWRpdW0gIT09ICdXQSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8uY2hhbm5lbCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdtZWRpYScpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy5tZWRpYSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LmZyb20pO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy50ZXh0KTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy50YXJnZXRVUkwpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZU5hbWUnKT8uc2V0VmFsdWUoXHJcbiAgICAgICAgICAgIGZvcm1WYWx1ZXM/LmZpbGVOYW1lID8/IHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnZhbHVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LnRlbXBsYXRlKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzVXBsb2FkJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LmlzVXBsb2FkKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVJZCcpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy5maWxlSWQpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8ub3RwVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnaXNVc2VFeGlzdGluZ1RlbXBsYXRlJyk/LnNldFZhbHVlKCEhZm9ybVZhbHVlcz8udGVtcGxhdGVOYW1lKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzTmVlZFNhdmUnKT8uc2V0VmFsdWUoISFmb3JtVmFsdWVzPy5pc05lZWRTYXZlKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3R0bCcpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy50dGwpO1xyXG4gICAgICAgIGNvbnN0IHNhdmVkVmFyaWFibGVzID0gZm9ybVZhbHVlcz8udmFyaWFibGVzO1xyXG4gICAgICAgIGlmIChzYXZlZFZhcmlhYmxlcyAmJiBBcnJheS5pc0FycmF5KHNhdmVkVmFyaWFibGVzKSAmJiBzYXZlZFZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLmNsZWFyKCk7XHJcblxyXG4gICAgICAgICAgICBzYXZlZFZhcmlhYmxlcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogaXRlbS5wYXJhbU5hbWUgfHwgJycsIGRpc2FibGVkOiB0aGlzLmlzUmVhZE9ubHlNb2RlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0hhdmVUZW1wbGF0ZVBhcmFtID0gdGhpcy5nZXRDb250cm9sKCdpc1VwbG9hZCcpPy52YWx1ZTtcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlT3B0aW9uU2VydmljZShudWxsLCB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnZhbHVlPy5uYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRWYWxpZGF0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtKSByZXR1cm47XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZm9ybS5jb250cm9scykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1trZXldLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2tleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNUZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNNZWRpYSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ21lZGlhJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbWVkaWEnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1Cb2R5Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1IZWFkZXInKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc0NhdGFsb2d1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRlZ29yeScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NhdGFsb2d1ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3Byb2R1Y3QnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdib2R5Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2F0ZWdvcnknKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NhdGFsb2d1ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncHJvZHVjdCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnYm9keScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzVXRpbGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnNldFZhbGlkYXRvcnMoW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMjQpLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0dGwnKT8uc2V0VmFsaWRhdG9ycyhbXHJcbiAgICAgICAgICAgICAgICBDdXN0b21WYWxpZGF0b3JzLm1pbigzMCwgJ01pbmltdW0gVFRMIDMwJyksXHJcbiAgICAgICAgICAgICAgICBDdXN0b21WYWxpZGF0b3JzLm1heCg0MzIwMCwgJ01heGltdW0gVFRMIDQzMjAwJyksXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3R0bCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndmFyaWFibGVzJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb3JtUmVzZXQoX2lzTWVkaWFUeXBlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIV9pc01lZGlhVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ21lZGlhJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlVHlwZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbGF0aXR1ZGUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xvbmdpdHVkZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NhdGVnb3J5Jyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwcm9kdWN0Jyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRhbG9ndWUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2JvZHknKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd2YXJpYWJsZXMnKT8ucmVzZXQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1IZWFkZXIgPSB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgICAgICBpZiAocGFyYW1IZWFkZXIpIHtcclxuICAgICAgICAgICAgcGFyYW1IZWFkZXIuY2xlYXIoKTtcclxuICAgICAgICAgICAgcGFyYW1IZWFkZXIucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtQm9keSA9IHRoaXMuZ2V0Q29udHJvbCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgICAgICBpZiAocGFyYW1Cb2R5KSB7XHJcbiAgICAgICAgICAgIHBhcmFtQm9keS5jbGVhcigpO1xyXG4gICAgICAgICAgICBwYXJhbUJvZHkucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtQnV0dG9uID0gdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSB8IG51bGw7XHJcbiAgICAgICAgaWYgKHBhcmFtQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHBhcmFtQnV0dG9uLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHBhcmFtQnV0dG9uLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluaXRWYWxpZGF0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb250cm9sKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtID8gdGhpcy5mb3JtLmdldChjb250cm9sTmFtZSkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFBhcmFtKF9uYW1lOiBzdHJpbmcsIF92YWx1ZTogYW55LCBfdHlwZTogc3RyaW5nKTogUGFyYW1ldGVyIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiBfbmFtZSxcclxuICAgICAgICAgICAgdmFsdWU6IF92YWx1ZSxcclxuICAgICAgICAgICAgaW46ICdxdWVyeScsXHJcbiAgICAgICAgICAgIHR5cGU6IF90eXBlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRBY2NvdW50T3B0aW9uU2VydmljZShmaWx0ZXI6IHN0cmluZyA9ICcnLCBpc0luZmluaXRlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0FjY291bnRPcHRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncGFnZU5vJywgdGhpcy5wYWdlTm9BY2NvdW50T3B0aW9uLCAnbnVtYmVyJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdyb3dQZXJQYWdlJywgMjAsICdudW1iZXInKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3BsYXRmb3JtJywgJ1dBJywgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnc3RhdHVzJywgJ0FQUFJPVkVEJywgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnZmlsdGVyJywgZmlsdGVyLCAnc3RyaW5nJyksXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KHBhcmFtZXRlckxpc3QsICcvYWRtaW4vYWNjb3VudCcsICdHRVQnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBBcHBSZXNwb25zZTxXaGF0c0FwcEFjY291bnREdG9bXT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzcC5kYXRhKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2NvdW50T3B0aW9uID0gaXNJbmZpbml0ZSA/IFsuLi50aGlzLmFjY291bnRPcHRpb24sIC4uLnJlc3AuZGF0YV0gOiByZXNwLmRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGF2ZU5leHRBY2NvdW50T3B0aW9uID0gcmVzcC5oYXZlTmV4dCA/PyB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdBY2NvdW50T3B0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRlbXBsYXRlT3B0aW9uU2VydmljZShcclxuICAgICAgICBldmVudDogc3RyaW5nID0gbnVsbCxcclxuICAgICAgICBmaWx0ZXI6IHN0cmluZyA9ICcnLFxyXG4gICAgICAgIGlzSW5maW5pdGU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdUZW1wbGF0ZU9wdGlvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckxpc3Q6IEFycmF5PFBhcmFtZXRlcj4gPSBbXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdwYWdlTm8nLCB0aGlzLnBhZ2VOb1RlbXBsYXRlT3B0aW9uLCAnbnVtYmVyJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdyb3dQZXJQYWdlJywgMjAsICdudW1iZXInKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3BsYXRmb3JtJywgJ1dBJywgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgndGVtcGxhdGVUeXBlJywgJ2FsbCcsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ2ZpbHRlcicsIGZpbHRlciwgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnc3RhdHVzJywgJ0FQUFJPVkVEJywgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnY2xpZW50SWQnLCB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udmFsdWU/LmNsaWVudElkID8/ICcnLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCd3YWJhSWQnLCB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udmFsdWU/LndhYmFJZCA/PyAnJywgJ3N0cmluZycpLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHlNb2RlKSBwYXJhbWV0ZXJMaXN0LnB1c2godGhpcy5pbml0UGFyYW0oJ3N1bW1hcnknLCB0cnVlLCAnc3RyaW5nJykpO1xyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IHRoaXMuZm9ybS52YWx1ZT8uY2hhbm5lbDtcclxuXHJcbiAgICAgICAgaWYgKG1lc3NhZ2VUeXBlID09PSAndXRpbGl0eScpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyTGlzdC5wdXNoKHRoaXMuaW5pdFBhcmFtKCdpc0RpcmVjdFNlbmQnLCB0cnVlLCAnc3RyaW5nJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KHBhcmFtZXRlckxpc3QsICcvbWVzc2FnZS90ZW1wbGF0ZScsICdHRVQnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBBcHBSZXNwb25zZTxUZW1wbGF0ZVdBTW9kZWxbXT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy50ZW1wbGF0ZU9wdGlvbiB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSByZXNwLmRhdGEgfHwgW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlT3B0aW9uID0gaXNJbmZpbml0ZSA/IFsuLi5jdXJyZW50T3B0aW9ucywgLi4ubmV3RGF0YV0gOiBuZXdEYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIYXZlTmV4dFRlbXBsYXRlT3B0aW9uID0gcmVzcC5oYXZlTmV4dCA/PyB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdUZW1wbGF0ZU9wdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZU9wdGlvbj8uZmluZChcclxuICAgICAgICAgICAgICAgICAgICAodCkgPT4gdC5JRCA9PT0gdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy52YWx1ZT8uSURcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5wYXRjaFZhbHVlKHRlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8udmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURvd25sb2FkQ1NWKHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZSh0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRQYXJhbWV0ZXIoaXNCdXR0b246IGJvb2xlYW4gPSBmYWxzZSwgdmFsdWU6IHN0cmluZyA9ICcnKTogRm9ybUdyb3VwIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gaXNCdXR0b25cclxuICAgICAgICAgICAgPyBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc1JlYWRPbmx5TW9kZSB8fCBbJyRVbnN1YnNjcmliZUFjY291bnQnXS5pbmNsdWRlcyh2YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0UGFyYW1IZWFkZXIoKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRQYXJhbUhlYWRlcih2YWx1ZTogc3RyaW5nID0gJycpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5pbml0UGFyYW1ldGVyKGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRQYXJhbUJvZHkoKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5jb250cm9scyBhcyBGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkUGFyYW1Cb2R5KHZhbHVlOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmluaXRQYXJhbWV0ZXIoZmFsc2UsIHZhbHVlKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRCdXR0b24oKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJhbUJ1dHRvbihpbmRleDogbnVtYmVyKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgICAgIHJldHVybiAoZm9ybVtpbmRleF0uZ2V0KCduYW1lJykgYXMgRm9ybUFycmF5KS5jb250cm9scyBhcyBGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkUGFyYW1CdXR0b24oKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5pdFBhcmFtZXRlcih0cnVlKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAndGV4dCdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc01lZGlhKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICdtZWRpYSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc1RlbXBsYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICd0ZW1wbGF0ZSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc0NhdGFsb2d1ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAnY2F0YWxvZ3VlJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzVXRpbGl0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAndXRpbGl0eSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROZXh0QWNjb3VudEJhdGNoKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0hhdmVOZXh0QWNjb3VudE9wdGlvbikgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnBhZ2VOb0FjY291bnRPcHRpb24gKz0gMTtcclxuICAgICAgICB0aGlzLmdldEFjY291bnRPcHRpb25TZXJ2aWNlKCcnLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWNjb3VudFNlbGVjdGVkRGlzcGxheShcclxuICAgICAgICBhdHRyaWJ1dGUxOiBXaGF0c0FwcEFjY291bnREdG8sXHJcbiAgICAgICAgYXR0cmlidXRlMjogV2hhdHNBcHBBY2NvdW50RHRvXHJcbiAgICApOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGUxICYmIGF0dHJpYnV0ZTIgJiYgYXR0cmlidXRlMS5pZCA9PSBhdHRyaWJ1dGUyLmlkXHJcbiAgICAgICAgICAgID8gYCR7YXR0cmlidXRlMS5uYW1lfSAoJHthdHRyaWJ1dGUxLmFjY291bnROb30pYFxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROZXh0VGVtcGxhdGVCYXRjaCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNIYXZlTmV4dFRlbXBsYXRlT3B0aW9uKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMucGFnZU5vVGVtcGxhdGVPcHRpb24gKz0gMTtcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlT3B0aW9uU2VydmljZShudWxsLCAnJywgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRlbXBsYXRlU2VsZWN0ZWREaXNwbGF5KFxyXG4gICAgICAgIGF0dHJpYnV0ZTE6IFRlbXBsYXRlV0FNb2RlbCxcclxuICAgICAgICBhdHRyaWJ1dGUyOiBUZW1wbGF0ZVdBTW9kZWxcclxuICAgICk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTEgJiYgYXR0cmlidXRlMiAmJiBhdHRyaWJ1dGUxLm5hbWUgPT0gYXR0cmlidXRlMi5uYW1lXHJcbiAgICAgICAgICAgID8gYCR7YXR0cmlidXRlMS5uYW1lfWBcclxuICAgICAgICAgICAgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlsZTogRmlsZUxpc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzO1xyXG4gICAgICAgIGNvbnN0IGFjY2VwdCA9IHRoaXMuZXh0RmlsZUFjY2VwdGVkLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgbGV0IG1hdGNoVHlwZSA9IGFjY2VwdFswXTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGUubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4dEZpbGVBY2NlcHRlZCA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIG1hdGNoVHlwZSA9IGFjY2VwdFsxXTtcclxuXHJcbiAgICAgICAgaWYgKCFmaWxlWzBdLnR5cGUuaW5jbHVkZXMobWF0Y2hUeXBlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignU29ycnksIHRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlzIG5vdMKgYWxsb3dlZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsZVswXS5zaXplID4gMTAwMDAwMDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VwbG9hZCBtZWRpYSBmYWlsZWQsIG1heCBzaXplIDEwbWInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnNldFZhbHVlKGZpbGVbMF0pO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZVR5cGUnKT8uc2V0VmFsdWUoJ2ltYWdlJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy5zZXRWYWx1ZShmaWxlWzBdLm5hbWUpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZVswXS50eXBlLmluZGV4T2YoJ3ZpZGVvJykgPiAtMSkgdGhpcy5nZXRDb250cm9sKCdmaWxlVHlwZScpPy5zZXRWYWx1ZSgndmlkZW8nKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGxvYWRNZWRpYVNlcnZpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZE1lZGlhU2VydmljZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmlsZScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaW46ICdmb3JtRGF0YScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QocGFyYW1ldGVyTGlzdCwgJy9tZXNzYWdlL21lZGlhJywgJ1BPU1QnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBBcHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnNldFZhbHVlKHJlc3AuZGF0YS50YXJnZXRVUkwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnJlc2V0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVXBsb2FkIG1lZGlhIHN1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uUGFyYW1zQ29udHJvbHMoKSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ2J1dHRvblBhcmFtcycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICByZXR1cm4gY29udHJvbCA/IGNvbnRyb2wuY29udHJvbHMgOiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNVc2luZ0V4Y2VsQnVsaygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250cm9sKCdpc1VwbG9hZCcpPy52YWx1ZSB8fCBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlV0FNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTaG93UGFyYW1ldGVyID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghdGVtcGxhdGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybVN0b3JhZ2UgPSB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtO1xyXG4gICAgICAgIGNvbnN0IHNhdmVkQnV0dG9uUGFyYW1zID0gZm9ybVN0b3JhZ2U/LmJ1dHRvblBhcmFtcyB8fCBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgYnV0dG9uUGFyYW1zQXJyYXkgPSB0aGlzLmZvcm0uZ2V0KCdidXR0b25QYXJhbXMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgYnV0dG9uUGFyYW1zQXJyYXkuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKHRlbXBsYXRlICYmIHRlbXBsYXRlLmJ1dHRvbnMgJiYgdGVtcGxhdGUuYnV0dG9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1aWNrUmVwbHlCdXR0b25zID0gdGVtcGxhdGUuYnV0dG9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoYnRuOiBhbnkpID0+IGJ0bi50eXBlID09PSAnUVVJQ0tfUkVQTFknXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBxdWlja1JlcGx5QnV0dG9ucy5mb3JFYWNoKChidG46IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdQYXlsb2FkID0gc2F2ZWRCdXR0b25QYXJhbXNbaW5kZXhdPy5wYXlsb2FkIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uUGFyYW1zQXJyYXkucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG5ldyBGb3JtQ29udHJvbChidG4udGV4dCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZXhpc3RpbmdQYXlsb2FkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmlzUmVhZE9ubHlNb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTYpXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNIYXZlVGVtcGxhdGVQYXJhbSA9XHJcbiAgICAgICAgICAgICh0ZW1wbGF0ZS5oZWFkZXI/LmV4YW1wbGVzPy5sZW5ndGggPz8gMCkgPiAwIHx8XHJcbiAgICAgICAgICAgICh0ZW1wbGF0ZS5ib2R5Py5leGFtcGxlcz8ubGVuZ3RoID8/IDApID4gMCB8fFxyXG4gICAgICAgICAgICAodGVtcGxhdGUuYnV0dG9ucz8ubGVuZ3RoID8/IDApID4gMDtcclxuXHJcbiAgICAgICAgaWYgKFsnaW1hZ2UnLCAndmlkZW8nLCAnZG9jdW1lbnQnXS5pbmNsdWRlcyh0ZW1wbGF0ZT8uaGVhZGVyPy50eXBlPy50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnNldFZhbHVlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybS5maWxlTmFtZSA/P1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0udGFyZ2V0VVJMID8/XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaGVhZGVyLnVybFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0udGFyZ2V0VVJMID8/IHRlbXBsYXRlLmhlYWRlci51cmxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZVR5cGVDaGFuZ2UodGVtcGxhdGU/LmhlYWRlcj8udHlwZT8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAodGVtcGxhdGUuaGVhZGVyLmV4YW1wbGVzPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICAgICAgKHRlbXBsYXRlLmJvZHkuZXhhbXBsZXM/Lmxlbmd0aCA/PyAwKSA+IDBcclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgICAgICh0ZW1wbGF0ZS5idXR0b25zPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUhlYWRlcicpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSkuY29udHJvbHMgPSBbXTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICAgICAgaWYgKHRlbXBsYXRlLmNhdGVnb3J5ID09PSAnQVVUSEVOVElDQVRJT04nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8uc2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgICBmb3JtU3RvcmFnZT8ub3RwVmFsdWUgPz9cclxuICAgICAgICAgICAgICAgICAgICBbLi4uKGZvcm1TdG9yYWdlPy50ZW1wbGF0ZT8uYm9keT8uZXhhbXBsZXMgPz8gW10pXT8ucG9wKCkgPz9cclxuICAgICAgICAgICAgICAgICAgICAnJ1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRlbXBsYXRlLmhlYWRlci5leGFtcGxlcz8uZm9yRWFjaCgoZWFjaCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQYXJhbUhlYWRlcihcclxuICAgICAgICAgICAgICAgIGZvcm1TdG9yYWdlPy5wYXJhbUhlYWRlcj8uW2luZGV4XT8ubmFtZSA/PyBmb3JtU3RvcmFnZT8ucGFyYW1IZWFkZXI/LltpbmRleF0gPz8gJydcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGVtcGxhdGUuYm9keS5leGFtcGxlcz8uZm9yRWFjaCgoZWFjaCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHBhcmFtVmFsdWUgPVxyXG4gICAgICAgICAgICAgICAgZm9ybVN0b3JhZ2U/LnBhcmFtQm9keT8uW2luZGV4XT8ubmFtZSA/PyBmb3JtU3RvcmFnZT8ucGFyYW1Cb2R5Py5baW5kZXhdID8/ICcnO1xyXG5cclxuICAgICAgICAgICAgaWYgKFsnJFVuc3Vic2NyaWJlQWNjb3VudCddLmluY2x1ZGVzKGVhY2gpKSBwYXJhbVZhbHVlID0gZWFjaDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYWRkUGFyYW1Cb2R5KHBhcmFtVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0ZW1wbGF0ZS5idXR0b25zPy5mb3JFYWNoKChlYWNoLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFBhcmFtQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVhY2guZXhhbXBsZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGVhY2guZXhhbXBsZXMuZm9yRWFjaCgoXywgcGFyYW1JbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVhY2gudHlwZSA9PT0gJ0ZMT1cnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gPSB0aGlzLmluaXRQYXJhbWV0ZXIoZmFsc2UsIGVhY2guZmxvd19pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dQYXJhbWV0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtID0gdGhpcy5pbml0UGFyYW1ldGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtU3RvcmFnZT8ucGFyYW1CdXR0b24/LltpbmRleF0/Lm5hbWU/LltwYXJhbUluZGV4XT8ubmFtZSA/P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TdG9yYWdlPy5wYXJhbUJ1dHRvbj8uW2luZGV4XT8ubmFtZT8uW3BhcmFtSW5kZXhdID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVN0b3JhZ2U/LnBhcmFtQnV0dG9uPy5baW5kZXhdPy5bcGFyYW1JbmRleF0gPz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbltidXR0b24ubGVuZ3RoIC0gMV0uZ2V0KCduYW1lJykgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q29udHJvbCA9IGJ1dHRvbltidXR0b24ubGVuZ3RoIC0gMV0/LmdldCgnbmFtZScpO1xyXG4gICAgICAgICAgICAgICAgbGFzdENvbnRyb2w/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgbGFzdENvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVNZWRpYVR5cGUoX21lZGlhVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKF9tZWRpYVR5cGUgPT09IEVudW1EYXRhLk1FRElBX1RZUEVfTE9DQVRJT04pIHRoaXMuaW5pdE1hcHM7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybVJlc2V0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZmlsZVR5cGVDaGFuZ2UoX21lZGlhVHlwZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGVUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZXh0RmlsZUFjY2VwdGVkID0gJ2ltYWdlLyonO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gRW51bURhdGEuTUVESUFfVFlQRV9WSURFTy50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0RmlsZUFjY2VwdGVkID0gJ3ZpZGVvLyonO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRW51bURhdGEuTUVESUFfVFlQRV9ET0NVTUVOVC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0RmlsZUFjY2VwdGVkID0gJ2FwcGxpY2F0aW9uL3BkZic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVTZWFyY2goc2VhcmNoVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGFnZU5vVGVtcGxhdGVPcHRpb24gPSAxO1xyXG4gICAgICAgIHRoaXMuZ2V0VGVtcGxhdGVPcHRpb25TZXJ2aWNlKG51bGwsIHNlYXJjaFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlU2VhcmNoQWNjb3VudChzZWFyY2hWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYWdlTm9BY2NvdW50T3B0aW9uID0gMTtcclxuICAgICAgICB0aGlzLmdldEFjY291bnRPcHRpb25TZXJ2aWNlKHNlYXJjaFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRNYXBzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWFwc0FQSUxvYWRlci5sb2FkKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudExvY2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdlb0NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTZWFyY2hSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlOiBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VSZXN1bHQgPSBhdXRvY29tcGxldGUuZ2V0UGxhY2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwbGFjZS5nZW9tZXRyeSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcHMubGF0aXR1ZGUgPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbi5sYXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcHMubG9uZ2l0dWRlID0gcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24ubG5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsYXRpdHVkZScpPy5zZXRWYWx1ZSh0aGlzLm1hcHMubGF0aXR1ZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbG9uZ2l0dWRlJyk/LnNldFZhbHVlKHRoaXMubWFwcy5sb25naXR1ZGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0Q3VycmVudExvY2F0aW9uKCkge1xyXG4gICAgICAgIGlmICgnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvcikge1xyXG4gICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChwb3NpdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdldENvbnRyb2woJ2xvbmdpdHVkZScpPy52YWx1ZSAmJiAhdGhpcy5nZXRDb250cm9sKCdsYXRpdHVkZScpPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sYXRpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcHMubG9uZ2l0dWRlID0gcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnNldFZhbHVlKHRoaXMubWFwcy5sYXRpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWFya2VyRHJhZ0VuZChldmVudDogZ29vZ2xlLm1hcHMuTW91c2VFdmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5sYXRMbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXBzLmxhdGl0dWRlID0gZXZlbnQubGF0TG5nLmxhdCgpO1xyXG4gICAgICAgICAgICB0aGlzLm1hcHMubG9uZ2l0dWRlID0gZXZlbnQubGF0TG5nLmxuZygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnNldFZhbHVlKHRoaXMubWFwcy5sYXRpdHVkZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbG9uZ2l0dWRlJyk/LnNldFZhbHVlKHRoaXMubWFwcy5sb25naXR1ZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlRG93bmxvYWRDU1YoaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdpc1VwbG9hZCcpPy5zZXRWYWx1ZShpc0NoZWNrZWQpO1xyXG5cclxuICAgICAgICBpZiAoaXNDaGVja2VkKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICAgICAodGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICAgICAgKHRoaXMuZ2V0Q29udHJvbCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICAgICAodGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLnJlc2V0KCk7XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICAgICAodGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1IZWFkZXInKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGUodGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUNoYW5nZVRlbXBsYXRlKHVzZUV4aXN0aW5nOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdpc0Rvd25sb2FkVmFyaWFibGVYTFMnKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudmFyaWFibGVzLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWYXJpYWJsZURvd25sb2FkWExTKGZhbHNlKTtcclxuXHJcbiAgICAgICAgaWYgKHVzZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgLy90aGlzLmdldENvbnRyb2woJ3RleHQnKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uc2V0VmFsdWUoJ0hhbG8ge3sxfX0sIGluaSBhZGFsYWgga29kZSB2ZXJpZmlrYXNpIGthbXU6IHt7Mn19Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMucHVzaChcclxuICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heCgxMDI0KV0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVDaGFuZ2VGcm9tKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IGlzVXNlRXhpc3RpbmdUZW1wbGF0ZSB9ID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgIGlmICghaXNVc2VFeGlzdGluZ1RlbXBsYXRlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZU9wdGlvblNlcnZpY2UodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB2YXJpYWJsZXMoKTogRm9ybUFycmF5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250cm9sKCd2YXJpYWJsZXMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVmFyaWFibGUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFibGVHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICBwYXJhbU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGVHcm91cCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHRDb250cm9sID0gdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0Q29udHJvbCkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Qm9keSA9IHRleHRDb250cm9sLnZhbHVlIHx8ICcnO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTZXF1ZW5jZSA9IGB7eyR7dGhpcy52YXJpYWJsZXMuY29udHJvbHMubGVuZ3RofX19YDtcclxuICAgICAgICAgICAgdGV4dENvbnRyb2wuc2V0VmFsdWUoYCR7Y3VycmVudEJvZHl9ICR7bmV3U2VxdWVuY2V9YC50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVWYXJpYWJsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YXJpYWJsZXMucmVtb3ZlQXQoaW5kZXgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52YXJpYWJsZXMuY29udHJvbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndXNlWGxzeCcpPy5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0Q29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpO1xyXG5cclxuICAgICAgICBpZiAodGV4dENvbnRyb2wgJiYgdGV4dENvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0U2VxdWVuY2UgPSBpbmRleCArIDE7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50Qm9keSA9IHRleHRDb250cm9sLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxccypcXFxce1xcXFx7JHt0YXJnZXRTZXF1ZW5jZX1cXFxcfVxcXFx9YCwgJ2cnKTtcclxuICAgICAgICAgICAgY3VycmVudEJvZHkgPSBjdXJyZW50Qm9keS5yZXBsYWNlKHJlbW92ZVJlZ2V4LCAnJyk7XHJcblxyXG4gICAgICAgICAgICBjdXJyZW50Qm9keSA9IGN1cnJlbnRCb2R5LnJlcGxhY2UoL1xce1xceyhcXGQrKVxcfVxcfS9nLCAobWF0Y2g6IG51bWJlciwgbnVtU3RyOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KG51bVN0ciwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKG51bSA+IHRhcmdldFNlcXVlbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGB7eyR7bnVtIC0gMX19fWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGV4dENvbnRyb2wuc2V0VmFsdWUoY3VycmVudEJvZHkudHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVmFyaWFibGVEb3dubG9hZFhMUyhpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YXJpYWJsZXNBcnJheSA9IHRoaXMudmFyaWFibGVzO1xyXG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcclxuICAgICAgICAgICAgdmFyaWFibGVzQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5nZXQoJ3BhcmFtTmFtZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0KCdwYXJhbU5hbWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXJpYWJsZXNBcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLmdldCgncGFyYW1OYW1lJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLmdldCgncGFyYW1OYW1lJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoZWFjaCkgPT4gZWFjaC51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxufVxyXG4iXX0=