valtech-components 4.0.245 → 4.0.247

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.
@@ -2,7 +2,7 @@ import { Component, computed, inject, input, output, signal, viewChild } from '@
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { IonIcon } from '@ionic/angular/standalone';
4
4
  import { addIcons } from 'ionicons';
5
- import { addOutline, checkmarkOutline, closeOutline, documentOutline, micOutline, micCircleOutline, arrowUpOutline, trashOutline, } from 'ionicons/icons';
5
+ import { addOutline, checkmarkOutline, closeOutline, documentOutline, micOutline, pulseOutline, arrowUpOutline, trashOutline, } from 'ionicons/icons';
6
6
  import fixWebmDuration from 'fix-webm-duration';
7
7
  import { I18nService } from '../../../services/i18n';
8
8
  import { ModalService } from '../../../services/modal/modal.service';
@@ -14,7 +14,7 @@ addIcons({
14
14
  closeOutline,
15
15
  documentOutline,
16
16
  micOutline,
17
- micCircleOutline,
17
+ pulseOutline,
18
18
  arrowUpOutline,
19
19
  trashOutline,
20
20
  });
@@ -514,7 +514,7 @@ export class ChatComposerComponent {
514
514
  }
515
515
  @if (showVoiceMessage()) {
516
516
  <button class="icon-btn" [attr.aria-label]="t('voice')" (click)="startRecording()">
517
- <ion-icon name="mic-circle-outline" aria-hidden="true" />
517
+ <ion-icon name="pulse-outline" aria-hidden="true" />
518
518
  </button>
519
519
  }
520
520
  @if (showMic() && dictationSupported) {
@@ -635,7 +635,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
635
635
  }
636
636
  @if (showVoiceMessage()) {
637
637
  <button class="icon-btn" [attr.aria-label]="t('voice')" (click)="startRecording()">
638
- <ion-icon name="mic-circle-outline" aria-hidden="true" />
638
+ <ion-icon name="pulse-outline" aria-hidden="true" />
639
639
  </button>
640
640
  }
