ctt-babylon 0.1.171 → 0.1.173

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 (31) hide show
  1. package/esm2022/lib/components/core/babylon-color-picker/babylon-color-picker.component.mjs +14 -12
  2. package/esm2022/lib/components/core/babylon-contact-form/babylon-contact-form.component.mjs +5 -3
  3. package/esm2022/lib/components/core/babylon-header-book-show/babylon-header-book-show.component.mjs +4 -6
  4. package/esm2022/lib/components/core/babylon-header-book-show/babylon-header-book-show.interface.mjs +1 -1
  5. package/esm2022/lib/components/core/babylon-header-clear/babylon-header-clear.component.mjs +4 -6
  6. package/esm2022/lib/components/core/babylon-header-clear/babylon-header-clear.interface.mjs +1 -1
  7. package/esm2022/lib/components/core/babylon-header-menu-center/babylon-header-menu-center.component.mjs +46 -9
  8. package/esm2022/lib/components/core/babylon-header-menu-logo-center/babylon-header-menu-logo-center.component.mjs +1 -4
  9. package/esm2022/lib/components/core/babylon-header-menu-show/babylon-header-menu-show.component.mjs +4 -6
  10. package/esm2022/lib/components/core/babylon-header-menu-show/babylon-header-menu-show.interface.mjs +1 -1
  11. package/esm2022/lib/components/core/babylon-header-mobile/babylon-header-mobile.component.mjs +4 -6
  12. package/esm2022/lib/components/core/babylon-info-zig-zag/babylon-info-zig-zag.component.mjs +3 -3
  13. package/esm2022/lib/components/core/babylon-info-zigzag-v2/babylon-info-zigzag-v2.component.mjs +3 -3
  14. package/esm2022/lib/components/core/babylon-newsletter/babylon-newsletter.component.mjs +3 -3
  15. package/esm2022/lib/components/core/babylon-slider4col/babylon-slider4col.component.mjs +3 -3
  16. package/esm2022/lib/services/mapper/mapper.service.mjs +4 -4
  17. package/fesm2022/ctt-babylon.mjs +84 -55
  18. package/fesm2022/ctt-babylon.mjs.map +1 -1
  19. package/lib/components/core/babylon-color-picker/babylon-color-picker.component.d.ts +1 -1
  20. package/lib/components/core/babylon-contact-form/babylon-contact-form.component.d.ts +2 -1
  21. package/lib/components/core/babylon-header-book-show/babylon-header-book-show.component.d.ts +3 -3
  22. package/lib/components/core/babylon-header-book-show/babylon-header-book-show.interface.d.ts +2 -2
  23. package/lib/components/core/babylon-header-clear/babylon-header-clear.component.d.ts +3 -3
  24. package/lib/components/core/babylon-header-clear/babylon-header-clear.interface.d.ts +2 -2
  25. package/lib/components/core/babylon-header-menu-center/babylon-header-menu-center.component.d.ts +6 -3
  26. package/lib/components/core/babylon-header-menu-logo-center/babylon-header-menu-logo-center.component.d.ts +0 -1
  27. package/lib/components/core/babylon-header-menu-show/babylon-header-menu-show.component.d.ts +3 -3
  28. package/lib/components/core/babylon-header-menu-show/babylon-header-menu-show.interface.d.ts +2 -2
  29. package/lib/components/core/babylon-header-mobile/babylon-header-mobile.component.d.ts +3 -3
  30. package/lib/components/core/babylon-newsletter/babylon-newsletter.component.d.ts +2 -2
  31. package/package.json +1 -1
@@ -164,25 +164,27 @@ export class BabylonColorPickerComponent {
164
164
  const match = fullValue.match(/^['"]?([^'",]+)['"]?/);
165
165
  return match ? match[1] : fullValue;
166
166
  }