641
641
  @if (showMic() && dictationSupported) {
@@ -659,4 +659,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
659
659
  </div>
660
660
  `, styles: [":host{display:block}.composer{display:flex;flex-direction:column;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));background:var(--ion-background-color, #fff);border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .08))}.reply-bar{display:flex;align-items:center;gap:8px;padding:6px 10px;border-left:3px solid var(--ion-color-primary);border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.reply-content{display:flex;flex-direction:column;flex:1;min-width:0;font-size:.8125rem}.reply-name{font-weight:700;color:var(--ion-color-primary)}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ion-color-medium, #92949c)}.pending-row{display:flex;gap:8px;flex-wrap:wrap;padding:2px 4px}.thumb{position:relative;width:72px;height:72px;border-radius:12px;overflow:hidden;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1));cursor:pointer}.thumb img{width:100%;height:100%;object-fit:cover}.thumb.file{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px;color:var(--ion-color-medium, #92949c);font-size:1.5rem}.thumb-name{font-size:.5625rem;line-height:1.1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ion-text-color, #000)}.thumb-remove{position:absolute;top:2px;right:2px;width:20px;height:20px;border:none;border-radius:50%;background:#0000008c;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:.875rem}.shell{display:flex;flex-direction:column;gap:8px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:26px;padding:12px 16px}.editable{min-height:40px;max-height:180px;overflow-y:auto;outline:none;font-size:.9375rem;line-height:1.4;color:var(--ion-text-color, #000);white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.editable.is-empty:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);pointer-events:none}.actions{display:flex;align-items:center;gap:4px}.actions-spacer{flex:1}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1.25rem}.icon-btn:hover{color:var(--ion-color-primary)}.icon-btn.dictate.active{color:var(--ion-color-primary);animation:dictate-pulse 1.2s ease-in-out infinite}@keyframes dictate-pulse{0%,to{opacity:1}50%{opacity:.4}}.send-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);cursor:pointer;font-size:1.125rem;transition:transform .1s ease}.send-btn:active{transform:scale(.92)}.icon-btn.danger{color:var(--ion-color-danger, #eb445a)}.audio-chip{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;border-radius:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.audio-chip audio{flex:1;height:36px;min-width:0}.thumb-remove.inline{position:static;flex-shrink:0;background:var(--ion-color-medium, #92949c)}.rec-bar{display:flex;align-items:center;gap:10px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:20px;padding:4px 8px}.rec-dot{width:10px;height:10px;border-radius:50%;background:var(--ion-color-danger, #eb445a);animation:rec-pulse 1.2s ease-in-out infinite}.rec-time{font-variant-numeric:tabular-nums;font-size:.9375rem;color:var(--ion-text-color, #000)}.rec-spacer{flex:1}@keyframes rec-pulse{0%,to{opacity:1}50%{opacity:.3}}\n"] }]
661
661
  }], ctorParameters: () => [] });
662
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1jb21wb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NoYXQtY29tcG9zZXIvY2hhdC1jb21wb3Nlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsWUFBWSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxlQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7QUFFNUcsUUFBUSxDQUFDO0lBQ1AsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osZUFBZTtJQUNmLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLFlBQVk7Q0FDYixDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLEVBQUUsRUFBRTtRQUNGLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsSUFBSSxFQUFFLFFB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QUMsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxVQUFVO1FBQ1osQ0FBQztRQUNELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakMsSUFBSSxHQUFHLENBQUMsR0FBRztnQkFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELENBQUMsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQzsrR0FqWVUscUJBQXFCO21HQUFyQixxQkFBcUIsK3RDQXBXdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFIVCx5MkhBdEhTLFlBQVksK0JBQUUsT0FBTzs7NEZBcVdwQixxQkFBcUI7a0JBeFdqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxSFQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGFkZE91dGxpbmUsXG4gIGNoZWNrbWFya091dGxpbmUsXG4gIGNsb3NlT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxuICBtaWNPdXRsaW5lLFxuICBtaWNDaXJjbGVPdXRsaW5lLFxuICBhcnJvd1VwT3V0bGluZSxcbiAgdHJhc2hPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCBmaXhXZWJtRHVyYXRpb24gZnJvbSAnZml4LXdlYm0tZHVyYXRpb24nO1xuXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTWVzc2FnZVJlcGx5VG8gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGF0L3R5cGVzJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVkaWFWaWV3ZXJNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9tZWRpYS12aWV3ZXItbW9kYWwvbWVkaWEtdmlld2VyLW1vZGFsLmNvbXBvbmVudCc7XG5cbmFkZEljb25zKHtcbiAgYWRkT3V0bGluZSxcbiAgY2hlY2ttYXJrT3V0bGluZSxcbiAgY2xvc2VPdXRsaW5lLFxuICBkb2N1bWVudE91dGxpbmUsXG4gIG1pY091dGxpbmUsXG4gIG1pY0NpcmNsZU91dGxpbmUsXG4gIGFycm93VXBPdXRsaW5lLFxuICB0cmFzaE91dGxpbmUsXG59KTtcblxuY29uc3QgQ0hBVF9DT01QT1NFUl9JMThOID0ge1xuICBlczoge1xuICAgIHBsYWNlaG9sZGVyOiAnRXNjcmliZSB1biBtZW5zYWplJyxcbiAgICBzZW5kOiAnRW52aWFyJyxcbiAgICBhdHRhY2g6ICdBZGp1bnRhcicsXG4gICAgdm9pY2U6ICdNZW5zYWplIGRlIHZveicsXG4gICAgZGljdGF0ZTogJ0RpY3RhcicsXG4gICAgbGlzdGVuaW5nOiAnRXNjdWNoYW5kb+KApicsXG4gICAgZG9uZTogJ0xpc3RvJyxcbiAgICByZXBseWluZ1RvOiAnUmVzcG9uZGllbmRvIGEnLFxuICAgIGNhbmNlbDogJ0NhbmNlbGFyJyxcbiAgICByZW1vdmU6ICdRdWl0YXInLFxuICB9LFxuICBlbjoge1xuICAgIHBsYWNlaG9sZGVyOiAnV3JpdGUgYSBtZXNzYWdlJyxcbiAgICBzZW5kOiAnU2VuZCcsXG4gICAgYXR0YWNoOiAnQXR0YWNoJyxcbiAgICB2b2ljZTogJ1ZvaWNlIG1lc3NhZ2UnLFxuICAgIGRpY3RhdGU6ICdEaWN0YXRlJyxcbiAgICBsaXN0ZW5pbmc6ICdMaXN0ZW5pbmfigKYnLFxuICAgIGRvbmU6ICdEb25lJyxcbiAgICByZXBseWluZ1RvOiAnUmVwbHlpbmcgdG8nLFxuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgcmVtb3ZlOiAnUmVtb3ZlJyxcbiAgfSxcbn07XG5cbi8qKiBUaXBvcyBtw61uaW1vcyBkZSBsYSBXZWIgU3BlZWNoIEFQSSAobm8gZXN0w6FuIGVuIGxpYi5kb20gZXN0w6FuZGFyKS4gKi9cbmludGVyZmFjZSBTcGVlY2hSZWNvZ25pdGlvbkxpa2Uge1xuICBsYW5nOiBzdHJpbmc7XG4gIGNvbnRpbnVvdXM6IGJvb2xlYW47XG4gIGludGVyaW1SZXN1bHRzOiBib29sZWFuO1xuICBzdGFydCgpOiB2b2lkO1xuICBzdG9wKCk6IHZvaWQ7XG4gIGFib3J0KCk6IHZvaWQ7XG4gIG9ucmVzdWx0OlxuICAgIHwgKChldmVudDogeyByZXN1bHRJbmRleDogbnVtYmVyOyByZXN1bHRzOiBBcnJheUxpa2U8eyAwOiB7IHRyYW5zY3JpcHQ6IHN0cmluZyB9OyBpc0ZpbmFsOiBib29sZWFuIH0+IH0pID0+IHZvaWQpXG4gICAgfCBudWxsO1xuICBvbmVuZDogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgb25lcnJvcjogKChldmVudDogeyBlcnJvcjogc3RyaW5nIH0pID0+IHZvaWQpIHwgbnVsbDtcbn1cblxudHlwZSBQZW5kaW5nS2luZCA9ICdpbWFnZScgfCAnYXVkaW8nIHwgJ2ZpbGUnO1xuXG5pbnRlcmZhY2UgUGVuZGluZ0F0dGFjaG1lbnQge1xuICBpZDogbnVtYmVyO1xuICBmaWxlOiBGaWxlO1xuICB1cmw/OiBzdHJpbmc7XG4gIGtpbmQ6IFBlbmRpbmdLaW5kO1xufVxuXG4vKiogRXZlbnRvIGRlIGVudsOtbzogdGV4dG8gKGNhcHRpb24pICsgYWRqdW50b3Mgc3RhZ2VkLiBmaWxlcyB2YWPDrW8gPT4gc29sbyB0ZXh0by4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBvc2VyU2VuZEV2ZW50IHtcbiAgdGV4dDogc3RyaW5nO1xuICBmaWxlczogRmlsZVtdO1xufVxuXG4vKipcbiAqIHZhbC1jaGF0LWNvbXBvc2VyIOKAlCBiYXJyYSBkZSByZWRhY2Npw7NuIGVzdGlsbyBOb3Rpb24vQ2xhdWRlIChmdWxsIGN1c3RvbSkuXG4gKlxuICogRWwgZWRpdG9yIGVzIHVuIGBjb250ZW50ZWRpdGFibGVgIChOTyBpb24tdGV4dGFyZWEpOiBjcmVjZSBoYXN0YSB1biBtYXgtaGVpZ2h0LFxuICogc29wb3J0YSBwZWdhciB0ZXh0byBwbGFubyBlIGltw6FnZW5lcyBkZWwgcG9ydGFwYXBlbGVzLCBFbnRlciBlbnbDrWEgLyBTaGlmdCtFbnRlclxuICogc2FsdGEgbMOtbmVhLiBEZWJham8sIHVuYSBmaWxhIGRlIGFjY2lvbmVzIHByb3BpYXM6IGFkanVudGFyICgrKSwgbWljL2Vudmlhci5cbiAqIExvcyBhZGp1bnRvcyAoYm90w7NuIC8gcGVnYXIgLyBhdWRpbyBncmFiYWRvKSBzZSBhY3VtdWxhbiBjb21vIG1pbmlhdHVyYXMgZGVcbiAqIFBSRVZJRVcgeSBzZSBtYW5kYW4gZW4gVU4gc29sbyBldmVudG8gYHNlbmQge3RleHQsIGZpbGVzfWAgKGNhcHRpb24gKyBhZGp1bnRvcykuXG4gKlxuICogUGVuc2FkbyBwYXJhIHZpdmlyIGVuIHVuIGNvbnRlbmVkb3IgZmlqbyBhbCBmb25kbyBkZWwgdmlld3BvcnQgKGVsIGNvbnN1bWVyXG4gKiBhbmNsYSBsYSBwb3NpY2nDs24pLiBObyBpbmNsdXllIGVtb2ppIHBpY2tlciAoZWwgdGVjbGFkbyBkZWwgc2lzdGVtYSBsbyB0cmFlKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWNoYXQtY29tcG9zZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY29tcG9zZXJcIj5cbiAgICAgIEBpZiAocmVwbHlpbmdUbygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXBseS1iYXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwbHktY29udGVudFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBseS1uYW1lXCI+e3sgcmVwbHlpbmdUbygpIS5zZW5kZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBseS1ib2R5XCI+e3sgcmVwbHlpbmdUbygpIS5ib2R5IH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2FuY2VsJylcIiAoY2xpY2spPVwiY2FuY2VsUmVwbHkuZW1pdCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZWNvcmRpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjLWJhclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biBkYW5nZXJcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NhbmNlbCcpXCIgKGNsaWNrKT1cImNhbmNlbFJlY29yZGluZygpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlYy10aW1lXCI+e3sgcmVjVGltZUxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWMtc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnZG9uZScpXCIgKGNsaWNrKT1cImZpbmlzaFJlY29yZGluZygpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoZWxsXCI+XG4gICAgICAgICAgQGlmIChwZW5kaW5nKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlbmRpbmctcm93XCI+XG4gICAgICAgICAgICAgIEBmb3IgKGF0dCBvZiBwZW5kaW5nKCk7IHRyYWNrIGF0dC5pZCkge1xuICAgICAgICAgICAgICAgIEBpZiAoYXR0LmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdWRpby1jaGlwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhdWRpb1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzXG4gICAgICAgICAgICAgICAgICAgICAgcHJlbG9hZD1cIm1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImF0dC51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvbkF1ZGlvRXJyb3IoJ3ByZXZpZXcnLCBhdHQuZmlsZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGxvYWRlZG1ldGFkYXRhKT1cIm9uQXVkaW9Mb2FkZWQoJ3ByZXZpZXcnLCBhdHQuZmlsZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2F1ZGlvPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGh1bWItcmVtb3ZlIGlubGluZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgncmVtb3ZlJylcIiAoY2xpY2spPVwicmVtb3ZlUGVuZGluZyhhdHQuaWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHVtYlwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWxlXT1cImF0dC5raW5kID09PSAnZmlsZSdcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0F0dGFjaG1lbnQoYXR0KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ2aWV3QXR0YWNobWVudChhdHQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdHQua2luZCA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJhdHQudXJsXCIgW2FsdF09XCJhdHQuZmlsZS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJkb2N1bWVudC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRodW1iLW5hbWVcIj57eyBhdHQuZmlsZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRodW1iLXJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdyZW1vdmUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlUGVuZGluZyhhdHQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZWRpdGFibGVcbiAgICAgICAgICAgIGNsYXNzPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWVtcHR5XT1cIiFib2R5KClcIlxuICAgICAgICAgICAgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgICBhcmlhLW11bHRpbGluZT1cInRydWVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1wbGFjZWhvbGRlcl09XCJkaWN0YXRpbmcoKSA/IHQoJ2xpc3RlbmluZycpIDogcGxhY2Vob2xkZXJUZXh0KClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwbGFjZWhvbGRlclRleHQoKVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwic3luY0JvZHkoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb25zLXNwYWNlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoc2hvd0F0dGFjaCgpKSB7XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImljb24tYnRuXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdhdHRhY2gnKVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYWRkLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGhpZGRlbiAoY2hhbmdlKT1cIm9uRmlsZSgkZXZlbnQpXCIgYWNjZXB0PVwiaW1hZ2UvKixhcHBsaWNhdGlvbi9wZGZcIiAvPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzaG93Vm9pY2VNZXNzYWdlKCkpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCd2b2ljZScpXCIgKGNsaWNrKT1cInN0YXJ0UmVjb3JkaW5nKClcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm1pYy1jaXJjbGUtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzaG93TWljKCkgJiYgZGljdGF0aW9uU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tYnRuIGRpY3RhdGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiZGljdGF0aW5nKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnZGljdGF0ZScpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGljdGF0aW9uKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJtaWMtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChjYW5TZW5kKCkpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdzZW5kJylcIiAoY2xpY2spPVwib25TZW5kKClcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LXVwLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICAuY29tcG9zZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgcGFkZGluZzogOHB4IDEwcHggY2FsYyg4cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKTtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuICAgICAgLnJlcGx5LWJhciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXN0ZXAtMTAwLCByZ2JhKDEyNywgMTI3LCAxMjcsIDAuMSkpO1xuICAgICAgfVxuICAgICAgLnJlcGx5LWNvbnRlbnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgfVxuICAgICAgLnJlcGx5LW5hbWUge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgfVxuICAgICAgLnJlcGx5LWJvZHkge1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgfVxuICAgICAgLnBlbmRpbmctcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgcGFkZGluZzogMnB4IDRweDtcbiAgICAgIH1cbiAgICAgIC50aHVtYiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDcycHg7XG4gICAgICAgIGhlaWdodDogNzJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXN0ZXAtMTAwLCByZ2JhKDEyNywgMTI3LCAxMjcsIDAuMSkpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAudGh1bWIgaW1nIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICB9XG4gICAgICAudGh1bWIuZmlsZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgICAgcGFkZGluZzogNHB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgfVxuICAgICAgLnRodW1iLW5hbWUge1xuICAgICAgICBmb250LXNpemU6IDAuNTYyNXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgIH1cbiAgICAgIC50aHVtYi1yZW1vdmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMnB4O1xuICAgICAgICByaWdodDogMnB4O1xuICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjU1KTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgfVxuICAgICAgLyogU2hlbGwgZXN0aWxvIE5vdGlvbjogZWRpdGFibGUgYXJyaWJhLCBmaWxhIGRlIGFjY2lvbmVzIGFiYWpvLiAqL1xuICAgICAgLnNoZWxsIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyNnB4O1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICB9XG4gICAgICAuZWRpdGFibGUge1xuICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxODBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDtcbiAgICAgICAgdXNlci1zZWxlY3Q6IHRleHQ7XG4gICAgICB9XG4gICAgICAuZWRpdGFibGUuaXMtZW1wdHk6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICB9XG4gICAgICAuYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgfVxuICAgICAgLmFjdGlvbnMtc3BhY2VyIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICAgIC5pY29uLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDM0cHg7XG4gICAgICAgIGhlaWdodDogMzRweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIH1cbiAgICAgIC5pY29uLWJ0bjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAuaWNvbi1idG4uZGljdGF0ZS5hY3RpdmUge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBhbmltYXRpb246IGRpY3RhdGUtcHVsc2UgMS4ycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICAgIH1cbiAgICAgIEBrZXlmcmFtZXMgZGljdGF0ZS1wdWxzZSB7XG4gICAgICAgIDAlLFxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMC40O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAuc2VuZC1idG4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAzNHB4O1xuICAgICAgICBoZWlnaHQ6IDM0cHg7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnktY29udHJhc3QsICNmZmYpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzIGVhc2U7XG4gICAgICB9XG4gICAgICAuc2VuZC1idG46YWN0aXZlIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKTtcbiAgICAgIH1cbiAgICAgIC5pY29uLWJ0bi5kYW5nZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2ViNDQ1YSk7XG4gICAgICB9XG4gICAgICAuYXVkaW8tY2hpcCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogNHB4IDZweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXN0ZXAtMTAwLCByZ2JhKDEyNywgMTI3LCAxMjcsIDAuMSkpO1xuICAgICAgfVxuICAgICAgLmF1ZGlvLWNoaXAgYXVkaW8ge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBoZWlnaHQ6IDM2cHg7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC50aHVtYi1yZW1vdmUuaW5saW5lIHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgfVxuICAgICAgLnJlYy1iYXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgICAgfVxuICAgICAgLnJlYy1kb3Qge1xuICAgICAgICB3aWR0aDogMTBweDtcbiAgICAgICAgaGVpZ2h0OiAxMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1kYW5nZXIsICNlYjQ0NWEpO1xuICAgICAgICBhbmltYXRpb246IHJlYy1wdWxzZSAxLjJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuICAgICAgLnJlYy10aW1lIHtcbiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICB9XG4gICAgICAucmVjLXNwYWNlciB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG4gICAgICBAa2V5ZnJhbWVzIHJlYy1wdWxzZSB7XG4gICAgICAgIDAlLFxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4zO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhdENvbXBvc2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBtb2RhbCA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBtYXhMZW5ndGggPSBpbnB1dDxudW1iZXI+KDQwMDApO1xuICByZWFkb25seSByZXBseWluZ1RvID0gaW5wdXQ8TWVzc2FnZVJlcGx5VG8gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc2hvd0F0dGFjaCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICAvKiogQm90w7NuIGRlIGRpY3RhZG8gdm964oaSdGV4dG8gKFNwZWVjaFJlY29nbml0aW9uKS4gTmF0aXZvIGVuIFNhZmFyaS9pT1MgeSBDaHJvbWUuICovXG4gIHJlYWRvbmx5IHNob3dNaWMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgLyoqIEJvdMOzbiBkZSBtZW5zYWplIGRlIHZveiAoZ3JhYmFyIGNsaXApLiBPcHQtaW46IGxhIHJlcHJvZHVjY2nDs24gY3Jvc3MtZGV2aWNlXG4gICAqICByZXF1aWVyZSB0cmFuc2NvZGUgc2VydmVyLXNpZGUgKHBlbmRpZW50ZSksIHBvciBlc28gZGVmYXVsdCBmYWxzZS4gKi9cbiAgcmVhZG9ubHkgc2hvd1ZvaWNlTWVzc2FnZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBzZW5kID0gb3V0cHV0PENoYXRDb21wb3NlclNlbmRFdmVudD4oKTtcbiAgcmVhZG9ubHkgdHlwaW5nID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHZvaWNlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGNhbmNlbFJlcGx5ID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlZGl0YWJsZVJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2VkaXRhYmxlJyk7XG5cbiAgLy8gRGljdGFkbyB2b3rihpJ0ZXh0byAoV2ViIFNwZWVjaCBBUEkpLlxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGljdGF0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpY3RhdGlvblN1cHBvcnRlZCA9ICEhKFxuICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IFNwZWVjaFJlY29nbml0aW9uPzogdW5rbm93biB9KS5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHdlYmtpdFNwZWVjaFJlY29nbml0aW9uPzogdW5rbm93biB9KS53ZWJraXRTcGVlY2hSZWNvZ25pdGlvblxuICApO1xuICBwcml2YXRlIHJlY29nbml0aW9uPzogU3BlZWNoUmVjb2duaXRpb25MaWtlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBib2R5ID0gc2lnbmFsKCcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBlbmRpbmcgPSBzaWduYWw8UGVuZGluZ0F0dGFjaG1lbnRbXT4oW10pO1xuICBwcml2YXRlIHBlbmRpbmdJZCA9IDA7XG5cbiAgLy8gR3JhYmFjacOzbiBkZSBhdWRpbyAoTWVkaWFSZWNvcmRlcikuXG4gIHByb3RlY3RlZCByZWFkb25seSByZWNvcmRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlY1NlY29uZHMgPSBzaWduYWwoMCk7XG4gIHByaXZhdGUgcmVjb3JkZXI/OiBNZWRpYVJlY29yZGVyO1xuICBwcml2YXRlIHJlY1N0cmVhbT86IE1lZGlhU3RyZWFtO1xuICBwcml2YXRlIHJlY0NodW5rczogQmxvYltdID0gW107XG4gIHByaXZhdGUgcmVjVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlY1RpbWVMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5yZWNTZWNvbmRzKCk7XG4gICAgY29uc3QgbW0gPSBTdHJpbmcoTWF0aC5mbG9vcihzIC8gNjApKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IHNzID0gU3RyaW5nKHMgJSA2MCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7bW19OiR7c3N9YDtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBsYXN0VHlwaW5nRW1pdCA9IDA7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMoJ0NoYXRDb21wb3NlcicsIENIQVRfQ09NUE9TRVJfSTE4Tik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuU2VuZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdCA9IHRoaXMuYm9keSgpLnRyaW0oKTtcbiAgICByZXR1cm4gKHQubGVuZ3RoID4gMCAmJiB0Lmxlbmd0aCA8PSB0aGlzLm1heExlbmd0aCgpKSB8fCB0aGlzLnBlbmRpbmcoKS5sZW5ndGggPiAwO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGxhY2Vob2xkZXJUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXIoKSB8fCB0aGlzLmkxOG4udCgncGxhY2Vob2xkZXInLCAnQ2hhdENvbXBvc2VyJyk7XG4gIH0pO1xuXG4gIC8qKiBMZWUgZWwgdGV4dG8gZGVsIGNvbnRlbnRlZGl0YWJsZSBhIGxhIHNpZ25hbCBgYm9keWAuICovXG4gIHByb3RlY3RlZCBzeW5jQm9keSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWRpdGFibGVSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAvLyBpbm5lclRleHQgY29uc2VydmEgbG9zIHNhbHRvcyBkZSBsw61uZWE7IHF1aXRhIGVsIFxcbiBmaW5hbCBxdWUgZWwgbmF2ZWdhZG9yIGFncmVnYS5cbiAgICBjb25zdCB0ZXh0ID0gKGVsPy5pbm5lclRleHQgPz8gJycpLnJlcGxhY2UoL1xcbiQvLCAnJyk7XG4gICAgdGhpcy5ib2R5LnNldCh0ZXh0KTtcbiAgICB0aGlzLmVtaXRUeXBpbmdEZWJvdW5jZWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub25TZW5kKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFBlZ2FyOiB0ZXh0byBwbGFubyAoc2luIGZvcm1hdG8pICsgaW3DoWdlbmVzIGRlbCBwb3J0YXBhcGVsZXMuICovXG4gIHByb3RlY3RlZCBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGE7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47XG5cbiAgICAvLyBJbcOhZ2VuZXMgKGNhcHR1cmFzIC8gY29waWFyIGltYWdlbikuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIEFycmF5LmZyb20oZGF0YS5pdGVtcykpIHtcbiAgICAgIGlmIChpdGVtLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgIGlmIChmaWxlKSB0aGlzLmFkZFBlbmRpbmcoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGV4dG8gcGxhbm8gaW5zZXJ0YWRvIGVuIGVsIGNhcmV0IChldml0YSBwZWdhciBIVE1MIGNvbiBlc3RpbG9zKS5cbiAgICBjb25zdCB0ZXh0ID0gZGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsIHRleHQpO1xuICAgIH1cbiAgICB0aGlzLnN5bmNCb2R5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TZW5kKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5TZW5kKCkpIHJldHVybjtcbiAgICBjb25zdCBmaWxlcyA9IHRoaXMucGVuZGluZygpLm1hcChwID0+IHAuZmlsZSk7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMuYm9keSgpLnRyaW0oKTtcbiAgICB0aGlzLnNlbmQuZW1pdCh7IHRleHQsIGZpbGVzIH0pO1xuXG4gICAgZm9yIChjb25zdCBhdHQgb2YgdGhpcy5wZW5kaW5nKCkpIHtcbiAgICAgIGlmIChhdHQudXJsKSBVUkwucmV2b2tlT2JqZWN0VVJMKGF0dC51cmwpO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmcuc2V0KFtdKTtcbiAgICB0aGlzLmNsZWFyRWRpdGFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFZGl0YWJsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWRpdGFibGVSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZWwpIGVsLmlubmVyVGV4dCA9ICcnO1xuICAgIHRoaXMuYm9keS5zZXQoJycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRmlsZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgIGlmIChmaWxlKSB0aGlzLmFkZFBlbmRpbmcoZmlsZSk7XG4gICAgaW5wdXQudmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgYWRkUGVuZGluZyhmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgY29uc3Qga2luZDogUGVuZGluZ0tpbmQgPSBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgID8gJ2ltYWdlJ1xuICAgICAgOiBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJylcbiAgICAgICAgPyAnYXVkaW8nXG4gICAgICAgIDogJ2ZpbGUnO1xuICAgIGNvbnN0IHVybCA9IGtpbmQgPT09ICdmaWxlJyA/IHVuZGVmaW5lZCA6IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG4gICAgdGhpcy5wZW5kaW5nLnVwZGF0ZShhcnIgPT4gWy4uLmFyciwgeyBpZDogdGhpcy5wZW5kaW5nSWQrKywgZmlsZSwgdXJsLCBraW5kIH1dKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW1vdmVQZW5kaW5nKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBlbmRpbmcudXBkYXRlKGFyciA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IGFyci5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICAgICAgaWYgKGZvdW5kPy51cmwpIFVSTC5yZXZva2VPYmplY3RVUkwoZm91bmQudXJsKTtcbiAgICAgIHJldHVybiBhcnIuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEFicmUgZWwgYWRqdW50byBzdGFnZWQgZW4gZWwgdmlzb3IgZGUgbWVkaW9zIChpbWFnZW4gZnVsbCAvIGRlc2NhcmdhKS4gKi9cbiAgcHJvdGVjdGVkIHZpZXdBdHRhY2htZW50KGF0dDogUGVuZGluZ0F0dGFjaG1lbnQpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWwub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE1lZGlhVmlld2VyTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczogeyB1cmw6IGF0dC51cmwsIG5hbWU6IGF0dC5maWxlLm5hbWUsIG1pbWVUeXBlOiBhdHQuZmlsZS50eXBlIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRUeXBpbmdEZWJvdW5jZWQoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgaWYgKG5vdyAtIHRoaXMubGFzdFR5cGluZ0VtaXQgPiAyMDAwKSB7XG4gICAgICB0aGlzLmxhc3RUeXBpbmdFbWl0ID0gbm93O1xuICAgICAgdGhpcy50eXBpbmcuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBHcmFiYWNpw7NuIGRlIGF1ZGlvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgcGlja0F1ZGlvTWltZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbJ2F1ZGlvL3dlYm07Y29kZWNzPW9wdXMnLCAnYXVkaW8vd2VibScsICdhdWRpby9tcDQnXTtcbiAgICBjb25zdCBNUiA9ICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IE1lZGlhUmVjb3JkZXI/OiB0eXBlb2YgTWVkaWFSZWNvcmRlciB9KS5NZWRpYVJlY29yZGVyO1xuICAgIGlmICghTVI/LmlzVHlwZVN1cHBvcnRlZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiBjYW5kaWRhdGVzLmZpbmQoYyA9PiBNUi5pc1R5cGVTdXBwb3J0ZWQoYykpID8/ICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHN0YXJ0UmVjb3JkaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnJlY29yZGluZygpKSByZXR1cm47XG4gICAgaWYgKCFuYXZpZ2F0b3IubWVkaWFEZXZpY2VzPy5nZXRVc2VyTWVkaWEgfHwgISgnTWVkaWFSZWNvcmRlcicgaW4gd2luZG93KSkge1xuICAgICAgdGhpcy52b2ljZS5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pO1xuICAgICAgdGhpcy5yZWNTdHJlYW0gPSBzdHJlYW07XG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHRoaXMucGlja0F1ZGlvTWltZSgpO1xuICAgICAgdGhpcy5yZWNvcmRlciA9IG5ldyBNZWRpYVJlY29yZGVyKHN0cmVhbSwgbWltZVR5cGUgPyB7IG1pbWVUeXBlIH0gOiB1bmRlZmluZWQpO1xuICAgICAgY29uc29sZS5sb2coJ1tDaGF0Q29tcG9zZXJdIHJlY29yZGluZyBzdGFydCcsIHtcbiAgICAgICAgcGlja2VkOiBtaW1lVHlwZSB8fCAnKGRlZmF1bHQpJyxcbiAgICAgICAgcmVjb3JkZXJNaW1lVHlwZTogdGhpcy5yZWNvcmRlci5taW1lVHlwZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWNDaHVua3MgPSBbXTtcbiAgICAgIHRoaXMucmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gZSA9PiB7XG4gICAgICAgIGlmIChlLmRhdGEuc2l6ZSA+IDApIHRoaXMucmVjQ2h1bmtzLnB1c2goZS5kYXRhKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnJlY29yZGVyLnN0YXJ0KCk7XG4gICAgICB0aGlzLnJlY29yZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnJlY1NlY29uZHMuc2V0KDApO1xuICAgICAgdGhpcy5yZWNUaW1lciA9IHNldEludGVydmFsKCgpID0+IHRoaXMucmVjU2Vjb25kcy51cGRhdGUocyA9PiBzICsgMSksIDEwMDApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5jbGVhbnVwUmVjb3JkaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFBhcmEgbGEgZ3JhYmFjacOzbiB5IGxhIHN0YWdlYSBjb21vIGFkanVudG8gcGVuZGllbnRlIChjb24gcHJldmlldyBkZSBhdWRpbykuICovXG4gIHByb3RlY3RlZCBmaW5pc2hSZWNvcmRpbmcoKTogdm9pZCB7XG4gICAgY29uc3QgcmVjID0gdGhpcy5yZWNvcmRlcjtcbiAgICBpZiAoIXJlYykge1xuICAgICAgdGhpcy5jbGVhbnVwUmVjb3JkaW5nKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlYy5vbnN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eXBlID0gcmVjLm1pbWVUeXBlIHx8ICdhdWRpby93ZWJtJztcbiAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSB0aGlzLnJlY1NlY29uZHMoKSAqIDEwMDA7XG4gICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKHRoaXMucmVjQ2h1bmtzLCB7IHR5cGUgfSk7XG5cbiAgICAgIC8vIE1lZGlhUmVjb3JkZXIgZXNjcmliZSBXZWJNIFNJTiBlbCBoZWFkZXIgZGUgZHVyYWNpw7NuIChTZWdtZW50L0R1cmF0aW9uKSDihpJcbiAgICAgIC8vIGVsIDxhdWRpbz4gbG8gcmVjaGF6YSBjb24gU1JDX05PVF9TVVBQT1JURUQgYXVucXVlIGVsIGNvZGVjIGVzdMOpIHNvcG9ydGFkby5cbiAgICAgIC8vIGZpeC13ZWJtLWR1cmF0aW9uIHBhcmNoZWEgZWwgaGVhZGVyIGNvbiBsYSBkdXJhY2nDs24gcmVhbCDihpIgcmVwcm9kdWNpYmxlLlxuICAgICAgaWYgKHR5cGUuaW5jbHVkZXMoJ3dlYm0nKSAmJiBibG9iLnNpemUgPiAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYmxvYiA9IGF3YWl0IGZpeFdlYm1EdXJhdGlvbihibG9iLCBkdXJhdGlvbk1zLCB7IGxvZ2dlcjogZmFsc2UgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW0NoYXRDb21wb3Nlcl0gZml4V2VibUR1cmF0aW9uIGZhbGzDsywgc2UgdXNhIGVsIGJsb2IgY3J1ZG8nLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4dCA9IHR5cGUuaW5jbHVkZXMoJ21wNCcpID8gJ200YScgOiAnd2VibSc7XG4gICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBgYXVkaW8tJHt0aGlzLnJlY1NlY29uZHMoKX1zLiR7ZXh0fWAsIHsgdHlwZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKCdbQ2hhdENvbXBvc2VyXSBhdWRpbyByZWNvcmRlZCcsIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZTogYmxvYi5zaXplLFxuICAgICAgICBjaHVua3M6IHRoaXMucmVjQ2h1bmtzLmxlbmd0aCxcbiAgICAgICAgY2FuUGxheVdlYm06IHRoaXMuY2FuUGxheSgnYXVkaW8vd2VibScpLFxuICAgICAgICBjYW5QbGF5TXA0OiB0aGlzLmNhblBsYXkoJ2F1ZGlvL21wNCcpLFxuICAgICAgfSk7XG4gICAgICBpZiAoYmxvYi5zaXplID4gMCkgdGhpcy5hZGRQZW5kaW5nKGZpbGUpO1xuICAgICAgdGhpcy5jbGVhbnVwUmVjb3JkaW5nKCk7XG4gICAgfTtcbiAgICByZWMuc3RvcCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbmNlbFJlY29yZGluZygpOiB2b2lkIHtcbiAgICBjb25zdCByZWMgPSB0aGlzLnJlY29yZGVyO1xuICAgIGlmIChyZWMpIHJlYy5vbnN0b3AgPSAoKSA9PiB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB0cnkge1xuICAgICAgcmVjPy5zdG9wKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB9XG4gICAgaWYgKCFyZWMpIHRoaXMuY2xlYW51cFJlY29yZGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwUmVjb3JkaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY1RpbWVyKSBjbGVhckludGVydmFsKHRoaXMucmVjVGltZXIpO1xuICAgIHRoaXMucmVjVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZWNTdHJlYW0/LmdldFRyYWNrcygpLmZvckVhY2godCA9PiB0LnN0b3AoKSk7XG4gICAgdGhpcy5yZWNTdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZWNvcmRlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlY0NodW5rcyA9IFtdO1xuICAgIHRoaXMucmVjb3JkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5yZWNTZWNvbmRzLnNldCgwKTtcbiAgfVxuXG4gIC8qKiBEaWFnbsOzc3RpY286IGVsIG5hdmVnYWRvciBubyBwdWRvIHJlcHJvZHVjaXIgZWwgYWRqdW50byBkZSBhdWRpby4gKi9cbiAgcHJvdGVjdGVkIG9uQXVkaW9FcnJvcih3aGVyZTogc3RyaW5nLCBmaWxlOiBGaWxlLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MQXVkaW9FbGVtZW50O1xuICAgIGNvbnN0IGVyciA9IGVsLmVycm9yO1xuICAgIGNvbnN0IGNvZGVzOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgICAgMTogJ0FCT1JURUQnLFxuICAgICAgMjogJ05FVFdPUksnLFxuICAgICAgMzogJ0RFQ09ERScsXG4gICAgICA0OiAnU1JDX05PVF9TVVBQT1JURUQnLFxuICAgIH07XG4gICAgY29uc29sZS5lcnJvcignW0NoYXRDb21wb3Nlcl0gYXVkaW8gcGxheSBlcnJvcicsIHtcbiAgICAgIHdoZXJlLFxuICAgICAgZmlsZVR5cGU6IGZpbGUudHlwZSxcbiAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICBjb2RlOiBlcnI/LmNvZGUsXG4gICAgICByZWFzb246IGVyciA/IGNvZGVzW2Vyci5jb2RlXSA6ICd1bmtub3duJyxcbiAgICAgIG1lc3NhZ2U6IGVycj8ubWVzc2FnZSxcbiAgICAgIGNhblBsYXlUaGlzVHlwZTogdGhpcy5jYW5QbGF5KGZpbGUudHlwZSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25BdWRpb0xvYWRlZCh3aGVyZTogc3RyaW5nLCBmaWxlOiBGaWxlLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MQXVkaW9FbGVtZW50O1xuICAgIGNvbnNvbGUubG9nKCdbQ2hhdENvbXBvc2VyXSBhdWRpbyBsb2FkZWRtZXRhZGF0YScsIHtcbiAgICAgIHdoZXJlLFxuICAgICAgZmlsZVR5cGU6IGZpbGUudHlwZSxcbiAgICAgIGR1cmF0aW9uOiBlbC5kdXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiDCv0VsIG5hdmVnYWRvciBkZWNsYXJhIHF1ZSBwdWVkZSByZXByb2R1Y2lyIGVzdGUgdGlwbz8gJycgLyAnbWF5YmUnIC8gJ3Byb2JhYmx5Jy4gKi9cbiAgcHJpdmF0ZSBjYW5QbGF5KHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhdWRpbycpLmNhblBsYXlUeXBlKHR5cGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSA4pSAIERpY3RhZG8gdm964oaSdGV4dG8gKFdlYiBTcGVlY2ggQVBJKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcm90ZWN0ZWQgdG9nZ2xlRGljdGF0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpY3RhdGluZygpKSB7XG4gICAgICB0aGlzLnN0b3BEaWN0YXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydERpY3RhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnREaWN0YXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgQ3RvciA9XG4gICAgICAod2luZG93IGFzIHVua25vd24gYXMgeyBTcGVlY2hSZWNvZ25pdGlvbj86IG5ldyAoKSA9PiBTcGVlY2hSZWNvZ25pdGlvbkxpa2UgfSkuU3BlZWNoUmVjb2duaXRpb24gfHxcbiAgICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IHdlYmtpdFNwZWVjaFJlY29nbml0aW9uPzogbmV3ICgpID0+IFNwZWVjaFJlY29nbml0aW9uTGlrZSB9KS53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbjtcbiAgICBpZiAoIUN0b3IpIHJldHVybjtcblxuICAgIGNvbnN0IHJlYyA9IG5ldyBDdG9yKCk7XG4gICAgcmVjLmxhbmcgPSB0aGlzLmkxOG4ubGFuZygpID09PSAnZW4nID8gJ2VuLVVTJyA6ICdlcy1DTCc7XG4gICAgcmVjLmNvbnRpbnVvdXMgPSB0cnVlO1xuICAgIHJlYy5pbnRlcmltUmVzdWx0cyA9IGZhbHNlOyAvLyBzb2xvIHJlc3VsdGFkb3MgZmluYWxlcyDihpIgaW5zZXJ0YW1vcyB0ZXh0byBsaW1waW9cblxuICAgIHJlYy5vbnJlc3VsdCA9IGV2ZW50ID0+IHtcbiAgICAgIGxldCBmaW5hbFRleHQgPSAnJztcbiAgICAgIGZvciAobGV0IGkgPSBldmVudC5yZXN1bHRJbmRleDsgaSA8IGV2ZW50LnJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgciA9IGV2ZW50LnJlc3VsdHNbaV07XG4gICAgICAgIGlmIChyLmlzRmluYWwpIGZpbmFsVGV4dCArPSByWzBdLnRyYW5zY3JpcHQ7XG4gICAgICB9XG4gICAgICBpZiAoZmluYWxUZXh0KSB0aGlzLmluc2VydERpY3RhdGVkKGZpbmFsVGV4dCk7XG4gICAgfTtcbiAgICByZWMub25lcnJvciA9ICgpID0+IHRoaXMuc3RvcERpY3RhdGlvbigpO1xuICAgIHJlYy5vbmVuZCA9ICgpID0+IHtcbiAgICAgIC8vIEVsIHJlY29ub2NpbWllbnRvIHB1ZWRlIGNvcnRhcnNlIHNvbG87IHJlZmxlamFtb3MgZWwgZXN0YWRvLlxuICAgICAgdGhpcy5kaWN0YXRpbmcuc2V0KGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pdGlvbiA9IHJlYztcbiAgICB0aGlzLmVkaXRhYmxlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB0cnkge1xuICAgICAgcmVjLnN0YXJ0KCk7XG4gICAgICB0aGlzLmRpY3RhdGluZy5zZXQodHJ1ZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmRpY3RhdGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcERpY3RhdGlvbigpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWNvZ25pdGlvbj8uc3RvcCgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLyogbm9vcCAqL1xuICAgIH1cbiAgICB0aGlzLmRpY3RhdGluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgLyoqIEluc2VydGEgZWwgdGV4dG8gZGljdGFkbyBhbCBmaW5hbCBkZWwgZWRpdGFibGUgeSBzaW5jcm9uaXphIGVsIGJvZHkuICovXG4gIHByaXZhdGUgaW5zZXJ0RGljdGF0ZWQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVkaXRhYmxlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBlbC5pbm5lclRleHQucmVwbGFjZSgvXFxuJC8sICcnKTtcbiAgICBjb25zdCBzZXAgPSBjdXJyZW50ICYmICFjdXJyZW50LmVuZHNXaXRoKCcgJykgPyAnICcgOiAnJztcbiAgICBlbC5pbm5lclRleHQgPSBjdXJyZW50ICsgc2VwICsgdGV4dDtcbiAgICAvLyBDb2xvY2EgZWwgY2FyZXQgYWwgZmluYWwuXG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbCk7XG4gICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBzZWw/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbD8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIHRoaXMuYm9keS5zZXQoZWwuaW5uZXJUZXh0LnJlcGxhY2UoL1xcbiQvLCAnJykpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwUmVjb3JkaW5nKCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVjb2duaXRpb24/LmFib3J0KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBub29wICovXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMucGVuZGluZygpKSB7XG4gICAgICBpZiAoYXR0LnVybCkgVVJMLnJldm9rZU9iamVjdFVSTChhdHQudXJsKTtcbiAgICB9XG4gIH1cblxuICB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnQ2hhdENvbXBvc2VyJyk7XG4gIH1cbn1cbiJdfQ==
662
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1jb21wb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NoYXQtY29tcG9zZXIvY2hhdC1jb21wb3Nlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixjQUFjLEVBQ2QsWUFBWSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxlQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7QUFFNUcsUUFBUSxDQUFDO0lBQ1AsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osZUFBZTtJQUNmLFVBQVU7SUFDVixZQUFZO0lBQ1osY0FBYztJQUNkLFlBQVk7Q0FDYixDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLEVBQUUsRUFBRTtRQUNGLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsSUFBSSxFQUFFLFFBQVE7UUFD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VyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxVQUFVO1FBQ1osQ0FBQztRQUNELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakMsSUFBSSxHQUFHLENBQUMsR0FBRztnQkFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELENBQUMsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQzsrR0FqWVUscUJBQXFCO21HQUFyQixxQkFBcUIsK3RDQXBXdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFIVCx5MkhBdEhTLFlBQVksK0JBQUUsT0FBTzs7NEZBcVdwQixxQkFBcUI7a0JBeFdqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxSFQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGFkZE91dGxpbmUsXG4gIGNoZWNrbWFya091dGxpbmUsXG4gIGNsb3NlT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxuICBtaWNPdXRsaW5lLFxuICBwdWxzZU91dGxpbmUsXG4gIGFycm93VXBPdXRsaW5lLFxuICB0cmFzaE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IGZpeFdlYm1EdXJhdGlvbiBmcm9tICdmaXgtd2VibS1kdXJhdGlvbic7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBNZXNzYWdlUmVwbHlUbyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NoYXQvdHlwZXMnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBNZWRpYVZpZXdlck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL21lZGlhLXZpZXdlci1tb2RhbC9tZWRpYS12aWV3ZXItbW9kYWwuY29tcG9uZW50JztcblxuYWRkSWNvbnMoe1xuICBhZGRPdXRsaW5lLFxuICBjaGVja21hcmtPdXRsaW5lLFxuICBjbG9zZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbiAgbWljT3V0bGluZSxcbiAgcHVsc2VPdXRsaW5lLFxuICBhcnJvd1VwT3V0bGluZSxcbiAgdHJhc2hPdXRsaW5lLFxufSk7XG5cbmNvbnN0IENIQVRfQ09NUE9TRVJfSTE4TiA9IHtcbiAgZXM6IHtcbiAgICBwbGFjZWhvbGRlcjogJ0VzY3JpYmUgdW4gbWVuc2FqZScsXG4gICAgc2VuZDogJ0VudmlhcicsXG4gICAgYXR0YWNoOiAnQWRqdW50YXInLFxuICAgIHZvaWNlOiAnTWVuc2FqZSBkZSB2b3onLFxuICAgIGRpY3RhdGU6ICdEaWN0YXInLFxuICAgIGxpc3RlbmluZzogJ0VzY3VjaGFuZG/igKYnLFxuICAgIGRvbmU6ICdMaXN0bycsXG4gICAgcmVwbHlpbmdUbzogJ1Jlc3BvbmRpZW5kbyBhJyxcbiAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgcmVtb3ZlOiAnUXVpdGFyJyxcbiAgfSxcbiAgZW46IHtcbiAgICBwbGFjZWhvbGRlcjogJ1dyaXRlIGEgbWVzc2FnZScsXG4gICAgc2VuZDogJ1NlbmQnLFxuICAgIGF0dGFjaDogJ0F0dGFjaCcsXG4gICAgdm9pY2U6ICdWb2ljZSBtZXNzYWdlJyxcbiAgICBkaWN0YXRlOiAnRGljdGF0ZScsXG4gICAgbGlzdGVuaW5nOiAnTGlzdGVuaW5n4oCmJyxcbiAgICBkb25lOiAnRG9uZScsXG4gICAgcmVwbHlpbmdUbzogJ1JlcGx5aW5nIHRvJyxcbiAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgIHJlbW92ZTogJ1JlbW92ZScsXG4gIH0sXG59O1xuXG4vKiogVGlwb3MgbcOtbmltb3MgZGUgbGEgV2ViIFNwZWVjaCBBUEkgKG5vIGVzdMOhbiBlbiBsaWIuZG9tIGVzdMOhbmRhcikuICovXG5pbnRlcmZhY2UgU3BlZWNoUmVjb2duaXRpb25MaWtlIHtcbiAgbGFuZzogc3RyaW5nO1xuICBjb250aW51b3VzOiBib29sZWFuO1xuICBpbnRlcmltUmVzdWx0czogYm9vbGVhbjtcbiAgc3RhcnQoKTogdm9pZDtcbiAgc3RvcCgpOiB2b2lkO1xuICBhYm9ydCgpOiB2b2lkO1xuICBvbnJlc3VsdDpcbiAgICB8ICgoZXZlbnQ6IHsgcmVzdWx0SW5kZXg6IG51bWJlcjsgcmVzdWx0czogQXJyYXlMaWtlPHsgMDogeyB0cmFuc2NyaXB0OiBzdHJpbmcgfTsgaXNGaW5hbDogYm9vbGVhbiB9PiB9KSA9PiB2b2lkKVxuICAgIHwgbnVsbDtcbiAgb25lbmQ6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gIG9uZXJyb3I6ICgoZXZlbnQ6IHsgZXJyb3I6IHN0cmluZyB9KSA9PiB2b2lkKSB8IG51bGw7XG59XG5cbnR5cGUgUGVuZGluZ0tpbmQgPSAnaW1hZ2UnIHwgJ2F1ZGlvJyB8ICdmaWxlJztcblxuaW50ZXJmYWNlIFBlbmRpbmdBdHRhY2htZW50IHtcbiAgaWQ6IG51bWJlcjtcbiAgZmlsZTogRmlsZTtcbiAgdXJsPzogc3RyaW5nO1xuICBraW5kOiBQZW5kaW5nS2luZDtcbn1cblxuLyoqIEV2ZW50byBkZSBlbnbDrW86IHRleHRvIChjYXB0aW9uKSArIGFkanVudG9zIHN0YWdlZC4gZmlsZXMgdmFjw61vID0+IHNvbG8gdGV4dG8uICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wb3NlclNlbmRFdmVudCB7XG4gIHRleHQ6IHN0cmluZztcbiAgZmlsZXM6IEZpbGVbXTtcbn1cblxuLyoqXG4gKiB2YWwtY2hhdC1jb21wb3NlciDigJQgYmFycmEgZGUgcmVkYWNjacOzbiBlc3RpbG8gTm90aW9uL0NsYXVkZSAoZnVsbCBjdXN0b20pLlxuICpcbiAqIEVsIGVkaXRvciBlcyB1biBgY29udGVudGVkaXRhYmxlYCAoTk8gaW9uLXRleHRhcmVhKTogY3JlY2UgaGFzdGEgdW4gbWF4LWhlaWdodCxcbiAqIHNvcG9ydGEgcGVnYXIgdGV4dG8gcGxhbm8gZSBpbcOhZ2VuZXMgZGVsIHBvcnRhcGFwZWxlcywgRW50ZXIgZW52w61hIC8gU2hpZnQrRW50ZXJcbiAqIHNhbHRhIGzDrW5lYS4gRGViYWpvLCB1bmEgZmlsYSBkZSBhY2Npb25lcyBwcm9waWFzOiBhZGp1bnRhciAoKyksIG1pYy9lbnZpYXIuXG4gKiBMb3MgYWRqdW50b3MgKGJvdMOzbiAvIHBlZ2FyIC8gYXVkaW8gZ3JhYmFkbykgc2UgYWN1bXVsYW4gY29tbyBtaW5pYXR1cmFzIGRlXG4gKiBQUkVWSUVXIHkgc2UgbWFuZGFuIGVuIFVOIHNvbG8gZXZlbnRvIGBzZW5kIHt0ZXh0LCBmaWxlc31gIChjYXB0aW9uICsgYWRqdW50b3MpLlxuICpcbiAqIFBlbnNhZG8gcGFyYSB2aXZpciBlbiB1biBjb250ZW5lZG9yIGZpam8gYWwgZm9uZG8gZGVsIHZpZXdwb3J0IChlbCBjb25zdW1lclxuICogYW5jbGEgbGEgcG9zaWNpw7NuKS4gTm8gaW5jbHV5ZSBlbW9qaSBwaWNrZXIgKGVsIHRlY2xhZG8gZGVsIHNpc3RlbWEgbG8gdHJhZSkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaGF0LWNvbXBvc2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbXBvc2VyXCI+XG4gICAgICBAaWYgKHJlcGx5aW5nVG8oKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmVwbHktYmFyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlcGx5LWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVwbHktbmFtZVwiPnt7IHJlcGx5aW5nVG8oKSEuc2VuZGVyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVwbHktYm9keVwiPnt7IHJlcGx5aW5nVG8oKSEuYm9keSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NhbmNlbCcpXCIgKGNsaWNrKT1cImNhbmNlbFJlcGx5LmVtaXQoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVjb3JkaW5nKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlYy1iYXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gZGFuZ2VyXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjYW5jZWwnKVwiIChjbGljayk9XCJjYW5jZWxSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlYy1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWMtdGltZVwiPnt7IHJlY1RpbWVMYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjLXNwYWNlclwiPjwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2RvbmUnKVwiIChjbGljayk9XCJmaW5pc2hSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGVja21hcmstb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGVsbFwiPlxuICAgICAgICAgIEBpZiAocGVuZGluZygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZW5kaW5nLXJvd1wiPlxuICAgICAgICAgICAgICBAZm9yIChhdHQgb2YgcGVuZGluZygpOyB0cmFjayBhdHQuaWQpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGF0dC5raW5kID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXVkaW8tY2hpcFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIHByZWxvYWQ9XCJtZXRhZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhdHQudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25BdWRpb0Vycm9yKCdwcmV2aWV3JywgYXR0LmZpbGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChsb2FkZWRtZXRhZGF0YSk9XCJvbkF1ZGlvTG9hZGVkKCdwcmV2aWV3JywgYXR0LmZpbGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hdWRpbz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRodW1iLXJlbW92ZSBpbmxpbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3JlbW92ZScpXCIgKGNsaWNrKT1cInJlbW92ZVBlbmRpbmcoYXR0LmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGh1bWJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsZV09XCJhdHQua2luZCA9PT0gJ2ZpbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdBdHRhY2htZW50KGF0dClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwidmlld0F0dGFjaG1lbnQoYXR0KVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYXR0LmtpbmQgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiYXR0LnVybFwiIFthbHRdPVwiYXR0LmZpbGUubmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZG9jdW1lbnQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aHVtYi1uYW1lXCI+e3sgYXR0LmZpbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHVtYi1yZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgncmVtb3ZlJylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZVBlbmRpbmcoYXR0LmlkKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2VkaXRhYmxlXG4gICAgICAgICAgICBjbGFzcz1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1lbXB0eV09XCIhYm9keSgpXCJcbiAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIlxuICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICAgICAgYXJpYS1tdWx0aWxpbmU9XCJ0cnVlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcGxhY2Vob2xkZXJdPVwiZGljdGF0aW5nKCkgPyB0KCdsaXN0ZW5pbmcnKSA6IHBsYWNlaG9sZGVyVGV4dCgpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGxhY2Vob2xkZXJUZXh0KClcIlxuICAgICAgICAgICAgKGlucHV0KT1cInN5bmNCb2R5KClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9ucy1zcGFjZXJcIj48L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHNob3dBdHRhY2goKSkge1xuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpY29uLWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnYXR0YWNoJylcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFkZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gKGNoYW5nZSk9XCJvbkZpbGUoJGV2ZW50KVwiIGFjY2VwdD1cImltYWdlLyosYXBwbGljYXRpb24vcGRmXCIgLz5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc2hvd1ZvaWNlTWVzc2FnZSgpKSB7XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgndm9pY2UnKVwiIChjbGljayk9XCJzdGFydFJlY29yZGluZygpXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwdWxzZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNob3dNaWMoKSAmJiBkaWN0YXRpb25TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1idG4gZGljdGF0ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJkaWN0YXRpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdkaWN0YXRlJylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEaWN0YXRpb24oKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm1pYy1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGNhblNlbmQoKSkge1xuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3NlbmQnKVwiIChjbGljayk9XCJvblNlbmQoKVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYXJyb3ctdXAtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5jb21wb3NlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBwYWRkaW5nOiA4cHggMTBweCBjYWxjKDhweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpO1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICB9XG4gICAgICAucmVwbHktYmFyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICB9XG4gICAgICAucmVwbHktY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICB9XG4gICAgICAucmVwbHktbmFtZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAucmVwbHktYm9keSB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAucGVuZGluZy1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBwYWRkaW5nOiAycHggNHB4O1xuICAgICAgfVxuICAgICAgLnRodW1iIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogNzJweDtcbiAgICAgICAgaGVpZ2h0OiA3MnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC50aHVtYiBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cbiAgICAgIC50aHVtYi5maWxlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICBwYWRkaW5nOiA0cHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICB9XG4gICAgICAudGh1bWItbmFtZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC41NjI1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgfVxuICAgICAgLnRodW1iLXJlbW92ZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIHJpZ2h0OiAycHg7XG4gICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICB9XG4gICAgICAvKiBTaGVsbCBlc3RpbG8gTm90aW9uOiBlZGl0YWJsZSBhcnJpYmEsIGZpbGEgZGUgYWNjaW9uZXMgYWJham8uICovXG4gICAgICAuc2hlbGwge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDI2cHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICAgIH1cbiAgICAgIC5lZGl0YWJsZSB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDE4MHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xuICAgICAgICB1c2VyLXNlbGVjdDogdGV4dDtcbiAgICAgIH1cbiAgICAgIC5lZGl0YWJsZS5pcy1lbXB0eTo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cbiAgICAgIC5hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICB9XG4gICAgICAuYWN0aW9ucy1zcGFjZXIge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMzRweDtcbiAgICAgICAgaGVpZ2h0OiAzNHB4O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5pY29uLWJ0bi5kaWN0YXRlLmFjdGl2ZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGFuaW1hdGlvbjogZGljdGF0ZS1wdWxzZSAxLjJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuICAgICAgQGtleWZyYW1lcyBkaWN0YXRlLXB1bHNlIHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5zZW5kLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDM0cHg7XG4gICAgICAgIGhlaWdodDogMzRweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1jb250cmFzdCwgI2ZmZik7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5zZW5kLWJ0bjphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuLmRhbmdlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLCAjZWI0NDVhKTtcbiAgICAgIH1cbiAgICAgIC5hdWRpby1jaGlwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiA0cHggNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICB9XG4gICAgICAuYXVkaW8tY2hpcCBhdWRpbyB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogMzZweDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnRodW1iLXJlbW92ZS5pbmxpbmUge1xuICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAucmVjLWJhciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgICB9XG4gICAgICAucmVjLWRvdCB7XG4gICAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2ViNDQ1YSk7XG4gICAgICAgIGFuaW1hdGlvbjogcmVjLXB1bHNlIDEuMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG4gICAgICAucmVjLXRpbWUge1xuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgIH1cbiAgICAgIC5yZWMtc3BhY2VyIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICAgIEBrZXlmcmFtZXMgcmVjLXB1bHNlIHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0Q29tcG9zZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIG1vZGFsID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1heExlbmd0aCA9IGlucHV0PG51bWJlcj4oNDAwMCk7XG4gIHJlYWRvbmx5IHJlcGx5aW5nVG8gPSBpbnB1dDxNZXNzYWdlUmVwbHlUbyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzaG93QXR0YWNoID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIC8qKiBCb3TDs24gZGUgZGljdGFkbyB2b3rihpJ0ZXh0byAoU3BlZWNoUmVjb2duaXRpb24pLiBOYXRpdm8gZW4gU2FmYXJpL2lPUyB5IENocm9tZS4gKi9cbiAgcmVhZG9ubHkgc2hvd01pYyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICAvKiogQm90w7NuIGRlIG1lbnNhamUgZGUgdm96IChncmFiYXIgY2xpcCkuIE9wdC1pbjogbGEgcmVwcm9kdWNjacOzbiBjcm9zcy1kZXZpY2VcbiAgICogIHJlcXVpZXJlIHRyYW5zY29kZSBzZXJ2ZXItc2lkZSAocGVuZGllbnRlKSwgcG9yIGVzbyBkZWZhdWx0IGZhbHNlLiAqL1xuICByZWFkb25seSBzaG93Vm9pY2VNZXNzYWdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHNlbmQgPSBvdXRwdXQ8Q2hhdENvbXBvc2VyU2VuZEV2ZW50PigpO1xuICByZWFkb25seSB0eXBpbmcgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgdm9pY2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2FuY2VsUmVwbHkgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGVkaXRhYmxlUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignZWRpdGFibGUnKTtcblxuICAvLyBEaWN0YWRvIHZveuKGknRleHRvIChXZWIgU3BlZWNoIEFQSSkuXG4gIHByb3RlY3RlZCByZWFkb25seSBkaWN0YXRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGljdGF0aW9uU3VwcG9ydGVkID0gISEoXG4gICAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgU3BlZWNoUmVjb2duaXRpb24/OiB1bmtub3duIH0pLlNwZWVjaFJlY29nbml0aW9uIHx8XG4gICAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgd2Via2l0U3BlZWNoUmVjb2duaXRpb24/OiB1bmtub3duIH0pLndlYmtpdFNwZWVjaFJlY29nbml0aW9uXG4gICk7XG4gIHByaXZhdGUgcmVjb2duaXRpb24/OiBTcGVlY2hSZWNvZ25pdGlvbkxpa2U7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJvZHkgPSBzaWduYWwoJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGVuZGluZyA9IHNpZ25hbDxQZW5kaW5nQXR0YWNobWVudFtdPihbXSk7XG4gIHByaXZhdGUgcGVuZGluZ0lkID0gMDtcblxuICAvLyBHcmFiYWNpw7NuIGRlIGF1ZGlvIChNZWRpYVJlY29yZGVyKS5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlY29yZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjU2Vjb25kcyA9IHNpZ25hbCgwKTtcbiAgcHJpdmF0ZSByZWNvcmRlcj86IE1lZGlhUmVjb3JkZXI7XG4gIHByaXZhdGUgcmVjU3RyZWFtPzogTWVkaWFTdHJlYW07XG4gIHByaXZhdGUgcmVjQ2h1bmtzOiBCbG9iW10gPSBbXTtcbiAgcHJpdmF0ZSByZWNUaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVjVGltZUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHMgPSB0aGlzLnJlY1NlY29uZHMoKTtcbiAgICBjb25zdCBtbSA9IFN0cmluZyhNYXRoLmZsb29yKHMgLyA2MCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3Qgc3MgPSBTdHJpbmcocyAlIDYwKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHttbX06JHtzc31gO1xuICB9KTtcblxuICBwcml2YXRlIGxhc3RUeXBpbmdFbWl0ID0gMDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnQ2hhdENvbXBvc2VyJywgQ0hBVF9DT01QT1NFUl9JMThOKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5TZW5kID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0ID0gdGhpcy5ib2R5KCkudHJpbSgpO1xuICAgIHJldHVybiAodC5sZW5ndGggPiAwICYmIHQubGVuZ3RoIDw9IHRoaXMubWF4TGVuZ3RoKCkpIHx8IHRoaXMucGVuZGluZygpLmxlbmd0aCA+IDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwbGFjZWhvbGRlclRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcigpIHx8IHRoaXMuaTE4bi50KCdwbGFjZWhvbGRlcicsICdDaGF0Q29tcG9zZXInKTtcbiAgfSk7XG5cbiAgLyoqIExlZSBlbCB0ZXh0byBkZWwgY29udGVudGVkaXRhYmxlIGEgbGEgc2lnbmFsIGBib2R5YC4gKi9cbiAgcHJvdGVjdGVkIHN5bmNCb2R5KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lZGl0YWJsZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIC8vIGlubmVyVGV4dCBjb25zZXJ2YSBsb3Mgc2FsdG9zIGRlIGzDrW5lYTsgcXVpdGEgZWwgXFxuIGZpbmFsIHF1ZSBlbCBuYXZlZ2Fkb3IgYWdyZWdhLlxuICAgIGNvbnN0IHRleHQgPSAoZWw/LmlubmVyVGV4dCA/PyAnJykucmVwbGFjZSgvXFxuJC8sICcnKTtcbiAgICB0aGlzLmJvZHkuc2V0KHRleHQpO1xuICAgIHRoaXMuZW1pdFR5cGluZ0RlYm91bmNlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vblNlbmQoKTtcbiAgICB9XG4gIH1cblxuICAvKiogUGVnYXI6IHRleHRvIHBsYW5vIChzaW4gZm9ybWF0bykgKyBpbcOhZ2VuZXMgZGVsIHBvcnRhcGFwZWxlcy4gKi9cbiAgcHJvdGVjdGVkIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICBpZiAoIWRhdGEpIHJldHVybjtcblxuICAgIC8vIEltw6FnZW5lcyAoY2FwdHVyYXMgLyBjb3BpYXIgaW1hZ2VuKS5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgQXJyYXkuZnJvbShkYXRhLml0ZW1zKSkge1xuICAgICAgaWYgKGl0ZW0udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICBjb25zdCBmaWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgaWYgKGZpbGUpIHRoaXMuYWRkUGVuZGluZyhmaWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUZXh0byBwbGFubyBpbnNlcnRhZG8gZW4gZWwgY2FyZXQgKGV2aXRhIHBlZ2FyIEhUTUwgY29uIGVzdGlsb3MpLlxuICAgIGNvbnN0IHRleHQgPSBkYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgICBpZiAodGV4dCkge1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgdGV4dCk7XG4gICAgfVxuICAgIHRoaXMuc3luY0JvZHkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNlbmQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IGZpbGVzID0gdGhpcy5wZW5kaW5nKCkubWFwKHAgPT4gcC5maWxlKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5ib2R5KCkudHJpbSgpO1xuICAgIHRoaXMuc2VuZC5lbWl0KHsgdGV4dCwgZmlsZXMgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dCBvZiB0aGlzLnBlbmRpbmcoKSkge1xuICAgICAgaWYgKGF0dC51cmwpIFVSTC5yZXZva2VPYmplY3RVUkwoYXR0LnVybCk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZy5zZXQoW10pO1xuICAgIHRoaXMuY2xlYXJFZGl0YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVkaXRhYmxlKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lZGl0YWJsZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChlbCkgZWwuaW5uZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5ib2R5LnNldCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25GaWxlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07XG4gICAgaWYgKGZpbGUpIHRoaXMuYWRkUGVuZGluZyhmaWxlKTtcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQZW5kaW5nKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICBjb25zdCBraW5kOiBQZW5kaW5nS2luZCA9IGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgPyAnaW1hZ2UnXG4gICAgICA6IGZpbGUudHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKVxuICAgICAgICA/ICdhdWRpbydcbiAgICAgICAgOiAnZmlsZSc7XG4gICAgY29uc3QgdXJsID0ga2luZCA9PT0gJ2ZpbGUnID8gdW5kZWZpbmVkIDogVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcbiAgICB0aGlzLnBlbmRpbmcudXBkYXRlKGFyciA9PiBbLi4uYXJyLCB7IGlkOiB0aGlzLnBlbmRpbmdJZCsrLCBmaWxlLCB1cmwsIGtpbmQgfV0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZVBlbmRpbmcoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZy51cGRhdGUoYXJyID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gYXJyLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gICAgICBpZiAoZm91bmQ/LnVybCkgVVJMLnJldm9rZU9iamVjdFVSTChmb3VuZC51cmwpO1xuICAgICAgcmV0dXJuIGFyci5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQWJyZSBlbCBhZGp1bnRvIHN0YWdlZCBlbiBlbCB2aXNvciBkZSBtZWRpb3MgKGltYWdlbiBmdWxsIC8gZGVzY2FyZ2EpLiAqL1xuICBwcm90ZWN0ZWQgdmlld0F0dGFjaG1lbnQoYXR0OiBQZW5kaW5nQXR0YWNobWVudCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbC5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogTWVkaWFWaWV3ZXJNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7IHVybDogYXR0LnVybCwgbmFtZTogYXR0LmZpbGUubmFtZSwgbWltZVR5cGU6IGF0dC5maWxlLnR5cGUgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFR5cGluZ0RlYm91bmNlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBpZiAobm93IC0gdGhpcy5sYXN0VHlwaW5nRW1pdCA+IDIwMDApIHtcbiAgICAgIHRoaXMubGFzdFR5cGluZ0VtaXQgPSBub3c7XG4gICAgICB0aGlzLnR5cGluZy5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSA4pSAIEdyYWJhY2nDs24gZGUgYXVkaW8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBwaWNrQXVkaW9NaW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFsnYXVkaW8vd2VibTtjb2RlY3M9b3B1cycsICdhdWRpby93ZWJtJywgJ2F1ZGlvL21wNCddO1xuICAgIGNvbnN0IE1SID0gKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgTWVkaWFSZWNvcmRlcj86IHR5cGVvZiBNZWRpYVJlY29yZGVyIH0pLk1lZGlhUmVjb3JkZXI7XG4gICAgaWYgKCFNUj8uaXNUeXBlU3VwcG9ydGVkKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZXMuZmluZChjID0+IE1SLmlzVHlwZVN1cHBvcnRlZChjKSkgPz8gJyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnRSZWNvcmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucmVjb3JkaW5nKCkpIHJldHVybjtcbiAgICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXM/LmdldFVzZXJNZWRpYSB8fCAhKCdNZWRpYVJlY29yZGVyJyBpbiB3aW5kb3cpKSB7XG4gICAgICB0aGlzLnZvaWNlLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICB0aGlzLnJlY1N0cmVhbSA9IHN0cmVhbTtcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5waWNrQXVkaW9NaW1lKCk7XG4gICAgICB0aGlzLnJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtLCBtaW1lVHlwZSA/IHsgbWltZVR5cGUgfSA6IHVuZGVmaW5lZCk7XG4gICAgICBjb25zb2xlLmxvZygnW0NoYXRDb21wb3Nlcl0gcmVjb3JkaW5nIHN0YXJ0Jywge1xuICAgICAgICBwaWNrZWQ6IG1pbWVUeXBlIHx8ICcoZGVmYXVsdCknLFxuICAgICAgICByZWNvcmRlck1pbWVUeXBlOiB0aGlzLnJlY29yZGVyLm1pbWVUeXBlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlY0NodW5rcyA9IFtdO1xuICAgICAgdGhpcy5yZWNvcmRlci5vbmRhdGFhdmFpbGFibGUgPSBlID0+IHtcbiAgICAgICAgaWYgKGUuZGF0YS5zaXplID4gMCkgdGhpcy5yZWNDaHVua3MucHVzaChlLmRhdGEpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucmVjb3JkZXIuc3RhcnQoKTtcbiAgICAgIHRoaXMucmVjb3JkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMucmVjU2Vjb25kcy5zZXQoMCk7XG4gICAgICB0aGlzLnJlY1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5yZWNTZWNvbmRzLnVwZGF0ZShzID0+IHMgKyAxKSwgMTAwMCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogUGFyYSBsYSBncmFiYWNpw7NuIHkgbGEgc3RhZ2VhIGNvbW8gYWRqdW50byBwZW5kaWVudGUgKGNvbiBwcmV2aWV3IGRlIGF1ZGlvKS4gKi9cbiAgcHJvdGVjdGVkIGZpbmlzaFJlY29yZGluZygpOiB2b2lkIHtcbiAgICBjb25zdCByZWMgPSB0aGlzLnJlY29yZGVyO1xuICAgIGlmICghcmVjKSB7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVjLm9uc3RvcCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSByZWMubWltZVR5cGUgfHwgJ2F1ZGlvL3dlYm0nO1xuICAgICAgY29uc3QgZHVyYXRpb25NcyA9IHRoaXMucmVjU2Vjb25kcygpICogMTAwMDtcbiAgICAgIGxldCBibG9iID0gbmV3IEJsb2IodGhpcy5yZWNDaHVua3MsIHsgdHlwZSB9KTtcblxuICAgICAgLy8gTWVkaWFSZWNvcmRlciBlc2NyaWJlIFdlYk0gU0lOIGVsIGhlYWRlciBkZSBkdXJhY2nDs24gKFNlZ21lbnQvRHVyYXRpb24pIOKGklxuICAgICAgLy8gZWwgPGF1ZGlvPiBsbyByZWNoYXphIGNvbiBTUkNfTk9UX1NVUFBPUlRFRCBhdW5xdWUgZWwgY29kZWMgZXN0w6kgc29wb3J0YWRvLlxuICAgICAgLy8gZml4LXdlYm0tZHVyYXRpb24gcGFyY2hlYSBlbCBoZWFkZXIgY29uIGxhIGR1cmFjacOzbiByZWFsIOKGkiByZXByb2R1Y2libGUuXG4gICAgICBpZiAodHlwZS5pbmNsdWRlcygnd2VibScpICYmIGJsb2Iuc2l6ZSA+IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBibG9iID0gYXdhaXQgZml4V2VibUR1cmF0aW9uKGJsb2IsIGR1cmF0aW9uTXMsIHsgbG9nZ2VyOiBmYWxzZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbQ2hhdENvbXBvc2VyXSBmaXhXZWJtRHVyYXRpb24gZmFsbMOzLCBzZSB1c2EgZWwgYmxvYiBjcnVkbycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0ID0gdHlwZS5pbmNsdWRlcygnbXA0JykgPyAnbTRhJyA6ICd3ZWJtJztcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGBhdWRpby0ke3RoaXMucmVjU2Vjb25kcygpfXMuJHtleHR9YCwgeyB0eXBlIH0pO1xuICAgICAgY29uc29sZS5sb2coJ1tDaGF0Q29tcG9zZXJdIGF1ZGlvIHJlY29yZGVkJywge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzaXplOiBibG9iLnNpemUsXG4gICAgICAgIGNodW5rczogdGhpcy5yZWNDaHVua3MubGVuZ3RoLFxuICAgICAgICBjYW5QbGF5V2VibTogdGhpcy5jYW5QbGF5KCdhdWRpby93ZWJtJyksXG4gICAgICAgIGNhblBsYXlNcDQ6IHRoaXMuY2FuUGxheSgnYXVkaW8vbXA0JyksXG4gICAgICB9KTtcbiAgICAgIGlmIChibG9iLnNpemUgPiAwKSB0aGlzLmFkZFBlbmRpbmcoZmlsZSk7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB9O1xuICAgIHJlYy5zdG9wKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuY2VsUmVjb3JkaW5nKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlYyA9IHRoaXMucmVjb3JkZXI7XG4gICAgaWYgKHJlYykgcmVjLm9uc3RvcCA9ICgpID0+IHRoaXMuY2xlYW51cFJlY29yZGluZygpO1xuICAgIHRyeSB7XG4gICAgICByZWM/LnN0b3AoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuY2xlYW51cFJlY29yZGluZygpO1xuICAgIH1cbiAgICBpZiAoIXJlYykgdGhpcy5jbGVhbnVwUmVjb3JkaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBSZWNvcmRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjVGltZXIpIGNsZWFySW50ZXJ2YWwodGhpcy5yZWNUaW1lcik7XG4gICAgdGhpcy5yZWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlY1N0cmVhbT8uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0ID0+IHQuc3RvcCgpKTtcbiAgICB0aGlzLnJlY1N0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlY29yZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVjQ2h1bmtzID0gW107XG4gICAgdGhpcy5yZWNvcmRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlY1NlY29uZHMuc2V0KDApO1xuICB9XG5cbiAgLyoqIERpYWduw7NzdGljbzogZWwgbmF2ZWdhZG9yIG5vIHB1ZG8gcmVwcm9kdWNpciBlbCBhZGp1bnRvIGRlIGF1ZGlvLiAqL1xuICBwcm90ZWN0ZWQgb25BdWRpb0Vycm9yKHdoZXJlOiBzdHJpbmcsIGZpbGU6IEZpbGUsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxBdWRpb0VsZW1lbnQ7XG4gICAgY29uc3QgZXJyID0gZWwuZXJyb3I7XG4gICAgY29uc3QgY29kZXM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICAxOiAnQUJPUlRFRCcsXG4gICAgICAyOiAnTkVUV09SSycsXG4gICAgICAzOiAnREVDT0RFJyxcbiAgICAgIDQ6ICdTUkNfTk9UX1NVUFBPUlRFRCcsXG4gICAgfTtcbiAgICBjb25zb2xlLmVycm9yKCdbQ2hhdENvbXBvc2VyXSBhdWRpbyBwbGF5IGVycm9yJywge1xuICAgICAgd2hlcmUsXG4gICAgICBmaWxlVHlwZTogZmlsZS50eXBlLFxuICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgIGNvZGU6IGVycj8uY29kZSxcbiAgICAgIHJlYXNvbjogZXJyID8gY29kZXNbZXJyLmNvZGVdIDogJ3Vua25vd24nLFxuICAgICAgbWVzc2FnZTogZXJyPy5tZXNzYWdlLFxuICAgICAgY2FuUGxheVRoaXNUeXBlOiB0aGlzLmNhblBsYXkoZmlsZS50eXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkF1ZGlvTG9hZGVkKHdoZXJlOiBzdHJpbmcsIGZpbGU6IEZpbGUsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxBdWRpb0VsZW1lbnQ7XG4gICAgY29uc29sZS5sb2coJ1tDaGF0Q29tcG9zZXJdIGF1ZGlvIGxvYWRlZG1ldGFkYXRhJywge1xuICAgICAgd2hlcmUsXG4gICAgICBmaWxlVHlwZTogZmlsZS50eXBlLFxuICAgICAgZHVyYXRpb246IGVsLmR1cmF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIMK/RWwgbmF2ZWdhZG9yIGRlY2xhcmEgcXVlIHB1ZWRlIHJlcHJvZHVjaXIgZXN0ZSB0aXBvPyAnJyAvICdtYXliZScgLyAncHJvYmFibHknLiAqL1xuICBwcml2YXRlIGNhblBsYXkodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUodHlwZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIDilIAgRGljdGFkbyB2b3rihpJ0ZXh0byAoV2ViIFNwZWVjaCBBUEkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByb3RlY3RlZCB0b2dnbGVEaWN0YXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGljdGF0aW5nKCkpIHtcbiAgICAgIHRoaXMuc3RvcERpY3RhdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0RGljdGF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydERpY3RhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBDdG9yID1cbiAgICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IFNwZWVjaFJlY29nbml0aW9uPzogbmV3ICgpID0+IFNwZWVjaFJlY29nbml0aW9uTGlrZSB9KS5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuICAgICAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgd2Via2l0U3BlZWNoUmVjb2duaXRpb24/OiBuZXcgKCkgPT4gU3BlZWNoUmVjb2duaXRpb25MaWtlIH0pLndlYmtpdFNwZWVjaFJlY29nbml0aW9uO1xuICAgIGlmICghQ3RvcikgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjID0gbmV3IEN0b3IoKTtcbiAgICByZWMubGFuZyA9IHRoaXMuaTE4bi5sYW5nKCkgPT09ICdlbicgPyAnZW4tVVMnIDogJ2VzLUNMJztcbiAgICByZWMuY29udGludW91cyA9IHRydWU7XG4gICAgcmVjLmludGVyaW1SZXN1bHRzID0gZmFsc2U7IC8vIHNvbG8gcmVzdWx0YWRvcyBmaW5hbGVzIOKGkiBpbnNlcnRhbW9zIHRleHRvIGxpbXBpb1xuXG4gICAgcmVjLm9ucmVzdWx0ID0gZXZlbnQgPT4ge1xuICAgICAgbGV0IGZpbmFsVGV4dCA9ICcnO1xuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50LnJlc3VsdEluZGV4OyBpIDwgZXZlbnQucmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZXZlbnQucmVzdWx0c1tpXTtcbiAgICAgICAgaWYgKHIuaXNGaW5hbCkgZmluYWxUZXh0ICs9IHJbMF0udHJhbnNjcmlwdDtcbiAgICAgIH1cbiAgICAgIGlmIChmaW5hbFRleHQpIHRoaXMuaW5zZXJ0RGljdGF0ZWQoZmluYWxUZXh0KTtcbiAgICB9O1xuICAgIHJlYy5vbmVycm9yID0gKCkgPT4gdGhpcy5zdG9wRGljdGF0aW9uKCk7XG4gICAgcmVjLm9uZW5kID0gKCkgPT4ge1xuICAgICAgLy8gRWwgcmVjb25vY2ltaWVudG8gcHVlZGUgY29ydGFyc2Ugc29sbzsgcmVmbGVqYW1vcyBlbCBlc3RhZG8uXG4gICAgICB0aGlzLmRpY3RhdGluZy5zZXQoZmFsc2UpO1xuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml0aW9uID0gcmVjO1xuICAgIHRoaXMuZWRpdGFibGVSZWYoKT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRyeSB7XG4gICAgICByZWMuc3RhcnQoKTtcbiAgICAgIHRoaXMuZGljdGF0aW5nLnNldCh0cnVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuZGljdGF0aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wRGljdGF0aW9uKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlY29nbml0aW9uPy5zdG9wKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBub29wICovXG4gICAgfVxuICAgIHRoaXMuZGljdGF0aW5nLnNldChmYWxzZSk7XG4gIH1cblxuICAvKiogSW5zZXJ0YSBlbCB0ZXh0byBkaWN0YWRvIGFsIGZpbmFsIGRlbCBlZGl0YWJsZSB5IHNpbmNyb25pemEgZWwgYm9keS4gKi9cbiAgcHJpdmF0ZSBpbnNlcnREaWN0YXRlZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWRpdGFibGVSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVudCA9IGVsLmlubmVyVGV4dC5yZXBsYWNlKC9cXG4kLywgJycpO1xuICAgIGNvbnN0IHNlcCA9IGN1cnJlbnQgJiYgIWN1cnJlbnQuZW5kc1dpdGgoJyAnKSA/ICcgJyA6ICcnO1xuICAgIGVsLmlubmVyVGV4dCA9IGN1cnJlbnQgKyBzZXAgKyB0ZXh0O1xuICAgIC8vIENvbG9jYSBlbCBjYXJldCBhbCBmaW5hbC5cbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsKTtcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIHNlbD8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgdGhpcy5ib2R5LnNldChlbC5pbm5lclRleHQucmVwbGFjZSgvXFxuJC8sICcnKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWNvZ25pdGlvbj8uYWJvcnQoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIG5vb3AgKi9cbiAgICB9XG4gICAgZm9yIChjb25zdCBhdHQgb2YgdGhpcy5wZW5kaW5nKCkpIHtcbiAgICAgIGlmIChhdHQudXJsKSBVUkwucmV2b2tlT2JqZWN0VVJMKGF0dC51cmwpO1xuICAgIH1cbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdDaGF0Q29tcG9zZXInKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ // val-usage-meters — tipos. Componente presentacional del dashboard de consumo
2
+ // (ADR-046 D3). Object-first; el consumer pasa los datos ya resueltos
3
+ // (típicamente desde UsageService, que lee Firestore en vivo).
4
+ export {};
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3VzYWdlLW1ldGVycy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrRUFBK0U7QUFDL0Usc0VBQXNFO0FBQ3RFLCtEQUErRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIHZhbC11c2FnZS1tZXRlcnMg4oCUIHRpcG9zLiBDb21wb25lbnRlIHByZXNlbnRhY2lvbmFsIGRlbCBkYXNoYm9hcmQgZGUgY29uc3Vtb1xuLy8gKEFEUi0wNDYgRDMpLiBPYmplY3QtZmlyc3Q7IGVsIGNvbnN1bWVyIHBhc2EgbG9zIGRhdG9zIHlhIHJlc3VlbHRvc1xuLy8gKHTDrXBpY2FtZW50ZSBkZXNkZSBVc2FnZVNlcnZpY2UsIHF1ZSBsZWUgRmlyZXN0b3JlIGVuIHZpdm8pLlxuXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlTWV0cmljIHtcbiAgLyoqIENsYXZlIGRlIGxhIG3DqXRyaWNhIChlai4gXCJlbWFpbHNfbW9udGhcIikuICovXG4gIGtleTogc3RyaW5nO1xuICAvKiogRXRpcXVldGEgdmlzaWJsZSB5YSByZXN1ZWx0YSBwb3IgZWwgY29uc3VtZXIgKGVqLiBcIkVtYWlscyAvIG1lc1wiKS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIENvbnN1bW8gZGVsIHBlcsOtb2RvLiAqL1xuICB1c2VkOiBudW1iZXI7XG4gIC8qKiBUb3BlOyAtMSA9IGlsaW1pdGFkby4gKi9cbiAgbGltaXQ6IG51bWJlcjtcbiAgLyoqIHRydWUgc2kgZWwgdG9wZSBlcyBpbGltaXRhZG8gKC0xKS4gKi9cbiAgdW5saW1pdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlTWV0ZXJzTWV0YWRhdGEge1xuICAvKiogVMOtdHVsbyBkZSBsYSBzZWNjacOzbiAob3BjaW9uYWwpLiAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIE5vbWJyZSBkZSBsYSBhcHAgYSBsYSBxdWUgcGVydGVuZWNlIGVzdGUgYmxvcXVlIChwYXJhIHZpc3RhIG11bHRpLWFwcCkuICovXG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaWVyIGRlbCBwbGFuLCBwYXJhIG1vc3RyYXIgY29tbyBiYWRnZSAoZWouIFwiUHJvXCIpLiAqL1xuICBwbGFuPzogc3RyaW5nO1xuICAvKiogUGVyw61vZG8gKGVqLiBcIjIwMjYtMDZcIikuICovXG4gIHBlcmlvZD86IHN0cmluZztcbiAgLyoqIE3DqXRyaWNhcyBhIG1vc3RyYXIuICovXG4gIG1ldHJpY3M6IFVzYWdlTWV0cmljW107XG59XG4iXX0=
@@ -0,0 +1,124 @@
1
+ import { Component, computed, inject, input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { I18nService } from '../../../services/i18n/i18n.service';
4
+ import * as i0 from "@angular/core";
5
+ const USAGE_METERS_I18N = {
6
+ es: { unlimited: 'Ilimitado', of: 'de', empty: 'Sin datos de consumo aún.' },
7
+ en: { unlimited: 'Unlimited', of: 'of', empty: 'No usage data yet.' },
8
+ };
9
+ /**
10
+ * val-usage-meters — bloque de consumo (uso vs tope por métrica) para el
11
+ * dashboard de monetización (ADR-046 D3). Presentacional: recibe los datos ya
12
+ * resueltos (UsageService los arma desde Firestore). Reutilizable single-app o
13
+ * por sección en multi-app (myvaltech account).
14
+ */
15
+ export class UsageMetersComponent {
16
+ constructor() {
17
+ this.i18n = inject(I18nService);
18
+ this.props = input.required();
19
+ this.rows = computed(() => {
20
+ this.i18n.lang();
21
+ const unlimitedLabel = this.t('unlimited');
22
+ const ofLabel = this.t('of');
23
+ return (this.props().metrics ?? []).map((m) => {
24
+ const unlimited = m.unlimited || m.limit < 0;
25
+ const over = !unlimited && m.limit > 0 && m.used >= m.limit;
26
+ const pct = unlimited || m.limit <= 0
27
+ ? 0
28
+ : Math.min(100, Math.round((m.used / m.limit) * 100));
29
+ const usedLabel = unlimited
30
+ ? `${m.used} · ${unlimitedLabel}`
31
+ : `${m.used} ${ofLabel} ${m.limit}`;
32
+ return { key: m.key, label: m.label, usedLabel, pct, unlimited, over };
33
+ });
34
+ });
35
+ if (!this.i18n.hasNamespace('UsageMeters')) {
36
+ this.i18n.registerContent('UsageMeters', USAGE_METERS_I18N);
37
+ }
38
+ }
39
+ t(key) {
40
+ this.i18n.lang();
41
+ return this.i18n.t(key, 'UsageMeters');
42
+ }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UsageMetersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
44
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UsageMetersComponent, isStandalone: true, selector: "val-usage-meters", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
45
+ <div class="usage">
46
+ @if (props().appName || props().title) {
47
+ <div class="usage__head">
48
+ <span class="usage__title">{{ props().appName || props().title }}</span>
49
+ @if (props().plan) {
50
+ <span class="usage__plan">{{ props().plan }}</span>
51
+ }
52
+ </div>
53
+ }
54
+
55
+ @if (rows().length === 0) {
56
+ <p class="usage__empty">{{ t('empty') }}</p>
57
+ } @else {
58
+ <ul class="usage__list">
59
+ @for (row of rows(); track row.key) {
60
+ <li class="meter">
61
+ <div class="meter__top">
62
+ <span class="meter__label">{{ row.label }}</span>
63
+ <span class="meter__value" [class.meter__value--over]="row.over">
64
+ {{ row.usedLabel }}
65
+ </span>
66
+ </div>
67
+ @if (!row.unlimited) {
68
+ <div class="meter__track">
69
+ <div
70
+ class="meter__fill"
71
+ [class.meter__fill--over]="row.over"
72
+ [style.width.%]="row.pct"
73
+ ></div>
74
+ </div>
75
+ }
76
+ </li>
77
+ }
78
+ </ul>
79
+ }
80
+ </div>
81
+ `, isInline: true, styles: [":host{display:block}.usage__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.usage__title{font-size:1.125rem;font-weight:700;color:var(--ion-text-color, #000)}.usage__plan{font-size:.75rem;font-weight:600;padding:2px 10px;border-radius:999px;background:var(--ion-color-primary, #3880ff);color:var(--ion-color-primary-contrast, #fff)}.usage__empty{font-size:.875rem;color:var(--ion-color-medium, #92949c)}.usage__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.meter__top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}.meter__label{font-size:.875rem;color:var(--ion-text-color, #000)}.meter__value{font-size:.8125rem;font-weight:600;color:var(--ion-color-medium, #92949c)}.meter__value--over{color:var(--ion-color-danger, #eb445a)}.meter__track{height:8px;border-radius:999px;background:var(--ion-color-light, rgba(0, 0, 0, .08));overflow:hidden}.meter__fill{height:100%;border-radius:999px;background:var(--ion-color-primary, #3880ff);transition:width .3s ease}.meter__fill--over{background:var(--ion-color-danger, #eb445a)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UsageMetersComponent, decorators: [{
84
+ type: Component,
85
+ args: [{ selector: 'val-usage-meters', standalone: true, imports: [CommonModule], template: `
86
+ <div class="usage">
87
+ @if (props().appName || props().title) {
88
+ <div class="usage__head">
89
+ <span class="usage__title">{{ props().appName || props().title }}</span>
90
+ @if (props().plan) {
91
+ <span class="usage__plan">{{ props().plan }}</span>
92
+ }
93
+ </div>
94
+ }
95
+
96
+ @if (rows().length === 0) {
97
+ <p class="usage__empty">{{ t('empty') }}</p>
98
+ } @else {
99
+ <ul class="usage__list">
100
+ @for (row of rows(); track row.key) {
101
+ <li class="meter">
102
+ <div class="meter__top">
103
+ <span class="meter__label">{{ row.label }}</span>
104
+ <span class="meter__value" [class.meter__value--over]="row.over">
105
+ {{ row.usedLabel }}
106
+ </span>
107
+ </div>
108
+ @if (!row.unlimited) {
109
+ <div class="meter__track">
110
+ <div
111
+ class="meter__fill"
112
+ [class.meter__fill--over]="row.over"
113
+ [style.width.%]="row.pct"
114
+ ></div>
115
+ </div>
116
+ }
117
+ </li>
118
+ }
119
+ </ul>
120
+ }
121
+ </div>
122
+ `, styles: [":host{display:block}.usage__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.usage__title{font-size:1.125rem;font-weight:700;color:var(--ion-text-color, #000)}.usage__plan{font-size:.75rem;font-weight:600;padding:2px 10px;border-radius:999px;background:var(--ion-color-primary, #3880ff);color:var(--ion-color-primary-contrast, #fff)}.usage__empty{font-size:.875rem;color:var(--ion-color-medium, #92949c)}.usage__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.meter__top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}.meter__label{font-size:.875rem;color:var(--ion-text-color, #000)}.meter__value{font-size:.8125rem;font-weight:600;color:var(--ion-color-medium, #92949c)}.meter__value--over{color:var(--ion-color-danger, #eb445a)}.meter__track{height:8px;border-radius:999px;background:var(--ion-color-light, rgba(0, 0, 0, .08));overflow:hidden}.meter__fill{height:100%;border-radius:999px;background:var(--ion-color-primary, #3880ff);transition:width .3s ease}.meter__fill--over{background:var(--ion-color-danger, #eb445a)}\n"] }]
123
+ }], ctorParameters: () => [] });
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UtbWV0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvdXNhZ2UtbWV0ZXJzL3VzYWdlLW1ldGVycy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQUdsRSxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7SUFDNUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtDQUN0RSxDQUFDO0FBV0Y7Ozs7O0dBS0c7QUFtSEgsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQjtRQUpRLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFMUIsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXVCLENBQUM7UUFROUMsU0FBSSxHQUFHLFFBQVEsQ0FBYSxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDNUQsTUFBTSxHQUFHLEdBQ1AsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxNQUFNLFNBQVMsR0FBRyxTQUFTO29CQUN6QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLGNBQWMsRUFBRTtvQkFDakMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDekUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQXJCRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQW9CRCxDQUFDLENBQUMsR0FBVztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0FoQ1Usb0JBQW9CO21HQUFwQixvQkFBb0IsK01BOUdyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDVCwwckNBdENTLFlBQVk7OzRGQStHWCxvQkFBb0I7a0JBbEhoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IFVzYWdlTWV0ZXJzTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgVVNBR0VfTUVURVJTX0kxOE4gPSB7XG4gIGVzOiB7IHVubGltaXRlZDogJ0lsaW1pdGFkbycsIG9mOiAnZGUnLCBlbXB0eTogJ1NpbiBkYXRvcyBkZSBjb25zdW1vIGHDum4uJyB9LFxuICBlbjogeyB1bmxpbWl0ZWQ6ICdVbmxpbWl0ZWQnLCBvZjogJ29mJywgZW1wdHk6ICdObyB1c2FnZSBkYXRhIHlldC4nIH0sXG59O1xuXG5pbnRlcmZhY2UgTWV0ZXJSb3cge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdXNlZExhYmVsOiBzdHJpbmc7XG4gIHBjdDogbnVtYmVyOyAvLyAwLi4xMDAgKDAgc2kgaWxpbWl0YWRvKVxuICB1bmxpbWl0ZWQ6IGJvb2xlYW47XG4gIG92ZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogdmFsLXVzYWdlLW1ldGVycyDigJQgYmxvcXVlIGRlIGNvbnN1bW8gKHVzbyB2cyB0b3BlIHBvciBtw6l0cmljYSkgcGFyYSBlbFxuICogZGFzaGJvYXJkIGRlIG1vbmV0aXphY2nDs24gKEFEUi0wNDYgRDMpLiBQcmVzZW50YWNpb25hbDogcmVjaWJlIGxvcyBkYXRvcyB5YVxuICogcmVzdWVsdG9zIChVc2FnZVNlcnZpY2UgbG9zIGFybWEgZGVzZGUgRmlyZXN0b3JlKS4gUmV1dGlsaXphYmxlIHNpbmdsZS1hcHAgb1xuICogcG9yIHNlY2Npw7NuIGVuIG11bHRpLWFwcCAobXl2YWx0ZWNoIGFjY291bnQpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdXNhZ2UtbWV0ZXJzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInVzYWdlXCI+XG4gICAgICBAaWYgKHByb3BzKCkuYXBwTmFtZSB8fCBwcm9wcygpLnRpdGxlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2FnZV9faGVhZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNhZ2VfX3RpdGxlXCI+e3sgcHJvcHMoKS5hcHBOYW1lIHx8IHByb3BzKCkudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgQGlmIChwcm9wcygpLnBsYW4pIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNhZ2VfX3BsYW5cIj57eyBwcm9wcygpLnBsYW4gfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyb3dzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDxwIGNsYXNzPVwidXNhZ2VfX2VtcHR5XCI+e3sgdCgnZW1wdHknKSB9fTwvcD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8dWwgY2xhc3M9XCJ1c2FnZV9fbGlzdFwiPlxuICAgICAgICAgIEBmb3IgKHJvdyBvZiByb3dzKCk7IHRyYWNrIHJvdy5rZXkpIHtcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1ldGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRlcl9fdG9wXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRlcl9fbGFiZWxcIj57eyByb3cubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRlcl9fdmFsdWVcIiBbY2xhc3MubWV0ZXJfX3ZhbHVlLS1vdmVyXT1cInJvdy5vdmVyXCI+XG4gICAgICAgICAgICAgICAgICB7eyByb3cudXNlZExhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgQGlmICghcm93LnVubGltaXRlZCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRlcl9fdHJhY2tcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZXRlcl9fZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tZXRlcl9fZmlsbC0tb3Zlcl09XCJyb3cub3ZlclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cInJvdy5wY3RcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIH1cbiAgICAgICAgPC91bD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC51c2FnZV9faGVhZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cbiAgICAgIC51c2FnZV9fdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgfVxuICAgICAgLnVzYWdlX19wbGFuIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBwYWRkaW5nOiAycHggMTBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMzg4MGZmKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LWNvbnRyYXN0LCAjZmZmKTtcbiAgICAgIH1cbiAgICAgIC51c2FnZV9fZW1wdHkge1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAudXNhZ2VfX2xpc3Qge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTRweDtcbiAgICAgIH1cbiAgICAgIC5tZXRlcl9fdG9wIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDZweDtcbiAgICAgIH1cbiAgICAgIC5tZXRlcl9fbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgfVxuICAgICAgLm1ldGVyX192YWx1ZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAubWV0ZXJfX3ZhbHVlLS1vdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXIsICNlYjQ0NWEpO1xuICAgICAgfVxuICAgICAgLm1ldGVyX190cmFjayB7XG4gICAgICAgIGhlaWdodDogOHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cbiAgICAgIC5tZXRlcl9fZmlsbCB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMzg4MGZmKTtcbiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlO1xuICAgICAgfVxuICAgICAgLm1ldGVyX19maWxsLS1vdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2ViNDQ1YSk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVXNhZ2VNZXRlcnNDb21wb25lbnQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHByb3BzID0gaW5wdXQucmVxdWlyZWQ8VXNhZ2VNZXRlcnNNZXRhZGF0YT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UoJ1VzYWdlTWV0ZXJzJykpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQoJ1VzYWdlTWV0ZXJzJywgVVNBR0VfTUVURVJTX0kxOE4pO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IHJvd3MgPSBjb21wdXRlZDxNZXRlclJvd1tdPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCB1bmxpbWl0ZWRMYWJlbCA9IHRoaXMudCgndW5saW1pdGVkJyk7XG4gICAgY29uc3Qgb2ZMYWJlbCA9IHRoaXMudCgnb2YnKTtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMoKS5tZXRyaWNzID8/IFtdKS5tYXAoKG0pID0+IHtcbiAgICAgIGNvbnN0IHVubGltaXRlZCA9IG0udW5saW1pdGVkIHx8IG0ubGltaXQgPCAwO1xuICAgICAgY29uc3Qgb3ZlciA9ICF1bmxpbWl0ZWQgJiYgbS5saW1pdCA+IDAgJiYgbS51c2VkID49IG0ubGltaXQ7XG4gICAgICBjb25zdCBwY3QgPVxuICAgICAgICB1bmxpbWl0ZWQgfHwgbS5saW1pdCA8PSAwXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQoKG0udXNlZCAvIG0ubGltaXQpICogMTAwKSk7XG4gICAgICBjb25zdCB1c2VkTGFiZWwgPSB1bmxpbWl0ZWRcbiAgICAgICAgPyBgJHttLnVzZWR9IMK3ICR7dW5saW1pdGVkTGFiZWx9YFxuICAgICAgICA6IGAke20udXNlZH0gJHtvZkxhYmVsfSAke20ubGltaXR9YDtcbiAgICAgIHJldHVybiB7IGtleTogbS5rZXksIGxhYmVsOiBtLmxhYmVsLCB1c2VkTGFiZWwsIHBjdCwgdW5saW1pdGVkLCBvdmVyIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgJ1VzYWdlTWV0ZXJzJyk7XG4gIH1cbn1cbiJdfQ==