167
- updateFontVariable(event, variableName) {
167
+ async updateFontVariable(event, variableName) {
168
168
  const target = event.target;
169
169
  const fontName = target?.value;
170
170
  if (!fontName)
171
171
  return;
172
172
  const value = `'${fontName}', Helvetica, sans-serif`;
173
173
  this.colorService.changeColor(variableName, value, this.groupedVariables);
174
- const isPredefined = ['font-title', 'font-pretitle', 'font-text', 'font-claim'].includes(fontName);
175
- if (isPredefined)
176
- return;
174
+ this.fontValues[variableName] = fontName;
175
+ const isGoogleFont = this.colorService.googleFonts.includes(fontName);
176
+ if (!isGoogleFont)
177
+ return; // ⛔ No insertar si no es Google Font
177
178
  const formattedFont = fontName.replace(/ /g, '+');
178
179
  const id = `font-${formattedFont}`;
179
- if (!document.getElementById(id)) {
180
- const link = document.createElement('link');
181
- link.id = id;
182
- link.rel = 'stylesheet';
183
- link.href = `https://fonts.googleapis.com/css2?family=${formattedFont}&display=swap`;
184
- document.head.appendChild(link);
185
- }
180
+ if (document.getElementById(id))
181
+ return;
182
+ const link = document.createElement('link');
183
+ link.id = id;
184
+ link.rel = 'stylesheet';
185
+ link.href = `https://fonts.googleapis.com/css2?family=${formattedFont}&display=swap`;
186
+ link.onerror = () => link.remove();
187
+ document.head.appendChild(link);
186
188
  }
187
189
  getComputedColor(variableName) {
188
190
  const raw = getComputedStyle(document.documentElement)
@@ -234,4 +236,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
234
236
  type: ViewChild,
235
237
  args: ['panel', { static: false }]
236
238
  }] } });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWNvbG9yLXBpY2tlci9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tY29sb3ItcGlja2VyL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBRUwsV0FBVyxFQUVYLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFXMUYsTUFBTSxPQUFPLDJCQUEyQjtJQXdCcEMsWUFDVyxZQUFnQyxFQUMvQixRQUFtQixFQUNXLFVBQWtCLEVBQ2hELEVBQWU7UUFIaEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDVyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2hELE9BQUUsR0FBRixFQUFFLENBQWE7UUEzQmxCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBR3hCLHNCQUFpQixHQUFHLHlDQUF5QyxDQUFDO1FBQzlELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUlu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WUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUM1QyxDQUFDO0lBQ04sQ0FBQzsrR0F6UVEsMkJBQTJCLDZFQTJCeEIsV0FBVzttR0EzQmQsMkJBQTJCLG1QQ3ZCeEMseWdLQW1JQSxvMUlEakhjLFlBQVkseUZBQUUsV0FBVyx3MkJBQUUsbUJBQW1COzs0RkFLL0MsMkJBQTJCO2tCQVJ2QyxTQUFTOytCQUNJLDBCQUEwQixjQUN4QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLGlCQUcxQyxpQkFBaUIsQ0FBQyxTQUFTOzswQkE2QnJDLE1BQU07MkJBQUMsV0FBVzttRUExQmQsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNpQyxRQUFRO3NCQUE5QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29sb3ItcGFuZWwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWJhYnlsb24tY29sb3ItcGlja2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxufSlcbmV4cG9ydCBjbGFzcyBCYWJ5bG9uQ29sb3JQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHVzZXJQYW5lbCA9ICcnO1xuICAgIEBJbnB1dCgpIHBhc3NQYW5lbCA9ICcnO1xuICAgIEBWaWV3Q2hpbGQoJ3BhbmVsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhbmVsUmVmITogRWxlbWVudFJlZjtcblxuICAgIGdvb2dsZUZvbnRzQXBpS2V5ID0gJ0FJemFTeUFWYnp6T21BSmZzQXNpOTUxZTYzNnltLUFCV3kyQk9NQSc7XG4gICAgbW9zdHJhclBhbmVsID0gZmFsc2U7XG4gICAgbG9naW5IZWNobyA9IGZhbHNlO1xuICAgIG1pbmltaXphZG8gPSBmYWxzZTtcblxuICAgIGxvZ2luRm9ybTogRm9ybUdyb3VwO1xuXG4gICAgdGFicyA9IFsnQ29sb3JlcycsICdUZXh0b3MnLCAnQm90b25lcycsICdDb211bmVzJywgJ090cm9zJ107XG4gICAgYWN0aXZlVGFiID0gJ0NvbG9yZXMnO1xuXG4gICAgZ3JvdXBlZFZhcmlhYmxlcyA9IG5ldyBNYXA8c3RyaW5nLCB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10+KCk7XG4gICAgY29waWVkU3RhdHVzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgZXhwYW5kZWRHcm91cHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb250VmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgZHJhZ1N0YXJ0WCA9IDA7XG4gICAgZHJhZ1N0YXJ0WSA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNvbG9yU2VydmljZTogQ29sb3JQaWNrZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxuICAgICkge1xuICAgICAgICB0aGlzLmxvZ2luRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgZW1haWw6IFsnJ10sXG4gICAgICAgICAgICBwYXNzd29yZDogWycnXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgICAgICB0aGlzLm1vc3RyYXJQYW5lbCA9IHBhcmFtcy5oYXMoJ2FjdGl2YXJfcGFuZWwnKTtcblxuICAgICAgICAgICAgY29uc3Qgc3RvcmVkVGFiID0gdGhpcy5jb2xvclNlcnZpY2UuZ2V0U3RvcmVkVGFiKHRoaXMudGFicyk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHN0b3JlZFRhYjtcblxuICAgICAgICAgICAgY29uc3Qgc3RvcmVkU2Vzc2lvbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3BhbmVsLWxvZ2luLW9rJyk7XG4gICAgICAgICAgICBpZiAoc3RvcmVkU2Vzc2lvbiA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dpbkhlY2hvID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbG9yU2VydmljZS5nZXRBbGxDU1NWYXJpYWJsZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRWYXJpYWJsZXMgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5ncm91cEJ5Q2F0ZWdvcnkodmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5mZXRjaEdvb2dsZUZvbnRzKHRoaXMuZ29vZ2xlRm9udHNBcGlLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbEZvbnRWYWx1ZXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdtb3VzZW1vdmUnLCAoZSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLm9uRHJhZ01vdmUoZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ21vdXNldXAnLCAoKSA9PiB0aGlzLm9uRHJhZ0VuZCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGxvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGVtYWlsLCBwYXNzd29yZCB9ID0gdGhpcy5sb2dpbkZvcm0udmFsdWU7XG4gICAgICAgIGlmIChlbWFpbCA9PT0gdGhpcy51c2VyUGFuZWwgJiYgcGFzc3dvcmQgPT09IHRoaXMucGFzc1BhbmVsKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luSGVjaG8gPSB0cnVlO1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgncGFuZWwtbG9naW4tb2snLCAndHJ1ZScpO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb2xvclNlcnZpY2UuZ2V0QWxsQ1NTVmFyaWFibGVzKCk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRWYXJpYWJsZXMgPVxuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmdyb3VwQnlDYXRlZ29yeSh2YXJpYWJsZXMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb2xvclNlcnZpY2UuZmV0Y2hHb29nbGVGb250cyh0aGlzLmdvb2dsZUZvbnRzQXBpS2V5KTtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbEZvbnRWYWx1ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsZXJ0KCdVc3VhcmlvIG8gY29udHJhc2XDsWEgaW5jb3JyZWN0b3MnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEluaXRpYWxGb250VmFsdWVzKCk6IHZvaWQge1xuICAgICAgY29uc3QgZ3J1cG9zRnVlbnRlID0gWydUw610dWxvcycsICdQcmV0w610dWxvcycsICdTdWJ0w610dWxvcycsICdUZXh0b3MnLCAnRnVlbnRlcycsICdUaXBvZ3JhZsOtYXMnXTtcblxuICAgICAgZm9yIChjb25zdCBbZ3JvdXAsIHZhcmlhYmxlc10gb2YgdGhpcy5ncm91cGVkVmFyaWFibGVzKSB7XG4gICAgICAgIGlmIChncnVwb3NGdWVudGUuaW5jbHVkZXMoZ3JvdXApKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiB2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZS5uYW1lKVxuICAgICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICAgICAgY29uc3QgZm9udE5hbWUgPSB0aGlzLmdldEZvbnROYW1lT25seShjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5mb250VmFsdWVzW3ZhcmlhYmxlLm5hbWVdID0gZm9udE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBpc0ludGVyYWN0aXZlID0gW1xuICAgICAgICAgICAgJ0lOUFVUJyxcbiAgICAgICAgICAgICdCVVRUT04nLFxuICAgICAgICAgICAgJ0xBQkVMJyxcbiAgICAgICAgICAgICdTUEFOJyxcbiAgICAgICAgICAgICdTRUxFQ1QnLFxuICAgICAgICBdLmluY2x1ZGVzKHRhcmdldC50YWdOYW1lKTtcbiAgICAgICAgaWYgKGlzSW50ZXJhY3RpdmUgfHwgIXRoaXMucGFuZWxSZWYpIHJldHVybjtcblxuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRyYWdTdGFydFggPVxuICAgICAgICAgICAgZXZlbnQuY2xpZW50WCAtIHRoaXMucGFuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgICAgICB0aGlzLmRyYWdTdGFydFkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nIHx8ICF0aGlzLnBhbmVsUmVmKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLmRyYWdTdGFydFg7XG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5kcmFnU3RhcnRZO1xuXG4gICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBwYW5lbC5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XG4gICAgICAgIHBhbmVsLnN0eWxlLnRvcCA9IGAke3l9cHhgO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdG9nZ2xlR3JvdXAoZ3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRlZEdyb3Vwcy5oYXMoZ3JvdXApKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkR3JvdXBzLmRlbGV0ZShncm91cCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkR3JvdXBzLmFkZChncm91cCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0dyb3VwRXhwYW5kZWQoZ3JvdXA6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRlZEdyb3Vwcy5oYXMoZ3JvdXApO1xuICAgIH1cblxuICAgIGlzQ29sb3IodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclNlcnZpY2UuaXNDb2xvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgY2hhbmdlQ29sb3IoZXZlbnQ6IEV2ZW50LCB2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXQ/LnZhbHVlO1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaXNGb250VmFyaWFibGUgPVxuICAgICAgICAgICAgdmFyaWFibGVOYW1lLnN0YXJ0c1dpdGgoJy0tZm9udC0nKSAmJlxuICAgICAgICAgICAgIXZhcmlhYmxlTmFtZS5pbmNsdWRlcygnLS1mb250LXNpemUnKTtcblxuICAgICAgICBpZiAoaXNGb250VmFyaWFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9udFZhbHVlc1t2YXJpYWJsZU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBuZXdGb250VmFsdWUgPSBgJyR7dmFsdWV9JywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmYDtcbiAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmNoYW5nZUNvbG9yKFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICBuZXdGb250VmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY2hhbmdlQ29sb3IoXG4gICAgICAgICAgICAgICAgdmFyaWFibGVOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBlZFZhcmlhYmxlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q29sb3JzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5yZXNldENvbG9ycyh0aGlzLmdyb3VwZWRWYXJpYWJsZXMpO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCh2YWx1ZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY29weVRvQ2xpcGJvYXJkKHZhbHVlLCBuYW1lLCB0aGlzLmNvcGllZFN0YXR1cyk7XG4gICAgfVxuXG4gICAgd2FzQ29waWVkKHZhcmlhYmxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvcGllZFN0YXR1cy5nZXQodmFyaWFibGVOYW1lKSA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRUYWJGb3JHcm91cChncm91cDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JTZXJ2aWNlLmdldFRhYkZvckdyb3VwKGdyb3VwKTtcbiAgICB9XG5cbiAgICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdwYW5lbC1lc3RpbG9zLXRhYicsIHRhYik7XG4gICAgfVxuXG4gICAgdG9nZ2xlTWluaW1pemFkbygpIHtcbiAgICAgICAgdGhpcy5taW5pbWl6YWRvID0gIXRoaXMubWluaW1pemFkbztcbiAgICB9XG5cbiAgICBleHBvcnRDU1MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmV4cG9ydEN1c3RvbVZhcmlhYmxlcyh0aGlzLmdyb3VwZWRWYXJpYWJsZXMpO1xuICAgIH1cblxuICAgIGdldEZvbnROYW1lT25seShmdWxsVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZnVsbFZhbHVlLm1hdGNoKC9eWydcIl0/KFteJ1wiLF0rKVsnXCJdPy8pO1xuICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IGZ1bGxWYWx1ZTtcbiAgICB9XG5cbiAgICB1cGRhdGVGb250VmFyaWFibGUoZXZlbnQ6IEV2ZW50LCB2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbDtcbiAgICAgIGNvbnN0IGZvbnROYW1lID0gdGFyZ2V0Py52YWx1ZTtcbiAgICAgIGlmICghZm9udE5hbWUpIHJldHVybjtcblxuICAgICAgY29uc3QgdmFsdWUgPSBgJyR7Zm9udE5hbWV9JywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmYDtcbiAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmNoYW5nZUNvbG9yKHZhcmlhYmxlTmFtZSwgdmFsdWUsIHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG5cbiAgICAgIGNvbnN0IGlzUHJlZGVmaW5lZCA9IFsnZm9udC10aXRsZScsICdmb250LXByZXRpdGxlJywgJ2ZvbnQtdGV4dCcsICdmb250LWNsYWltJ10uaW5jbHVkZXMoZm9udE5hbWUpO1xuICAgICAgaWYgKGlzUHJlZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBmb3JtYXR0ZWRGb250ID0gZm9udE5hbWUucmVwbGFjZSgvIC9nLCAnKycpO1xuICAgICAgY29uc3QgaWQgPSBgZm9udC0ke2Zvcm1hdHRlZEZvbnR9YDtcblxuICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpIHtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgbGluay5pZCA9IGlkO1xuICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgbGluay5ocmVmID0gYGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9JHtmb3JtYXR0ZWRGb250fSZkaXNwbGF5PXN3YXBgO1xuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXB1dGVkQ29sb3IodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByYXcgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKHZhcmlhYmxlTmFtZSlcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGNvbnN0IGNsZWFuID0gcmF3LnJlcGxhY2UoL1tcIiddL2csICcnKTtcblxuICAgICAgICBpZiAoL14jKFswLTlhLWZBLUZdezN9KSQvLnRlc3QoY2xlYW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICcjJyArXG4gICAgICAgICAgICAgICAgY2xlYW5cbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoYykgPT4gYyArIGMpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yU2VydmljZS5pc0NvbG9yKGNsZWFuKSA/IGNsZWFuIDogJyMwMDAwMDAnO1xuICAgIH1cblxuICAgIGdldEhleEZvckNvbG9ySW5wdXQodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjb2xvciA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUodmFyaWFibGVOYW1lKVxuICAgICAgICAgICAgLnRyaW0oKTtcblxuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbC5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBnZXRDb21wdXRlZFN0eWxlKGVsKS5jb2xvcjtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSByZXNvbHZlZC5tYXRjaCgvXFxkKy9nKTtcbiAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5sZW5ndGggPCAzKSByZXR1cm4gJyMwMDAwMDAnO1xuXG4gICAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IG1hdGNoO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgIHBhcnNlSW50KHIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgIHBhcnNlSW50KGcpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgIHBhcnNlSW50KGIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPCEtLSBNb3N0cmFyIFRPRE8gc29sbyBzaSBtb3N0cmFyUGFuZWwgZXMgdHJ1ZSAtLT5cbkBpZiAobW9zdHJhclBhbmVsKSB7XG5cbiAgPCEtLSBMT0dJTiBQQU5FTCAtLT5cbiAgQGlmICghbG9naW5IZWNobykge1xuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwibG9naW5Gb3JtXCIgKG5nU3VibWl0KT1cImxvZ2luKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1wYW5lbFwiPlxuICAgICAgICA8aDI+UGFuZWwgZGUgZXN0aWxvczwvaDI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlVzdWFyaW9cIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJsb2dpbigpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbnRyYXNlw7FhXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibG9naW4oKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiPkVudHJhcjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICB9IEBlbHNlIHtcbiAgICA8IS0tIEVTVElMTyBQQU5FTCAtLT5cbiAgICA8ZGl2XG4gICAgICAjcGFuZWxcbiAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyLXBhbmVsXCJcbiAgICAgIFtjbGFzcy5taW5pbWl6YWRvXT1cIm1pbmltaXphZG9cIlxuICAgICAgKG1vdXNlZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oZWFkZXJcIj5cbiAgICAgICAgPGgxPlBhbmVsIGRlIGVzdGlsb3M8L2gxPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJtaW5pbWl6ZS1idG5cIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNaW5pbWl6YWRvKClcIlxuICAgICAgICAgIHRpdGxlPVwiTWluaW1pemFyL1Jlc3RhdXJhciBwYW5lbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBtaW5pbWl6YWRvID8gJ++8iycgOiAn77yNJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKCFtaW5pbWl6YWRvKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgICAgICAgQGZvciAodGFiIG9mIHRhYnM7IHRyYWNrIHRhYikge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PT0gdGFiXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVRhYih0YWIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgdGFiIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNldC1leHBvcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlc2V0LWJ1dHRvblwiIChjbGljayk9XCJyZXNldENvbG9ycygpXCI+UmVzZXRlYXIgZXN0aWxvczwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cImV4cG9ydENTUygpXCI+RXhwb3J0YXIgQ1NTPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHMtd3JhcHBlclwiPlxuICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIGdyb3VwZWRWYXJpYWJsZXMgfCBrZXl2YWx1ZTsgdHJhY2sgZ3JvdXAua2V5KSB7XG4gICAgICAgICAgICBAaWYgKGdldFRhYkZvckdyb3VwKGdyb3VwLmtleSkgPT09IGFjdGl2ZVRhYikge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtYm94XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVHcm91cChncm91cC5rZXkpXCI+XG4gICAgICAgICAgICAgICAgICA8aDI+e3sgZ3JvdXAua2V5IH19PC9oMj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIiBbY2xhc3MuZXhwYW5kZWRdPVwiaXNHcm91cEV4cGFuZGVkKGdyb3VwLmtleSlcIj7ijLU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBAaWYgKGlzR3JvdXBFeHBhbmRlZChncm91cC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yICh2YXJpYWJsZSBvZiBncm91cC52YWx1ZTsgdHJhY2sgdmFyaWFibGUubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXItaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IHZhcmlhYmxlLm5hbWUucmVwbGFjZSgnLS0nLCAnJykgfX08L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzQ29sb3IodmFyaWFibGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldEhleEZvckNvbG9ySW5wdXQodmFyaWFibGUubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VDb2xvcigkZXZlbnQsIHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFsnVMOtdHVsb3MnLCAnUHJldMOtdHVsb3MnLCAnU3VidMOtdHVsb3MnLCAnVGV4dG9zJywgJ0Z1ZW50ZXMnLCAnVGlwb2dyYWbDrWFzJ10uaW5jbHVkZXMoZ3JvdXAua2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb250VmFsdWVzW3ZhcmlhYmxlLm5hbWVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlRm9udFZhcmlhYmxlKCRldmVudCwgdmFyaWFibGUubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIkZ1ZW50ZXMgZGVsIHByb3llY3RvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGZvbnQgb2YgY29sb3JTZXJ2aWNlLnByb2plY3RGb250czsgdHJhY2sgZm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIVsnZm9udC10aXRsZScsICdmb250LXByZXRpdGxlJywgJ2ZvbnQtdGV4dCcsICdmb250LWNsYWltJ10uaW5jbHVkZXMoZm9udCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImZvbnRcIj57eyBmb250IH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9XCJHb29nbGUgRm9udHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZm9udCBvZiBjb2xvclNlcnZpY2UuZ29vZ2xlRm9udHM7IHRyYWNrIGZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJmb250XCI+e3sgZm9udCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YXJpYWJsZS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlQ29sb3IoJGV2ZW50LCB2YXJpYWJsZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvcHktYnRuXCIgKGNsaWNrKT1cImNvcHlUb0NsaXBib2FyZCh2YXJpYWJsZS52YWx1ZSwgdmFyaWFibGUubmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDwn5OLXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtdGV4dFwiPkNvcGlhcjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHdhc0NvcGllZCh2YXJpYWJsZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvcGllZC1tc2dcIj5Db3BpYWRvIOKclO+4jzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG59XG4iXX0=
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWNvbG9yLXBpY2tlci9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tY29sb3ItcGlja2VyL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBRUwsV0FBVyxFQUVYLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFXMUYsTUFBTSxPQUFPLDJCQUEyQjtJQXdCcEMsWUFDVyxZQUFnQyxFQUMvQixRQUFtQixFQUNXLFVBQWtCLEVBQ2hELEVBQWU7UUFIaEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDVyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2hELE9BQUUsR0FBRixFQUFFLENBQWE7UUEzQmxCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBR3hCLHNCQUFpQixHQUFHLHlDQUF5QyxDQUFDO1FBQzlELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUlu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QUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQzVDLENBQUM7SUFDTixDQUFDOytHQTFRUSwyQkFBMkIsNkVBMkJ4QixXQUFXO21HQTNCZCwyQkFBMkIsbVBDdkJ4Qyx5Z0tBbUlBLG8xSURqSGMsWUFBWSx5RkFBRSxXQUFXLHcyQkFBRSxtQkFBbUI7OzRGQUsvQywyQkFBMkI7a0JBUnZDLFNBQVM7K0JBQ0ksMEJBQTBCLGNBQ3hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsaUJBRzFDLGlCQUFpQixDQUFDLFNBQVM7OzBCQTZCckMsTUFBTTsyQkFBQyxXQUFXO21FQTFCZCxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ2lDLFFBQVE7c0JBQTlDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2xvclBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb2xvci1wYW5lbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItYmFieWxvbi1jb2xvci1waWNrZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXG59KVxuZXhwb3J0IGNsYXNzIEJhYnlsb25Db2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgdXNlclBhbmVsID0gJyc7XG4gICAgQElucHV0KCkgcGFzc1BhbmVsID0gJyc7XG4gICAgQFZpZXdDaGlsZCgncGFuZWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFuZWxSZWYhOiBFbGVtZW50UmVmO1xuXG4gICAgZ29vZ2xlRm9udHNBcGlLZXkgPSAnQUl6YVN5QVZienpPbUFKZnNBc2k5NTFlNjM2eW0tQUJXeTJCT01BJztcbiAgICBtb3N0cmFyUGFuZWwgPSBmYWxzZTtcbiAgICBsb2dpbkhlY2hvID0gZmFsc2U7XG4gICAgbWluaW1pemFkbyA9IGZhbHNlO1xuXG4gICAgbG9naW5Gb3JtOiBGb3JtR3JvdXA7XG5cbiAgICB0YWJzID0gWydDb2xvcmVzJywgJ1RleHRvcycsICdCb3RvbmVzJywgJ0NvbXVuZXMnLCAnT3Ryb3MnXTtcbiAgICBhY3RpdmVUYWIgPSAnQ29sb3Jlcyc7XG5cbiAgICBncm91cGVkVmFyaWFibGVzID0gbmV3IE1hcDxzdHJpbmcsIHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXT4oKTtcbiAgICBjb3BpZWRTdGF0dXMgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICBleHBhbmRlZEdyb3VwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvbnRWYWx1ZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBkcmFnU3RhcnRYID0gMDtcbiAgICBkcmFnU3RhcnRZID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29sb3JTZXJ2aWNlOiBDb2xvclBpY2tlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMubG9naW5Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBlbWFpbDogWycnXSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBbJyddXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgICAgIHRoaXMubW9zdHJhclBhbmVsID0gcGFyYW1zLmhhcygnYWN0aXZhcl9wYW5lbCcpO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRUYWIgPSB0aGlzLmNvbG9yU2VydmljZS5nZXRTdG9yZWRUYWIodGhpcy50YWJzKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gc3RvcmVkVGFiO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRTZXNzaW9uID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncGFuZWwtbG9naW4tb2snKTtcbiAgICAgICAgICAgIGlmIChzdG9yZWRTZXNzaW9uID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2luSGVjaG8gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29sb3JTZXJ2aWNlLmdldEFsbENTU1ZhcmlhYmxlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmdyb3VwQnlDYXRlZ29yeSh2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmZldGNoR29vZ2xlRm9udHModGhpcy5nb29nbGVGb250c0FwaUtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsRm9udFZhbHVlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ21vdXNlbW92ZScsIChlKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMub25EcmFnTW92ZShlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2V1cCcsICgpID0+IHRoaXMub25EcmFnRW5kKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgbG9naW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgZW1haWwsIHBhc3N3b3JkIH0gPSB0aGlzLmxvZ2luRm9ybS52YWx1ZTtcbiAgICAgICAgaWYgKGVtYWlsID09PSB0aGlzLnVzZXJQYW5lbCAmJiBwYXNzd29yZCA9PT0gdGhpcy5wYXNzUGFuZWwpIHtcbiAgICAgICAgICAgIHRoaXMubG9naW5IZWNobyA9IHRydWU7XG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdwYW5lbC1sb2dpbi1vaycsICd0cnVlJyk7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbG9yU2VydmljZS5nZXRBbGxDU1NWYXJpYWJsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyA9XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuZ3JvdXBCeUNhdGVnb3J5KHZhcmlhYmxlcyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbG9yU2VydmljZS5mZXRjaEdvb2dsZUZvbnRzKHRoaXMuZ29vZ2xlRm9udHNBcGlLZXkpO1xuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsRm9udFZhbHVlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWxlcnQoJ1VzdWFyaW8gbyBjb250cmFzZcOxYSBpbmNvcnJlY3RvcycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbEZvbnRWYWx1ZXMoKTogdm9pZCB7XG4gICAgICBjb25zdCBncnVwb3NGdWVudGUgPSBbJ1TDrXR1bG9zJywgJ1ByZXTDrXR1bG9zJywgJ1N1YnTDrXR1bG9zJywgJ1RleHRvcycsICdGdWVudGVzJywgJ1RpcG9ncmFmw61hcyddO1xuXG4gICAgICBmb3IgKGNvbnN0IFtncm91cCwgdmFyaWFibGVzXSBvZiB0aGlzLmdyb3VwZWRWYXJpYWJsZXMpIHtcbiAgICAgICAgaWYgKGdydXBvc0Z1ZW50ZS5pbmNsdWRlcyhncm91cCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKHZhcmlhYmxlLm5hbWUpXG4gICAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgICAgICBjb25zdCBmb250TmFtZSA9IHRoaXMuZ2V0Rm9udE5hbWVPbmx5KGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvbnRWYWx1ZXNbdmFyaWFibGUubmFtZV0gPSBmb250TmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzSW50ZXJhY3RpdmUgPSBbXG4gICAgICAgICAgICAnSU5QVVQnLFxuICAgICAgICAgICAgJ0JVVFRPTicsXG4gICAgICAgICAgICAnTEFCRUwnLFxuICAgICAgICAgICAgJ1NQQU4nLFxuICAgICAgICAgICAgJ1NFTEVDVCcsXG4gICAgICAgIF0uaW5jbHVkZXModGFyZ2V0LnRhZ05hbWUpO1xuICAgICAgICBpZiAoaXNJbnRlcmFjdGl2ZSB8fCAhdGhpcy5wYW5lbFJlZikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9XG4gICAgICAgICAgICBldmVudC5jbGllbnRYIC0gdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRHJhZ01vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgfHwgIXRoaXMucGFuZWxSZWYpIHJldHVybjtcblxuICAgICAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZHJhZ1N0YXJ0WDtcbiAgICAgICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLmRyYWdTdGFydFk7XG5cbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gYCR7eX1weGA7XG4gICAgfVxuXG4gICAgb25EcmFnRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0b2dnbGVHcm91cChncm91cDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkR3JvdXBzLmhhcyhncm91cCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRHcm91cHMuZGVsZXRlKGdyb3VwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRHcm91cHMuYWRkKGdyb3VwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzR3JvdXBFeHBhbmRlZChncm91cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkR3JvdXBzLmhhcyhncm91cCk7XG4gICAgfVxuXG4gICAgaXNDb2xvcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yU2VydmljZS5pc0NvbG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDb2xvcihldmVudDogRXZlbnQsIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dD8udmFsdWU7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBpc0ZvbnRWYXJpYWJsZSA9XG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUuc3RhcnRzV2l0aCgnLS1mb250LScpICYmXG4gICAgICAgICAgICAhdmFyaWFibGVOYW1lLmluY2x1ZGVzKCctLWZvbnQtc2l6ZScpO1xuXG4gICAgICAgIGlmIChpc0ZvbnRWYXJpYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5mb250VmFsdWVzW3ZhcmlhYmxlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0ZvbnRWYWx1ZSA9IGAnJHt2YWx1ZX0nLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgO1xuICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY2hhbmdlQ29sb3IoXG4gICAgICAgICAgICAgICAgdmFyaWFibGVOYW1lLFxuICAgICAgICAgICAgICAgIG5ld0ZvbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRWYXJpYWJsZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jaGFuZ2VDb2xvcihcbiAgICAgICAgICAgICAgICB2YXJpYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDb2xvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLnJlc2V0Q29sb3JzKHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgY29weVRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jb3B5VG9DbGlwYm9hcmQodmFsdWUsIG5hbWUsIHRoaXMuY29waWVkU3RhdHVzKTtcbiAgICB9XG5cbiAgICB3YXNDb3BpZWQodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29waWVkU3RhdHVzLmdldCh2YXJpYWJsZU5hbWUpID09PSB0cnVlO1xuICAgIH1cblxuICAgIGdldFRhYkZvckdyb3VwKGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclNlcnZpY2UuZ2V0VGFiRm9yR3JvdXAoZ3JvdXApO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZVRhYih0YWI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BhbmVsLWVzdGlsb3MtdGFiJywgdGFiKTtcbiAgICB9XG5cbiAgICB0b2dnbGVNaW5pbWl6YWRvKCkge1xuICAgICAgICB0aGlzLm1pbmltaXphZG8gPSAhdGhpcy5taW5pbWl6YWRvO1xuICAgIH1cblxuICAgIGV4cG9ydENTUygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuZXhwb3J0Q3VzdG9tVmFyaWFibGVzKHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgZ2V0Rm9udE5hbWVPbmx5KGZ1bGxWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBmdWxsVmFsdWUubWF0Y2goL15bJ1wiXT8oW14nXCIsXSspWydcIl0/Lyk7XG4gICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogZnVsbFZhbHVlO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZUZvbnRWYXJpYWJsZShldmVudDogRXZlbnQsIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuICAgICAgY29uc3QgZm9udE5hbWUgPSB0YXJnZXQ/LnZhbHVlO1xuICAgICAgaWYgKCFmb250TmFtZSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IGAnJHtmb250TmFtZX0nLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgO1xuICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY2hhbmdlQ29sb3IodmFyaWFibGVOYW1lLCB2YWx1ZSwgdGhpcy5ncm91cGVkVmFyaWFibGVzKTtcbiAgICAgIHRoaXMuZm9udFZhbHVlc1t2YXJpYWJsZU5hbWVdID0gZm9udE5hbWU7XG5cbiAgICAgIGNvbnN0IGlzR29vZ2xlRm9udCA9IHRoaXMuY29sb3JTZXJ2aWNlLmdvb2dsZUZvbnRzLmluY2x1ZGVzKGZvbnROYW1lKTtcbiAgICAgIGlmICghaXNHb29nbGVGb250KSByZXR1cm47IC8vIOKblCBObyBpbnNlcnRhciBzaSBubyBlcyBHb29nbGUgRm9udFxuXG4gICAgICBjb25zdCBmb3JtYXR0ZWRGb250ID0gZm9udE5hbWUucmVwbGFjZSgvIC9nLCAnKycpO1xuICAgICAgY29uc3QgaWQgPSBgZm9udC0ke2Zvcm1hdHRlZEZvbnR9YDtcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpIHJldHVybjtcblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIGxpbmsuaWQgPSBpZDtcbiAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgbGluay5ocmVmID0gYGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9JHtmb3JtYXR0ZWRGb250fSZkaXNwbGF5PXN3YXBgO1xuICAgICAgbGluay5vbmVycm9yID0gKCkgPT4gbGluay5yZW1vdmUoKTtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgfVxuXG4gICAgZ2V0Q29tcHV0ZWRDb2xvcih2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUodmFyaWFibGVOYW1lKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgY29uc3QgY2xlYW4gPSByYXcucmVwbGFjZSgvW1wiJ10vZywgJycpO1xuXG4gICAgICAgIGlmICgvXiMoWzAtOWEtZkEtRl17M30pJC8udGVzdChjbGVhbikpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgICAgICBjbGVhblxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjKSA9PiBjICsgYylcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JTZXJ2aWNlLmlzQ29sb3IoY2xlYW4pID8gY2xlYW4gOiAnIzAwMDAwMCc7XG4gICAgfVxuXG4gICAgZ2V0SGV4Rm9yQ29sb3JJbnB1dCh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZU5hbWUpXG4gICAgICAgICAgICAudHJpbSgpO1xuXG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVsLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGdldENvbXB1dGVkU3R5bGUoZWwpLmNvbG9yO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsKTtcblxuICAgICAgICBjb25zdCBtYXRjaCA9IHJlc29sdmVkLm1hdGNoKC9cXGQrL2cpO1xuICAgICAgICBpZiAoIW1hdGNoIHx8IG1hdGNoLmxlbmd0aCA8IDMpIHJldHVybiAnIzAwMDAwMCc7XG5cbiAgICAgICAgY29uc3QgW3IsIGcsIGJdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnIycgK1xuICAgICAgICAgICAgcGFyc2VJbnQocikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgICAgICAgcGFyc2VJbnQoZykudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgICAgICAgcGFyc2VJbnQoYikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8IS0tIE1vc3RyYXIgVE9ETyBzb2xvIHNpIG1vc3RyYXJQYW5lbCBlcyB0cnVlIC0tPlxuQGlmIChtb3N0cmFyUGFuZWwpIHtcblxuICA8IS0tIExPR0lOIFBBTkVMIC0tPlxuICBAaWYgKCFsb2dpbkhlY2hvKSB7XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJsb2dpbkZvcm1cIiAobmdTdWJtaXQpPVwibG9naW4oKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXBhbmVsXCI+XG4gICAgICAgIDxoMj5QYW5lbCBkZSBlc3RpbG9zPC9oMj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVXN1YXJpb1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImxvZ2luKClcIlxuICAgICAgICAvPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ29udHJhc2XDsWFcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJsb2dpbigpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCI+RW50cmFyPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIH0gQGVsc2Uge1xuICAgIDwhLS0gRVNUSUxPIFBBTkVMIC0tPlxuICAgIDxkaXZcbiAgICAgICNwYW5lbFxuICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXItcGFuZWxcIlxuICAgICAgW2NsYXNzLm1pbmltaXphZG9dPVwibWluaW1pemFkb1wiXG4gICAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLWhlYWRlclwiPlxuICAgICAgICA8aDE+UGFuZWwgZGUgZXN0aWxvczwvaDE+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cIm1pbmltaXplLWJ0blwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1pbmltaXphZG8oKVwiXG4gICAgICAgICAgdGl0bGU9XCJNaW5pbWl6YXIvUmVzdGF1cmFyIHBhbmVsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG1pbmltaXphZG8gPyAn77yLJyA6ICfvvI0nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoIW1pbmltaXphZG8pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYnNcIj5cbiAgICAgICAgICBAZm9yICh0YWIgb2YgdGFiczsgdHJhY2sgdGFiKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09PSB0YWJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0QWN0aXZlVGFiKHRhYilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0YWIgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2V0LWV4cG9ydC1jb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVzZXQtYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0Q29sb3JzKClcIj5SZXNldGVhciBlc3RpbG9zPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwiZXhwb3J0Q1NTKClcIj5FeHBvcnRhciBDU1M8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwcy13cmFwcGVyXCI+XG4gICAgICAgICAgQGZvciAoZ3JvdXAgb2YgZ3JvdXBlZFZhcmlhYmxlcyB8IGtleXZhbHVlOyB0cmFjayBncm91cC5rZXkpIHtcbiAgICAgICAgICAgIEBpZiAoZ2V0VGFiRm9yR3JvdXAoZ3JvdXAua2V5KSA9PT0gYWN0aXZlVGFiKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1ib3hcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtaGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZUdyb3VwKGdyb3VwLmtleSlcIj5cbiAgICAgICAgICAgICAgICAgIDxoMj57eyBncm91cC5rZXkgfX08L2gyPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiIFtjbGFzcy5leHBhbmRlZF09XCJpc0dyb3VwRXhwYW5kZWQoZ3JvdXAua2V5KVwiPuKMtTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAoaXNHcm91cEV4cGFuZGVkKGdyb3VwLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhcmlhYmxlIG9mIGdyb3VwLnZhbHVlOyB0cmFjayB2YXJpYWJsZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlci1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgdmFyaWFibGUubmFtZS5yZXBsYWNlKCctLScsICcnKSB9fTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNDb2xvcih2YXJpYWJsZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0SGV4Rm9yQ29sb3JJbnB1dCh2YXJpYWJsZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZUNvbG9yKCRldmVudCwgdmFyaWFibGUubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoWydUw610dWxvcycsICdQcmV0w610dWxvcycsICdTdWJ0w610dWxvcycsICdUZXh0b3MnLCAnRnVlbnRlcycsICdUaXBvZ3JhZsOtYXMnXS5pbmNsdWRlcyhncm91cC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvbnRWYWx1ZXNbdmFyaWFibGUubmFtZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVGb250VmFyaWFibGUoJGV2ZW50LCB2YXJpYWJsZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIGxhYmVsPVwiRnVlbnRlcyBkZWwgcHJveWVjdG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZm9udCBvZiBjb2xvclNlcnZpY2UucHJvamVjdEZvbnRzOyB0cmFjayBmb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghWydmb250LXRpdGxlJywgJ2ZvbnQtcHJldGl0bGUnLCAnZm9udC10ZXh0JywgJ2ZvbnQtY2xhaW0nXS5pbmNsdWRlcyhmb250KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiZm9udFwiPnt7IGZvbnQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIkdvb2dsZSBGb250c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChmb250IG9mIGNvbG9yU2VydmljZS5nb29nbGVGb250czsgdHJhY2sgZm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImZvbnRcIj57eyBmb250IH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhcmlhYmxlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VDb2xvcigkZXZlbnQsIHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29weS1idG5cIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKHZhcmlhYmxlLnZhbHVlLCB2YXJpYWJsZS5uYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIPCfk4tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC10ZXh0XCI+Q29waWFyPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAod2FzQ29waWVkKHZhcmlhYmxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29waWVkLW1zZ1wiPkNvcGlhZG8g4pyU77iPPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbn1cbiJdfQ==